1. 導入:なぜ今、Composite Actionsなのか
CI/CDパイプラインを運用していると、「似たようなステップを複数のワークフローにコピペしている」という状況に陥りがちです。例えば、言語のセットアップ、認証、テスト実行といった一連の処理が数十のリポジトリに散らばっていると、修正が必要になった際に全リポジトリを改修する羽目になります。Composite Actionsを活用すれば、これらの処理を一つのアクションとしてパッケージ化し、単一リポジトリで管理できます。これにより、CI/CDのDRY原則を徹底し、メンテナンスコストを劇的に下げることが可能です。
2. 基礎知識:Composite Actionsとは
Composite Actionsとは、複数の実行ステップをまとめて1つの「カスタムアクション」として定義する手法です。GitHub Actionsのワークフローファイル(YAML)で繰り返し使うステップを、独立したリポジトリ(または同一リポジトリのディレクトリ)に切り出します。これにより、呼び出し側は数行のコードを記述するだけで、複雑なビルド処理を実行できるようになります。
3. 実装・解決策:共通処理を切り出す手順
Composite Actionsを作成するには、アクションを定義するディレクトリ内に「action.yml」というファイルを作成します。このファイルで、入力値の定義と実行するステップを記述します。
構成のポイントは以下の通りです。
・action.yml: アクションのメタデータとステップを定義。
・inputs: 外部から渡すパラメータを定義。
・runs: 「composite」を指定し、具体的なシェルスクリプトやアクションを羅列。
4. サンプルプログラム:共通ビルドアクションの作成例
ここでは、Node.jsのセットアップと依存関係のインストールを共通化したアクションの例を紹介します。
ファイルパス: .github/actions/setup-node-app/action.yml
name: ‘Setup Node.js App’
description: ‘Node.jsのセットアップとパッケージのインストールを行う共通アクション’
inputs:
node-version:
description: ‘使用するNode.jsのバージョン’
required: true
default: ’18’
runs:
using: ‘composite’
steps:
- name: Setup Node
uses: actions/setup-node@v3
with:
node-version: ${{ inputs.node-version }}
- name: Install dependencies
shell: bash
run: npm install
- name: Print success message
shell: bash
run: echo “環境構築が完了しました”
呼び出し側のワークフローでの使用例:
uses: ./.github/actions/setup-node-app
with:
node-version: ’20’
5. 応用・注意点:現場で陥りやすい罠
Composite Actionsを利用する際は、以下の点に注意してください。
・パスの解決: 同じリポジトリ内のアクションを呼び出す場合、相対パス(./.github/actions/…)を指定しますが、別リポジトリの場合は「組織名/リポジトリ名@タグ」形式となります。
・環境変数の引き継ぎ: ステップ間での環境変数の引き継ぎは、ワークフロー実行環境に依存するため、複雑な変数の受け渡しが必要な場合は「GITHUB_ENV」を活用して変数をエクスポートしてください。
・バージョニング: 公開リポジトリとして運用する場合、変更を加える際は必ずタグ付け(v1.0.0など)を行ってください。タグを指定しないと、最新のコミットが意図せず反映され、本番環境のビルドが壊れるリスクがあります。
CI/CDの標準化は、チームの生産性に直結します。まずは頻繁に重複している「セットアップ処理」から、Composite Actionsへの移行を検討してみてください。

コメント