[小ネタ]GitHub Actionsのワークフローコマンドを使ってログを分かりやすく装飾してみた
リテールアプリ共創部@大阪の岩田です。
みんな大好きGitHub Actionsですが私が関わっている案件だとCI/CD以外にもちょっとしたスクリプトを実行するために利用することがあります。例えばですが、ダウンタイムを伴うデプロイの前にシステムをメンテナンスモードに切り替えるスクリプトを実行するといったケースで便利に利用させてもらってます。各担当者のローカル環境からスクリプトを実行する運用と比べて、必要なコマンドがインストールされているのか?バージョン差異によって挙動が変わらないか?といった心配が少なくなるのは大きなメリットだと感じています。
このブログではシェルスクリプト等から出力したログを分かりやすくするために装飾する方法について紹介します。
ワークフローコマンド
GitHub Actionsではランナーマシンとやりとりを行うためのワークフローコマンドというものが利用できます。このワークフローコマンドを利用するとアクション同士で値を受け渡したり、ログを装飾したりといったことが可能になります。
ワークフローコマンドの多くはecho ::<ワークフローコマンド> <ワークフローコマンドのパラメータ名>=<パラメータの値>::
のように::
で囲まれた文字列を標準出力/標準エラー出力に出力することで呼び出せます。
例えばデバッグログを出力したい場合はecho "::debug::デバッグログ"
を実行することでデバッグログが出力されます。
シェルスクリプトのログを装飾するという目的を考えると、以下のワークフローコマンドが便利に使えそうです。
コマンド | 用途 |
---|---|
debug | デバッグメッセージの出力 |
notice | 通知メッセージの出力 |
warning | 警告メッセージの出力 |
error | エラーメッセージの出力 |
group | 以後のログをグループ化する |
endgroup | ログのグループ化を終了する |
各ワークフローコマンドの詳細については公式ドキュメントを参照してください
やってみる
実際にワークフローコマンドを使ってログを装飾してみます。まず以下のシェルスクリプトを用意しました。
#!/bin/bash
echo '::group::CLIツールから出力されたログ'
echo '::notice title=入力値のチェック::入力値をチェックします'
echo '::warning::これはwarningのログです'
echo '::error::これはerrorログです'
echo '::error title=CLIツールが異常終了しました::エラーが発生したので処理を中断します'
echo '::endgroup::'
echo '::notice title=入力値のチェック::入力値をチェックします'
とecho '::error title=CLIツールが異常終了しました::エラーが発生したので処理を中断します'
の部分についてはワークフローコマンドのパラメータの1つであるtitle
も設定しています。
以下のワークフローで上記シェルスクリプトを実行します。
on:
workflow_dispatch
jobs:
test-logging:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Run Some CLI Tool
run: |
sh test.sh
ワークフローの実行履歴を確認すると以下の通りログが出力されていました
ログをパっと見た時にエラーや警告が発生しているのが分かりやすいですね。パラメータでtitleを指定した場合は指定したタイトルが出力されていることも分かります。
さらにジョブの実行履歴から詳細を確認すると以下のようなログが出力されていました
こちらもWarningやErrorが色付きで表示されていて分かりやすくなっています。また、出力したログが全てCLIツールから出力されたログ
というグループにまとまっているので、UIから簡単にログを開いたり閉じたりできるのもポイントです。
まとめ
GitHub Actionsのワークフローコマンドについて簡単に紹介しました。
こういったちょっとしたテクニックを活用するとログが見やすくなって、GitHub Actionsがより便利に使えそうです。よければ参考にしてみてください。