SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

GitHub Actionsをはじめよう

【GitHub Actions 徹底解説】GitHub Actionsの構文をよりくわしく学ぶ

GitHub Actionsをはじめよう 第2回

ワークフロー構文

 ここからは、自動化する処理を具体的に記述する際によく利用される構文について学んでいきます。

コンテキスト

 第1回でも触れたコンテキストについて説明します。

 コンテキストは、ワークフローの実行、変数、ランナーの環境、ジョブ、ステップに関する情報にアクセスする方法です。

出典:GitHub Docs「ワークフロー実行に関するコンテキスト情報へのアクセス」

 GitHub Actionsが保持している情報をコンテキストを通じて参照できます。例えば、このワークフローを実行したイベント、実行しているジョブのステータス、ワークフローへの入力などの情報を参照できます。

 コンテキストへは以下の構文でアクセスできます。

${{ <context> }}

 次のサンプルコードでは、コンテキストを利用して情報を表示します。イベントはworkflow_dispatchを利用します。

name: Context demo
on:
  workflow_dispatch:
    inputs:
      user_name:
        description: 'User Name'
        required: true
        type: string
jobs:
  print-info:
    runs-on: ubuntu-latest
    steps:
      - run: echo "Input Value - ${{ inputs.user_name }}"
      - run: echo "Event - ${{ github.event_name }}"
      - run: echo "Job Status - ${{ job.status }}"

 上記サンプルコードではUser NameをUI上で入力できるようにしました。ワークフローの処理では、入力したUser Name、ワークフローを実行したイベントの名前、ジョブの現在の状態を表示します。それぞれコンテキストを参照しています。

 上記サンプルコードのように「情報を表示したい」という場合にも利用できますが、次に説明するように「式と組み合わせて処理を分岐させる」という形での利用も多いです。他にもさまざまなコンテキストがあります。詳しくは公式ドキュメントを参照してください。

式・関数

 ワークフロー内で、各種演算子、組み込みの関数などを利用できます。ifキーと組み合わせることでステップを実行すべきかどうかを判断することも可能です。

 以下のサンプルコードでは、自動テストを実行し、テストの結果によってSlackへの通知を実行するかどうかが変わるワークフローです(自動テスト実行処理や通知処理の詳細は割愛します)。

name: Expression demo
on: 
  push:
jobs:
  run-unit-test:
    runs-on: ubuntu-latest
    steps:
      - name: Run unit test
        id: run-unit-test
        run: echo "run unit test"
      - name: Notify Slack in case of failure
        id: notify-slack
        if: ${{ failure() }}
        run: echo "notify slack"

 1つ目のステップでは自動テスト実行処理、2つ目のステップではSlackへの通知処置を行っています。

 GitHub Actionsの組み込み関数には、「ステータスチェック関数」と呼ばれる関数が用意されています。その一つであるfailure()は、前のステップが失敗した場合にtrueを返します。

 ifキーを使うと、指定された条件が満たされない場合、ステップを実行しないようにできます。よって上記サンプルコードでは自動テスト実行のステップの結果が「失敗」の場合のみ[1]、Slack通知のステップが実行されます。

 このワークフローをこのまま実行すると、自動テスト実行のステップは(ログ表示のみのため)失敗せず、Slack通知のステップも実行されません。失敗の場合を試したい場合は、以下のように自動テスト実行のステップを書き換えて強制的に失敗させてみましょう。

steps:
  - name: Run unit test
    id: run-unit-test
    run: |
      echo "run unit test"
      exit 1

 他にもさまざまな演算子、組み込みの関数があります。最初のうちはワークフローを作成する際には、公式ドキュメントを一度眺めてみて、利用できそうなものがあるかどうか見てみると良いでしょう。

 この項目のサンプルコードで初めて登場している、各stepのnameについて簡単に説明します。各ステップにnameを指定して名前をつけることができます。各ステップでどのような処理がされるのかがわかるような名前をつけると良いでしょう。nameに指定した名前はワークフローの実行結果にも表示されます。

  • [1]ステータスとして取りうる値は、成功や失敗の他にもキャンセルなどがあります。例えばワークフローがキャンセルされた場合、failure()関数の結果はfalseとなります。

次のページ
ワークフローテンプレート

この記事は参考になりましたか?

GitHub Actionsをはじめよう連載記事一覧

もっと読む

この記事の著者

藤澤 千尋(フジサワ チヒロ)

 ソフトウェアエンジニアとして約10年働いており、最近は主にフロントエンド開発を担当しています。最近、筋トレを始めました。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/21254 2025/04/18 11:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー