Tsukuyomi は、RSS 購読、あとで読むためのクリップ、記事本文の抽出、AI 翻訳・要約を 1 つに統合した iPhone 向けのローカルファースト読書アプリです。
グローバルなニュースサイトや各種 newsletter を、言語の壁を越えて横断的に読み進められる体験を目指して設計しています。
AI 機能はアプリ提供者の共通バックエンドではなく、ユーザー自身が設定する API を使って動作します。
日本 IBM AI Innovator 選考に向けて、多言語ニュースリーダーとしての実用性と AI 活用の透明性を重視して整理しています。
日々の情報収集では、海外ニュース、技術系 newsletter、個人ブログ、動画や音声メディアが複数のサービスに分散しやすく、さらに言語差によって継続的な読書体験が分断されやすいという課題がありました。
Tsukuyomi は、ユーザーにグローバルな視野で情報へアクセスしてもらうための、多言語ニュース / newsletter リーダーとして企画したアプリです。
「記事」を中心オブジェクトとして扱い、発見、保存、抽出、読書、翻訳、要約までを一貫した体験としてまとめることを目指しました。
このアプリは、単なる RSS リーダーではなく、多言語で情報収集するユーザー向けの統合読書環境として以下の機能を提供します。
- RSS ソースの追加、並び替え、更新
- Web ページのクリップ保存
- 記事本文の抽出と Markdown ベースの読書表示
- 画像付き記事の読み込みとキャッシュ
- AI による記事要約
- AI による記事翻訳
- YouTube / Podcast 系コンテンツの取り込みと再生
- 詳細ログの書き出し
- 多言語 UI(日本語 / English / 简体中文)
- iOS 27 beta 環境における表示・ビルド・操作フローへの適配
- iOS アプリ全体のプロダクト設計と SwiftUI 実装
- RSS / クリップ / 設定 / 読書画面の UI 統合
- 記事抽出ロジック、本文整形、画像表示まわりの調整
- AI プロバイダ設定 UI とモデル取得フロー
- 翻訳・要約の表示体験と永続化構造
- YouTube / Podcast 取り込み導線の実装
- ログ収集、エクスポート、認証情報を含めない設定構造
- RSS または URL から記事 URL を取得します。
- HTML を取得し、本文候補ノードを抽出します。
- ノイズ要素や末尾 CTA を除去し、段落を整形します。
- 画像 URL や埋め込みメディアを補足し、Markdown 相当の表示用データに変換します。
- ローカルに保存して再読時に再利用します。
- ユーザーが設定した AI プロバイダを解決します。
- 記事本文、翻訳プロンプト、言語設定を組み立てます。
- 対応プロバイダへリクエストし、翻訳結果を保存します。
- 表示モードに応じて、原文併記または訳文のみで描画します。
- 記事本文と要約プロンプトを構成します。
- 選択中のモデルへ送信します。
- 返却された要約を保存し、本文とは区別した表示として扱います。
- UI: SwiftUI
- 状態管理: Observation / Environment ベース
- 永続化:
UserDefaultsとApplication Support配下のローカル保存 - RSS 解析: 独自 Parser
- HTML 解析: SwiftSoup
- AI 接続: ユーザー所有の OpenAI 互換 API、OpenRouter、任意のカスタム推論ノード、Apple Intelligence
- メディア再生: iOS 標準フレームワークと WebView ベースの埋め込み再生
AI の認証情報はソースコードに固定せず、アプリ内設定またはローカル専用設定ファイルで扱う前提です。
このリポジトリには実運用の API Key、Token、個人用サーバー設定は含めていません。
翻訳・要約・モデル呼び出しの責任分界はユーザー側にあり、利用する AI 提供元、モデル、課金、利用ポリシーはユーザー自身が選択する構成です。
-
記事本文の抽出品質がサイトごとにばらつく
末尾 CTA 除去、空白圧縮、段落正規化を追加し、読みやすさを改善しました。 -
AI プロバイダごとにモデル一覧 API の挙動が異なる
推論エンドポイントからモデル一覧エンドポイントを推測し、複数候補を順に試す設計にしました。 -
YouTube や埋め込みメディアが通常の記事と異なる
フィード解決と専用表示導線を追加し、通常記事とは分離して扱う方針にしました。 -
安全な AI 設定
API Key や推論ノードはユーザー自身が設定し、アプリ本体には固定の認証情報を含めない設計にしています。
-
精度
完全自動の要約よりも、原文をいつでも確認できる読書体験を優先しています。 -
速度
記事本文と画像キャッシュをローカルに保持し、再表示コストを下げています。 -
コスト
AI はユーザー所有の API を使う前提にし、アプリ側で固定の課金基盤を持たない構成にしています。
- macOS
- Xcode 27 beta 系、またはそれに近い iOS 27 Simulator 対応環境
- XcodeGen
Tsukuyomi は、iOS 27 beta / Xcode 27 beta 系環境でのビルドと動作確認を前提に整理しています。
TabView の収縮挙動、文字列カタログ、読書 UI、設定導線、メディア系コンポーネントについて、現時点の iOS 27 beta SDK に合わせた確認を行っています。
- このリポジトリを取得します。
- 必要であれば
Config/Secrets.xcconfig.exampleを参考に、ローカル専用のConfig/Secrets.xcconfigを作成します。 xcodegen generateを実行します。Tsukuyomi.xcodeprojを開きます。- iPhone Simulator を選んでビルドします。
- リポジトリには実運用の認証情報は含まれていません。
- AI プロバイダはアプリ起動後に設定画面から追加してください。
- 記事抽出器のサイト別最適化
- 画像を含む Markdown 表示のさらなる改善
- YouTube / Podcast 取り込み導線の安定化
- ローカル資料庫のインポート / エクスポート改善
- iPad / macOS への本格展開
- ドキュメントの拡充
Tsukuyomi 本体は MIT License で公開しています。
同梱依存の SwiftSoup は MIT License です。
SakuraRSS は参考実装として扱っており、コードやアセットをそのまま同梱する前提ではありません。関連する整理内容は NOTICE.md を参照してください。