Traffine I/O

日本語

2023-03-07

GitHub Actionsにおけるカスタムアクション

はじめに

GitHub Actionsの強力な機能の1つは、複数のプロジェクトで共有および再利用できるカスタムアクションを作成できることです。これにより、コラボレーションが促進され、生産性が向上します。

この記事では、ビルドできるカスタムアクションの種類と、独自のカスタムアクションの作成の手順について説明します。

カスタムアクションの種類

この章では、GitHub Actionsでビルドできる3つの主要なカスタムアクションの種類、すなわちDockerコンテナアクション、JavaScriptアクション、Composite Run Stepsアクションについて詳しく説明します。

https://docs.github.com/en/actions/creating-actions/about-custom-actions

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に限定されている
  • 良く整理されていない場合、複雑になる可能性がある

ユースケース

  • ワークフローファイルを簡素化するために複数の関連するステップをまとめる
  • 複数のプロジェクトで使用する再利用可能なワークフローの一部を作成する

カスタムアクションの作成

この章では、最初のカスタムアクションの作成手順と、ローカルでのテスト方法について説明します。

アクションの開発

  1. カスタムアクションの種類(Dockerコンテナ、JavaScript、Composite Run Steps)のうち、1つを選択し、アクションに必要なファイルを作成します。
  • Dockerコンテナアクションの場合
    1. リポジトリのルートにDockerfileを作成
    2. 環境の設定、依存関係のインストール、およびアクションのエントリポイントを定義する必要があるDockerコマンドを記述

https://docs.github.com/en/actions/creating-actions/creating-a-docker-container-action

  • JavaScriptアクションの場合
    1. リポジトリのルートでnpm initまたはyarn initを使用して新しいNode.jsプロジェクトを初期化
    2. npm installまたはyarn addを使用して必要な依存関係をインストール
    3. srcディレクトリを作成し、アクションのJavaScriptまたはTypeScriptコードを記述

https://docs.github.com/en/actions/creating-actions/creating-a-javascript-action

  • Composite Run Stepsアクションの場合
    1. リポジトリのルートにsteps.ymlファイルを作成
    2. YAMLファイルのstepsセクションに、シェルコマンドや他のアクションのシーケンスを定義

https://docs.github.com/en/actions/creating-actions/creating-a-composite-action

  1. アクションの目的と要件に応じて、アクションの機能を実装します。必要に応じて入力パラメータを処理し、意味のあるエラーメッセージを提供します。

ローカルでのアクションのテスト

  1. サンプルのワークフローをリポジトリ内に作成して、アクションをテストします。 .github/workflowsディレクトリに新しいYAMLファイル(例:test-action.yml)を作成します。

  2. サンプルワークフローをカスタムアクションで構成します。

.github/workflows/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
  1. 変更をコミットしてリモートリポジトリにプッシュします。サンプルワークフローは、プッシュイベントで自動的に実行され、カスタムアクションの実行を観察できます。

参考

https://docs.github.com/en/actions/creating-actions/about-custom-actions
https://docs.github.com/en/actions/creating-actions/creating-a-docker-container-action
https://docs.github.com/en/actions/creating-actions/creating-a-javascript-action
https://docs.github.com/en/actions/creating-actions/creating-a-composite-action

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!