{"meta":{"title":"ワークフロー構成の再利用","intro":"ワークフローを作成するときに重複を避ける方法について説明します。","product":"GitHub Actions","breadcrumbs":[{"href":"/ja/actions","title":"GitHub Actions"},{"href":"/ja/actions/concepts","title":"概念"},{"href":"/ja/actions/concepts/workflows-and-actions","title":"ワークフローとアクション"},{"href":"/ja/actions/concepts/workflows-and-actions/reusing-workflow-configurations","title":"ワークフロー構成の再利用"}],"documentType":"article"},"body":"# ワークフロー構成の再利用\n\nワークフローを作成するときに重複を避ける方法について説明します。\n\n## 再利用可能なワークフロー\n\nあるワークフローから別のワークフローにコピーして貼り付けるのではなく、ワークフローを再利用できます。 再利用可能なワークフローにアクセスできるユーザーは誰でも、別のワークフローから再利用可能なワークフローを呼び出すことができます。\n\n再利用可能なワークフローは、 agentic workflowsも補完します。エージェント ワークフローは、ロジックを複製するのではなく、承認済みの確定的な再利用可能なワークフローを呼び出すことができます。 詳しくは、「[GitHubのエージェント型ワークフローの作成](/ja/copilot/how-tos/github-agentic-workflows/creating-github-agentic-workflows)」をご覧ください。\n\nワークフローを再利用すると、重複が回避されます。 これにより、ワークフローの管理が容易になり、アクションと同様に、他のユーザーの作業を基にして新しいワークフローをより迅速に作成できます。 また、ワークフローを再利用すると、適切に設計され、既にテスト済みで、効果的であることが証明されているワークフローを使用でき、ベスト プラクティスが促進されます。 Organization では、一元的に管理できる再利用可能なワークフローのライブラリを構築できます。\n\n次の図は、再利用可能なワークフローを使用する進行中のワークフロー実行を示しています。\n\n* 図の左側にある 3 つのビルド ジョブが正常に完了すると、\"Deploy\" という依存ジョブが実行されます。\n* \"Deploy\" ジョブによって、\"Staging\"、\"Review\"、\"Production\" の 3 つのジョブを含む再利用可能なワークフローが呼び出されます。\n* \"Production\" デプロイ ジョブは、\"Staging\" ジョブが正常に完了した後にのみ実行されます。\n* ジョブが環境を対象とする場合、ワークフロー実行には、ジョブ内のステップ数を示す進行状況バーが表示されます。 次の図では、\"Production\" ジョブには 8 つのステップが含まれており、ステップ 6 が現在処理中です。\n* 再利用可能なワークフローを使用してデプロイ ジョブを実行すると、ワークフロー内のコードを複製することなく、ビルドごとにそれらのジョブを実行できます。\n\n![再利用できるワークフローを呼び出すワークフローの図。](/assets/images/help/actions/reusable-workflows-ci-cd.png)\n\n別のワークフローを使用するワークフローは、\"呼び出し元\" ワークフローと呼ばれます。 再利用可能なワークフローは、\"呼び出し先\" ワークフローです。 1 つの呼び出し元ワークフローで、複数の呼び出し先ワークフローを使用できます。 各呼び出し先ワークフローは、1 行で参照されます。 その結果、呼び出し元のワークフロー ファイルに含まれるのは数行の YAML だけでも、実行時に多数のタスクが実行される可能性があります。 ワークフローを再利用すると、呼び出し先ワークフロー全体が、呼び出し元ワークフローの一部であるかのように使用されます。\n\n別のリポジトリのワークフローを再利用する場合、呼び出し先ワークフロー内のすべてのアクションは、呼び出し元ワークフローの一部であるかのように実行されます。 たとえば、呼び出し先ワークフローで `actions/checkout` を使用する場合、アクションでは、呼び出し先ワークフローではなく、呼び出し元ワークフローがホストされるリポジトリの内容をチェックアウトします。\n\nGitHub Actions ワークフローで参照されている再利用されたワークフローは、ワークフローを含むリポジトリの依存関係グラフの依存関係として表示できます。 詳細については、「[依存関係グラフについて](/ja/code-security/concepts/supply-chain-security/dependency-graph)」を参照してください。\n\n### 再利用可能なワークフローと複合アクション\n\n再利用可能なワークフローと複合アクションは、どちらもワークフロー コンテンツの重複を回避するのに役立ちます。 再利用可能なワークフローを使用すると、ワークフロー全体を複数のジョブとステップで再利用できますが、複合アクションでは、複数のステップを組み合わせることができるので、他のアクションと同様に、複数のステップをジョブ ステップ内で実行できます。\n\n各ソリューションのいくつかの側面を比較してみましょう:\n\n* **ワークフロー ジョブ** - 複合アクションには、呼び出し元ワークフロー内でシングル ステップとして実行される一連のステップが含まれています。 再利用可能なワークフローとは異なり、ジョブを含めることはできません。\n* **ログ** - 複合アクションが実行されると、複合アクション内の個々のステップではなく、複合アクションを実行した呼び出し元ワークフローのステップだけがログに表示されます。 再利用可能なワークフローでは、すべてのジョブとステップが個別にログに記録されます。\n* **ランナーの指定** - 再利用可能なワークフローには、1 つ以上のジョブが含まれます。 すべてのワークフロー ジョブと同様に、再利用可能なワークフロー内のジョブは、ジョブを実行するマシンの種類を指定します。 そのため、呼び出し元のワークフロー ジョブ用に選択したマシンとは異なる可能性があるマシンの種類でステップを実行する必要がある場合は、複合アクションではなく再利用可能なワークフローを使用する必要があります。\n* **ステップへの出力の受け渡し** - 複合アクションはワークフロー ジョブ内のステップとして実行され、複合アクションを実行するステップの前または後に複数のステップを持つことができます。 再利用可能なワークフローは、ジョブ ステップ内からではなく、ジョブ内で直接呼び出されます。 再利用可能なワークフローを呼び出した後でジョブにステップを追加することはできませんが、再利用可能なワークフローでは、呼び出し元ワークフロー内の後続のジョブで参照できる出力がサポートされるようになりました。\n\n### 再利用可能なワークフローと複合アクションの主な違い\n\n| 再利用可能なワークフロー                                                    | 複合アクション                                                          |\n| --------------------------------------------------------------- | ---------------------------------------------------------------- |\n| 任意の標準ワークフロー ファイルによく似た YAML ファイル                                 | ワークフロー ステップのバンドルを含むアクション                                         |\n| 再利用可能な各ワークフローは、リポジトリの `.github/workflows` ディレクトリにある 1 つのファイルである | 各複合アクションは個別のリポジトリまたはディレクトリで、`action.yml` ファイルと、必要に応じてその他のファイルも含む |\n| 特定の YAML ファイルを参照することで呼び出される                                     | アクションが定義されているリポジトリまたはディレクトリを参照することで呼び出される                        |\n| ステップからではなく、ジョブ内で直接呼び出される                                        | ジョブ内でステップとして実行する                                                 |\n| 複数のジョブを含めることができる                                                | ジョブを含まない                                                         |\n| 各ステップはリアルタイムで記録される                                              | 複数のステップが含まれている場合でも、1 つのステップとしてログに記録される                           |\n| 最大10ワークフローのレベルまで接続できます                                          | 1 つのワークフローで最大 10 個の複合アクションを入れ子にすることができる                          |\n| シークレットが使用できる                                                    | シークレットが使用できない                                                    |\n| [マーケットプレース](https://github.com/marketplace?type=actions)に発行できない |                                                                  |\n| [マーケットプレース](https://github.com/marketplace?type=actions)に発行できる  |                                                                  |\n\n## ワークフロー テンプレート\n\nワークフロー テンプレートを使用すると、ワークフローを作成するアクセス許可を持つ Organization 内のすべての人が、より迅速かつ簡単にワークフローを作成できます。 新しいワークフローを作成する場合は、ワークフロー テンプレートを選択すると、ワークフローを作成する作業の一部またはすべてが自動的に行われます。 ワークフロー テンプレート内では、再利用可能なワークフローを参照して、一元管理されたワークフロー コードを再利用するメリットを簡単に得ることもできます。\n\n再利用可能なワークフローを参照するときにコミット SHA を使うと、そのワークフローを再利用するすべてのユーザーが必ず同じ YAML コードを使用するようにできます。 ただし、タグまたはブランチを使用して再利用可能なワークフローを参照する場合は、そのバージョンのワークフローを信頼できることを確認してください。 詳しくは、「[セキュリティで保護された使用に関するリファレンス](/ja/actions/reference/security/secure-use#reusing-third-party-workflows)」をご覧ください。\n\nGitHub には、さまざまな言語とツール用のワークフロー テンプレートが用意されています。 リポジトリにワークフローを設定すると、 GitHub はリポジトリ内のコードを分析し、リポジトリ内の言語とフレームワークに基づいてワークフローを推奨します。 たとえば、Node.jsを使用する場合、 GitHub は、Node.js パッケージをインストールしてテストを実行するワークフロー テンプレート ファイルを提案します。 検索とフィルタリングを行って、関連するワークフロー テンプレートを見つけることができます。\n\nGitHub には、次の大まかなカテゴリに対応したすぐに使用できるワークフロー テンプレートが用意されています。\n\n* **デプロイ (CD)**。 詳しくは、「[継続的なデプロイ](/ja/actions/get-started/continuous-deployment)」をご覧ください。\n\n* **セキュリティ**。 詳細については、 [AUTOTITLE を](/ja/code-security/how-tos/find-and-fix-code-vulnerabilities/configure-code-scanning/configuring-advanced-setup-for-code-scanning#configuring-code-scanning-using-third-party-actions)参照してください。\n\n* **継続的インテグレーション (CI)** 。 詳しくは、「[継続的インテグレーション](/ja/actions/get-started/continuous-integration)」をご覧ください。\n\n* **オートメーション**。 Automation ワークフロー テンプレートには、pull request のトリアージや、pull request で変更されたパスに基づくラベルの適用、リポジトリに初めて投稿する人へのあいさつなど、ワークフローを自動化するためのソリューションが用意されています。\n\nこれらのワークフローを、カスタム ワークフローの構築の出発点として使用するか、そのまま利用します。 ワークフロー テンプレートの詳細な一覧は、[actions/starter-workflows](https://github.com/actions/starter-workflows) リポジトリで参照できます。\n\n詳しくは、「[組織のワークフロー テンプレートを作成する](/ja/actions/how-tos/reuse-automations/create-workflow-templates)」をご覧ください。\n\n組織は、承認された agentic workflows テンプレートを共有アクションや再利用可能なワークフローと共に共有および管理することもできます。\nGitHub Agentic Workflowsを使用してテンプレートを作成するには、「[AUTOTITLE」](/ja/copilot/how-tos/github-agentic-workflows/creating-github-agentic-workflows)を参照してください。\n\n## YAML のアンカーとエイリアス\n\nYAML のアンカーとエイリアスを使うと、ワークフローの繰り返しを減らすことができます。 アンカー (`&` でマーク) を使うと、再利用するコンテンツを特定できます。また、エイリアス (`*` でマーク) を使うと、別の場所でそのコンテンツを繰り返すことができます。 アンカーは名前付きテンプレートを作成するもの、エイリアスはそのテンプレートを使うものと考えてください。 これは、共通の構成を共有するジョブやステップがある場合に特に便利です。\n\n参考情報と例については、「[ワークフロー構成の再利用](/ja/actions/reference/workflows-and-actions/reusing-workflow-configurations#yaml-anchors-and-aliases)」をご覧ください。\n\n## 次のステップ\n\nワークフローの再利用を開始するには、「[ワークフローを再利用する](/ja/actions/how-tos/reuse-automations/reuse-workflows)」を参照してください。\n\nワークフローの再利用の複雑さの詳細については、「[ワークフロー構成の再利用](/ja/actions/reference/workflows-and-actions/reusing-workflow-configurations)」を参照してください。"}