はじめに
GitHub Actionsの強力な機能の1つは、複数のプロジェクトで共有および再利用できるカスタムアクションを作成できることです。これにより、コラボレーションが促進され、生産性が向上します。
この記事では、ビルドできるカスタムアクションの種類と、独自のカスタムアクションの作成の手順について説明します。
カスタムアクションの種類
この章では、GitHub Actionsでビルドできる3つの主要なカスタムアクションの種類、すなわちDockerコンテナアクション、JavaScriptアクション、Composite Run Stepsアクションについて詳しく説明します。
Dockerコンテナアクション
Dockerコンテナアクションは、Dockerイメージに基づいており、GitHub Actionsランナーでネイティブにサポートされていない言語、ツール、環境を組み込むために優れた選択肢となります。これらのアクションは別のコンテナで実行されるため、ホスト環境からの分離が提供されます。
メリット
- 互換性のあるDockerイメージを使用して、任意の言語またはツールをサポート
- 依存関係の競合のリスクを減らす環境分離を提供
デメリット
- 新しいコンテナを起動するオーバーヘッドにより、実行が遅くなることがある
- Dockerfileを作成およびメンテナンスするためにDockerの知識が必要
ユースケース
- GitHub Actionsでサポートされていない特定の言語バージョンまたはツールを使用してアクションを実行する
- 依存関係がホスト環境と競合しないようにする
JavaScriptアクション
JavaScriptアクションは、JavaScriptまたはTypeScriptで書かれ、直接GitHub Actionsランナーで実行されます。 Dockerコンテナアクションと比較してパフォーマンスが向上し、別のコンテナを起動する必要がないため、実行が速くなります。
メリット
- 直接GitHub Actionsランナーで実行されるため、実行が速くなる
- Dockerfileが必要ないため、メンテナンスが容易
デメリット
- JavaScriptまたはTypeScriptの言語に限定されている
- 環境分離がないため、依存関係の競合が発生する可能性がある
ユースケース
- 依存関係が少ないシンプルなアクションを作成する
- 実行が速く行われる必要があるアクションを作成する
Composite Run Stepsアクション
Composite Run Stepsアクションは、複数のステップを1つの再利用可能なアクションに組み合わせることができます。シェルコマンドや他のアクションの混在が可能で、複雑なロジックを持つ再利用可能なワークフローの作成に適しています。
メリット
- 複数のステップとアクションを1つの単位にまとめることができる
- 様々なシェルコマンドや他のGitHub Actionsをサポート
デメリット
- シェルコマンドと既存のGitHub Actionsに限定されている
- 良く整理されていない場合、複雑になる可能性がある
ユースケース
- ワークフローファイルを簡素化するために複数の関連するステップをまとめる
- 複数のプロジェクトで使用する再利用可能なワークフローの一部を作成する
カスタムアクションの作成
この章では、最初のカスタムアクションの作成手順と、ローカルでのテスト方法について説明します。
アクションの開発
- カスタムアクションの種類(Dockerコンテナ、JavaScript、Composite Run Steps)のうち、1つを選択し、アクションに必要なファイルを作成します。
- Dockerコンテナアクションの場合
- リポジトリのルートにDockerfileを作成
- 環境の設定、依存関係のインストール、およびアクションのエントリポイントを定義する必要があるDockerコマンドを記述
- JavaScriptアクションの場合
- リポジトリのルートで
npm init
またはyarn init
を使用して新しいNode.jsプロジェクトを初期化 npm install
またはyarn add
を使用して必要な依存関係をインストールsrc
ディレクトリを作成し、アクションのJavaScriptまたはTypeScriptコードを記述
- リポジトリのルートで
- Composite Run Stepsアクションの場合
- リポジトリのルートに
steps.yml
ファイルを作成 - YAMLファイルの
steps
セクションに、シェルコマンドや他のアクションのシーケンスを定義
- リポジトリのルートに
- アクションの目的と要件に応じて、アクションの機能を実装します。必要に応じて入力パラメータを処理し、意味のあるエラーメッセージを提供します。
ローカルでのアクションのテスト
-
サンプルのワークフローをリポジトリ内に作成して、アクションをテストします。
.github/workflows
ディレクトリに新しいYAMLファイル(例:test-action.yml
)を作成します。 -
サンプルワークフローをカスタムアクションで構成します。
name: Test My Custom Action
on:
push:
jobs:
test-action:
runs-on: ubuntu-latest
steps:
- name: Check out repository
uses: actions/checkout@v2
- name: Run My Custom Action
uses: ./ # Replace with your action's path
with:
input-param: "Example value" # Replace with your action's input parameters
- 変更をコミットしてリモートリポジトリにプッシュします。サンプルワークフローは、プッシュイベントで自動的に実行され、カスタムアクションの実行を観察できます。
参考