CI/CDローカライズにおける高度なパターン — ワークフローの選定、翻訳の完全性チェック、マージ競合の解消。
ワークフローの選び方#
4つのワークフローパターンで、ほとんどのチーム構成をカバーできます。それぞれ、自動化、レビュー負荷、ブランチ運用のしやすさの面で異なるトレードオフがあります。
| ワークフロー | 最適なケース | トレードオフ |
|---|---|---|
| main にコミット | 小規模チーム、手間なく更新したい場合 | 翻訳のレビュー工程がない |
| main から PR | 翻訳をレビューしたいチーム | 手動でのPR承認が必要 |
| feature ブランチにコミット | 長期間運用する feature ブランチ | ブランチ履歴に翻訳コミットが残る |
| feature ブランチから PR | 機能単位で最大限コントロールしたい場合 | 機能ごとに複数のPRを管理する必要がある |
迷ったら、まずは "main にコミット" から始めるのがおすすめです。もっともシンプルなワークフローで、ブランチの分岐が発生しないため、マージ競合を完全に防げます。
翻訳の完全性チェック#
--frozen フラグを使うと、新しい翻訳を生成せずに、すべてのコンテンツが翻訳済みかどうかを検証できます。未翻訳のコンテンツがある場合は、非ゼロのステータスコードで終了します。
bash
npx lingo.dev@latest run --frozen未翻訳コンテンツのリリースを防ぐデプロイゲートとして活用しましょう。
yaml
name: Check translations
on: [push, pull_request]
jobs:
check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- run: npx lingo.dev@latest run --frozenマージ競合の解消#
マージ競合は、ブランチ間で i18n.lock ファイルの内容がずれたときに発生します。多くの場合、別々のブランチで翻訳が独立して更新されたことが原因です。
予防策#
翻訳用に feature ブランチを使うのではなく、翻訳を直接 main にコミットすれば、lockfile の競合を完全に回避できます。
マージで解消する#
1
マージを開始する
bash
git merge <branch-name>2
競合している lockfile を削除する
bash
rm i18n.lock3
マージを完了する
bash
git add .
git merge --continue4
lockfile を再生成する
bash
npx lingo.dev@latest lockfile --forceこれにより、新しい翻訳を発生させることなく、現在のソースファイルの状態から lockfile を再構築できます。
rebase で解消する#
同じ方法は rebase でも有効です。競合が発生するたびに i18n.lock を削除し、rebase を続行して、最後に lockfile を再生成します。
bash
git rebase <branch-name>
# On each conflict: rm i18n.lock && git add . && git rebase --continue
npx lingo.dev@latest lockfile --force