CI/CD with GitHub Actions & DevOps Pipelines · レッスン

カスタム GitHub Actions の開発

JavaScript または Docker を使用して再利用可能な独自のカスタム Actions を作成し、GitHub Actions の機能を拡張する方法を学びます。

レッスン 1/412 ステップ

「カスタム 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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. カスタム GitHub Actions の開発
  2. オンプレミス向けセルフホステッドランナー
  3. エンタープライズシステムとの統合
  4. Composite ActionsとMarketplaceへの公開
← CI/CD with GitHub Actions & DevOps Pipelinesに戻る