Gitのような複雑なシステムは使い方が難しい。 ある程度使い方を知っている場合でも、あまり一般的でない機能を使うのは難しい。 たとえば以下のような場合はどういうコマンドを使えばいいだろうか?


 最初の例について考えてみる。 Gitでは「HEAD^」「HEAD^^」のような表現で昔のコミットを参照できるので

$ git diff HEAD^ README.md
のようにすればひとつ前のコミットのREADME.mdとの比較ができるが、 最近のコミットでREADME.mdを編集していなかった場合は このコマンドを起動しても何も出力されない。
$ git log README.md
とすればREDME.mdの編集履歴を調べられるので、 ひとつ前のバージョンのコミットIDを使えば
$ git diff (ひとつ前のバージョンのコミットID) README.md
のようにして ひとつ前のバージョンのREADME.mdからの変更を見ることができる。


 しかしこれはなかなか面倒な話である。 手動でコミットIDを手打ちかコピペしなければならない し、当然ながら git loggit diffといったコマンドの存在と動作を知っていなければならないgit loggit diffはよく使うコマンドなので Gitユーザなら誰でも知っているだろうが、 このような簡単な仕事でもコピペのような面倒な操作が必要なのは嫌である。
 実はGitにはrev-listというコマンドがあり、 編集があったコミットのIDをリストすることができる。 これを利用すると、ひとつ前の編集のコミットIDは

$ git rev-list HEAD -- README.md | head -2 | tail -1
で取得できる。 この結果を利用すると、 「ひとつ前のバージョンのREADME.mdからの変更を見たい」 という要求は
git diff $(git rev-list HEAD -- README.md | head -2 | tail -1) -- README.md
のようなコマンドで実行できることになる。 ($(...)というのはbashの記法で、コマンド実行結果を文字列として扱うものである。 --というのは、その後に続く文字列がオプションではなくてファイル名等だということを示すもの。)

 rev-list-nオプションを利用すると

git diff $(git rev-list -n 1 HEAD -- README.md)^ -- README.md
のように書くこともできる。


 それにしても、このように 無駄知識が大量に必要 だったり 単純な要求の実行が大変 だったりするのは嫌すぎる。 上のような工夫によって、 ひとつ前のバージョンのREADME.mdからの変更は調べられるようになったわけだが、 こういった要求は無限にあるわけで、 そのたびにいろんなGit機能を調べたり思い出したりしなければならないのだろうか。 「README.mdは最後にどこ変えたっけ?」 のような自然な質問を簡単に Gitコマンドに翻訳する方法が欲しい。
 こういった要望に対して最近は人工知能的に解決しようとするアプローチが人気かもしれない。 しかしそのためには高度な自然言語処理が必要で、 ちょっと違った表現を許したり内容を変えたりすることは簡単ではない。 大阪弁で質問できる日が来るとは思えない。 また、「longfilename」のようなものを指定しようとして 「logfile」のように間違って入力しても動くようにするには 単純な予測/補完/誤り修正機能などを使った方が良いだろう。
 逆引き辞典などでは 「ひとつ前のバージョンのファイルとの違いを知る」 のようなエントリはあるかもしれないが、 それを調べた後で「README.md」のような名前を指定してコマンドを起動する必要がある。 こういった二度手間も減らしたいものである。

 Macのヘルプで「時間 セット」と入力しても時間をセットする方法は出てこないし、ヘルプを自分で追加することはできない。

時間をセットする方法がヘルプに書いてあったとしても、 時間を4時にセットするためには自分で「4時」という値を指定してから「時間のセット」機能を実行しなければならない。

 マニュアルやヘルプを書くのは面倒なものである。 システムのドキュメントやマニュアルやヘルプシステムを独立に開発するのは 面倒すぎるし齟齬も起きやすいだろう。 ユーザをサポートするシステムがひとつにまとまっていて、 誰でも情報を足したり修正したりできたら嬉しいだろう。

GitHelpのアプローチ

 GitHelpは、以下のような方針で上のような課題をすべて解決しようというものである。

この結果、やりたいことの一部を漠然と言えばすぐ実行できるようになるのが理想である。

利用例

Gitに関連するタスクのキーワードやパラメタを指定して githelpを起動すると 候補のリストが表示され、 カーソルで選択すると実行される。

インストール

	% gem install githelp   

実装

考察

注意

関連システム