Skip to main content

ワークフロー実行ログの使用

ワークフロー実行の各ジョブのログを表示、検索、およびダウンロードできます。

ワークフローの実行ページから、ワークフローの実行が進行中か完了しているかを確認できます。 パブリックなリポジトリの分も含むワークフローの実行情報を見るには、GitHubのアカウントにログインしなければなりません。 詳しくは、「GitHub 上のアクセス権限」を参照してください。

実行が完了している場合には、結果が成功か失敗か、キャンセルされたか、またはニュートラルかを確認できます。 実行が失敗した場合には、ビルドログを表示して検索し、失敗の原因を診断してワークフローを再実行することもできます。 また、課金対象のジョブ実行時間を表示したり、ログやビルドの成果物をダウンロードすることもできます。

GitHub Actionsは、Checks APIを使用してワークフローのステータス、結果、ログを出力します。 GitHub は、ワークフローの実行に対してそれぞれ新しいチェックスイートを作成します。 チェックスイートには、ワークフロー内の各ジョブに対するチェック実行が含まれ、各ジョブにはステップが含まれています。 GitHub Actionsは、ワークフローのステップとして実行されます。 Checks API について詳しくは、「チェック用 REST API エンドポイント」をご覧ください。

注: リポジトリには有効なワークフロー ファイルだけをコミットしてください。 .github/workflows に不正なワークフロー ファイルが含まれていると、GitHub Actions は新規のコミットのたびに失敗したワークフローの実行を生成します。

ログを表示してエラーを診断する

ワークフローの実行が失敗した場合には、どのステップが失敗の原因になったかを確認し、失敗したステップのビルドログを確かめてトラブルシューティングすることができます。 各ステップの実行にかかった時間もわかります。 ログファイルの特定の行のパーマリンクをコピーして、チームで共有することもできます。 これらのステップを実行するには、リポジトリへの読み取りアクセスが必要です。

ワークフローファイルで設定されたステップに加えて、GitHub はジョブの実行をセットアップして完了するために、各ジョブに 2 つの追加ステップを追加します。 これらのステップは、「Set up job」および「Complete job」として実行されるワークフローに記録されます。

GitHub ホステッド ランナー上のジョブの実行の場合、"ジョブの設定" ではランナー イメージの詳細が記録され、ランナー マシン上にあったプレインストールされたツールのリストへのリンクが含まれます。

  1. GitHub.com で、リポジトリのメイン ページへ移動します。

  2. リポジトリ名の下にある [アクション] をクリックします。

    "github/docs" リポジトリのタブのスクリーンショット。 [アクション] タブがオレンジ色の枠線で強調表示されています。

  3. 左サイドバーで、表示するワークフローをクリックします。

    [アクション] タブの左側のサイド バーのスクリーンショット。ワークフロー "CodeQL" が濃いオレンジ色の枠線で囲まれています。

  4. ワークフロー実行の一覧で実行の名前をクリックすると、ワークフロー実行の概要が表示されます。

  5. [ジョブ] の下、または視覚化グラフ内で、表示するジョブをクリックします。

  6. 失敗したステップは自動的に展開され、結果が表示されます。

  7. あるいはログの中の特定の行へのリンクを取得するには、そのステップの行番号をクリックします。 このリンクは、Webブラウザのアドレスバーからコピーできます。

    ジョブのログのスクリーンショット。 失敗したステップのログが展開され、行番号がオレンジ色の枠線で囲まれています。

ログを検索する

特定のステップのビルドログを検索できます。 ログを検索する際、展開されているステップのみが結果に含まれます。 これらのステップを実行するには、リポジトリへの読み取りアクセスが必要です。

  1. GitHub.com で、リポジトリのメイン ページへ移動します。

  2. リポジトリ名の下にある [アクション] をクリックします。

    "github/docs" リポジトリのタブのスクリーンショット。 [アクション] タブがオレンジ色の枠線で強調表示されています。

  3. 左サイドバーで、表示するワークフローをクリックします。

    [アクション] タブの左側のサイド バーのスクリーンショット。ワークフロー "CodeQL" が濃いオレンジ色の枠線で囲まれています。

  4. ワークフロー実行の一覧で実行の名前をクリックすると、ワークフロー実行の概要が表示されます。

  5. [ジョブ] の下、または視覚化グラフ内で、表示するジョブをクリックします。

  6. ログ出力の右上隅にある [ログの検索] 検索ボックスに、検索クエリを入力します。

ログのダウンロード

ワークフローの実行からは、ログファイルをダウンロードできます。 また、ワークフローの成果物もダウンロードできます。 詳しくは、「ワークフロー データを成果物として保存する」を参照してください。 これらのステップを実行するには、リポジトリへの読み取りアクセスが必要です。

  1. GitHub.com で、リポジトリのメイン ページへ移動します。

  2. リポジトリ名の下にある [アクション] をクリックします。

    "github/docs" リポジトリのタブのスクリーンショット。 [アクション] タブがオレンジ色の枠線で強調表示されています。

  3. 左サイドバーで、表示するワークフローをクリックします。

    [アクション] タブの左側のサイド バーのスクリーンショット。ワークフロー "CodeQL" が濃いオレンジ色の枠線で囲まれています。

  4. ワークフロー実行の一覧で実行の名前をクリックすると、ワークフロー実行の概要が表示されます。

  5. [ジョブ] の下、または視覚化グラフ内で、表示するジョブをクリックします。

  6. ログの右上隅にある ドロップダウン メニューを選び、 [ログ アーカイブのダウンロード] をクリックします。

    ジョブのログのスクリーンショット。 ヘッダーでは、歯車アイコンが濃いオレンジ色の枠線で囲まれています。

: 部分的に再実行されたワークフローのログ アーカイブをダウンロードする場合、そのアーカイブに含まれるのは、再実行されたジョブのみです。 ワークフローから実行されたジョブのログをすべて取得するには、他のジョブを前回実行しようとしたときのログ アーカイブをダウンロードする必要があります。

ログの削除

ワークフロー実行からログ ファイルを削除するには、GitHub Web インターフェイスまたはプログラムを使用します。 これらのステップを実行するには、リポジトリへの書き込みアクセスが必要です。

GitHub Web インターフェイスを使用したログの削除

  1. GitHub.com で、リポジトリのメイン ページへ移動します。

  2. リポジトリ名の下にある [アクション] をクリックします。

    "github/docs" リポジトリのタブのスクリーンショット。 [アクション] タブがオレンジ色の枠線で強調表示されています。

  3. 左サイドバーで、表示するワークフローをクリックします。

    [アクション] タブの左側のサイド バーのスクリーンショット。ワークフロー "CodeQL" が濃いオレンジ色の枠線で囲まれています。

  4. ワークフロー実行の一覧で実行の名前をクリックすると、ワークフロー実行の概要が表示されます。

  5. 右上隅にある ドロップダウン メニューを選び、 [すべてのログの削除] をクリックします。

    ワークフローの実行のページのスクリーンショット。 右上隅には、ケバブ アイコンのラベルが付いたボタンが濃いオレンジ色の枠線で囲まれています。

  6. 確認のプロンプトを確認します。

ログを削除すると、 [すべてのログを削除] ボタンが消えます。これは、ワークフローの実行にログ ファイルがこれ以上残っていないことを示しています。

プログラムによるログの削除

次のスクリプトを使用して、ワークフローのすべてのログを自動的に削除できます。 これは、複数のワークフロー実行のログをクリーンする便利な方法です。

次のサンプル スクリプトを実行するには:

  1. コード例をコピーし、delete-logs.sh という名前のファイルに保存します。

  2. chmod +x delete-logs.sh で実行アクセス許可を付与します。

  3. 次のコマンドを実行します。REPOSITORY_NAME にリポジトリ名、WORKFLOW_NAME にワークフローのファイル名を指定します。

    Shell
    ./delete-logs.sh REPOSITORY_NAME WORKFLOW_NAME
    

    たとえば、.github/workflows/ci.yaml ワークフローの monalisa/octocat リポジトリ内のすべてのログを削除するには、./delete-logs.sh monalisa/octocat ci.yaml を実行します。

サンプル スクリプト

Bash
#!/usr/bin/env bash

# Delete all logs for a given workflow
# Usage: delete-logs.sh <repository> <workflow-name>

set -oe pipefail

REPOSITORY=$1
WORKFLOW_NAME=$2

# Validate arguments
if [[ -z "$REPOSITORY" ]]; then
  echo "Repository is required"
  exit 1
fi

if [[ -z "$WORKFLOW_NAME" ]]; then
  echo "Workflow name is required"
  exit 1
fi

echo "Getting all completed runs for workflow $WORKFLOW_NAME in $REPOSITORY"

RUNS=$(
  gh api \
    -H "Accept: application/vnd.github+json" \
    -H "X-GitHub-Api-Version: 2022-11-28" \
    "/repos/$REPOSITORY/actions/workflows/$WORKFLOW_NAME/runs" \
    --paginate \
    --jq '.workflow_runs[] | select(.conclusion != "") | .id'
)

echo "Found $(echo "$RUNS" | wc -l) completed runs for workflow $WORKFLOW_NAME"

# Delete logs for each run
for RUN in $RUNS; do
  echo "Deleting logs for run $RUN"
  gh api \
    --silent \
    --method DELETE \
    -H "Accept: application/vnd.github+json" \
    -H "X-GitHub-Api-Version: 2022-11-28" \
    "/repos/$REPOSITORY/actions/runs/$RUN/logs" || echo "Failed to delete logs for run $RUN"

  # Sleep for 100ms to avoid rate limiting
  sleep 0.1
done

GitHub CLI でログを表示する

GitHub CLI の詳細については、「GitHub CLI について」を参照してください。

特定のジョブのログを表示するには、run view サブコマンドを使います。 run-id を、ログを表示したい実行の ID に置き換えます。 GitHub CLI は、実行からジョブを選択するためのインタラクティブメニューを返します。 run-id を指定しない場合、GitHub CLI は、最近の実行を選ぶことができるインタラクティブ メニューを返してから、その実行からジョブを選ぶことができる別のインタラクティブ メニューを返します。

gh run view RUN_ID --log

また、--job フラグを使って、ジョブ ID を指定することもできます。 job-id を、ログを表示したいジョブの ID に置き換えます。

gh run view --job JOB_ID --log

grep を使うと、ログを検索できます。 たとえば、このコマンドは、error という単語が含まれるすべてのログ エントリを返します。

gh run view --job JOB_ID --log | grep error

失敗したステップのログをフィルター処理するには、--log の代わりに --log-failed を使います。

gh run view --job JOB_ID --log-failed