Bitbucket Pipelines

Bitbucket PipelinesとLingo.dev CI/CDによるAI翻訳

Lingo.dev Bitbucket Pipelines統合は、新しいコンテンツを自動的にローカライズし、不完全な翻訳が本番環境に到達するのを防ぐ、セキュアなオープンソースCI/CD統合です。チームのワークフロー要件に応じて、プルリクエストを作成するか、ブランチに直接コミットします。

また、リベースによる自動競合解決を実装しているため、手動介入なしで翻訳とコードの同期を維持できます。

この統合は複数のワークフローシナリオをサポートしています:

  1. コンテンツの変更がプッシュされた際のブランチへの直接コミット
  2. 翻訳更新のためのブランチをターゲットとしたプルリクエスト

このガイドを完了すると、以下が可能になります:

  1. コードプッシュによってトリガーされる自動ローカライゼーションのセットアップ
  2. リポジトリ変数を使用したセキュアな認証の設定
  3. 直接コミットまたはプルリクエストワークフローの選択
  4. 既存のプロセスに継続的ローカライゼーションがどのように適合するかの理解

それでは始めましょう!

前提条件

リポジトリのセットアップ

リポジトリには、有効なi18n.jsonファイルを持つLingo.dev CLIが設定されている必要があります。まだセットアップしていない場合は、まずCLIクイックスタートを完了してください。

ステップ1. 認証のセットアップ

Lingo.dev Bitbucket統合は、翻訳エンジンとリポジトリへのアクセスが必要です。認証は、認証情報を安全に保つリポジトリ変数を通じて行われます。

APIキーの追加

リポジトリのリポジトリ設定リポジトリ変数に移動し、翻訳エンジンの認証情報を追加します:

生のLLM APIユーザーの場合:

  • 変数名:OPENAI_API_KEYまたはANTHROPIC_API_KEY
  • 変数値:各プロバイダーからのAPIキー

Lingo.devエンジンユーザーの場合:

  • 変数名:LINGODOTDEV_API_KEY
  • 変数値:lingo.dev/appからのプロジェクトAPIキー

Bitbucketアクセストークンの追加(プルリクエストモードの場合)

プルリクエストモードを使用する予定の場合は、アクセストークンを作成してください:

  1. リポジトリ設定アクセストークンリポジトリアクセストークンを作成に移動します
  2. 以下のスコープを付与します:
    • リポジトリの読み取りと書き込み
    • プルリクエストの読み取りと書き込み
  3. トークンをリポジトリ変数として追加します:
    • 変数名:BB_TOKEN
    • 変数値:Bitbucketアクセストークン

ステップ2. ワークフローの作成

この基本構成でbitbucket-pipelines.ymlファイルを作成または更新します:

script:
  - pipe: lingodotdev/lingo.dev:main

この構成はLingo.devパイプを使用し、翻訳エンジンを自動的に実行します。

必要な権限

Bitbucket Pipelinesはリポジトリ変数とgit操作へのアクセスが必要です:

リポジトリ変数:

  • LINGODOTDEV_API_KEY — Lingo.dev Engineユーザーに必須
  • OPENAI_API_KEYまたはANTHROPIC_API_KEY — 生のLLM APIユーザーに必須

プルリクエストモードの場合:

  • BB_TOKEN — プルリクエストの作成と管理に必須

アクセストークンのスコープ(プルリクエストモード使用時):

  • リポジトリの読み取りと書き込み — リポジトリコンテンツへのアクセスと変更
  • プルリクエストの読み取りと書き込み — プルリクエストの作成と管理

これらの権限により、インテグレーションはコンテンツを読み取り、翻訳を生成し、ローカライズされたコンテンツでリポジトリを更新できます。

ステップ3. ワークフローモードの選択

Lingo.dev Bitbucketインテグレーションは、チームのコードレビュー要件に応じて2つの動作モードをサポートしています。

直接コミットモード(デフォルト)

インテグレーションは翻訳をブランチに直接コミットします:

script:
  - pipe: lingodotdev/lingo.dev:main

このモードは以下に最適です:

  • 個人開発者または小規模チーム
  • マージ前にレビューされる機能ブランチ
  • 翻訳の更新に個別のレビューが不要なプロジェクト

プルリクエストモード

統合は翻訳更新のプルリクエストを作成します:

script:
  - pipe: lingodotdev/lingo.dev:main
    variables:
      LINGODOTDEV_PULL_REQUEST: "true"

プルリクエストモードに必要な設定

リポジトリ変数: LINGODOTDEV_API_KEYBB_TOKENの両方をリポジトリ変数として設定する必要があります。

アクセストークンの要件: BB_TOKENには、リポジトリとプルリクエストの両方に対する読み取りおよび書き込み権限が必要です。

**注意:**プルリクエストモードを使用する場合、BB_TOKEN変数が必須です。

このモードは以下に最適です:

  • 厳格なコードレビュー要件があるチーム
  • 翻訳変更に個別の承認が必要なプロジェクト
  • すべての変更に明示的なレビューが必要なワークフロー

ステップ4. ワークフローシナリオ

Lingo.dev Bitbucket統合は、さまざまな開発ワークフローに適応します。これらのシナリオを理解することで、チームに適した設定を選択できます。

シナリオ1:フィーチャーブランチの更新(直接コミット)

**トリガー:**フィーチャーブランチへのプッシュ **アクション:**翻訳更新をフィーチャーブランチに直接コミット

image:
  name: atlassian/default-image:2

pipelines:
  branches:
    feat/*:
      - step:
          name: Run i18n
          script:
            - pipe: lingodotdev/lingo.dev:main

**フロー:**コンテンツ変更をフィーチャーブランチにプッシュ → 統合が同じブランチに翻訳をコミット

これにより、翻訳更新がフィーチャーブランチ内に保持され、翻訳が元の変更と一緒にレビューされます。

シナリオ2:更新のプルリクエスト(プルリクエストモード)

**トリガー:**設定されたブランチへのプッシュ **アクション:**翻訳更新を含むプルリクエストを作成

image:
  name: atlassian/default-image:2

pipelines:
  branches:
    feat/*:
      - step:
          name: Run i18n
          script:
            - pipe: lingodotdev/lingo.dev:main
              variables:
                LINGODOTDEV_API_KEY: "${MY_LINGODOTDEV_API_KEY}" # or OPENAI_API_KEY/ANTHROPIC_API_KEY
                BB_TOKEN: "${MY_ACCESS_TOKEN}"
                LINGODOTDEV_PULL_REQUEST: "true"
                LINGODOTDEV_PULL_REQUEST_TITLE: "feat: update translations"
                LINGODOTDEV_COMMIT_MESSAGE: "feat: update translations"
                LINGODOTDEV_WORKING_DIRECTORY: "apps/web"
                LINGODOTDEV_PROCESS_OWN_COMMITS: "true"

**フロー:**コンテンツ変更をブランチにプッシュ → 統合が翻訳を含むプルリクエストを作成

これにより、翻訳更新の個別レビューが維持されます。

高度な設定

追加の変数を使用して統合の動作をカスタマイズします:

Lingo.dev Engineを使用した例:

image:
  name: atlassian/default-image:2

pipelines:
  branches:
    feat/*:
      - step:
          name: Run i18n
          script:
            - pipe: lingodotdev/lingo.dev:main
              variables:
                LINGODOTDEV_API_KEY: "${MY_LINGODOTDEV_API_KEY}"
                BB_TOKEN: "${MY_ACCESS_TOKEN}"
                LINGODOTDEV_PULL_REQUEST: "true"
                LINGODOTDEV_PULL_REQUEST_TITLE: "feat: update translations"
                LINGODOTDEV_COMMIT_MESSAGE: "feat: update translations"
                LINGODOTDEV_WORKING_DIRECTORY: "apps/web"
                LINGODOTDEV_PROCESS_OWN_COMMITS: "true"

生のLLM APIを使用した例:

image:
  name: atlassian/default-image:2

pipelines:
  branches:
    feat/*:
      - step:
          name: Run i18n
          script:
            - pipe: lingodotdev/lingo.dev:main
              variables:
                OPENAI_API_KEY: "${MY_OPENAI_API_KEY}" # or ANTHROPIC_API_KEY
                BB_TOKEN: "${MY_ACCESS_TOKEN}"
                LINGODOTDEV_PULL_REQUEST: "true"
                LINGODOTDEV_PULL_REQUEST_TITLE: "feat: update translations"
                LINGODOTDEV_COMMIT_MESSAGE: "feat: update translations"
                LINGODOTDEV_WORKING_DIRECTORY: "apps/web"
                LINGODOTDEV_PROCESS_OWN_COMMITS: "true"

設定オプション:

  • LINGODOTDEV_API_KEY — Lingo.dev Engineを使用している場合のLingo.dev Engine APIキー
  • OPENAI_API_KEY — 直接LLM APIを使用している場合のOpenAI APIキー
  • ANTHROPIC_API_KEY — 直接LLM APIを使用している場合のAnthropic APIキー
  • LINGODOTDEV_PULL_REQUEST — 直接コミットではなくプルリクエストを作成する(デフォルト: false)
  • LINGODOTDEV_PULL_REQUEST_TITLE — カスタムプルリクエストタイトル(デフォルト: feat: update translations via @lingodotdev)
  • LINGODOTDEV_COMMIT_MESSAGE — カスタムコミットメッセージ(デフォルト: feat: update translations via @lingodotdev)
  • LINGODOTDEV_WORKING_DIRECTORY — サブディレクトリで統合を実行する(デフォルト: .)
  • LINGODOTDEV_PROCESS_OWN_COMMITS — この統合によって作成されたコミットを処理する(デフォルト: false)
  • BB_TOKEN — Bitbucketアクセストークン(プルリクエストモードで必須)