注: GitHub ホステッド ランナーは、現在 GitHub Enterprise Server でサポートされていません。 GitHub public roadmap で、今後の計画的なサポートの詳細を確認できます。
カスタ� アクションについて
GitHubの API やパブリックに利用可能なサードパーティAPIとのインテグレーションなど、好きな方法でリポジトリを操作するカスタ� コードを書いて、アクションを作成することができます。 たとえば、アクションで npm モジュールを公開したり、緊急の問題が発生したときに SMS アラートを送信したり、実稼働可能なコードをデプロイしたりできます。
アクションはマシン上で直接実行することも、Dockerコンテナで実行することもできます。 アクションの入力、出力、環境変数を定義できます。
アクションの種類
Docker コンテナーと JavaScript のアクション、および複合アクションを構築できます。 アクションには、アクションの入力、出力、およびメインのエントリポイントを定義するメタデータファイルが必要です。 メタデータ ファイル名は、action.yml
または action.yaml
である必要があります。 詳細については、「GitHub Actions のメタデータ構文」を参照してく� さい。
種類 | オペレーティング システ� |
---|---|
Docker コンテナー | Linux |
JavaScript | Linux、MacOS、Windows |
複合アクション | Linux、MacOS、Windows |
Docker コンテナーのアクション
Dockerコンテナは、GitHub Actionsコードで環境をパッケージ化します。 アクションの利用者がツールや依存関係を考慮しなくて済むため、作業単位の一貫性と信� �性が向上します。
Dockerコンテナを使用すると、OSのバージョン、依存関係、ツール、コードを限定することができます。 特定の環境設定で実行しなければならないアクションの� �合、オペレーティングシステ� とツールを選択できるので、Dockerは理想的な選択肢です。 コンテナのビルドおよび取得のレイテンシにより、DockerコンテナのアクションはJavaScriptアクションより遅くなります。
Docker コンテナアクションは、Linux オペレーティングシステ� のランナーでのみ実行できます。 セルフホストランナーでDockerコンテナアクションを実行するためには、Linuxオペレーティングシステ� を使い、Dockerがインストールされていなければなりません。 セルフホステッド ランナーの要件の詳細については、「セルフホステッド ランナーについて」を参照してく� さい。
JavaScript のアクション
JavaScriptアクションはランナーマシン上で直接実行でき、アクションのコードはそのコードを実行するのに使われる環境から分離できます。 JavaScriptのアクションを使うと、アクションコードが単純になり、実行も Dockerコンテナのアクションより速くなります。
JavaScriptのアクションがGitHubがホストするすべてのランナー(Ubuntu、Windows、macOS)と互換性があることを保証するためには、作成するパッケージ化されたJacScriptのコードは純粋なJavaScriptであり、他のバイナリに依存していてはなりません。 JavaScript のアクションはランナー上で直接実行され、ランナー イメージ内に既に存在するバイナリを利用します。
Node.jsプロジェクトの開発では、GitHub Actions Toolkitで提供するパッケージを使って、開発の速度を上げることができます。 詳細については、actions/toolkit リポジトリを参照してく� さい。
複合アクション
複合 アクションを使用すると、複数のワークフロー ステップを 1 つのアクション内で組み合わせることができます。 たとえば、この機能を使用して、複数の実行コマンドを 1 つのアクションにバンドルし、バンドルされたコマンドをそのアクションを使用する 1 つのステップとして実行するワークフローを作成できます。 例については、「複合アクションを作成する」を参照してく� さい。
アクションの� �所を選択する
他のユーザーが使うアクションを開発する� �合には、他のアプリケーションコードにバンドルするのではなく、アクションをそれ自体のリポジトリに保持しておくことをお勧めします。 こうすると、他のソフトウェアと同様にアクションのバージョニング、追跡、リリースが可能になるからです。
アクションのファイルは、リポジトリのどの� �所に保存してもかまいません。 アクション、ワークフロー、アプリケーション コードを 1 つのリポジトリで組み合わせる予定の� �合、アクションは .github
ディレクトリに保存することをお勧めします。 たとえば、.github/actions/action-a
や .github/actions/action-b
す。
GitHub Enterprise Server との互換性
アクションが GitHub Enterprise Server と互換性があることを確認するには、GitHub Enterprise Server API URL へのハードコードされた参照を使用しないようにする必要があります。 代わりに、環境変数を使用して GitHub Enterprise Server API を参照する必要があります。
- REST API の� �合は、
GITHUB_API_URL
環境変数を使用します。 - GraphQL の� �合は、
GITHUB_GRAPHQL_URL
環境変数を使用します。
詳細については、「デフォルトの環境変数」を参照してく� さい。
アクションにリリース管理を使用する
このセクションでは、リリース管理を使用してアクションへの更新を予測可能な方法で配布する方法について説明します。
リリース管理の良い方法
他のユーザが使用するアクションを開発している� �合は、リリース管理を使用して、更新の配布方法を管理することをお勧めします。 ユーザーは、アクションのパッチ バージョンについて、必� �の重要修正およびセキュリティ パッチが含まれ、既存のワークフローとの互換性も引き続き維持していることを期待できます。 変更が互換性に影響する� �合は、新しいメジャーバージョンのリリースを検討する必要があります。
このリリース管理アプローチでは、アクションが最新のコードを含む可能性が高く、結果として不安定になる可能性があるため、ユーザはアクションのデフォルトブランチを参照しないでく� さい。 代わりに、ユーザにアクションの使用時にメジャーバージョンを指定するように勧めて、問題が発生した� �合にのみ、さらに特定したバージョンを指定するようにすることができます。
特定のアクションのバージョンを使用するために、ユーザは GitHub Actions ワークフローを設定して、タグ、コミットの SHA、またはリリースの名前が付けられたブランチをターゲットにすることができます。
タグを使用したリリース管理
アクションのリリース管理にはタグを使用することをお勧めします。 この方法を使用すると、ユーザはメジャーバージョンとマイナーバージョンを簡単に区別できます。
- リリース タグ (
v1.0.2
など) を作成する前に、リリース ブランチ (release/v1
など) でリリースを作成して検証する。 - セマンティックバージョニングを使用してリリースを作成します。 詳細については、リリースの作成に関する記事を参照してく� さい。
- メジャー バージョン タグ (
v1
、v2
など) を移動して、現在のリリースの Git 参照をポイントする。 詳細については、「Git basics - tagging (Git の基本 - タグ付け)」を参照してく� さい。 - 既存のワークフローを中断させる変更に対して、新しいメジャー バージョン タグ (
v2
) を導入する。 たとえば、アクションの入力の変更は� �壊的変更です。 - メジャー バージョンには、最初のリリース時にそのステータスを示す
beta
タグ (v2-beta
など) を付けることができます。 その後、-beta
タグは準備ができたら削除できます。
次の例は、ユーザがメジャーリリースタグを参照する方法を示しています。
steps:
- uses: actions/javascript-action@v1
次の例は、ユーザが特定のパッチリリースタグを参照する方法を示しています。
steps:
- uses: actions/javascript-action@v1.0.1
ブランチを使用したリリース管理
リリース管理にブランチ名を使用する� �合、次の例では名前付きブランチを参照する方法を示しています。
steps:
- uses: actions/javascript-action@v1-beta
コミットの SHA を使用したリリース管理
各 Git コミットは、計算された SHA 値を受け取ります。これは一意で不変のものです。 アクションのユーザは、コミットの SHA 値に依存することを好む� �合があります。削除や移動ができるタグを指定するよりこの方法のほうが信� �できるためです。 た� し、これは、ユーザがアクションに対して行われた更新をそれ以上受け取らないことを意味しています。 短縮された値ではなく、コミットの完全な SHA 値を使う必要があります。
steps:
- uses: actions/javascript-action@172239021f7ba04fe7327647b213799853a9eb89
アクションのREADMEファイルを作成する
アクションの使用方法を伝えるため、README ファイルを作成することをお勧めします。 README.md
には、以下の情� �を含めることができます。
- アクションが実行する内容の説明
- 必� �の入力引数と出力引数
- オプションの入力引数と出力引数
- アクションが使用するシークレット
- アクションが使用する環境変数
- ワークフローにおけるアクションの使用例
GitHub Appsに対するGitHub Actionsの比較
GitHub Marketplaceは、ワークフローを改善するツールを提供します。 それぞれのツールの違いや利点を理解すれば、自分の作業に最も適したツールを選択できるようになります。 アプリの構築の詳細については、「アプリについて」を参照してく� さい。
GitHub ActionsとGitHub Appsの強み
GitHub Actions と GitHub Apps はどちらもビルドの自動化の方法とワークフローツールを提供しますが、これらはそれぞれ異なる強みを持っており、違ったやり方で役立ちます。
GitHub Appsは:
- 永続的に動作し、イベントに� 早く反応できます。
- 永続化されたデータが必要な� �合にうまく動作します。
- 時間のかからないAPIリクエストとうまく働きます。
- ユーザが提供するサーバーあるいはコンピューティングインフラストラクチャ上で動作します。
GitHub Actionsは:
- 継続的インテグレーションや継続的デプロイメントを実行する自動化を提供します。
- ランナーマシン上で直接、あるいはDockerコンテナ内で実行できます。
- リポジトリのクローンへのアクセスを含めて、コードにアクセスするツール、コードフォーマッタ、コマンドラインツールをデプロイしたり公開したりできます。
- コードのデプロイやアプリケーションの提供が必要ありません。
- シークレットの生成と利用のためのシンプルなインターフェースを持っており、アクションを利用する人の認証情� �を保存せずにサードパーティのサービスとアクションを連携できます。