CI/CDローカライズにおける高度なパターン — ワークフローの選定、翻訳の完全性チェック、マージ競合の解消。
ワークフローの選び方#
4つのワークフローパターンで、ほとんどのチーム構成をカバーできます。それぞれ、自動化、レビュー負荷、ブランチ運用のしやすさの面で異なるトレードオフがあります。
| ワークフロー | 最適なケース | トレードオフ |
|---|---|---|
| main にコミット | 小規模チーム、手間なく更新したい場合 | 翻訳のレビュー工程がない |
| main から PR | 翻訳をレビューしたいチーム | 手動でのPR承認が必要 |
| feature ブランチにコミット | 長期間運用する feature ブランチ | ブランチ履歴に翻訳コミットが残る |
| feature ブランチから PR | 機能単位で最大限コントロールしたい場合 | 機能ごとに複数のPRを管理する必要がある |
GitHub では、Lingo.dev GitHub App がこうしたパターンの大半をサーバー側で処理してくれます。push や PR をトリガーに動作し、翻訳をコミットとして反映し、runner や secret も必要ありません。ローカリゼーションを自社のパイプライン内で実行する場合は、以下の CLI パターンを利用してください。
迷ったら、まずは "main にコミット" から始めるのがおすすめです。もっともシンプルなワークフローで、ブランチの分岐が発生しないため、マージ競合を完全に防げます。
翻訳の完全性チェック#
lingo check コマンドは、新しい翻訳を生成することなく、すべてのコンテンツが翻訳済みかどうかを検証します。未翻訳のコンテンツがある場合は、非ゼロのステータスコードで終了します。
lingo check未翻訳コンテンツのリリースを防ぐためのデプロイゲートとして活用できます。CLI は npm install -g @lingo.dev/cli でインストールし(Node 22+)、runner は LINGO_API_KEY 環境変数で認証します。
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: 22
- run: npm install -g @lingo.dev/cli
- run: lingo check
env:
LINGO_API_KEY: ${{ secrets.LINGO_API_KEY }}マージ競合の解消#
マージ競合は、ブランチ間で .lingo/lock.json ファイルの内容がずれたときに発生します。多くの場合、別々のブランチで翻訳が独立して更新されたことが原因です。
予防策#
翻訳用に feature ブランチを使うのではなく、翻訳を直接 main にコミットすれば、lockfile の競合を完全に回避できます。
マージで解消する#
マージを開始する
git merge <branch-name>競合している lockfile を削除する
rm .lingo/lock.jsonマージを完了する
git add .
git merge --continuelockfile を再生成する
lingo pushlingo push を実行すると、通常の同期処理の一環として、現在のソースファイルの状態をもとに .lingo/lock.json が再構築されます。
rebase で解消する#
この方法は rebase でも同様に有効です。競合解消の各ステップで .lingo/lock.json を削除し、rebase を続行して、最後に lingo push を実行して lockfile を再生成します。
git rebase <branch-name>
# On each conflict: rm .lingo/lock.json && git add . && git rebase --continue
lingo push