はじめに
最近、勤務先の支援もあり AI を活用した開発を日常的に行っています。
一方で、テキストエディタはなるべくシンプルに保ちたい気持ちもあり、AI に直接コード補完を任せるのではなく、自分でコードを書いて考える時間も大切にしています。
そんな中、同僚に教えてもらった Uithub という Web サービスがとても便利でした。Git リポジトリ内のディレクトリ構造とファイル内容を AI に扱いやすい形式で表示してくれます。
Uithub のようなツールをローカル環境でも使いたいと思い、自分なりに作ってみました。
シェルスクリプトでの試作
まずはBash スクリプトで Uithub 的な出力を再現してみました。
- Git 管理されているファイルだけを対象にする
- ディレクトリ構造をツリー形式で表示する
- 各ファイルの内容を見やすく出力する(行番号付き)
といったことを実現しています。
詳細は以下の Qiita 記事にまとめています:
ある程度満足のいくものができましたが、スクリプトが少し複雑になってきて、保守しにくさを感じるようになりました。テストも書きづらく、ちょっとした変更にも不安が残ります。
Go言語での書き直し
そこで、改めて Go 言語で CLI ツールとして作り直すことにしました。
ちょうどその頃、日頃から愛用しているバージョン管理ツールasdf が シェルスクリプトから Go に書き直されたことを知りました。たまたま Go を学習中だったこともあり、言語としてGoを選択しました。
CLI フレームワークには、asdf
でも使われている urfave/cli/v2 を採用しました。軽量で直感的な API が特徴で、今回のようなシンプルなツールにはちょうど良い選択肢だと感じています。
ツール名は uit
としました。
後付ですが、「Uithub-Inspired Tool」とも読めます。
以下のような機能を備えています:
- Git 管理下のファイルのみを対象に、ディレクトリツリーとファイル内容を表示
- 各ファイルの内容には行番号を付与
- バイナリファイルはデフォルトで非表示
-
--max-lines
オプションで、ファイルごとの表示行数を制限 -
--no-tree
や--no-content
オプションで、ツリーや内容の表示を省略可能
GitHub リポジトリはこちら: mnishiguchi/uit
自分で言うのもなんですが、めっちゃ便利です。
おわりに
自分のために作ったツールですが、もし誰かの役に立つことがあれば嬉しいです。
ツール自体も Go の勉強にもなりましたし、「既存の便利なツールの仕組みをローカルで再現してみる」というのは楽しい学びのあるプロジェクトだと感じました。
好奇心を忘れず、AIを超えていきましょう。