README.md in githelp-0.1.3 vs README.md in githelp-0.1.4

- old
+ new

@@ -1,26 +1,38 @@ # GitHelp -**Gitのコマンドの使いこなしを支援する** +**Gitのコマンドの使いこなしを支援** -### 解決したい問題 +### 概要 -* Gitの使い方や引数指定方法がさっぱりわからないこと -* ちょっとしたことでもどうコマンドを組み合わせれば良いのかわからないこと +Gitのような複雑なシステムは使い方がわからなくて苦労する。 +ある程度使い方を知っている場合でも +あまり標準的でない操作は難しい。 +たとえば以下のような場合は +どういうコマンドを使えばいいだろうか? -以下のような処理をGitでどうやって実行するかを教えてくれる - -* example.txtは3日前からどう変わった? -* 3日前のexample.txtを見たい +* README.mdは3日前からどう変わった? +* 3日前のREADME.mdを見たい * package.jsonからcoffeeという名前が消えたのはいつ? * ここ1週間ぐらい変更されてないファイルは? * 最近最も大量に修正したファイルはどれだっけ? +複雑なシステムにはヘルプやマニュアルが用意されているのが普通だし、 +FAQや逆引き辞典が用意されていることもあるし、 +答がWebでみつかることもあるが、 +うまく検索できないことも多いし、 +やり方がわかった場合でも +キーワードやパラメタを指定して実行しなおす必要があるので手間がかかる。 +***このような問題を[ExpandHelp](http://www.interaction-ipsj.org/archives/paper2012/data/Interaction2012/oral/data/pdf/12INT012.pdf)で解決する。*** + ### 利用例 -* ```README``` ```8``` ```比較``` のような引数を指定して```githelp```コマンドを起動すると以下のような候補が提示される +Gitに関連するタスクのキーワードやパラメタを指定すると +候補のリストが表示され、選択すると実行される。 +* ```README``` ```8``` ```比較``` のような引数を指定して```githelp```コマンドを起動すると以下のような候補リストが提示される + ``` $ githelp README 8 比較 [0] 「README.md」ファイルを8分前のものと比較する % git diff HEAD "@{8 minutes ago}" README.md [1] 「README.md」ファイルを8時間前のものと比較する @@ -28,11 +40,11 @@ [2] 「README.md」ファイルを8日前のものと比較する % git diff HEAD "@{8 days ago}" README.md $ ``` -* ```-x``` オプションで数字を指定すると実行できる +* ```-x``` オプションで```2```のような数字を指定すると実行できる ``` $ githelp README 8 比較 -x2 diff --git a/README.md b/README.md @@ -43,37 +55,71 @@ # GitHelp -**Gitのコマンドの使いこなしを支援する** - -### 解決したい問題 -- --* Gitの使い方や引数指定方法がさっぱりわからないこと --* ちょっとしたことでもどうコマンドを組み合わせれば良いのかわからないこと ... ``` * ```-i``` オプションを指定すると対話的に選択できる -* 引数なしで```githelp```を起動するとリストが表示される +### インストール +``` +% gem install githelp +``` + ### 実装 -* [ExpandHelp](https://github.com/masui/expand_ruby)を利用 -* [ExpandHelp論文](http://www.interaction-ipsj.org/archives/paper2012/data/Interaction2012/oral/data/pdf/12INT012.pdf) -* [```data```](https://github.com/masui/GitHelp/tree/master/data)ディレクトリの下に問題パタンと解決コマンドを書く - * ワンライナーで無理な場合は ```bin``` の下にコマンドを用意する +* [re_expand](https://github.com/masui/expand_ruby) +という正規表現展開ライブラリを利用 +* [```data```](https://github.com/masui/GitHelp/tree/master/data)ディレクトリの下に**問題パタン**と**解決コマンド**を並べたものを用意しておく -### インストール - ``` -% gem install githelp +[ + "「(#{files.join('|')})」ファイルを(#{numbers.join('|')})分前の(もの|バージョン)と比較する", + 'git diff HEAD "@{#{$2} minutes ago}" #{$1}' +], ``` +* ファイル名にマッチする引数(e.g. ```README```)や +数字にマッチする引数(e.g. ```8```)が指定されると1行目の記述にマッチすることになる +* ワンライナーでは難しい場合は [```exe```](https://github.com/masui/GitHelp/tree/master/exe) の下にヘルパーコマンドを用意する (e.g. [```exe/githelp-changed```](https://github.com/masui/GitHelp/tree/master/exe/githelp-changed) ) + +### 解説 + +* ExpandHelp方式とは、 +様々なタスクの説明と実際の操作を組にして記述しておき、 +ユーザが与えたキーワードやパラメタにマッチするものを +リストして実行可能にするというものである。 +* いろんなクエリに対応できるようにするため説明は正規表現で記述しておく。 +たとえばシステムの時刻をセットする機能の説明は```(時計|時刻|時間)を((設定|セット)する|あわせる)``` +のような正規表現で記述しておくことにより、```時刻をセットする``` ```時間をあわせる``` +などのクエリにマッチするようにする。 +* 「README.mdを消す方法」はマニュアルには書いてない。 +「ファイルを消す方法」しか書いてない。 +ファイルを消す方法を知った後で「README.md」を指定して実行する必要がある。 +* そういえば先日「らくらくホン」画面上の鬱陶しい「羊」を消す方法が全くわからなかったのだが、あれは「マチキャラ」と呼ばれるものなので「マチキャラ」を消すという操作が必要だった。「羊 消す」とか「消す」とかで消せるべきだろう。githelpでは ```$ githelp 削除``` と入力すれば削除関連で何ができるのかわかる。 +* ヘルプといえば人工知能的なアプローチの方がトレンドかもしれないが、 +本方式だと +自分が何をやりたいのかはっきりわかってない場合でも使えるし、 +正しいセンテンスを正確に入力したり発声したりする必要がないから楽だと思う。 +予測入力に近いといえるかもしれない。 +* **Gitは単なる適用例であり、広い範囲で使いたいと思っている。** + + ### お願い -データが全然足りないので、こういうのを足せという情報があればお願いいたします。 +* [データ](https://github.com/masui/GitHelp/tree/master/data)が全然足りないので、足すべきデータを教えて下さい。 +issueでもプルリクでも@masuiへのツイートでもいいです。 -### 考察とか +### 注意 -* Siriみたいなのでやるのがトレンドな気もするが、自分が何をやりたいのかはっきりわかってない場合でも使えるし、正しいセンテンスを指定する必要もないから楽だと思う - * ```githelp 削除``` とか言えば何ができるのかわかる -* もちろんこのやり方はGit以外でも有効である +* Gitリポジトリのディレクトリで実行して下さい +* [re_expand](https://github.com/masui/expand_ruby)の実装が富豪的なので大きなリポジトリだと不具合があるかもしれません + +### 関連システム + +* [AnyCode](http://dl.acm.org/citation.cfm?id=2814295) + + * 自然言語キーワードからJavaスニペットを検索する + * ```copy fileA fileB``` みたいなキーワードから ```FileUtil.copyFile(new File(fileA), new File(fileB))``` みたいなコード候補を生成する