【ツール活用|初心者向け】GitHub Actionsでステップ間の「バケツリレー」をマスターしよう!Step Outputs活用術

導入:なぜStep Outputsが必要なのか?

GitHub ActionsでCI/CDパイプラインを構築していると、「前のステップで生成した値を、後のステップで使いたい」という場面に必ず遭遇します。例えば、「ビルドしたDockerイメージのタグ名を生成し、そのタグを使ってデプロイを行う」といったケースです。
個別のステップは独立して動作するため、何も工夫しないと値は消えてしまいます。ここで登場するのが「Step Outputs」です。これを使うことで、値をパイプラインの中でバケツリレーのように受け渡し、柔軟でスマートな自動化フローを実現できます。

基礎知識:Step Outputsの仕組み

GitHub ActionsにおけるStep Outputsとは、あるステップで生成された情報を、後続のステップから `steps..outputs.` という形式で参照できる機能のことです。
重要なポイントは、値を渡すために「環境変数ファイル(GITHUB_OUTPUT)」を利用するという点です。GitHub Actionsのランナーでは、特定のファイルに `キー=値` を書き込むことで、その値をシステムが認識し、後続のタスクで変数として扱えるようになります。

実装:Step Outputsの書き方と読み方

Step Outputsを実装するには、以下の2つのルールを守る必要があります。
1. 出力側:`echo “キー=値” >> $GITHUB_OUTPUT` を実行する。
2. 入力側:`steps..outputs.` を参照する。

ここで、idの指定を忘れないようにしましょう。ステップに `id: 任意の名前` を付与することで、後続のステップからその名前を使って値を呼び出すことができます。

サンプルプログラム:動的なタグ名の受け渡し

以下のコードは、ランダムな文字列(今回は現在時刻)を生成し、それを後続のステップに渡して表示するサンプルです。

name: Step Outputs Sample
on: push

jobs:
build:
runs-on: ubuntu-latest
steps:
# 1. 値を生成して出力するステップ

  • name: Generate Dynamic Value

id: generator
run: |
# 現在の時刻をタグ名として生成
TAG_NAME=”v-$(date +’%Y%m%d%H%M%S’)”
echo “生成したタグ: $TAG_NAME”
# GITHUB_OUTPUTファイルに書き込むことで、他のステップから参照可能になる
echo “my_tag=$TAG_NAME” >> $GITHUB_OUTPUT

# 2. 前のステップの値を参照するステップ

  • name: Use the Dynamic Value

run: |
# steps..outputs. の形式で呼び出す
echo “前のステップから受け取ったタグ名は: ${{ steps.generator.outputs.my_tag }} です”

応用・注意点:現場でハマりやすいポイント

1. IDの重複と命名規則
ジョブ内でステップの `id` はユニーク(一意)である必要があります。また、IDにハイフンが含まれる場合は、呼び出し時もそのまま `steps.my-step-id.outputs.key` と記述すればOKです。

2. マルチライン出力の罠
改行を含む値を渡したい場合は、通常の `echo` ではうまくいきません。その際は、`EOF` を使った区切り文字指定が必要です。
例:

echo “my_key<> $GITHUB_OUTPUT
echo “一行目” >> $GITHUB_OUTPUT
echo “二行目” >> $GITHUB_OUTPUT
echo “EOF” >> $GITHUB_OUTPUT

3. ジョブをまたぐ場合は「Job Outputs」
今回紹介したのは同一ジョブ内の「Step Outputs」ですが、別のジョブに値を渡したい場合は「Job Outputs」という別の機能(`outputs:` セクションの定義)が必要です。まずは同じジョブ内でバケツリレーをする感覚を掴み、徐々にパイプライン全体の連携を広げていきましょう。

この機能を使いこなせば、パイプラインの柔軟性が劇的に向上します。ぜひ今のワークフローに取り入れてみてください!

コメント

タイトルとURLをコピーしました