【GitHub Acrions】Argument list too longエラーが発生する

# はじめに
先日作成したワークフローで`Argument list too long`エラーが発生しました。
解決までに時間を要したので備忘録として解決方法をまとめます。

https://qiita.com/asa129/items/cc271dd791667844f1a5

# 問題
ワークフロー実行時に`Argument list too long`エラーが発生する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3993509/953c2e78-fbac-487e-a672-672ad62f787c.png)


# 原因
エラー分析を行う際のログが膨大だった。
AI分析する前に、対象のログを全て取得していたため、ログの容量が大きい場合は全て取得できずにエラーとなっていました。

# 解決方法
ログからエラーメッセージのみをgrepして出力する。
エラーログを取得する処理を全量取得から、errorとして出力しているものをgrepして取得することで、ログの容量を減らしました。

また、promptの書き方も簡潔にしました。

```diff_yaml
      - name: Get error info
        id: get-error
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          # ワークフローの実行IDを取得
          RUN_ID=${{ github.event.workflow_run.id }}
          echo "RUN_ID: $RUN_ID"
          # ワークフロー情報を環境変数に保存
          echo "WORKFLOW_NAME=${{ github.event.workflow_run.name }}" >> $GITHUB_ENV
          echo "BRANCH_NAME=${{ github.event.workflow_run.head_branch }}" >> $GITHUB_ENV
          echo "COMMIT_SHA=${{ github.event.workflow_run.head_sha }}" >> $GITHUB_ENV

          # ジョブの一覧を取得
          JOBS=$(gh api repos/${{ github.repository }}/actions/runs/${RUN_ID}/jobs --jq '.jobs')

          # 失敗したジョブのログを取得
          echo "FAILED_LOGS<<EOF" >> $GITHUB_ENV

          for job in $(echo "$JOBS" | jq -r '.[] | select(.conclusion == "failure") | .id'); do
-           echo "=== Job ID: $job ===" >> $GITHUB_ENVAdd commentMore actions
-           gh api repos/${{ github.repository }}/actions/jobs/${job}/logs >> $GITHUB_ENV 2>&1 || echo "ログの取得に失敗しました" >> $GITHUB_ENV
            # ジョブ名を取得
+            JOB_NAME=$(echo "$JOBS" | jq -r --arg id "$job" '.[] | select(.id == ($id | tonumber)) | .name')
+            echo "失敗したジョブ: $JOB_NAME" >> $GITHUB_ENV
+            echo "" >> $GITHUB_ENV
            
+            # エラーの部分だけを取得（最大30行）
+           echo "エラー内容:" >> $GITHUB_ENV
+            gh api repos/${{ github.repository }}/actions/jobs/${job}/logs 2>&1 | \
+              grep -B 2 -A 5 -i "error\|fail\|Found multiple\|Expected\|Received" | \
+              head -30 >> $GITHUB_ENV || echo "ログを取得できませんでした" >> $GITHUB_ENV
            
            echo "" >> $GITHUB_ENV
+            echo "---" >> $GITHUB_ENV
          done

          echo "EOF" >> $GITHUB_ENV

      - name: Run AI check
        id: ai-check
        uses: actions/ai-inference@v1
        with:
          model: "openai/gpt-4o"
          prompt: |
-            あなたは、GitHub ActionsとJavaScript/TypeScriptのテストのプロです。
+            あなたは、GitHub ActionsとJavaScript/TypeScriptのテストのプロです。
           初心者でも理解できるように
            以下の形式で簡潔に（全体で10行以内）説明してください。
            エラーの内容は以下です。

            **失敗したワークフロー:**
            - ワークフロー名: ${{ env.WORKFLOW_NAME }}
            - ブランチ: ${{ env.BRANCH_NAME }}
            - コミットSHA: ${{ env.COMMIT_SHA }}
            - 使用技術: Vite, Supabase, Firebase

            **エラーログ:**
            ```
            ${{ env.FAILED_LOGS }}
            ```

            **回答形式フォーマット:**
            【原因】1-2行で説明
            【解決方法】具体的な手順を1-2個
            【予防策】1つだけ

      - name: Save AI response to summary
        if: always()
        run: |
          # GitHub Actionsのサマリーに出力（Web UIで確認可能）
          echo "## 分析結果" >> $GITHUB_STEP_SUMMARY
          echo "" >> $GITHUB_STEP_SUMMARY
          echo '${{ steps.ai-check.outputs.response }}' | base64 | base64 -d >> $GITHUB_STEP_SUMMARY

```

# おわりに
promptの一行を変えるだけで、結果が大きく変わることに驚きました。AIの指示の出し方もスキルとして必要なのではと思うエラーでした。