開発
開発ガイド
英語版のみ編集してください。翻訳は自動で反映されます
ドキュメントは website/docs(英語)の下のみを更新してください。website/i18n/<locale>/… 配下の翻訳は自動生成されるため、手動で編集しないでください。翻訳タスク(例: make translate_web_docs_batch)を使用してローカライズ済みコンテンツを更新します。
前提条件
- Node.js 22+ と npm(Node 22 で検証済み)
- Thunderbird 128 ESR 以降(手動テスト用)
プロジェクト構成(概要)
- ルート: パッケージングスクリプト
distribution_zip_packer.sh、ドキュメント、スクリーンショット sources/: メインアドオンコード(バックグラウンド、オプション/ポップアップUI、マニフェスト、アイコン)tests/: Vitest スイートwebsite/: Docusaurus ドキュメント(website/i18n/de/...配下に i18n あり)
インストールとツール
- ルート依存関係をインストール:
npm ci - ドキュメント(任意):
cd website && npm ci - ターゲットの一覧:
make help
ライブ開発(web ‑ext run)
- Firefox Desktop でのクイックループ(UI のスモークテストのみ):
npx web-ext run --source-dir sources --target=firefox-desktop- Thunderbird で実行(MailExtensions には推奨):
npx web-ext run --source-dir sources --start-url about:addons --firefox-binary "$(command -v thunderbird || echo /path/to/thunderbird)"- ヒント:
- Thunderbird のエラーコンソールを開いたままにする(ツール → 開発ツール → エラーコンソール)。
- MV3 のイベントページはアイドル時にサスペンドされます。コード変更後はアドオンを再読み込みするか、web‑ext の自動リロードに任せてください。
- Firefox 専用の挙動とは異なる点があります。API の互換性確認は必ず Thunderbird で行ってください。
- Thunderbird のバイナリパス(例):
- Linux:
thunderbird(例:/usr/bin/thunderbird) - macOS:
/Applications/Thunderbird.app/Contents/MacOS/thunderbird - Windows:
"C:\\Program Files\\Mozilla Thunderbird\\thunderbird.exe" - プロファイルの分離: 日常の環境へ影響を与えないよう、開発には別の Thunderbird プロファイルを使用してください。
Make ターゲット(アルファベット順)
Makefile は一般的な開発フローを標準化します。make help を実行すると、すべてのターゲットの要約(一行)をいつでも表示できます。
ヒント: ターゲットなしで make を実行すると、Whiptail の簡易メニューが開き、ターゲットを選択できます。
| ターゲット | 一行説明 |
|---|---|
clean | ローカルのビルド/プレビュー成果物(tmp/、web-local-preview/、website/build/)を削除。 |
commit | 整形、テスト実行(i18n 含む)、変更履歴更新、コミット & プッシュ。 |
eslint | フラット構成で ESLint を実行(npm run -s lint:eslint)。 |
help | すべてのターゲットを一行ドキュメント付きで一覧表示(ソート済み)。 |
lint | sources/ に対する web‑ext lint(仮マニフェスト; ZIP は無視; 致命的ではない)。 |
menu | ターゲットと任意の引数を選ぶ対話メニュー。 |
pack | ATN と LOCAL の ZIP をビルド(linter 実行; packer スクリプト呼び出し)。 |
prettier | リポジトリをその場で整形(上書き)。 |
prettier_check | Prettier のチェックモード(書き込みなし)。再整形が必要なら失敗。 |
prettier_write | prettier のエイリアス。 |
test | Prettier(書き込み)、ESLint、続いて Vitest(設定されていればカバレッジ)。 |
test_i18n | i18n 専用テスト: アドオンのプレースホルダー/整合性 + ウェブサイトの整合性。 |
translate_app | translation_app のエイリアス。 |
translation_app | sources/_locales/en/messages.json からアプリの UI 文字列を翻訳。 |
translate_web_docs_batch | OpenAI Batch API 経由でウェブサイトのドキュメントを翻訳(推奨)。 |
translate_web_docs_sync | ウェブサイトのドキュメントを同期翻訳(レガシー、バッチなし)。 |
translate_web_index | translation_web_index のエイリアス。 |
translation_web_index | ホームページ/ナビバー/フッターの UI を翻訳(website/i18n/en/code.json → .../<lang>/code.json)。 |
web_build | website/build にドキュメントをビルド(--locales / BUILD_LOCALES をサポート)。 |
web_build_linkcheck | オフラインでも安全なリンクチェック(リモート HTTP[S] をスキップ)。 |
web_build_local_preview | ローカル gh‑pages プレビュー。8080–8090 で自動提供。任意でテスト/リンクチェック。 |
web_push_github | website/build を gh-pages ブランチへプッシュ。 |
オプションの書式
- オプションを渡すには
make <command> OPTS="…"を使用(引用符推奨)。以下の各ターゲットが使用例を示します。
--
ロケールビルドのヒント
- ロケールの一部のみビルド:
BUILD_LOCALES="en de"を設定するか、web ターゲットにOPTS="--locales en,de"を渡します。 - 特定ロケールのプレビュー:
http://localhost:<port>/Thunderbird-Reply-with-Attachments/de/。
ビルドとパッケージ
- ZIP をビルド:
make pack - リポジトリのルートに ATN と LOCAL の ZIP を生成(成果物を手で編集しないでください)
- ヒント: パッケージング前に
sources/manifest_ATN.jsonとsources/manifest_LOCAL.jsonの両方でバージョンを更新してください - 手動インストール(開発): Thunderbird → ツール → アドオンとテーマ → 歯車 → ファイルからアドオンをインストール… → 生成された ZIP を選択
テスト
- フルスイート:
make test(Vitest) - カバレッジ(任意):
npm i -D @vitest/coverage-v8make testを実行; HTML レポートはcoverage/index.htmlを開く- i18n のみ:
make test_i18n(UI のキー/プレースホルダー/タイトル + ウェブサイトのロケール/ドキュメントごとの整合性。id/title/sidebar_label を検査)
デバッグとログ
- エラーコンソール: ツール → 開発ツール → エラーコンソール
- 実行時に冗長ログを切り替え:
- 有効化:
messenger.storage.local.set({ debug: true }) - 無効化:
messenger.storage.local.set({ debug: false }) - 返信の作成/送信中にログが表示されます