最近のプログラミング言語はパッケージ管理システムを持っていることがほとんどです。PerlにはCPAN1がありますし、PythonにはPyPi2がありますし、RubyにはRubyGems3がありますし、Node.jsにはnpm4があります。パッケージ管理システムがあると簡単にライブラリやツールをインストールできるので、手元にたくさんのコードが集まります。そんな手元のコードを簡単に検索できるようにする方法を紹介します。ただし、ここで紹介するのはRubyGemsでインストールしたパッケージのコードを簡単に検索できるようにする方法だけです。他のパッケージ管理システムについては触れません。
ライブラリを使っていて、期待した動作をしないときはどうしますか?まず、ドキュメントを確認することでしょう。ドキュメントを読んでも解決しないときはWebで検索したり、実際にコードを読んでみることでしょう。ここで紹介する方法を使えばコードを読むまでのコストが下がるので今までより気軽にコードを確認できるようになるはずです。
gemを簡単に検索できるようにする方法
gem-milkodeというgemをインストールするだけです。
% gem install gem-milkode
後はいつも通りgem installでgemをインストールしてください。
% gem install rails
検索したくなったらmilk webを実行してください。Webブラウザーに検索画面が表示されるので、そこからサクサク検索できます。
% milk web
gem installじゃなくてbundle installを使っているんだけど…
最近はgem installで個々のgemをインストールするのではなく、Bundlerでgemをインストールすることが多くなりましたね。そんなあなたはbundle-milkodeをインストールしてください。
% gem install bundle-milkode
後はbundle install、bundle updateの代わりにbundle-milkodeを使うだけです。
% bundle-milkode install
% bundle-milkode update
これでBundlerでインストールしたgemも簡単に検索できるようになります。
検索したくなったらmilk webを実行してください。Webブラウザーに検索画面が表示されるので、そこからサクサク検索できます。
% milk web
仕組み
gem-milkodeもbundle-milkodeもgemをインストールする時にMilkodeにgemのコードを登録しているだけです。Milkodeは行指向のソースコード検索システムです。コードを登録すればあとはMilkodeがいい感じにやってくれます。gem-milkodeとbundle-milkodeは「Milkodeにコードを登録する」という少し面倒な作業をこっそりやってくれるだけです。でも、それが便利なんです。
さて、それでは、gem-milkodeとbundle-milkodeはどのような仕組みで動いているのでしょうか。
bundle-milkode
bundle-milkodeはbundleのラッパーみたいなものなので特別に何かをしているわけではありません。bundleの機能を実行した後に新しくインストールされたgemをMilkodeに登録しているだけです。短いコードなので、コードを読むとすぐにわかります。
コード: bundle-milkode
gem-milkode
gem-milkodeはRubyGemsのプラグイン機能を使っています5。プラグイン機能の使い方は簡単です。gemにlib/rubygems_plugin.rb6というファイルを含めるだけです。後はRubyGemsが勝手に読み込んでくれます。
注意する点は、インストールされているすべてのgemのlib/rubygems_plugin.rbが読み込まれるということです。例えば、gem-milkode-1.0.1とgem-milkode-1.0.2がインストールされているときは、1.0.1のlib/rubygems_plugin.rbも1.0.2のlib/rubygems_plugin.rbも読み込まれます。そのため、プラグインが提供する同じ機能が何度も実行される可能性があります。
これを回避するために、「複数のバージョンをインストールしないように!」と呼びかける方法と、複数のバージョンがインストールされていても最新のものだけ実行する方法があります。gem-milkode 1.0.2までは前者でしたが、1.0.3からは後者になっています7。gem-milkodeも短いコードなので、やり方はコードを見てください。
コード: rubygems_plugin.rb
まとめ
インストールしたgemを自動でMilkodeに登録する小さなツールを紹介しました。このツールを使うことで簡単にgemのコードを検索できるようになります。gemのコードを読む敷居が下がるので、たくさんコードを読んでみてください。
おそらく、RubyGems以外のパッケージ管理システムにもプラグインのような機能があるはずなので、ここで紹介したツールと同じようなツールを作ればNode.jsやPythonでも簡単にコードを検索できるようになりますね。
-
フロントエンドはいくつかあるみたい。 ↩
-
パッケージ管理システムというかパッケージ配布サイト。フロントエンドはいくつかある。 ↩
-
これはパッケージ配布サイトもパッケージ管理ツールも提供。 ↩
-
これもサイトもツールも提供。 ↩
-
リンク先を見ればわかる通り、すでにいろんなプラグインがあります。エディターでgemのファイルを開くコマンドを提供するプラグインがいくつもあることが興味深いですね。やはり、みんなコードを読みたくなるようです。gemのソースを
git cloneするプラグインもあります。 ↩ -
lib/以下じゃなくても$LOAD_PATHが通っている場所であればどこでもよいです。説明が面倒になるので、ここではlib/に置くということで進めます。 ↩ -
つまり、gem-milkode 1.0.2以下はさっさとアンインストールしてgem-milkode 1.0.3以降を使ってください、ということです。 ↩