カスタム GitHub Actions の開発
JavaScript または Docker を使用して再利用可能な独自のカスタム Actions を作成し、GitHub Actions の機能を拡張する方法を学びます。
「カスタム GitHub Actions の開発」はCoddyKit上の無料CI/CD with GitHub Actions & DevOps Pipelinesレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCI/CD with GitHub Actions & DevOps Pipelines学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 CI/CD with GitHub Actions & DevOps Pipelinesコースには全4レッスンが含まれています。
GitHub Actionsを拡張する
GitHub Actionsが標準で提供していない特定のタスクを、ワークフローで実行する必要がある場合はどうすればよいでしょうか。または、複雑なロジックを再利用したい場合はどうでしょうか。
カスタムアクションを使えば、ワークフローで再利用できる独自のツールを構築できます。必要に合わせて作成した、特定の処理を実行する小さなプログラムのようなものです。
カスタマイズの力
カスタムアクションには、CI/CDパイプラインに次のようなメリットがあります。
- 再利用性: 一度作成すれば、複数のワークフローやリポジトリで使用できます。
- 標準化: 組織全体で一貫したプロセスを確保できます。
- カプセル化: 複雑なロジックをシンプルなインターフェースの背後に隠せます。
- 統合: 特定の社内ツールやAPIと連携できます。
JavaScriptとDockerのどちらを使うか
GitHub Actionsでは、カスタムアクションを作成する方法として、主に次の2つをサポートしています。
- JavaScript Actions: JavaScript(またはTypeScript)で記述し、runnerマシン上で直接実行します。単純なタスクに適しており、高速で簡単です。
- Dockerコンテナアクション: Dockerイメージ内に環境とコードをカプセル化します。特定の依存関係や言語が必要なアクションに適しています。
アクションを定義する
すべてのカスタムアクションには、ルートディレクトリにaction.ymlファイルが必要です。このYAMLファイルはマニフェストのようなもので、アクションについてGitHub Actionsに次の情報を伝えます。
nameとdescription: アクションの処理内容inputs: アクションが受け取るデータoutputs: アクションが生成するデータruns: アクションの実行方法(JavaScriptファイルやDockerイメージなど)
シンプルなJSアクションの例
基本的なJavaScriptアクションを見てみましょう。action.ymlファイルとindex.jsファイルが必要です。action.ymlでは、アクションのメタデータと実行環境を定義します。
# action.yml
name: 'Hello World Action'
description: 'Greets a person using a custom message'
inputs:
who-to-greet:
description: 'Who to greet'
required: true
default: 'World'
outputs:
greeting-message:
description: 'The greeting message generated'
runs:
using: 'node16'
main: 'index.js'JavaScriptを記述する
index.jsファイルには、実際のロジックを記述します。入力を取得して出力を設定するために、@actions/coreツールキットを使用します。
完全なワークフローの外でも、入力と出力が概念的にどのように機能するかを確認するために、このシンプルなJavaScriptスニペットを実行してみてください。
// index.js (simplified for demonstration)
const core = require('@actions/core');
try {
const name = core.getInput('who-to-greet');
const message = `Hello, ${name}!`;
console.log(message);
core.setOutput('greeting-message', message);
} catch (error) {
core.setFailed(error.message);
}
// A standalone runnable example to demonstrate core logic
function runSimpleGreeting(inputName) {
const name = inputName || 'World';
const message = `Hello from runnable JS, ${name}!`;
return message;
}
console.log(runSimpleGreeting('CoddyKit'));
console.log(runSimpleGreeting());Dockerアクションの基本
より複雑な環境では、Dockerコンテナアクションが力を発揮します。必要な依存関係をすべてまとめたコンテナイメージを定義するDockerfileが含まれます。
action.ymlではこのイメージを参照し、GitHub Actionsにビルドして実行するよう指示します。
# action.yml for Docker action
name: 'Docker Hello World'
description: 'Greets a name from within a Docker container'
inputs:
who-to-greet:
description: 'Who to greet'
required: true
default: 'Docker'
outputs:
greeting-message:
description: 'The greeting message from Docker'
runs:
using: 'docker'
image: 'Dockerfile'アクションの実行環境
Dockerfileでは、ベースイメージ、依存関係のインストール、アクションのエントリポイントを指定します。これにより、アクションを一貫性のある制御された環境で実行できます。
# Dockerfile
FROM alpine:3.16
LABEL "com.github.actions.name"="Docker Hello World"
LABEL "com.github.actions.description"="Greets a name from within a Docker container"
LABEL "com.github.actions.icon"="globe"
LABEL "com.github.actions.color"="blue"
# Copy your script into the container
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]Dockerアクションのスクリプト作成
Dockerコンテナ内では、エントリポイントスクリプト(entrypoint.shなど)が、環境変数(INPUT_がプレフィックス)として入力を受け取ります。$GITHUB_OUTPUT環境変数で指定されたファイルに書き込むことで、出力を設定します。
#!/bin/sh -l
# entrypoint.sh
echo "Hello from Docker, $INPUT_WHO_TO_GREET!"
GREETING="Hello from Docker, $INPUT_WHO_TO_GREET!"
echo "greeting-message=$GREETING" >> "$GITHUB_OUTPUT"アクションのベストプラクティス
カスタムアクションを開発する際は、堅牢で保守しやすいツールにするため、次の点を検討してください。
- バージョニング: 安定性のため、セマンティックバージョニング(
v1やv2など)を使用します。 - テスト: ローカルとワークフローの両方で、アクションを厳密にテストします。
- エラーハンドリング: 分かりやすいエラーメッセージと、適切な失敗処理を実装します。
- セキュリティ: 入力をサニタイズし、機密データを公開しないようにします。
- ドキュメント: READMEに明確な使用方法を記載します。
アクションの種類の確認
標準のGitHub Actions runnerに事前インストールされていない特定のPythonライブラリを必要とするカスタムGitHub Actionを作成する必要があります。この場合、一般的に最も適しているアクションの種類はどれですか。
カスタムアクションのまとめ
独自のカスタムアクションを作成してGitHub Actionsを拡張する方法について学びました。主な2種類であるJavaScriptアクションとDockerコンテナアクション、およびaction.ymlファイルの重要な役割について説明しました。また、それぞれの種類で入力、出力、中心となるロジックを定義する方法と、開発のベストプラクティスについても学びました。
カスタムアクションは、CI/CDパイプラインの再利用性と標準化に役立つ強力な仕組みです。
AI チューターと学ぶ CI/CD with GitHub Actions & DevOps Pipelines — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 12
- レッスン
- 48
よくある質問
「カスタム GitHub Actions の開発」レッスンは無料ですか?
はい。「カスタム GitHub Actions の開発」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、CI/CD with GitHub Actions & DevOps Pipelinesコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 CI/CD with GitHub Actions & DevOps Pipelinesコースには全4レッスンが含まれています。
「カスタム GitHub Actions の開発」で何を学びますか?
JavaScript または Docker を使用して再利用可能な独自のカスタム Actions を作成し、GitHub Actions の機能を拡張する方法を学びます。 ブラウザで直接実行するハンズオンコードでCI/CD with GitHub Actions & DevOps Pipelinesを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
CI/CD with GitHub Actions & DevOps Pipelinesを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのCI/CD with GitHub Actions & DevOps Pipelinesは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「カスタム GitHub Actions の開発」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このCI/CD with GitHub Actions & DevOps Pipelinesレッスンでコードを書いて実行できますか?
はい。すべてのCI/CD with GitHub Actions & DevOps Pipelinesレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- カスタム GitHub Actions の開発
- オンプレミス向けセルフホステッドランナー
- エンタープライズシステムとの統合
- Composite ActionsとMarketplaceへの公開