アプリケーション仕様
このページは app と rust/pixiv-api の現行ソースを基準にした実装仕様です。将来の構想ではなく、リポジトリに実装されている振る舞いを記録します。
確認日: 2026年11月11日。バージョン値は app/build.gradle を基準にしています。
対象と動作環境
| 項目 | 仕様 |
|---|---|
| アプリケーション ID | com.yunfie.illustia |
| 現行バージョン | 7.1.0(versionCode 194) |
| 最低 / target SDK | API 24(Android 7.0) / API 37 |
| UI | Kotlin、Jetpack Compose、Navigation 3、Miuix KMP |
| ネイティブ層 | Rust 2024 edition、UniFFI 経由で利用 |
| Rust ABI | arm64-v8a、armeabi-v7a、x86_64 |
Palleria は Pixiv 非公式クライアントであり、認証と作品取得には Pixiv API を利用します。起動時にはクラッシュハンドラー、画像ローダー、設定ストアを初期化し、設定読込中も保護された空の画面を描画し、ロック・プライバシー状態が確定してからアプリ画面を表示します。アプリ画面の最初のフレーム表示後にアカウント整合、ウィジェットのプレビュー生成を非同期で実行します。
利用者向け機能
認証とアカウント
- リフレッシュトークンおよび認可コードによるログインをサポートする。
- 複数アカウントを設定に保持し、アクティブアカウントを切り替えられる。
- Android の
AccountAuthenticatorとSyncAdapterを公開する。同期用コンテンツプロバイダーは外部公開しない。
閲覧・検索・コレクション
- ホーム、ランキング、ブックマーク、検索、その他を基本タブとして表示する。Shorts Feed 有効時は検索タブ位置を Shorts Feed に置き換える。
- タブ順、非表示タブ、起動タブを設定できる。表示タブは常に最低 2 個確保する。
- イラスト詳細、画像ビューア、マンガ、ノベル、ユーザープロフィール、コメント、作品シリーズ、関連作品を提供する。
- 検索は対象、並び順、作品種別、期間、ブックマーク数の条件を保持する。ユーザー検索、候補、検索履歴、お気に入りタグ、ウォッチリストシリーズを扱う。
- ブックマーク、フォロー、ミュート(作品・ユーザー・タグ)、閲覧履歴を扱う。閲覧履歴と検索履歴は個別に保存を無効化できる。
保存・オフライン・表示
- 単一または複数ページの作品をギャラリーへ保存し、ダウンロードキューとオフラインライブラリで管理する。
- 自動ダウンロード、自動ブックマーク、作者別・作品別フォルダー、同時ダウンロード数を設定できる。
- 画像品質はフィード、イラスト詳細、マンガ詳細、全画面で個別に設定する。画像キャッシュ、Wi-Fi 限定スマートキャッシュ、低 RAM 端末向けのデコーダー抑制を備える。
- ライブ壁紙、ランキングウィジェット、作品ウィジェットを提供する。壁紙はソース、更新契機・間隔、並び順、表示倍率、背景、クロスフェード、センシティブ作品の除外を設定できる。
外観・プライバシー・補助機能
- 言語、フォント、テーマ、Dynamic Color、AMOLED、画面遷移、触覚フィードバック、グリッド列数、カード表示、詳細セクション順を設定できる。
- PIN と生体認証によるアプリロック、失敗回数によるクールダウン、セキュアウィンドウ、履歴画面の秘匿、電卓アイコン/名称への偽装を提供する。
- クリップボード検出、更新確認と APK ダウンロード、Discord RPC、任意のクラッシュテレメトリを提供する。テレメトリの既定値は無効で、同意後だけ SDK を有効化する。
画面・外部起動
画面識別子は AppRoute で型安全に表現する。値を伴う遷移は検索結果(検索語)、タグ検索(タグ)、作品詳細(作品 ID)、ユーザープロフィール(ユーザー ID)である。設定配下には一般、画像、ブックマーク、アカウント、データ、ミュート、プライバシー、実験的機能、更新、Discord の各画面を置く。
外部からはテキスト・画像の共有、PROCESS_TEXT、Pixiv 関連 HTTP(S) URL、pixiv://・palleria:// スキームを受け取る。ファイル共有には FileProvider を用い、外部にファイルパスを直接公開しない。
データと状態の所有者
| 種類 | 保存先・責務 |
|---|---|
| UI 状態 | IllustiaViewModel と画面の Compose 状態。StateFlow とコルーチンで更新する。 |
| アプリ設定 | SettingsStore が AppSettings を保存・公開する。一般設定は Preferences DataStore、秘密値は EncryptedSharedPreferences、コレクションの一部は Room を併用する。 |
| Pixiv データ | IllustiaRepository が認証、作品、検索、ブックマーク、フォロー等を API クライアントへ委譲する。 |
| 画像キャッシュ | Coil。cacheDir/image_cache に保存し、設定された MB 上限を適用する。 |
秘密値(リフレッシュトークン、Discord トークン等)をログ、仕様例、テレメトリに出力してはならない。
ネットワークとエラー分類
- 共有 HTTP クライアントは全体 8、ホストあたり 4 の同時リクエスト上限、接続 12 秒、読書き 20 秒、呼び出し全体 30 秒のタイムアウトを持つ。
- Pixiv API URL は HTTPS、
app-api.pixiv.net、443 番ポート、埋込み認証情報なしに限定して検証する。
実装上の境界
Compose 画面 / ViewModel
↓
IllustiaRepository / SettingsStore
↓
Pixiv API クライアント
↓
Rust pixiv-api (UniFFI)pixiv-api は Pixiv 応答の転送・復号・モデル変換を担当する。Android 側は UI、永続化、Android 統合、HTTP 実行を担当する。
変更時の確認事項
- 設定値を追加・変更する場合は、
AppSettingsと保存・復元処理を同時に更新する。 - 公開コンポーネントや URL 受信規則を変更する場合は、Manifest の
exported、権限、受信データ検証を確認する。 - Rust API を変更する場合は UniFFI Kotlin バインディングと 3 ABI のネイティブライブラリを再生成する。
デスクトップ操作と読み上げ
ChromeOS・デスクトップ入力に、キー操作、右クリック、列数変更、バックグラウンドサービスの仕様を記載しています。小説のTTSは NovelTtsService と NovelTtsProgress が担当し、一時停止時の発話範囲オフセットを保持します。