コンテンツにスキップ
Dev Classmethod Jp Articles Ghtkn Short Lived Github App Token

htknでGitHub AppのUser Access Tokenを使い、ローカルにシークレットを置かずGitHubと通信する

  • URL: https://dev.classmethod.jp/articles/ghtkn-short-lived-github-app-token
  • 日付: 2026-06-24
  • Tier: Tier 2
  • 要旨: ghtknはGitHub AppのUser Access Tokenを使用し、ローカルにシークレットを置かずにGitHub APIを操作するCLIツールである。ローカルに保存するのはシークレットではないClient IDのみで、トークンとプライベートキーは不要。GitHub AppのDevice Flowで短命のトークンを発行し、OSのシークレットマネージャーに保存する。トークンは8時間で期限切れになるため流出リスクが大幅に減る。User Access Tokenの権限はユーザーとGitHub AppのANDであり、ユーザーに広範な権限があってもGitHub App側で制限できる。

詳細

従来のクラシック PATやファイングレイン PATと比較すると、ghtknはローカルに秘密情報を置かず、トークンの発行・更新を自動で行う点が大きく異なる。ファイングレイン PATは承認制・失効管理があるが、ghtknは Appの権限・インストールで管理される。有効期限は8時間で失効し、OSのシークレットマネージャーに保存される。セットアップはbrew install で ghtknをインストールしてから ghtkn init を実行し、$HOME/.config/ghtkn/ghtkn.yaml に GitHub Appの Client IDを記述する。初回は ghtkn get でブラウザが開き Device Flowの認可が実行され、one-time code を入力することでトークンが発行される。gh CLIと連携させるには env GH_TOKEN=$(ghtkn get) gh … と記述するか、ラップスクリプトを用意して透過的に使用できるようにする。ラップスクリプトは GH_TOKEN環境変数が設定されていない場合に ghtknからトークンを取得する仕組みである。トークンはmacOS Keychainに generic password として Client IDをキーに保存される。初回インストール時に権限とリポジトリを設定していなかった場合、権限(Issues: Read and write など)と操作先リポジトリを設定して再度実行する必要がある。ghtknは Device Flowでユーザー認証するため CI/CDのような非対話的な用途には使えないことに注意。