開発ガイド
このガイドでは、Media Sortにコードで貢献し始めるために必要なすべてを説明します。コードベースの構成概要については、アーキテクチャ概要のページをご覧ください。
- Rust 1.96以降(rustupでインストール)
- Clang(FFIバインディング用に
libmpv-sysが必要) - libmpv開発ファイル:
- Linux:
libmpv-dev(Debian/Ubuntu)または同等品 - macOS:
brew install mpv - Windows: vcpkgまたは手動インストール
- Linux:
- プラットフォームライブラリ(Linux):
libasound2-dev(音声用ALSA)libx11-dev、libwayland-dev(ウィンドウシステム)- Vulkanドライバとローダー
# ワークスペース全体をビルドcargo build --workspace
# GUIバイナリのみをビルドcargo build -p media-sort-gui
# リリースビルドcargo build --workspace --release# GUIを実行(デフォルトでシステムのPicturesディレクトリを開きます)cargo run -p media-sort-gui
# 特定のディレクトリを開くcargo run -p media-sort-gui -- /path/to/media
# インタラクティブデモモードで実行cargo run -p media-sort-gui -- --demo# すべてのテストを実行cargo test --workspace
# 特定のクレートのテストを実行cargo test -p media-sort-corecargo test -p media-sort-backendcargo test -p media-sort-guiテストの配置場所:
crates/media-sort-core/tests/: 統合テストcrates/media-sort-backend/tests/: 統合テスト(テストフィクスチャはtests/fixtures/にあります)crates/media-sort-gui/src/:#[cfg(test)]ユニットテスト
コードスタイル
Section titled “コードスタイル”コミット前にフォーマッタとリンターを実行してください。
# すべてのコードをフォーマットcargo fmt --all --
# 警告をエラーとしてclippyを実行cargo clippy --workspace --all-targets -- -D warningsプレコミットフックがこれらを自動的に強制します。clippyが失敗した場合、コミットは拒否されます。
ユーザー向け文字列はFluent(.ftl)ファイルにあります。
resources/locale/├── en/main.ftl├── de/main.ftl└── ja/main.ftlコードに新しいユーザー向け文字列を追加する場合、3つすべてのロケールファイルに対応するエントリを追加する必要があります。英語ファイルが正本となります。
ビルドスクリプト(crates/media-sort-core/build.rs)はロケールファイルの変更を自動的に検出し、ルックアップコードを再生成します。
設定はcrates/media-sort-core/src/settings/で定義されています。新しい永続化設定を追加するには:
- 適切なサブ構造体(例:
GeneralSettings)にフィールドを追加 - 古い設定ファイルが読み込み可能なように
#[serde(default)]を追加 - 設定にUIトグルがある場合、設定ダイアログビューを更新
- 変更後に
state.settings.save()を呼び出す website/内のドキュメントを更新(settings.mdxとconfig-file.mdxの両方)
動画再生パイプライン
Section titled “動画再生パイプライン”動画再生は複数のレイヤーで構成されています。
- 起動時:
main.rsがmpvにサポートフォーマットを問い合わせ、MediaRegistryを初期化 - サブスクリプション:
VideoWorkerスレッドがmpvイベントループを実行 - 通信: GUIがチャネル経由で
VideoCommandを送信、ワーカーがVideoEventで応答 - レンダリング: フレームデータがRGBAピクセルとして到着し、ゼロコピーVulkan相互運用のためのカスタムwgpuシェーダーでレンダリング
- ライフサイクル: 動画から離れると
Deactivateがレンダリングを停止
動画ワーカーの実装はcrates/media-sort-backend/src/media/mpv_context.rs、GPUシェーダーはcrates/media-sort-gui/src/widgets/video_shader.rsを参照してください。
デモシステム
Section titled “デモシステム”Media Sortには、ドキュメントウェブサイト用のデモ動画を生成するために使用されるヘッドレス自動化エンジンが含まれています。
# すべてのデモフローをMP4動画にレンダリングcd website && npm run render-demosデモフロー仕様はresources/demo_flows/のJSONファイルです。自動化エンジン(crates/iced-automation/)はフルアプリケーションをヘッドレスで(ウィンドウなしで)実行し、レンダリングパイプラインを通じてフレームをキャプチャします。
ドキュメント
Section titled “ドキュメント”mediasort.appのウェブサイトは、website/ディレクトリにあるAstro/Starlightプロジェクトです。
cd websitenpm cinpm run dev # 開発サーバーを起動npm run render-demos # デモ動画をレンダリングnpm run build # プロダクションビルドドキュメントページはwebsite/src/content/docs/にロケールごとにサブディレクトリ(en/、de/、ja/)で配置されています。サイドバーはastro.config.mjsで設定されています。
| 変数 | 目的 |
|---|---|
UI_TEST |
設定パスをカレントディレクトリのui_test_config.tomlに切り替え |
LANG / LC_ALL |
ロケール検出を上書き(デモ動画レンダリング時に使用) |