masamichhhi
Back to Blog

GitHubで人生を管理しやすくするためのGitHub CLI Extension を仕様駆動開発で作った

作ったもの

gh-tuissue デモ

カンバン風にIssueの一覧・状態変更ができるTUI(Text User Interface)ツールを作りました。

GitHub - masamichhhhi/gh-tuissue: gh-tuissue is a GitHub CLI extension that provides a TUI (Text User Interface) for browsing and updating repository issues from the terminal.

gh-tuissue is a GitHub CLI extension that provides a TUI (Text User Interface) for browsing and updating repository issues from the terminal. - masamichhhhi/gh-tuissue

GitHub

背景

kyoheiさんが提案している、「GitHubで人生を管理する」というタスク管理方法にとてもハマりました。

githubで人生を管理する

Zenn

【GitHubで人生を管理する】 実際のリポジトリ公開 +やり方を解説

前編: https://youtu.be/KHiq6nf0Jio?si=8r9hwxal-VZaVsfD▼ 動画内で紹介したもの- githubで人生を管理する(Zenn): https://zenn.dev/hand_dot/articles/85c9640b7dcc66- Claude Code Skills...

YouTube

GitHub Issueという慣れ親しんだ形で管理できるのと、Claude Codeなどのコーディングエージェントによって操作しやすいのがとてもよいです。

また私の場合はObsidianも使っていて、Vault(ワークスペースのようなもの)をGitHubリポジトリとして管理しています。GitHubのIssueやProjectと紐づけておけば、Obsidianに雑に書いたアイディアをIssueにしたり、既存のIssueと紐づけて整理したりするのをClaudeに依頼できてとても快適です。

ただ実際に運用してみると、毎回ブラウザを開くことだけがストレスでした。 ブラウザを開いて Project を見に行く、Issue を開いて状態を変える、また別のタブに戻る。こういう小さな切り替えが積み重なると、意外と集中を削られます。

ターミナルの中で Issue を一覧し、状態を動かし、必要なら新規作成までできるTUI(Text User Interface)ツールが欲しいと思い、Claude Codeを使った仕様駆動開発でgh-tuissueを作ってみました。

機能と使い方

gh-tuissue という、GitHub Issues をTUIでカンバン風に扱える GitHub CLI extension です。 GitHub Project が紐づいていれば、そのカラムをターミナル上でそのまま扱えます。

以下のようなことができます。

  • Issue をプロジェクトのカンバンボードで一覧表示する
  • Shift+← / Shift+→ で状態を移動する
  • Issue の詳細を開く
  • Issue を新規作成する
  • コメントや本文を編集する

インストールは GitHub CLI extension なので簡単です。

gh extension install masamichhhhi/gh-tuissue

使い方もシンプルです。

gh tuissue --project 1
gh tuissue --repo owner/name --project 1

詳細な使い方はリポジトリのREADMEを参照してみてください。

システム概要

全体の仕組みはかなりシンプルです。 新しいAPIクライアントを書くのではなく、既に認証済みの gh CLI をそのまま使っています。

┌──────────────┐       ┌──────────────┐       ┌──────────────┐
│  gh-tuissue  │  exec │   gh CLI     │  API  │  GitHub API  │
│ (TUI, Go)    │──────▶│ (auth済み)    │──────▶│ Issues/Proj  │
└──────────────┘       └──────────────┘       └──────────────┘
       ▲                                             │
       └──────────────── JSON result ────────────────┘
  • GitHub CLI の extension として動くため、インストールと認証は gh に任せられる
  • Issue / Project の取得・更新は gh apigh issue 系サブコマンドを内部で叩いて実現
  • 画面側は Bubble Tea の Elm アーキテクチャ(Model / Update / View)で、ボード・詳細・フィルタなどをビューごとに分離
  • $EDITOR を呼び出して本文やコメントを編集する箇所だけは外部プロセスに委譲

結果として、自分で OAuth やトークン管理を持たずに、ターミナル内で完結する TUI に集中できました。

Claude Codeをフル活用して仕様駆動開発をしてみた感想

今回のツールはClaude Codeを利用した仕様駆動開発(SDD)で進めました。かなりスピーディーに作ることができた反面、特有の難しさもあったので感想をシェアします。

cc-sddが良かった

仕様駆動開発で進めるにあたり、cc-sddというClaude Codeのプラグインを使ってみました。

GitHub - gotalab/cc-sdd: Spec-driven development (SDD) for your team's workflow. Kiro style commands that enforce structured requirements→design→tasks workflow and steering, transforming how you build with AI. Support Claude Code, Codex, Opencode, Cursor, Github Copilot, Gemini CLI and Windsurf.

Spec-driven development (SDD) for your team's workflow. Kiro style commands that enforce structured requirements→design→tasks workflow and steering, transforming how you build with AI. Support ...

GitHub

これを使って、ふわっとやりたいことを壁打ちし、仕様を決めてもらってそれに従ってAIに実装してもらいました。その結果実現したいことの9割方はものの数分で実装できました。

仕様駆動の難しさ

まず、仕様書であってもすべてレビューするのはかなり負荷がかかりました。コードよりも曖昧な表現になってしまうときがあるし、コードよりも書き方のルールに一貫性がないので、自分でも読んでも何が抜けていて、何が間違っているかの判定がかなり難しいです。おそらく仕様書の書き方にも厳格なルールを設ける必要がある気がしますが、今回はそこまで出来てません。

また、やりたいことの9割はできたものの、やはり一発では完全な想定通りの動きにはなりませんでした。そうなった場合バグ修正や改善をClaudeに依頼するのですが、そうしたときの仕様書の管理がとても難しいです。 単に「該当の仕様書を更新して」と言ってしまうと、ただしXXXは行わないことみたいな禁止事項がたくさん並んでしまうことがよくありました。おそらくこれも、仕様書更新のルールをしっかり定義しておけば多少軽減はされると思います。ただ、1,2行の修正で済む細かいバグを直すたびに毎回仕様書を更新する必要があるのか、微妙なところです。

仕様駆動開発に使った仕様書を公開するべきか分からない

今回仕様駆動開発で走り出したものの、結局最後までメンテすることができず、作られた仕様書はリポジトリとして公開しないことにしました。

たとえ仕様書がメンテできる体制にしたとしても、これはOSSとして公開するリソースの中に含めるべきなのでしょうか 🤔

多くのコミッターがいるOSSだったりすると、その中で仕様書がメンテされ続けるイメージが正直湧きません。メンテナがかなり強い思想を持って仕様書の更新を強制させる必要がありそうです。

それと同様に、.claude.codexといったAIエージェントのルール、スキルの設定も公開するべきか悩み、こちらも結局公開しないことにして、最低限のCLAUDE.mdだけを置く形にしてみました。

おわりに

gh-tuissue というツールを作った紹介と、仕様駆動開発でこのような小さいOSSを作ってみた感想のシェアでした。

今のところ、私が欲しかったターミナルから離れずにIssueを管理できる感覚にかなり満足しています☺️

また、AIによる開発が当たり前になった今、OSSを自分で公開してみると、色々と思うところがありました。AIによってOSSのメンテナが疲弊している問題が最近話題になっていましたが、メンテナ側が整備しないといけないルールがかなり増えてしまったんだなと、公開してみて改めて感じます。

AI is burning out the people who keep open source alive

Open source projects are in crisis. They're being flooded with large volumes of AI-generated pull requests that merge cleanly but don’t actually work.

CodeRabbit

何はともあれ、gh-tuissueをぜひ使ってみてフィードバックやイシュー、スターをもらえると幸いです!

GitHub - masamichhhhi/gh-tuissue: gh-tuissue is a GitHub CLI extension that provides a TUI (Text User Interface) for browsing and updating repository issues from the terminal.

gh-tuissue is a GitHub CLI extension that provides a TUI (Text User Interface) for browsing and updating repository issues from the terminal. - masamichhhhi/gh-tuissue

GitHub

参考