Ember: iOS 用のネイティブでアクセシビリティ優先の Hacker News リーダー

Ember は SwiftUI で構築されたネイティブの Hacker News リーダーで、iPhone、iPad、Mac で高性能かつアクセシブルな体験を提供します。サードパーティの依存関係を排除し、スレッド化されたコメントのネイティブ描画を活用することで、長文の技術的議論に最適化された「落ち着いた」読書体験を実現しています。

アクセシビリティ優先のデザイン

Ember はアクセシビリティをオプションではなくコア機能として扱い、特に色覚障害とシステムレベルのアクセシビリティ設定に焦点を当てています。

カラー以外の視覚的手がかり

色覚に障害のあるユーザーでもアプリを利用できるよう、Ember はステータスの伝達に色だけに依存しません。以下を実装しています:

  • アイコン表現: ポイントやコメント数は SF Symbols と組み合わせて表示します。
  • 状態インジケータ: 読了状態はチェックマークで示し、選択状態はリングとチェックマークで表します。
  • 明示的な手がかり: システムの「色なしで区別」設定が有効なときに自動でオンになる専用設定があり、UI 全体にカラー以外の指標を追加します。
  • リンクの識別: コメント内のリンクは下線を付けて表示でき、色に依存せず識別可能です。

システム統合

Ember は iOS のアクセシビリティフレームワークと深く統合しています:

  • VoiceOver: ストーリー行とコントロールは意味のあるラベル、ヒント、カスタムアクションを使用し、各ストーリーが単一の一貫した要素として読み上げられるようにします。
  • Dynamic Type: タイポグラフィはシステムのテキストサイズに合わせて拡大縮小し、レイアウト(コメントのインデントを含む)もアクセシビリティサイズに適応します。
  • Reduce Motion: システムの「モーションを減らす」設定が有効なときは、アニメーションやロード時のシマーを最小限に抑えます。
  • 適応型オンボーディング: 初回起動時に VoiceOver、太字テキスト、大きなテキストのシステム設定を検出し、アプリを自動でそれに合わせて構成し、変更点をユーザーに通知します。

技術アーキテクチャ

Ember は iOS 18 をターゲットとした最新の Apple スタックで構築され、Mac Catalyst を利用してデスクトップでも動作します。

コアスタック

  • UI フレームワーク: 純粋な SwiftUI。レイアウトは横サイズクラスに応じて変化し、iPhone では TabView、Mac と iPad では 3 カラムの NavigationSplitView を使用します。
  • 状態管理: Observation フレームワーク(@Observable)をビュー・モデルとストアに使用します。
  • 並行処理: ネットワーキングは async/await で行い、TaskGroup を使ってフィードページを同時に取得します。
  • 永続化: 設定と既読状態は UserDefaults が管理し、バウンドされた JSON ディスクキャッシュ(DiskCache アクター)がオフライン時のフォールバック用にフィードリストとコメントツリーを保存します。

データ取得とレンダリング

Ember はシームレスな体験を提供するために 2 つの主要 API を組み合わせています:

  • 公式 HN Firebase API: フィード、アイテム、ユーザープロファイルに使用。
  • Algolia HN Search API: フルテキスト検索と、単一リクエストで完全なコメントツリーを取得するために使用。

WebView のオーバーヘッドを回避するため、Ember はカスタム HTML パーサーを使用し、Hacker News の限定タグセット(<p>, <i>, <b>, <a>, <pre><code>, <br>)を直接ネイティブの AttributedString ブロックに変換します。

主な機能

  • 包括的なフィード: ピン留め可能なフィルターバーで Top、New、Best、Ask HN、Show HN、Jobs にアクセス。
  • オフライン機能: ブックマークしたストーリーはデバイスに保存され、閲覧したフィードとコメントスレッドはディスクにキャッシュされ、オフライン時に自動でフォールバックします。
  • クロスプラットフォームレイアウト: Mac と iPad のネイティブ 3 ペインレイアウトは、ソースリストサイドバー、ストーリーリスト、ディスカッションビューを並列に表示します。
  • 読書最適化: アプリは Inter 可変フォントを使用し、快適な行間と幅の制限で長いスレッドの可読性を向上させます。
  • ユーザープロファイル: ユーザーの karma、参加日、最近の投稿を表示可能。

コミュニティのフィードバックと洞察

Hacker News のユーザーは、アクセシビリティに重点を置いたこのアプリの価値を評価しており、ある色覚異常の開発者は「カラーだけに頼らないアプリにはいつも感激する」とコメントしています。

その他のコミュニティ議論は配布方法と機能の同等性に焦点が当たっています:

  • 配布: 複数のユーザーが App Store での入手や TestFlight の利用について質問しており、現時点では Xcode と XcodeGen を使ってソースからビルドする必要があります。
  • 機能リクエスト: ログインと投稿機能の追加に関心があり、クッキー抽出のために WebView を利用して HN エンドポイントで認証する案が出されています。
  • 比較: ユーザーは Octal や Hackfeed といった他のリーダーと Ember を比較し、オープンソースであることとアクセシビリティ重視が大きな差別化要因であると指摘しています。

サマリー

Ember は iOS、iPadOS、macOS 向けのオープンソースかつネイティブな SwiftUI Hacker News リーダーで、アクセシビリティとオフライン読書を最優先し、サードパーティ依存を一切持ちません。

タイトル

Ember: iOS 用のネイティブでアクセシビリティ優先の Hacker News リーダー

Sources