7日目。昨日と同じスタック。同じフレームワーク。アイデアもそこまでオリジナルじゃない。
Day 6でGoとBubble Teaをまったく触ったことがないのにビルドできることが証明できたので、今度は別のことを試したかった。AIに既存のツールを指定して、そのラッパーを作らせたらどうなるか?今回はgit。リポジトリが多すぎて、どれにコミットしてない変更があるのかまったく把握できていない。
プロンプト#
「GoでTUIアプリを作って。ディレクトリツリーをスキャンしてgitリポジトリを見つけ、ターミナルダッシュボードにステータスを表示する。色分け:クリーンは緑、ダーティは黄色、ahead/behindは青。任意のリポジトリでfetch、pull、シェルの起動ができるように。UIにはBubble Teaを使って。」
どうやって作ったか#
このビルドで面白いのはUIでもフレームワークでもない。AIがgitとどうやりとりしたかだ。このアプリは本質的にラッパーで、表示するすべての情報に対してgitをシェル呼び出ししている。ブランチ名、コミットハッシュ、ahead/behindのカウント、スタッシュリスト、ダーティファイルの追跡。GoのgitライブラリはPull使っていない。手動で打つのと同じコマンドを実行して、出力をパースしている。
AIは関心事にマッピングされたパッケージに作業を分割した:.gitフォルダを探してディレクトリツリーを走査するスキャナー、CLIコマンドをラップするgitパッケージ、YAMLを使う設定システム、CharmのBubble Teaで構築されたTUIレイヤー。スキャナーはnode_modules、vendor、隠しディレクトリをスキップする。gitパッケージはbranch、status、log、rev-list、stash list、describeを処理する。UIはリストビュー、詳細ビュー、ステータスバー、ヘルプオーバーレイ、スタイルがきれいに分離されている。
クロスプラットフォームビルド用のMakefile(darwin/linux、amd64/arm64)と、OSとアーキテクチャを自動検出するインストールスクリプトまで付いていた。
できたもの#

リポジトリをステータスでグループ化する。 コミットしていない変更があるダーティなリポジトリが最初に表示され(黄色のドット)、次にリモートとの同期が必要なリポジトリ(ahead/behindカウントが青で表示)、そしてクリーンなリポジトリ(緑のチェックマーク)。ひと目でどのリポジトリに注意が必要か分かる。sを押すとグループ表示とアルファベット順の切り替えができる。

各リポジトリは2行で多くの情報を表示する。 名前、ピンクの括弧内のブランチ、括弧内の最新タグ、クリーン/ダーティのインジケーター、ahead/behindの矢印、右側に相対コミット時間、そして下に最後のコミットメッセージ。狭いスペースに驚くほど多くのコンテキストが詰め込まれている。

詳細ビューが本当に便利。 任意のリポジトリでEnterを押すと全体像が見える:パス、ブランチ、タグ、ステータス、リモート同期状態、著者付きの完全なコミットメッセージ、ダーティな場合は変更ファイルのリスト、スタッシュの数。ここからpullしたり、gを押してそのリポジトリのディレクトリでシェルを起動したりできる。

シェル統合が動く。 gを押すとリポジトリのディレクトリで自分のシェル($SHELLを読み取る)が起動する。作業して、終了すると、GitDashに戻る。戻ったときにリポジトリのステータスが自動的にリフレッシュされる。
検索/フィルター機能あり。 /を押して入力を始めると、リアルタイムでリポジトリ名でフィルタリングできる。プロジェクトが何十個もあるディレクトリをスキャンするときに便利。
YAML設定ファイル。 ~/.config/gitdash/config.yamlにウォッチパスを設定しておけば、毎回-pathを渡す必要がない。複数のディレクトリ、最大スキャン深度、隠しフォルダの表示設定が可能。
バグレポート#
今回は大きな問題はなかった。TUIはきれいにまとまった。唯一気づいたのは、非常に大きなディレクトリツリーでは初回スキャンに少し時間がかかること。ただ「Scanning for repositories…」というメッセージが表示されるので、動いていることは分かる。
数字#
- 11のGoソースファイル、5パッケージ(main、config、git、scanner、ui)
- 約1,900行のGo
- 1つのテストファイル(スキャナー用)
- クロスプラットフォームビルド:macOSとLinux(amd64/arm64)
- インストールスクリプト:OSとアーキテクチャの自動検出付き
- 実際の作業時間: テストとプロンプトの調整で20分くらい
試してみる#
以下でインストール:
go install github.com/nunocoracao/Vibe30-day07-gitdash@latestまたはワンライナー:
curl -fsSL https://raw.githubusercontent.com/nunocoracao/Vibe30-day07-gitdash/main/scripts/install.sh | bashあとはgitリポジトリがあるディレクトリでgitdashを実行するだけ。
Day 7の評価#
正直に言おう。これはクリエイティブなプロジェクトではない。gitステータスダッシュボードは新しいアイデアではない。Lazygitやtigはすでに存在していて、もっとうまくやっている。そして昨日と同じGo + Bubble Teaスタックなので、「馴染みのない技術」というストーリーもない。
でもこのビルドには注目すべきことがあった。AIはgitの内部構造を理解する必要がなかった。単にCLIをラップしただけだ。このダッシュボードのすべてのデータは、gitコマンドを実行してテキスト出力をパースすることで得ている。ダーティファイルにはgit status --porcelain。ahead/behindにはgit rev-list --count。スタッシュの数にはgit stash list。gitをテキストインターフェースを持つブラックボックスとして扱った。そしてそれは、ほとんどの開発者がgitを扱う方法とまったく同じだ。
それが今日の興味深いパターンだ。構造化された出力を持つ任意のCLIツールにAIを向ければ、その周りにラッパーUIを構築させることができる。Git、Docker、kubectl、なんでもいい。AIはシステムの内部構造をあなた以上に理解する必要はない。どのコマンドを実行して、返ってきたものをどうパースするかを知っていればいい。
プロジェクト自体は悪くない。動くし、ステータスでのグループ化はひと目で便利だし、詳細ビューには多くの情報が詰まっている。でも、各リポジトリでgit statusを実行すればいいだけなのに、これを毎日使うなんて言うつもりはない。ここでの価値はパターンを見ることであって、特定のツールではなかった。
これは30 Days of Vibe Codingの7日目です。AIを使ったコーディングで30日間に30プロジェクトを出荷する様子をフォローしてください。







