再利用可能なワークフローと Actions
再利用可能なワークフローとカスタム Actions を作成・活用してパイプラインをモジュール化し、リポジトリ間の一貫性を高めます。
「再利用可能なワークフローと Actions」はCoddyKit上の無料DevOps Bootcampレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDevOps Bootcamp学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 DevOps Bootcampコースには全4レッスンが含まれています。
ワークフローの再利用性入門
現代のソフトウェア開発では、効率と一貫性が重要です。プロジェクトが成長するにつれて、自動化のニーズも増えていきます。
GitHub Actions の再利用可能なワークフローとカスタムアクションを使うと、同じ処理を繰り返し記述せずに済み、CI/CD パイプラインの保守性と堅牢性を高められます。
ワークフローを再利用する理由
同じビルド、テスト、デプロイの手順を必要とするアプリケーションが複数あるとします。ワークフローのコードをコピーして貼り付ける方法では、次の問題が生じます。
- 重複:保守するコードが増えます。
- 不整合:すべてのワークフローに更新を反映し忘れやすくなります。
- 保守の負担:変更のたびに多くのファイルを更新する必要があります。
再利用によって、これらの問題を解決できます。
再利用可能なワークフローの定義
再利用可能なワークフローとは、ほかのワークフローから呼び出せる完全なワークフローです。リポジトリに保存され、テンプレートのように機能します。
ワークフローを再利用可能にするには、workflow_call イベントを使用します。これにより、このワークフローが push や pull_request などの通常のイベントによってトリガーされるのではなく、呼び出されることを GitHub Actions に伝えます。
再利用可能なワークフローの例
ビルドをシミュレートする簡単な再利用可能ワークフローを見てみましょう。これを .github/workflows/reusable-build.yml に保存します。
このワークフローでは、呼び出し元のワークフローが利用できる build_id という output を定義しています。
name: Reusable Build Component
on:
workflow_call:
outputs:
build_id:
description: "The ID of the build operation"
value: ${{ jobs.build.outputs.build_id }}
jobs:
build:
runs-on: ubuntu-latest
outputs:
build_id: ${{ steps.generate_id.outputs.id }}
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Generate build ID
id: generate_id
run: echo "id=$(date +%s)" >> "$GITHUB_OUTPUT"
- name: Simulate build
run: echo "Building project with ID ${{ steps.generate_id.outputs.id }}..."
再利用可能なワークフローの呼び出し
再利用可能なワークフローを使うには、別のワークフロー(「呼び出し元」)で、GitHub アクションを使う場合と同じように uses キーワードを使用します。
リポジトリ内にある再利用可能ワークフローファイルのパスを指定します。また、別のリポジトリや特定のバージョンを指定することもできます。
呼び出し元ワークフローの例
.github/workflows/main-app-ci.yml として保存したこのワークフローは、reusable-build.yml ワークフローを呼び出します。
呼び出したワークフローの build_id 出力に、jobs.call-build.outputs.build_id を使ってアクセスしている点に注目してください。
name: Main App CI
on: [push]
jobs:
call-build:
uses: ./.github/workflows/reusable-build.yml
outputs:
build_id: ${{ jobs.call-build.outputs.build_id }}
deploy:
needs: call-build
runs-on: ubuntu-latest
steps:
- name: Deploy app
run: echo "Deploying app built with ID ${{ needs.call-build.outputs.build_id }}"
再利用可能なワークフローに入力を渡す
再利用可能なワークフローは単なる静的なテンプレートではありません。入力を受け取れるため、非常に柔軟に利用できます。
再利用可能なワークフローの on: workflow_call: inputs: セクションで、想定する入力の型、必須かどうか、説明を指定します。呼び出し元のワークフローでは、with: キーワードを使ってこれらの入力を渡します。
入力を受け取る再利用可能なワークフロー
target_env 入力を受け取るように更新した reusable-build.yml を見てみましょう。これにより、同じビルドロジックを異なる環境向けにカスタマイズできます。
name: Reusable Build Component with Input
on:
workflow_call:
inputs:
target_env:
required: true
type: string
description: "The target environment for the build"
outputs:
build_id:
description: "The ID of the build operation"
value: ${{ jobs.build.outputs.build_id }}
jobs:
build:
runs-on: ubuntu-latest
outputs:
build_id: ${{ steps.generate_id.outputs.id }}
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Generate build ID
id: generate_id
run: echo "id=$(date +%s)" >> "$GITHUB_OUTPUT"
- name: Simulate build for ${{ inputs.target_env }}
run: echo "Building project for ${{ inputs.target_env }} with ID ${{ steps.generate_id.outputs.id }}..."
入力を指定して呼び出す例
これで、メインの CI ワークフローから再利用可能なビルドコンポーネントを、「staging」と「production」それぞれについて1回ずつ呼び出し、異なる target_env の値を渡せます。
name: Main App CI with Input
on: [push]
jobs:
call-build-staging:
uses: ./.github/workflows/reusable-build-with-input.yml
with:
target_env: 'staging'
outputs:
build_id: ${{ jobs.call-build-staging.outputs.build_id }}
call-build-prod:
uses: ./.github/workflows/reusable-build-with-input.yml
with:
target_env: 'production'
outputs:
build_id: ${{ jobs.call-build-prod.outputs.build_id }}
再利用可能なワークフローとカスタムアクションの比較
どちらも再利用性を高めるものですが、目的は異なります。
- 再利用可能なワークフロー: 一連のジョブをオーケストレーションします。ビルド、テスト、デプロイなど、ワークフロー全体の構成を定義します。
- カスタムアクション: ジョブ内で特定の単一タスク(Node.js のセットアップやパッケージの公開など)を実行します。ジョブのステップ内で使う構成要素です。
ワークフローをレシピ、アクションを個々の材料や手順だと考えると分かりやすいでしょう。
理解度チェック
GitHub Actions で再利用可能なワークフローを使用する主なメリットは、次のうちどれでしょうか。
振り返り: 再利用可能なワークフローとアクション
再利用可能なワークフローによって CI/CD パイプラインをモジュール化する方法を学びました。
workflow_callを使って定義します。inputsを受け取り、outputsを提供できます。- 呼び出し元のワークフローでは
usesキーワードを使います。 - ジョブ内で単一タスクを担う構成要素であるカスタムアクションとは異なります。
再利用性を取り入れることで、プロジェクト全体の自動化をより効率的で一貫性があり、保守しやすいものにできます。
よくある質問
「再利用可能なワークフローと Actions」レッスンは無料ですか?
はい。「再利用可能なワークフローと Actions」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、DevOps Bootcampコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 DevOps Bootcampコースには全4レッスンが含まれています。
「再利用可能なワークフローと Actions」で何を学びますか?
再利用可能なワークフローとカスタム Actions を作成・活用してパイプラインをモジュール化し、リポジトリ間の一貫性を高めます。 ブラウザで直接実行するハンズオンコードでDevOps Bootcampを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
DevOps Bootcampを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのDevOps Bootcampは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「再利用可能なワークフローと Actions」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このDevOps Bootcampレッスンでコードを書いて実行できますか?
はい。すべてのDevOps Bootcampレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 複数環境向けのマトリックスビルド
- 依存関係のキャッシュによる高速化
- 再利用可能なワークフローと Actions
- 条件付き実行とジョブの依存関係