{"meta":{"title":"GitHub Actions Importer を使用した GitLab からの移行","intro":"GitHub Actions Importerを使用して、GitLab パイプラインのGitHub Actionsへの移行を自動化する方法について説明します。","product":"GitHub Actions","breadcrumbs":[{"href":"/ja/actions","title":"GitHub Actions"},{"href":"/ja/actions/tutorials","title":"チュートリアル"},{"href":"/ja/actions/tutorials/migrate-to-github-actions","title":"GitHub Actions に移行する"},{"href":"/ja/actions/tutorials/migrate-to-github-actions/automated-migrations","title":"自動移行"},{"href":"/ja/actions/tutorials/migrate-to-github-actions/automated-migrations/gitlab-migration","title":"GitLab の移行"}],"documentType":"article"},"body":"# GitHub Actions Importer を使用した GitLab からの移行\n\nGitHub Actions Importerを使用して、GitLab パイプラインのGitHub Actionsへの移行を自動化する方法について説明します。\n\n## GitHub Actions Importer を使用した GitLab からの移行について\n\n以下の手順では、 GitHub Actions Importer を使用して GitLab パイプラインを GitHub Actionsに移行するように環境を構成する手順について説明します。\n\n### 前提条件\n\n* GitHub Actions ワークフローに変換するパイプラインとジョブを含む GitLab アカウントまたは組織。\n* アカウントまたは組織の GitLab personal access token を作成するためのアクセス権。\n* Linux ベースのコンテナーを実行し、必要なツールをインストールできる環境。\n  * Docker が[インストールされていて](https://docs.docker.com/get-docker/)実行されていること。\n\n  * [GitHub CLI](https://cli.github.com) がインストールされていること。\n  > \\[!NOTE]\n  > GitHub Actions Importer コンテナーと CLI は、CI プラットフォームと同じサーバーにインストールする必要はありません。\n\n### 制限事項\n\nGitLab パイプラインからGitHub Actionsを使用したGitHub Actions Importerへのプロセスの自動移行には、いくつかの制限があります。\n\n* 異なるワークフローのジョブ間での自動キャッシュはサポートされていません。\n* `audit` コマンドは、組織アカウントを使っている場合にのみサポートされます。 ただし、`dry-run` コマンドと `migrate` コマンドは、組織またはユーザー アカウントで使うことができます。\n\n#### 手動タスク\n\n特定の GitLab 構成は手動で移行する必要があります。 具体的な内容は次のとおりです。\n\n* マスクされたプロジェクトまたはグループ変数の値\n* 成果物報告書\n\n手動移行の詳細については、「[GitLab CI/CD から GitHub Actions への移行](/ja/actions/tutorials/migrate-to-github-actions/manual-migrations/migrate-from-gitlab-cicd)」を参照してください。\n\n## GitHub Actions Importer CLI 拡張機能のインストール\n\n1. GitHub Actions Importer CLI 拡張機能のインストール\n\n   ```bash copy\n   gh extension install github/gh-actions-importer\n   ```\n\n2. 拡張機能がインストールされていることを確認します。\n\n   ```bash\n   $ gh actions-importer -h\n   Options:\n     -?, -h, --help  Show help and usage information\n\n   Commands:\n     update     Update to the latest version of GitHub Actions Importer.\n     version    Display the version of GitHub Actions Importer.\n     configure  Start an interactive prompt to configure credentials used to authenticate with your CI server(s).\n     audit      Plan your CI/CD migration by analyzing your current CI/CD footprint.\n     forecast   Forecast GitHub Actions usage from historical pipeline utilization.\n     dry-run    Convert a pipeline to a GitHub Actions workflow and output its yaml file.\n     migrate    Convert a pipeline to a GitHub Actions workflow and open a pull request with the changes.\n   ```\n\n## 資格情報の構成\n\n`configure` CLI コマンドを使用して、GitLab とGitHub Actions Importerを操作するときに、GitHubに必要な資格情報とオプションを設定します。\n\n1. GitHub\n   personal access token (classic)を作成します。 詳しくは、「[個人用アクセス トークンを管理する](/ja/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens#creating-a-personal-access-token-classic)」をご覧ください。\n\n   トークンには、`workflow` スコープが必要です。\n\n   トークンは、作成後にコピーして、後で使用できるように安全な場所に保存します。\n\n2. GitLab personal access tokenを作成します。 詳細については、GitLab ドキュメントの [Personal access tokens](https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html#create-a-personal-access-token) を参照してください。\n\n   トークンには、`read_api` スコープが必要です。\n\n   トークンは、作成後にコピーして、後で使用できるように安全な場所に保存します。\n\n3. ターミナルで、 GitHub Actions Importer`configure` CLI コマンドを実行します。\n\n   ```shell\n   gh actions-importer configure\n   ```\n\n`configure` コマンドでは、次の情報の入力が求められます。\n\n* \\[どの CI プロバイダーを構成していますか?] で、方向キーを使用して `GitLab` を選択し、<kbd>Space</kbd> キーを押して選択し、<kbd>Enter</kbd> キーを押します。\n* \\[Personal access token for GitHub] に、先ほど作成した personal access token (classic) の値を入力し、 <kbd>Enter キー</kbd>を押します。\n* \\[GitHub インスタンスのベース URL] で、 キーを押します。<kbd>Enter</kbd> キーを押して既定値 (`https://github.com`) をそのまま使用します。\n* \\[GitLab のプライベート トークン] に、先ほど作成した GitLab personal access token の値を入力し、 <kbd>Enter キー</kbd>を押します。\n* \"GitLab インスタンスのベース URL\" で、GitLab インスタンスの URL を入力し、<kbd>Enter</kbd> キーを押します。\n\n以下に `configure` コマンドの出力の例を示します。\n\n```shell\n$ gh actions-importer configure\n✔ Which CI providers are you configuring?: GitLab\nEnter the following values (leave empty to omit):\n✔ Personal access token for GitHub: ***************\n✔ Base url of the GitHub instance: https://github.com\n✔ Private token for GitLab: ***************\n✔ Base url of the GitLab instance: http://localhost\nEnvironment variables successfully updated.\n```\n\n1. ターミナルで、 GitHub Actions Importer`update` CLI コマンドを実行して GitHub PackagesContainer registry に接続し、コンテナー イメージが最新バージョンに更新されていることを確認します。\n\n   ```shell\n   gh actions-importer update\n   ```\n\n   コマンドの出力は次のようになります。\n\n   ```shell\n   Updating ghcr.io/actions-importer/cli:latest...\n   ghcr.io/actions-importer/cli:latest up-to-date\n   ```\n\n## GitLab の監査を実行する\n\n`audit` コマンドを使って、GitLab サーバー内のすべてのパイプラインの概要ビューを取得できます。\n\n`audit` コマンドによって、次のステップが実行されます。\n\n1. GitLab サーバーで定義されているすべてのプロジェクトをフェッチします。\n2. 各パイプラインを、同等の GitHub Actions ワークフローに変換します。\n3. GitHub Actions Importerを使用して移行の完了と複雑さを要約したレポートを生成します。\n\n### audit コマンドの前提条件\n\n`audit` コマンドを使用するには、GitLab 組織アカウントで構成されたpersonal access tokenが必要です。\n\n### audit コマンドの実行\n\nGitLab サーバーの監査を実行するには、ターミナルで次のコマンドを実行します。`my-gitlab-namespace` は、監査する名前空間またはグループに置き換えます。\n\n```shell\ngh actions-importer audit gitlab --output-dir tmp/audit --namespace my-gitlab-namespace\n```\n\n### 監査結果の検査\n\n監査の結果は、指定した出力ディレクトリ内のファイルに含まれます。 監査結果の概要については、`audit_summary.md` ファイルを参照してください。\n\n監査の概要には、次のセクションがあります。\n\n#### Pipelines\n\n\"Pipelines\" セクションには、 GitHub Actions Importerによって行われた変換率に関する高レベルの統計情報が含まれています。\n\n以下に、\"パイプライン\" セクションに表示される可能性がある主な用語を示します。\n\n* **成功した** パイプラインには、パイプラインコンストラクトの 100% があり、個々の項目は自動的に同等の GitHub Actions に変換されました。\n* **一部成功した** パイプラインでは、パイプラインの構成要素はすべて変換されていましたが、一部の個別項目は対応する GitHub Actions に自動的には変換されませんでした。\n* **サポートされていない** パイプラインは、 GitHub Actions Importerでサポートされていない定義の種類です。\n* **失敗**したパイプラインは、変換中に致命的なエラーが発生しました。 これは、次の 3 つの理由のいずれかで発生する可能性があります。\n  * パイプラインの構成が元々正しくなかったため、有効でなかった。\n  * GitHub Actions Importer 変換時に内部エラーが発生しました。\n  * ネットワーク応答が失敗して、パイプラインにアクセスできなくなったが、これは多くの場合、無効な資格情報が原因である。\n\n#### ビルド ステップ\n\n\\[ビルド ステップ] セクションには、すべてのパイプラインで使用される個々のビルド ステップと、 GitHub Actions Importerによって自動的に変換された数の概要が含まれています。\n\n以下に、\"ビルド ステップ\" セクションに表示される可能性がある主な用語を示します。\n\n* **既知**のビルド ステップは、同等のアクションに自動的に変換されたステップです。\n* **不明**なビルド ステップは、同等のアクションに自動的に変換されなかったステップです。\n* **未サポート**のビルド ステップは、次のいずれかのステップです。\n  * 基本的に GitHub Actionsではサポートされていません。\n  * GitHub Actionsと互換性のない方法で構成されます。\n* **アクション**は、変換されたワークフローで使われたアクションのリストです。 これは、次の場合に重要である可能性があります。\n  * GitHub Enterprise Serverを使用する場合は、インスタンスに同期するアクションの一覧を収集します。\n  * 使われるアクションの組織レベルの許可リストを定義する。 このアクション リストは、セキュリティ チームまたはコンプライアンス チームの確認を必要とする可能性があるアクションの包括的なリストです。\n\n#### 手動タスク\n\n\\[手動タスク] セクションには、 GitHub Actions Importer が自動的に完了できず、手動で完了する必要があるタスクの概要が含まれています。\n\n以下に、\"手動タスク\" セクションに表示される可能性がある主な用語を示します。\n\n* **シークレット**は、変換されたパイプラインで使われるリポジトリまたは組織レベルのシークレットです。 これらのパイプラインが正常に機能するためには、 GitHub Actions でこれらのシークレットを手動で作成する必要があります。 詳しくは、「[GitHub Actions でのシークレットの使用](/ja/actions/how-tos/write-workflows/choose-what-workflows-do/use-secrets)」をご覧ください。\n* **セルフホステッド ランナー**とは、GitHubホストランナーではない変換されたパイプラインで参照されるランナーのラベルを指します。 これらのパイプラインを適切に機能させるには、これらのランナーを手動で定義する必要があります。\n\n#### Files\n\n監査レポートの最後のセクションには、監査中にディスクに書き込まれたすべてのファイルのマニフェストが表示されます。\n\n各パイプライン ファイルには、次のようなさまざまなファイルが監査に含まれます。\n\n* GitHubで定義された元のパイプライン。\n* パイプラインの変換に使われたネットワーク応答のすべて。\n* 変換されたワークフロー ファイル。\n* 失敗したパイプライン変換のトラブルシューティングに使用できるスタック トレース。\n\nさらに、`workflow_usage.csv` ファイルには、正常に変換された各パイプラインで使われるすべてのアクション、シークレット、ランナーのコンマ区切りのリストが含まれます。 これは、どのワークフローがどのアクション、シークレット、ランナーを使うかを判断するのに役立ち、セキュリティ レビューを実行するのに役立ちます。\n\n## 潜在的なビルド ランナーの使用状況を予測する\n\n`forecast` コマンドを使用すると、GitLab サーバーで完了したパイプライン実行のメトリックを計算することで、潜在的なGitHub Actions使用量を予測できます。\n\n### forecast コマンドの実行\n\n潜在的な GitHub Actions 使用状況の予測を実行するには、ターミナルで次のコマンドを実行し、 `my-gitlab-namespace` を予測する名前空間またはグループに置き換えます。 既定では、 GitHub Actions Importer は予測レポートに過去 7 日間を含みます。\n\n```shell\ngh actions-importer forecast gitlab --output-dir tmp/forecast --namespace my-gitlab-namespace\n```\n\n### 名前空間全体の予測\n\n名前空間全体とそのすべてのサブグループを予測するには、`--namespace` 引数または `NAMESPACE` 環境変数で各サブグループを指定する必要があります。\n\n次に例を示します。\n\n```shell\ngh actions-importer forecast gitlab --namespace my-gitlab-namespace my-gitlab-namespace/subgroup-one my-gitlab-namespace/subgroup-two ...\n```\n\n### 予測レポートの検査\n\n予測の結果は、指定した出力ディレクトリ内の `forecast_report.md` ファイルに含まれます。\n\n以下に、予測レポートに表示される可能性がある主な用語を示します。\n\n* **ジョブ数**は、完了したジョブの合計数です。\n* **パイプライン数**は、使われた一意のパイプラインの数です。\n* **実行時間**は、ランナーがジョブに費やした時間を表します。 このメトリックは、 GitHubホストランナーのコストを計画するのに役立ちます。\n  * このメトリックは、 GitHub Actionsでの支出が予想される量と関連付けられます。 これは、この時間 (分) に使われるハードウェアによって異なります。\n    [\n    GitHub Actions料金計算ツール](https://github.com/pricing/calculator)を使用して、コストを見積もることができます。\n* **キュー時間**メトリクスは、ランナーが実行できるようになるのを待機するためにジョブが費やした時間を表します。\n* **同時実行ジョブ** メトリックは、特定の時点で実行されるジョブの量を表します。 このメトリックを使って、構成する必要があるランナーの数を定義できます。\n\nさらに、これらのメトリックを、GitLab のランナーの各キューに対して定義します。 これはホステッド ランナーとセルフホステッド ランナー、またはハイ スペック マシンとロー スペック マシンが混在している場合に特に有用で、異なるタイプのランナーに固有のメトリックを確認できます。\n\n## GitLab パイプラインの dry-run 移行を実行する\n\n`dry-run` コマンドを使用して、GitLab パイプラインを同等のGitHub Actions ワークフローに変換できます。\n\n### dry-run コマンドの実行\n\n`dry-run` コマンドを使用して、GitLab パイプラインを同等のGitHub Actions ワークフローに変換できます。 dry-run を実行すると、指定したディレクトリに出力ファイルが作成されますが、パイプラインを移行するための pull request は開かれません。\n\nGitLab パイプラインを GitHub Actions に移行するドライ ランを実行するには、ターミナルで次のコマンドを実行し、 `my-gitlab-project` を GitLab プロジェクト のスラッグに置き換え、 `my-gitlab-namespace` を、ドライ ランを実行する名前空間またはグループ ( `my-org/my-team` サブグループの完全なグループ パスなど) に置き換えます。\n\n```shell\ngh actions-importer dry-run gitlab --output-dir tmp/dry-run --namespace my-gitlab-namespace --project my-gitlab-project\n```\n\n### 変換されたワークフローの検査\n\n指定した出力ディレクトリで、ドライ ランのログと変換されたワークフロー ファイルを表示できます。\n\n不明なビルドステップや部分的に成功したパイプラインなど、 GitHub Actions Importer が自動的に変換できなかったものがある場合は、カスタム トランスフォーマーを作成して変換プロセスをさらにカスタマイズできます。 詳しくは、「[カスタム トランスフォーマーを使用した GitHub Actions Importer の拡張](/ja/actions/reference/github-actions-importer/custom-transformers)」をご覧ください。\n\n## GitLab パイプラインの運用移行を実行する\n\n`migrate` コマンドを使用して GitLab パイプラインを変換し、同等のGitHub Actions ワークフローを使用して pull request を開くことができます。\n\n### migrate コマンドの実行\n\nGitLab パイプラインを GitHub Actionsに移行するには、ターミナルで次のコマンドを実行し、次の値を置き換えます。\n\n* `target-url`\n  GitHub リポジトリの URL を含む値\n* `my-gitlab-project` を GitLab プロジェクトのスラッグに置き換える\n* `my-gitlab-namespace` を移行する名前空間またはグループ (サブグループ用の完全なパス、例: `my-org/my-team`) に置換する\n\n```shell\ngh actions-importer migrate gitlab --target-url https://github.com/:owner/:repo --output-dir tmp/migrate --namespace my-gitlab-namespace --project my-gitlab-project\n```\n\nコマンドの出力には、変換されたワークフローをリポジトリに追加する pull request への URL が含まれます。 成功した出力の例は、次のようになります。\n\n```shell\n$ gh actions-importer migrate gitlab --target-url https://github.com/octo-org/octo-repo --output-dir tmp/migrate --namespace octo-org --project monas-project\n[2022-08-20 22:08:20] Logs: 'tmp/migrate/log/actions-importer-20220916-014033.log'\n[2022-08-20 22:08:20] Pull request: 'https://github.com/octo-org/octo-repo/pull/1'\n```\n\n### pull request の検査\n\n`migrate` コマンドが正常に実行された場合、出力には、変換されたワークフローをリポジトリに追加する新しい pull request へのリンクが含まれます。\n\npull request の重要な要素には、次のようなものがあります。\n\n* pull request の説明の「**手動ステップ**」というセクションには、パイプラインの GitHub Actions への移行を終了する前に手動で完了する必要があるステップが列挙されています。 たとえば、このセクションでは、ワークフローで使われるシークレットを作成するように指示する場合があります。\n* 変換されたワークフロー ファイル。 Pull request の **\\[Files changed]** タブを選んで、GitHub リポジトリに追加されるワークフロー ファイルを表示します。\n\nPull request の検査が終了したら、それをマージして、ワークフローを GitHub リポジトリに追加できます。\n\n## リファレンス\n\nこのセクションには、 GitHub Actions Importer を使用して GitLab から移行する場合の環境変数、省略可能な引数、およびサポートされる構文に関するリファレンス情報が含まれています。\n\n### 環境変数の使用\n\nGitHub Actions Importer では、認証構成に環境変数が使われます。 これらの変数は、`configure` コマンドを使って構成プロセスに従うことで設定します。 詳細については、[資格情報の構成](#configuring-credentials)に関するセクションを参照してください。\n\nGitHub Actions Importer では、次の環境変数を使用して GitLab インスタンスに接続します。\n\n* `GITHUB_ACCESS_TOKEN`: 変換されたワークフローを使用してプル要求を作成するために使用される personal access token (classic) ( `workflow` スコープが必要です)。\n* `GITHUB_INSTANCE_URL`: ターゲット GitHub インスタンスへの URL (たとえば、 `https://github.com`)。\n* `GITLAB_ACCESS_TOKEN`: GitLab personal access token GitLab リソースの表示に使用されます。\n* `GITLAB_INSTANCE_URL`: GitLab インスタンスの URL。\n* `NAMESPACE`: GitLab パイプラインを含む名前空間またはグループ。\n\nこれらの環境変数は、実行時に`.env.local`によって読み込まれるGitHub Actions Importer ファイルで指定できます。\n\n### 省略可能な引数の使用\n\nGitHub Actions Importer サブコマンドと一緒に使って、移行をカスタマイズできる省略可能な引数があります。\n\n#### `--source-file-path`\n\n`--source-file-path` 引数は、`forecast`、`dry-run`、または `migrate` サブコマンドと一緒に使うことができます。\n\n既定では、 GitHub Actions Importer はソース管理からパイプラインの内容をフェッチします。\n`--source-file-path`引数は、指定したソース ファイル パスを代わりに使用するようにGitHub Actions Importerに指示します。\n\n次に例を示します。\n\n```shell\ngh actions-importer dry-run gitlab --output-dir output/ --namespace my-gitlab-namespace --project my-gitlab-project --source-file-path path/to/.gitlab-ci.yml\n```\n\n`forecast` サブコマンドの実行時に複数のソース ファイルを指定する場合は、ファイル パス値でパターン マッチングを使うことができます。 次の例では、GitHub Actions Importer ファイル パスに一致するすべてのソース ファイルを `./tmp/previous_forecast/jobs/*.json` に渡します。\n\n```shell\ngh actions-importer forecast gitlab --output-dir output/ --namespace my-gitlab-namespace --project my-gitlab-project --source-file-path ./tmp/previous_forecast/jobs/*.json\n```\n\n#### `--config-file-path`\n\n`--config-file-path` 引数は、`audit`、`dry-run`、および `migrate` サブコマンドと一緒に使うことができます。\n\n既定では、 GitHub Actions Importer はソース管理からパイプラインの内容をフェッチします。\n`--config-file-path`引数は、指定したソース ファイルを代わりに使用するようにGitHub Actions Importerに指示します。\n\n`--config-file-path` 引数を使って、変換された再利用可能なワークフローを移行するリポジトリを指定することもできます。\n\n##### 監査の例\n\nこの例では、 GitHub Actions Importer は、指定した YAML 構成ファイルを使用して監査を実行します。\n\n```shell\ngh actions-importer audit gitlab --output-dir path/to/output/ --namespace my-gitlab-namespace --config-file-path path/to/gitlab/config.yml\n```\n\n構成ファイルを使って GitLab インスタンスを監査するには、ファイルが次の形式であり、`repository_slug` の値がそれぞれ一意である必要があります。\n\n```yaml\nsource_files:\n  - repository_slug: namespace/project-name\n    path: path/to/.gitlab-ci.yml\n  - repository_slug: namespace/some-other-project-name\n    path: path/to/.gitlab-ci.yml\n```\n\n##### ドライ ランの例\n\nこの例では、 GitHub Actions Importer は、指定した YAML 構成ファイルをソース ファイルとして使用してドライ ランを実行します。\n\n構成ファイルの `repository_slug` を `--namespace` および `--project` オプションの値に一致させてパイプラインを選びます。 次に `path` を使って、指定したソース ファイルをプルします。\n\n```shell\ngh actions-importer dry-run gitlab --namespace my-gitlab-namespace --project my-gitlab-project-name --output-dir ./output/ --config-file-path ./path/to/gitlab/config.yml\n```\n\n##### 変換された再利用可能なワークフローのリポジトリを指定する\n\nGitHub Actions Importer は、 `--config-file-path` 引数に指定された YAML ファイルを使用して、変換された再利用可能なワークフローの移行元のリポジトリを決定します。\n\nまず、`--config-file-path` 引数を指定せずに監査を実行する必要があります。\n\n```shell\ngh actions-importer audit gitlab --output-dir ./output/\n```\n\nこのコマンドの出力には、`config.yml`によって変換されたすべての複合アクションの一覧を含む GitHub Actions Importer という名前のファイルが含まれます。 たとえば、`config.yml` ファイルの内容は次のようになります。\n\n```yaml\nreusable_workflows:\n  - name: my-reusable-workflow.yml\n    target_url: https://github.com/octo-org/octo-repo\n    ref: main\n```\n\nこのファイルを使って、再利用可能なワークフローまたは複合アクションを追加するリポジトリと参照先を指定できます。 その後、`--config-file-path`引数を使用してファイル`config.yml`をGitHub Actions Importer に提供できます。 たとえば、`migrate` コマンドを実行するときにこのファイルを使って、構成ファイルで定義されている一意のリポジトリごとに pull request を開くことができます。\n\n```shell\ngh actions-importer migrate gitlab --project my-project-name --output-dir output/ --config-file-path config.yml --target-url https://github.com/my-org/my-repo\n```\n\n### GitLab パイプラインでサポートされている構文\n\n次の表に、現在変換できる GitHub Actions Importer プロパティの種類を示します。 GitLab パイプライン構文が GitHub Actionsとどのように一致するかの詳細については、 [GitLab CI/CD から GitHub Actions への移行](/ja/actions/tutorials/migrate-to-github-actions/manual-migrations/migrate-from-gitlab-cicd) を参照してください。\n\n| GitLabパイプライン                                              | GitHub Actions                  | ステータス           |\n| :-------------------------------------------------------- | :------------------------------ | :-------------- |\n| `after_script`                                            | `jobs.<job_id>.steps`           | サポートされています      |\n| `auto_cancel_pending_pipelines`                           | `concurrency`                   | サポートされています      |\n| `before_script`                                           | `jobs.<job_id>.steps`           | サポートされています      |\n| `build_timeout` または `timeout`                             | `jobs.<job_id>.timeout-minutes` | サポートされています      |\n| `default`                                                 | 該当なし                            | サポートされています      |\n| `image`                                                   | `jobs.<job_id>.container`       | サポートされています      |\n| `job`                                                     | `jobs.<job_id>`                 | サポートされています      |\n| `needs`                                                   | `jobs.<job_id>.needs`           | サポートされています      |\n| `only_allow_merge_if_pipeline_succeeds`                   | `on.pull_request`               | サポートされています      |\n| `resource_group`                                          | `jobs.<job_id>.concurrency`     | サポートされています      |\n| `schedule`                                                | `on.schedule`                   | サポートされています      |\n| `script`                                                  | `jobs.<job_id>.steps`           | サポートされています      |\n| `stages`                                                  | `jobs`                          | サポートされています      |\n| `tags`                                                    | `jobs.<job_id>.runs-on`         | サポートされています      |\n| `variables`                                               |                                 |                 |\n| `env`、`jobs.<job_id>.env`                                 | サポートされています                      |                 |\n| 新しいコミットに対してパイプラインを実行する                                    | `on.push`                       | サポートされています      |\n| パイプラインを手動で実行する                                            | `on.workflow_dispatch`          | サポートされています      |\n| `environment`                                             | `jobs.<job_id>.environment`     | 部分的にサポートされています。 |\n| `include`                                                 |                                 |                 |\n| `include` ステートメントで参照されるファイルは、変換される前に 1 つのジョブ グラフにマージされます。 | 部分的にサポートされています。                 |                 |\n| `only` または `except`                                       | `jobs.<job_id>.if`              | 部分的にサポートされています。 |\n| `parallel`                                                | `jobs.<job_id>.strategy`        | 部分的にサポートされています。 |\n| `rules`                                                   | `jobs.<job_id>.if`              | 部分的にサポートされています。 |\n| `services`                                                | `jobs.<job_id>.services`        | 部分的にサポートされています。 |\n| `workflow`                                                | `if`                            | 部分的にサポートされています。 |\n\nサポートされている GitLab 構成について詳しくは、[`github/gh-actions-importer` リポジトリ](https://github.com/github/gh-actions-importer/blob/main/docs/gitlab/index.md)を参照してください。\n\n### 環境変数の構文\n\nGitHub Actions Importer では、次の表のマッピングを使用して、既定の GitLab 環境変数を、 GitHub Actionsで最も近い同等の環境変数に変換します。\n\n| GitLab                                        | GitHub Actions                                                                        |\n| :-------------------------------------------- | :------------------------------------------------------------------------------------ |\n| `CI_API_V4_URL`                               | `${{ github.api_url }}`                                                               |\n| `CI_BUILDS_DIR`                               | `${{ github.workspace }}`                                                             |\n| `CI_COMMIT_BRANCH`                            | `${{ github.ref }}`                                                                   |\n| `CI_COMMIT_REF_NAME`                          | `${{ github.ref }}`                                                                   |\n| `CI_COMMIT_REF_SLUG`                          | `${{ github.ref }}`                                                                   |\n| `CI_COMMIT_SHA`                               | `${{ github.sha }}`                                                                   |\n| `CI_COMMIT_SHORT_SHA`                         | `${{ github.sha }}`                                                                   |\n| `CI_COMMIT_TAG`                               | `${{ github.ref }}`                                                                   |\n| `CI_JOB_ID`                                   | `${{ github.job }}`                                                                   |\n| `CI_JOB_MANUAL`                               | `${{ github.event_name == 'workflow_dispatch' }}`                                     |\n| `CI_JOB_NAME`                                 | `${{ github.job }}`                                                                   |\n| `CI_JOB_STATUS`                               | `${{ job.status }}`                                                                   |\n| `CI_JOB_URL`                                  | `${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}` |\n| `CI_JOB_TOKEN`                                | `${{ github.token }}`                                                                 |\n| `CI_NODE_INDEX`                               | `${{ strategy.job-index }}`                                                           |\n| `CI_NODE_TOTAL`                               | `${{ strategy.job-total }}`                                                           |\n| `CI_PIPELINE_ID`                              | `${{ github.repository}}/${{ github.workflow }}`                                      |\n| `CI_PIPELINE_IID`                             | `${{ github.workflow }}`                                                              |\n| `CI_PIPELINE_SOURCE`                          | `${{ github.event_name }}`                                                            |\n| `CI_PIPELINE_TRIGGERED`                       | `${{ github.actions }}`                                                               |\n| `CI_PIPELINE_URL`                             | `${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}` |\n| `CI_PROJECT_DIR`                              | `${{ github.workspace }}`                                                             |\n| `CI_PROJECT_ID`                               | `${{ github.repository }}`                                                            |\n| `CI_PROJECT_NAME`                             | `${{ github.event.repository.name }}`                                                 |\n| `CI_PROJECT_NAMESPACE`                        | `${{ github.repository_owner }}`                                                      |\n| `CI_PROJECT_PATH_SLUG`                        | `${{ github.repository }}`                                                            |\n| `CI_PROJECT_PATH`                             | `${{ github.repository }}`                                                            |\n| `CI_PROJECT_ROOT_NAMESPACE`                   | `${{ github.repository_owner }}`                                                      |\n| `CI_PROJECT_TITLE`                            | `${{ github.event.repository.full_name }}`                                            |\n| `CI_PROJECT_URL`                              | `${{ github.server_url }}/${{ github.repository }}`                                   |\n| `CI_REPOSITORY_URL`                           | `${{ github.event.repository.clone_url }}`                                            |\n| `CI_RUNNER_EXECUTABLE_ARCH`                   | `${{ runner.os }}`                                                                    |\n| `CI_SERVER_HOST`                              | `${{ github.server_url }}`                                                            |\n| `CI_SERVER_URL`                               | `${{ github.server_url }}`                                                            |\n| `CI_SERVER`                                   | `${{ github.actions }}`                                                               |\n| `GITLAB_CI`                                   | `${{ github.actions }}`                                                               |\n| `GITLAB_USER_EMAIL`                           | `${{ github.actor }}`                                                                 |\n| `GITLAB_USER_ID`                              | `${{ github.actor }}`                                                                 |\n| `GITLAB_USER_LOGIN`                           | `${{ github.actor }}`                                                                 |\n| `GITLAB_USER_NAME`                            | `${{ github.actor }}`                                                                 |\n| `TRIGGER_PAYLOAD`                             | `${{ github.event_path }}`                                                            |\n| `CI_MERGE_REQUEST_ASSIGNEES`                  | `${{ github.event.pull_request.assignees }}`                                          |\n| `CI_MERGE_REQUEST_ID`                         | `${{ github.event.pull_request.number }}`                                             |\n| `CI_MERGE_REQUEST_IID`                        | `${{ github.event.pull_request.number }}`                                             |\n| `CI_MERGE_REQUEST_LABELS`                     | `${{ github.event.pull_request.labels }}`                                             |\n| `CI_MERGE_REQUEST_MILESTONE`                  | `${{ github.event.pull_request.milestone }}`                                          |\n| `CI_MERGE_REQUEST_PROJECT_ID`                 | `${{ github.repository }}`                                                            |\n| `CI_MERGE_REQUEST_PROJECT_PATH`               | `${{ github.repository }}`                                                            |\n| `CI_MERGE_REQUEST_PROJECT_URL`                | `${{ github.server_url }}/${{ github.repository }}`                                   |\n| `CI_MERGE_REQUEST_REF_PATH`                   | `${{ github.ref }}`                                                                   |\n| `CI_MERGE_REQUEST_SOURCE_BRANCH_NAME`         | `${{ github.event.pull_request.head.ref }}`                                           |\n| `CI_MERGE_REQUEST_SOURCE_BRANCH_SHA`          | `${{ github.event.pull_request.head.sha}}`                                            |\n| `CI_MERGE_REQUEST_SOURCE_PROJECT_ID`          | `${{ github.event.pull_request.head.repo.full_name }}`                                |\n| `CI_MERGE_REQUEST_SOURCE_PROJECT_PATH`        | `${{ github.event.pull_request.head.repo.full_name }}`                                |\n| `CI_MERGE_REQUEST_SOURCE_PROJECT_URL`         | `${{ github.event.pull_request.head.repo.url }}`                                      |\n| `CI_MERGE_REQUEST_TARGET_BRANCH_NAME`         | `${{ github.event.pull_request.base.ref }}`                                           |\n| `CI_MERGE_REQUEST_TARGET_BRANCH_SHA`          | `${{ github.event.pull_request.base.sha }}`                                           |\n| `CI_MERGE_REQUEST_TITLE`                      | `${{ github.event.pull_request.title }}`                                              |\n| `CI_EXTERNAL_PULL_REQUEST_IID`                | `${{ github.event.pull_request.number }}`                                             |\n| `CI_EXTERNAL_PULL_REQUEST_SOURCE_REPOSITORY`  | `${{ github.event.pull_request.head.repo.full_name }}`                                |\n| `CI_EXTERNAL_PULL_REQUEST_TARGET_REPOSITORY`  | `${{ github.event.pull_request.base.repo.full_name }}`                                |\n| `CI_EXTERNAL_PULL_REQUEST_SOURCE_BRANCH_NAME` | `${{ github.event.pull_request.head.ref }}`                                           |\n| `CI_EXTERNAL_PULL_REQUEST_SOURCE_BRANCH_SHA`  | `${{ github.event.pull_request.head.sha }}`                                           |\n| `CI_EXTERNAL_PULL_REQUEST_TARGET_BRANCH_NAME` | `${{ github.event.pull_request.base.ref }}`                                           |\n| `CI_EXTERNAL_PULL_REQUEST_TARGET_BRANCH_SHA`  | `${{ github.event.pull_request.base.sha }}`                                           |\n\n## 法務上の通知\n\nMIT ライセンスのもとで <https://github.com/github/gh-actions-importer/> から一部を引用しています。\n\n```text\nMIT License\n\nCopyright (c) 2022 GitHub\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n```"}