GitLab CI/CD

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

GitLab CI/CDとは?

GitLab CI/CDは、GitLabに組み込まれた継続的インテグレーションおよびデプロイメントプラットフォームです。ユーザーはYAMLファイルでパイプラインを定義し、コードのビルド、テスト、デプロイ、またはリポジトリイベントによってトリガーされるタスクの自動化を行うことができます。

Lingo.dev CI/CDとは?

Lingo.dev CI/CDは、CI/CDでアプリやコンテンツをローカライズするためのAI搭載ツールで、翻訳が常に最新の状態に保たれることを保証します。Lingo.dev CLIをベースに構築されており、ciコマンドで利用できます。

npx lingo.dev@latest ci --help

このガイドについて

このガイドでは、GitLab CI/CDとLingo.dev Engineを使用してLingo.dev CI/CDをセットアップする方法を説明します。

ステップ1. Lingo.dev CLIのセットアップ

まず、Lingo.dev CLIクイックスタートに従ってください。

最終的に以下が揃います。

  • Lingo.devのAPIキー
  • 翻訳パイプラインの動作を設定するi18n.jsonファイル
  • npx lingo.dev@latest runでコンテンツを翻訳する機能

ステップ2. アクセストークンの取得

GitLab CI/CDでは、パイプライン内で特定のアクションを実行するためにアクセストークンが必要です。

アクセストークンには2つのタイプがあります。

どちらも使用できますが、個人アクセストークンはGitLabの無料ユーザーのみが利用できます。

個人アクセストークン

  1. 左サイドバーでアバターを選択します。

  2. プロフィールを編集を選択します。

  3. 左サイドバーでアクセストークンを選択します。

  4. 新しいトークンを追加を選択します。

  5. トークン名に、トークンの名前を入力します(例:「Lingo.dev」)。

  6. 以下のスコープを有効にします。

    • api
    • read_repository
    • write_repository
  7. Create personal access tokenを選択します。

プロジェクトアクセストークン

  1. GitLabのプロジェクトに移動します。

  2. Settings > Access tokensを選択します。

  3. Add new tokenを選択します。

  4. Token nameにトークン名を入力します。

  5. トークンのロールを選択します。

  6. 以下のスコープを有効にします。

    • api
    • read_repository
    • write_repository
  7. Create project access tokenを選択します。

ステップ2. CI/CD変数の設定

GitLabでは、CI/CD変数により、パイプラインが機密値にアクセスできるようになります。GitLab CI/CDでLingo.devを使用するには、Lingo.dev APIキーとGitLabアクセストークンの両方を変数として利用可能にする必要があります。

警告: デフォルトでは、CI/CD変数は保護されたブランチでのみ利用可能です。保護されたブランチを使用していない場合は、変数作成時にProtect variableオプションを無効にしてください。

Lingo.dev APIキー

  1. Settings > CI/CDに移動します。
  2. Variablesセクションを展開します。
  3. Add variableをクリックします。
  4. KeyフィールドにLINGODOTDEV_API_KEYを入力します。
  5. ValueフィールドにLingo.dev APIキーを入力します。
  6. Visibility > Maskedを選択します。
  7. Add variableをクリックします。

GitLabアクセストークン

  1. Settings > CI/CDに移動します。
  2. Variablesセクションを展開します。
  3. Add variableをクリックします。
  4. KeyフィールドにGL_TOKENを入力します。
  5. ValueフィールドにGitLabアクセストークンを入力します。
  6. Visibility > Maskedを選択します。
  7. Add variableをクリックします。

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

Lingo.dev CI/CDは、さまざまなワークフローをサポートするために、さまざまな方法で設定できます。以下は、推奨するワークフローの例です。

  • コンテンツがmainにマージされたとき、翻訳をmainにコミットする
  • コンテンツがmainにマージされたとき、mainからマージリクエストを作成する
  • コンテンツがフィーチャーブランチにマージされたとき、翻訳をそのブランチにコミットする
  • コンテンツがフィーチャーブランチにマージされたとき、そのブランチからマージリクエストを作成する

しかし、「最適な」ワークフローというものは存在しません。すべてにトレードオフがあります。どこから始めればよいか分からない場合は、最初のオプションから始めることをお勧めします。これは最もシンプルで、最も目立たないワークフローです。

ステップ4. パイプラインをセットアップする

  1. リポジトリのルートに.gitlab-ci.ymlファイルを作成します:

    touch .gitlab-ci.yml
    
  2. パイプラインの例のいずれかをファイルにコピーします。

  3. 変更をmainブランチにコミットしてプッシュします:

    git add .gitlab-ci.yml
    git commit -m "feat: GitLab CI pipeline for Lingo.dev"
    git push
    

(オプション) ステップ5. パイプラインをカスタマイズする

Lingo.dev CI/CDにはデフォルト値があり、ほとんどの場合カスタマイズする必要はありません。ただし、ciコマンドのCLIフラグを使用してオーバーライドすることができます。

npx lingo.dev@latest ci --api-key "$LINGODOTDEV_API_KEY" --commit-message "My custom commit message!"

利用可能なすべてのオプションを表示するには、CLIコマンドを参照してください。

パイプラインの例

mainにコミット

コンテンツがmainにマージされたとき、翻訳をmainにコミットします。

image:
  name: lingodotdev/ci-action:latest
  entrypoint: [""]

stages: [translate]

translate:
  stage: translate
  script:
    - npx lingo.dev@latest ci --api-key "$LINGODOTDEV_API_KEY"
  only:
    - main

mainからマージリクエスト

コンテンツがmainにマージされたとき、mainからマージリクエストを作成します。

image:
  name: lingodotdev/ci-action:latest
  entrypoint: [""]

stages: [translate]

translate:
  stage: translate
  script:
    - npx lingo.dev@latest ci --pull-request --api-key "$LINGODOTDEV_API_KEY"
  only:
    - main

フィーチャーブランチにコミット

コンテンツがフィーチャーブランチにマージされたとき、翻訳をそのブランチにコミットします。

image:
  name: lingodotdev/ci-action:latest
  entrypoint: [""]

stages: [translate]

translate:
  stage: translate
  script:
    - npx lingo.dev@latest ci --api-key "$LINGODOTDEV_API_KEY"
  only:
    - branches
  except:
    - main

フィーチャーブランチからマージリクエスト

コンテンツがフィーチャーブランチにマージされたとき、そのブランチからマージリクエストを作成します。

image:
  name: lingodotdev/ci-action:latest
  entrypoint: [""]

stages: [translate]

translate:
  stage: translate
  script:
    - npx lingo.dev@latest ci --pull-request --api-key "$LINGODOTDEV_API_KEY"
  except:
    - main