Skip to content

WP-CLIを使ったi18nスクリプトを追加する#45

Open
MarikoMorimoto wants to merge 6 commits into
masterfrom
feature/issue-37-i18n-wp-cli-scripts
Open

WP-CLIを使ったi18nスクリプトを追加する#45
MarikoMorimoto wants to merge 6 commits into
masterfrom
feature/issue-37-i18n-wp-cli-scripts

Conversation

@MarikoMorimoto

@MarikoMorimoto MarikoMorimoto commented May 29, 2026

Copy link
Copy Markdown
Member

概要

Issue #37 の対応です。WP-CLI を使って翻訳ファイル(POT/PO/MO)を管理するための composer スクリプトを追加しました。

変更内容

  • composer.json に以下のスクリプトを追加
    • i18n:potwp i18n make-pot で POT ファイルを生成(tests,node_modules,vendor などを除外)
    • i18n:powp i18n update-po で既存の PO ファイルを POT で更新
    • i18n:mowp i18n make-mo で PO ファイルをコンパイルして MO ファイルを生成
    • i18n — 上記3つをまとめて実行
  • tscf.phpload_plugin_textdomain のパスをハードコードから dirname( plugin_basename( __FILE__ ) ) . '/languages' に変更
  • .claude/commands/i18n.md を新規作成(/i18n スラッシュコマンド)

使い方

wp-env を起動した状態で以下を実行:

# まとめて実行
npm run cli -- composer i18n

# 個別実行
npm run cli -- composer i18n:pot
npm run cli -- composer i18n:po
npm run cli -- composer i18n:mo

Closes #37

by Claude

- composer.json に i18n:pot / i18n:po / i18n:mo / i18n スクリプトを追加
- tscf.php の load_plugin_textdomain パスを plugin_basename を使った動的な指定に変更
- .claude/commands/i18n.md を新規作成(/i18n スラッシュコマンド)

Closes #37

by Claude
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@claude

claude Bot commented May 29, 2026

Copy link
Copy Markdown

AI トリアージ: PR #45

リスク: 🟢 低(開発ツール追加のみ)
スコープ: scope:php scope:config scope:docs
不足: needs-manual-test

サマリー

  • i18n ワークフロー(POT/PO/MO)を composer スクリプト化し、load_plugin_textdomain のパスを動的取得に修正
  • composer.json--exclude=sanko が何を指すか不明で確認が必要
  • i18n スクリプトは wp-env 起動前提のため、CI での実行可否を確認すべき
詳細レビュー

テスト要否

  • ⚪ テスト不要: tscf.phpplugin_basename(__FILE__) を使った同等パス生成への変更で、PHPUnit で意味ある形でのテストが難しい(実質的な出力パスは通常環境では同一)
  • ⚪ テスト不要: composer.json — 開発者向けツールスクリプトのみ
  • ⚪ テスト不要: .claude/commands/i18n.md — ドキュメント

レビュワーが確認すべき箇所

  1. composer.json:13--exclude=sankosanko は実在のディレクトリか確認が必要。存在しないディレクトリ名であればタイポや不要残留の可能性がある
  2. tscf.php:26 — WordPress 4.6 以降、プラグインのテキストドメインは自動読み込みされるため、このコール自体は冗長になる場合があるが、後方互換として残すのは問題なし
  3. .claude/commands/i18n.md — wp-env 起動前提のスクリプトであることを composer.json 側にもコメントで明示すると親切

設計上の懸念

  • i18n:poi18n:molanguages/ ディレクトリ全体を対象にしているため、将来 ja 以外のロケールが追加された場合も自動対応できる設計は良い
  • i18n の複合スクリプトは @i18n:pot → @i18n:po → @i18n:mo の順序依存が正しく保たれており問題なし

🤖 AI トリアージ by Claude — レビュワーによる最終確認を推奨

@MarikoMorimoto

Copy link
Copy Markdown
Member Author

@claude

返事をしてください!

@MarikoMorimoto

Copy link
Copy Markdown
Member Author

@claude auto-review

@claude

claude Bot commented May 29, 2026

Copy link
Copy Markdown

Claude finished @MarikoMorimoto's task in 16s —— View job


はい、こちらです!👋

PR #45 を確認しています。先ほどのトリアージコメントでお伝えした通り、今回の変更内容はリスクが低く、全体的に良い実装です。

一点だけ確認させてください:composer.json--exclude=sankosanko はプロジェクト内の実在ディレクトリでしょうか?もし意図的な除外であれば問題ありませんが、タイポや不要な残留の可能性があれば修正をお勧めします。

他にご質問やレビュー依頼があればお気軽にどうぞ!


@claude

claude Bot commented May 29, 2026

Copy link
Copy Markdown

AI トリアージ(差分レビュー): PR #45

リスク: 🟢 低(開発ツール追加のみ)
スコープ: scope:php scope:config scope:docs
不足: needs-manual-test

サマリー

  • 前回レビュー以降、新規コミットなし(追いコミット差分なし)
  • --exclude=sanko の未確認問題が引き続き未解消
詳細レビュー

テスト要否

  • ⚪ テスト不要: 変更内容は前回レビュー時と同一 — 詳細は前回トリアージ参照

レビュワーが確認すべき箇所

  1. composer.json--exclude=sankosanko ディレクトリが実在するか未確認のまま。MarikoMorimoto さんへの確認コメントに返信待ち状態。存在しない場合は削除推奨

設計上の懸念

  • 前回指摘の通り問題なし(@i18n:pot → @i18n:po → @i18n:mo の順序依存は正しく保たれている)

前回指摘の状況

指摘箇所 状況
composer.json --exclude=sanko 要確認 ⚠️ 未解消(返信待ち)
tscf.php load_plugin_textdomain 冗長性 ✅ 後方互換として許容済み(対応不要)
.claude/commands/i18n.md wp-env 前提の明示 ℹ️ 未対応(nice-to-have、必須ではない)

🤖 AI トリアージ by Claude — レビュワーによる最終確認を推奨

@MarikoMorimoto

Copy link
Copy Markdown
Member Author

@claude sanko は私のローカルにある参考ディレクトリですが、一般的ではない名称のフォルダなので、excludeからは消しますね。

@claude

claude Bot commented May 29, 2026

Copy link
Copy Markdown

Claude finished @MarikoMorimoto's task in 18s —— View job


ご確認ありがとうございます!🙌

sanko がローカルの参考ディレクトリだったとのこと、よく分かりました。除外してもらえれば、他の開発者がこのスクリプトを使う際に混乱しなくて済みますね。

修正後は --excludetests,node_modules,vendor のみになり、すっきりした構成になります。引き続きよろしくお願いします!


sanko はローカル専用の参考ディレクトリのため、リポジトリ共通の設定には含めない

by Claude
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@claude

claude Bot commented May 29, 2026

Copy link
Copy Markdown

AI トリアージ(差分レビュー): PR #45

リスク: 🟢 低(開発ツール追加のみ)
スコープ: scope:php scope:config scope:docs
不足: なし

サマリー

  • --exclude=sanko が削除され、前回の未解消指摘が対応済みに
  • PR 本文の説明文にまだ sanko の記述が残っており、コードとの乖離あり(軽微)
詳細レビュー

テスト要否

  • ⚪ テスト不要: tscf.phpplugin_basename(__FILE__) への変更はリファクタリング(動作同一)
  • ⚪ テスト不要: composer.json — 開発者向けツールスクリプトのみ
  • ⚪ テスト不要: .claude/commands/i18n.md — ドキュメント

レビュワーが確認すべき箇所

  1. PR 本文--exclude=tests,node_modules,vendor,sanko と記載されているが、実際のコードでは sanko は除外済み。PR 本文を tests,node_modules,vendor に修正すると正確

設計上の懸念

なし

前回指摘の状況

指摘箇所 状況
composer.json --exclude=sanko 要確認 ✅ 解消済み(コードから削除)
tscf.php load_plugin_textdomain 冗長性 ✅ 後方互換として許容済み(対応不要)
.claude/commands/i18n.md wp-env 前提の明示 ✅ ドキュメント内で明示済み(npm run start の案内あり)

🤖 AI トリアージ by Claude — レビュワーによる最終確認を推奨

- composer.json に i18n:json(wp i18n make-json)を追加し、i18n 一括実行にも含める
- --exclude に assets/lib と assets/js/dist を追加
  - assets/lib/ace/: Ace エディタ等のバンドル済みサードパーティ JS(最大 1.6MB)を peast がパースしてメモリ不足になるため除外
  - assets/js/dist: コンパイル済み出力物は assets/js/src と重複するため除外
- Editor.php に wp-i18n 依存追加と wp_set_script_translations() を追加(JS翻訳の準備)
- i18n スクリプトを実際に実行して POT/PO/MO ファイルを更新
- .claude/commands/i18n.md に除外ディレクトリ一覧と理由を記載、文言を改善

by Claude
@MarikoMorimoto

Copy link
Copy Markdown
Member Author

追加実装と動作確認の報告

Issue #37 の要件との照合

Issue では FUST を参考実装として挙げており、以下の対応が求められていました。

要件 対応状況
composer.json に WP-CLI i18n スクリプトを追加 i18n:pot / i18n:po / i18n:mo / i18n:json / 一括 i18n
.claude/commands/i18n.md スラッシュコマンドを追加 ✅ 手順・除外ディレクトリの理由・コミット対象を記載
JS翻訳インフラの整備(wp_set_script_translations Editor.phpwp-i18n 依存と wp_set_script_translations() を追加

動作確認(テスト実施済み)

wp-env を起動した環境で以下を実行し、各スクリプトが正常に動作することを確認しました。

npm run cli -- composer --working-dir=/var/www/html/wp-content/plugins/tscf i18n
  • i18n:potlanguages/tscf.pot が正常生成
  • i18n:polanguages/tscf-ja.po が更新(新規文字列の追加・obsolete フラグの付与を確認)
  • i18n:molanguages/tscf-ja.mo がコンパイルされて生成
  • i18n:json — JS に翻訳関数がないため Created 0 files(仕様通り)

除外ディレクトリについて

assets/lib(Ace エディタ等 最大 1.6MB のサードパーティ JS)を --exclude に追加しています。これを除外しないと peast(WP-CLI の JS パーサー)が 128MB のメモリ上限に達して make-pot が失敗するためです。assets/js/dist はコンパイル済み出力物のため同様に除外し、ソースコードである assets/js/src はスキャン対象に含めています。

by Claude

- composer.json の i18n スクリプトを `npm run cli -- wp i18n ...` で WP-CLI を
  直接呼び出す形式に変更(FUST の docker compose exec 相当)
  これにより --working-dir の指定が不要になり `composer i18n:pot` だけで実行可能
- i18n:compile(mo + json の組み合わせ)を追加
  PO ファイルを直接編集した後、POT 再生成なしにコンパイルのみ行う場合に使用
- .claude/commands/i18n.md のコマンドを composer 形式に更新し i18n:compile を追記
- i18n スクリプト実行後の POT/PO ファイルを更新

by Claude
@MarikoMorimoto

Copy link
Copy Markdown
Member Author

i18n スクリプトを FUST 準拠の形式に変更

変更内容

前回のコミットでは composer.json のスクリプトが相対パスを使っており、実行時に --working-dir=/var/www/html/wp-content/plugins/tscf を毎回指定する必要がありました。

FUST の実装(docker compose exec wp-single wp i18n ...)と同様に、composer.json のスクリプトから WP-CLI を直接呼び出す形式に変更しました。TSCF では npm run cli -- (= wp-env run cli)を使います。

"i18n:pot": "npm run cli -- wp i18n make-pot /var/www/html/wp-content/plugins/tscf ..."

これにより composer i18n:pot だけで実行できるようになりました。

また FUST に合わせて i18n:compilei18n:mo + i18n:json の組み合わせ)を追加しました。PO ファイルを直接編集した後、POT の再生成なしにコンパイルのみ行いたい場合に使います。

動作確認

以下のコマンドがすべて正常に動作することを確認しました。

composer i18n:pot   # Success: POT file successfully generated.
composer i18n:po    # Success: Updated 1 file.
composer i18n:compile  # Success: Created 1 file. / Success: Created 0 files.

by Claude

- i18n:po(PO更新単体)を i18n:update にリネーム
- i18n:po を i18n:pot + i18n:update の組み合わせとして新設
- i18n の一括実行を @i18n:update 参照に更新
- i18n.md のコマンドとショートカット説明を合わせて更新

FUST との対応:
  i18n:update = PO更新単体(FUST の i18n:update 相当)
  i18n:po     = pot + update(FUST の i18n:po 相当)
  i18n:compile = mo + json(FUST の i18n:compile 相当)

by Claude
@MarikoMorimoto

Copy link
Copy Markdown
Member Author

i18n スクリプトの命名を FUST に完全準拠

FUST との命名の違いを解消しました。

変更前後の対応

スクリプト 変更前 変更後
PO更新(単体ステップ) i18n:po i18n:update
pot + update の組み合わせ なし i18n:po
mo + json の組み合わせ i18n:compile i18n:compile(変更なし)

用途別の使い分け

シナリオ 使うコマンド
PHP に新しい翻訳文字列を追加した composer i18n:po(pot + update)
tscf-ja.po を直接編集して翻訳した composer i18n:compile(mo + json)
すべてまとめて更新したい composer i18n

動作確認

composer i18n:po が pot → update の2ステップを順に実行することを確認しました。

by Claude

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

翻訳をWP-CLIで行うscriptを追加する

1 participant