Skip to content

kaki-shu/Tsukuyomi

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Tsukuyomi

概要

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 取り込み導線の実装
  • ログ収集、エクスポート、認証情報を含めない設定構造

AI 翻訳と本文抽出の処理フロー

本文抽出

  1. RSS または URL から記事 URL を取得します。
  2. HTML を取得し、本文候補ノードを抽出します。
  3. ノイズ要素や末尾 CTA を除去し、段落を整形します。
  4. 画像 URL や埋め込みメディアを補足し、Markdown 相当の表示用データに変換します。
  5. ローカルに保存して再読時に再利用します。

AI 翻訳

  1. ユーザーが設定した AI プロバイダを解決します。
  2. 記事本文、翻訳プロンプト、言語設定を組み立てます。
  3. 対応プロバイダへリクエストし、翻訳結果を保存します。
  4. 表示モードに応じて、原文併記または訳文のみで描画します。

AI 要約

  1. 記事本文と要約プロンプトを構成します。
  2. 選択中のモデルへ送信します。
  3. 返却された要約を保存し、本文とは区別した表示として扱います。

使用モデル、API、アーキテクチャ、実装方法

  • UI: SwiftUI
  • 状態管理: Observation / Environment ベース
  • 永続化: UserDefaultsApplication 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

iOS 27 beta への対応

Tsukuyomi は、iOS 27 beta / Xcode 27 beta 系環境でのビルドと動作確認を前提に整理しています。
TabView の収縮挙動、文字列カタログ、読書 UI、設定導線、メディア系コンポーネントについて、現時点の iOS 27 beta SDK に合わせた確認を行っています。

セットアップ

  1. このリポジトリを取得します。
  2. 必要であれば Config/Secrets.xcconfig.example を参考に、ローカル専用の Config/Secrets.xcconfig を作成します。
  3. xcodegen generate を実行します。
  4. Tsukuyomi.xcodeproj を開きます。
  5. iPhone Simulator を選んでビルドします。

注意

  • リポジトリには実運用の認証情報は含まれていません。
  • AI プロバイダはアプリ起動後に設定画面から追加してください。

今後の改善

  • 記事抽出器のサイト別最適化
  • 画像を含む Markdown 表示のさらなる改善
  • YouTube / Podcast 取り込み導線の安定化
  • ローカル資料庫のインポート / エクスポート改善
  • iPad / macOS への本格展開
  • ドキュメントの拡充

ライセンス

Tsukuyomi 本体は MIT License で公開しています。
同梱依存の SwiftSoup は MIT License です。
SakuraRSS は参考実装として扱っており、コードやアセットをそのまま同梱する前提ではありません。関連する整理内容は NOTICE.md を参照してください。

About

An iOS 27 beta-ready multilingual RSS and newsletter reader powered by user-owned AI APIs.

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages