a/ analytics note .jp

TECH · field log

Cowork スケジュールタスクで gh CLI 認証を永続化する方法

サンドボックス環境で毎回リセットされる gh auth の問題を、トークンファイル方式で解決した開発ログ。

· 3 min read · #Cowork / #GitHub CLI / #スケジュールタスク / #認証 / #自動化 · AI-assisted · reviewed Share on X はてブ Zennにクロスポスト

サンドボックス環境での gh CLI 認証永続化の課題と解決

Cowork(Claude のローカルサブスクリプションに含まれる定期実行基盤)などのスケジュールタスク環境では、毎回新しいサンドボックス(隔離された実行環境)で起動するため gh auth login の認証状態が引き継がれないという問題が発生します。本記事ではその原因と、トークンファイル方式による解決策を紹介します。同様の問題は GitHub Actions のセルフホストランナーや Docker ベースの CI 環境でも発生するため、幅広い環境で応用できます。

問題の特定

スケジュールタスクはサンドボックス上で実行されます。サンドボックスは実行のたびに初期化されるため、~/.config/gh/hosts.yml に保存される gh auth の状態もリセットされます。

ブログ記事の自動生成パイプラインのように、gh CLI を使って Issue の取得やPR の作成を行う仕組みでは、この認証切れによりスケジュール実行が失敗します。

解決策の実装

以下の 3 ステップで対応します。

  1. トークンファイルの配置 — ワークスペースの secrets/gh-tokenGitHub 個人アクセストークンを保存します。secrets/ ディレクトリは .gitignore に含めて、リポジトリにはコミットされないようにしてください。

  2. タスク起動時のトークン読み込み — サンドボックス環境ではトークンファイルのマウント先がセッションごとに変わる場合があります。Cowork の場合は find /sessions/*/mnt/*/secrets/gh-token のようにワイルドカードで探索します。一般的な CI/CD 環境では、環境変数 GH_TOKEN にトークンを設定する方法がより簡潔です。

    # 一般的なパターン: 環境変数から認証する
    echo "$GH_TOKEN" | gh auth login --with-token
    
    # サンドボックス環境: ファイルから認証する
    TOKEN_FILE=$(find /path/to/secrets -name "gh-token" -type f | head -1)
    gh auth login --with-token < "$TOKEN_FILE"
  3. タスク定義ファイルの更新 — スキル定義ファイル(AI エージェントに実行手順を伝えるドキュメント)の環境セットアップセクションに、トークン読み込み手順を明記します。

主な変更点

  • secrets/gh-token — トークン保存用ファイルを新設
  • スキル定義ファイル — 環境セットアップに gh auth トークン読み込み手順を追加
  • スケジュールタスク設定 — トークンファイル探索ロジックを追加

次のステップ

  • トークンの有効期限切れを検知して通知する仕組みの構築
  • 将来的には GitHub App による認証への移行を検討し、トークン管理の手間を削減する

関連記事

F/ この記事の設計を反映しているプロダクト: FlowAgent

see →
an

analytics note — editor

AI とデータ分析の実装ログを毎週編集。設計判断と運用のつまずきを、再現できる形で残すことを大切にしています。