読者です 読者をやめる 読者になる 読者になる

けんぼーは留年生

Twitterに書ききれないこととか

Kitコマンドを作っています。

最近僕は思っています。「恥知らず」になりたいわけではないが、何が恥なのかすら分かっていない場合は(他人の迷惑にならない範囲で)恐れることなくどんどん恥を晒していくべきだと。恥を晒して初めて恥を知るのだと。

というわけで僕は今GitHubで恥を晒しています。github.com

さて、早速タイトル通りこの恥の内容を紹介していきたいと思います。

今までのGitの使い方

 まぁ割りと僕のブログを読んでいただいてる層だと「Gitを全く知らない」ということは多分無いと思うので無いということにして何となくくらいは分かってる前提で話をします(僕もgitに自信があるわけじゃないけど)。
 Gitと言えばコミット、コミットと言えばGitですよね。何か作業して、それを追加してメッセージ付けてコミットする。それがGitの基本的な使い方だと思います。でも、この方法は基本的に事後報告型。何かをした後に「こんなことしたよ!」と報告する形です。

Kitの提案

 kitとは英語のそれではありません。日本語の「きっと」を表します。gitでは何かをしてから「こんなことしたよ!」とメッセージを送りますが、kitではまず「こんなことをするよ!」と宣言してからそれが終わった後に終わったコマンドを打つことでコミットされます。事前に何をするかを報告することで他人に「今何をしているのか」を伝えるだけでなく自分も「今何のために何をしている途中なのか」を確認出来ます。
 また、「何をするのか」という事は課題が新しく発生した事も意味します。kitでは「何々するよ!」という宣言もgitに記録するので「いつ課題が発生したのか」も明確になります。

具体的にKitを使うとどういう風になるのか

 まず最初に作業ディレクトリでこう打つ。

$ kit init

これで.kitstackというファイルが作られる。もし、Gitリポジトリが無ければGitリポジトリも作ってくれる。git initを実行してくれるのだ。そして、作業を始める前にこう打つ。

$ kit do "したいこと"

これで.kitstackというファイルにこのコミットメッセージが保存されそれがgitにコミットされる。こうしておけば途中で他人なり自分なりがそのリポジトリを見れば、この作業が今何のために何をしている段階なのかはっきり分かる。
 そして予定通りに作業を進めて行き予定が終わったらこう打つ。

$ kit done

これで.kitstackから予定が削除されgit commit -am "したいこと"が実行される。

発展的な使い方

さて、あるリポジトリでちょっと作業した後、別のプロジェクトへ行ってしまい久しぶりに戻ってきたという場合。前回まで自分が何をどうしていたのか思い出せない。git logでそれまでどうしてたかは思い出せてもこれから何をするつもりだったのか思い出せない。そういう時はこうだ。

$ kit now
$ kit list

nowは現在進行中の予定を示し、listは全ての予定をリストアップしてくれる。
 さて、世の中そうなんでも予定通りに行くわけじゃない。"したいこと"の途中で新しい課題が発覚したとしよう。ブランチを掘っても良いが、そういうのともちょっと違う。そんな時はこう打つ。

$ kit do "課題を解決する"

こうするとこの"課題を解決する"が.kitstackに積まれる。.kitstackは文字通りスタックなので新しくdoしたものが上に積まれるので次doneした時に実行されるのはこのコミットだ。
 しかし、課題の解決は"したいこと"の後にしたい時もあるだろう。そういう時はこう。

$ kit do after "課題を後で解決する"

これでスタックの一番下に挿入される。doかdo afterの後に数字のオプションを付ければ任意の場所に挿入することも出来る。
 他にも予定を編集するeditコマンドとか削除するremoveコマンドとかある。doneの時に指定ファイルだけを追加するようにする仕様も検討中だ。

使い方

 Githubからkit.cを自分でコンパイルして自分で適切な位置にぶち込んでくれ、何か合っても責任は取らん。

これから

 まだ完成しているわけじゃないが、一応最低限の動作はするようになってきている。今後はmakeとかrpmとかyumとか勉強してもっと簡単にインストール出来るようにしていきたい。

感想

 久しぶりのC言語は苦痛です。別にCじゃなくても良かったんじゃね?とか思わなくもないけど今更引き返せません。後文字列のサイズめっちゃ適当なんだけどどうすれば良かったんですかね。もうよく分からないです。誰か教えろください。