akishin999の日記

調べた事などを書いて行きます。

Windows の Rails 開発で ctags を使う

Java + Eclipse での開発から Ruby(Rails) + gvim での開発に移った時に困ったのが、Eclipse の強力なリファクタリングソースコードブラウザとしての機能の代替をどうするか、でした。


リファクタリングの方は今のところこれだというツールが見つかっていませんが、ソースコードのブラウズに関しては、ctags を使う事で Eclipse を使って Java のソースを読んでいた頃に近い環境が構築できたと感じています。
その際に自分なりに調べた内容のまとめです。


間違いやもっと便利な使い方などありましたらご指摘頂けると嬉しいです。


尚、動作確認は KaoriYa さんの配布されている日本語 Windowsgvim の 7.1 を使用させて頂きました。


KaoriYa.net
http://www.kaoriya.net/

インストール

まずは ctags のインストールです。


ctags日本語対応版
http://hp.vector.co.jp/authors/VA025040/ctags/


上記のサイトで日本語に対応した Win32 版の ctags を配布して下さっているので、こちらを利用させて頂きました。
バイナリをダウンロードして、PATH を通します。
コマンドプロンプトから以下を実行し、バージョン情報が表示されればインストール完了です。

C:\>ctags --version
Exuberant Ctags 5.8J1, Copyright (C) 1996-2009 Darren Hiebert
  Compiled: Jul 10 2009, 18:17:00
  Addresses: <dhiebert@users.sourceforge.net>, http://ctags.sourceforge.net
  Japanese patch  by Hirohito Higashi <h_east@pop11.odn.ne.jp>
                     http://hp.vector.co.jp/authors/VA025040/
  Optional compiled features: +win32, +regex, +internal-sort, +kanji

タグファイルの作成

インストールが完了したら早速タグファイルを作成してみます。

ライブラリ用タグファイル


まずは RubyGems でインストールしたライブラリのタグファイルを作成しました。

コマンドプロンプトから以下を実行します。
(横一行でもいいのですが、長くなるので「^」を使ってコマンドプロンプト上で改行しています。)

ctags -f "C:\tags\ruby\gems.tags" ^
--totals ^
-R C:\InstantRails-2.0-win\ruby\lib\ruby\gems\1.8\*


上記で、「C:\InstantRails-2.0-win\ruby\lib\ruby\gems\1.8\*」以下のファイルのタグファイルが「C:\tags\ruby\gems.tags」というファイルに出力されます。


ちなみに「C:\InstantRails-2.0-win\」の部分は私が InstantRails を使っているから、というだけの事なので、お使いの Ruby のインストールパスに変えてください。
また、標準ライブラリのタグも作成したい場合は Ruby インストールディレクトリの「lib\ruby\*」を指定すればいいかと思います。

アプリケーション用タグファイル


次に開発中の Rails アプリケーション用のタグファイルを作成します。

vim から使う事を想定しているので、ここでは「$RAILS_ROOT/tmp/」の下に「tags」というファイル名でタグを生成します。

ctags -f "C:\InstantRails-2.0-win\rails_apps\exampleapp\tmp\tags" ^
--totals ^
-R C:\InstantRails-2.0-win\rails_apps\exampleapp\*


上記では、「C:\InstantRails-2.0-win\rails_apps\exampleapp」が Rails アプリケーションのルートディレクトリなので、Rails アプリケーションの全ファイルのタグを「C:\InstantRails-2.0-win\rails_apps\exampleapp\tmp\tags」というファイルに生成しています。

vim の設定

タグファイルが作成できたので、vim から使う設定を行いたいと思います。

まずは最初に作成した gems 用のタグファイルを、 vim 起動時に自動で読み込んでくれるように、「_vimrc」に下記の設定を追記します。

set tags=C:\tags\ruby\gems.tags


複数のタグを指定したい場合は、カンマ区切りで指定する事ができるようです。


次にアプリケーション毎のタグですが、こちらは _vimrc ファイルに設定してしまうと、別のアプリケーション開発時もタグが読み込まれてしまうため、上記の方法は使用できません。
ただ、vim は標準で

というタグファイルが存在すれば自動的に読み込んでくれるようになっているようです。
なので、Rails アプリケーションの開発時に、アプリケーションのルートディレクトリから vim を起動する事で、先ほど「$RAILS_ROOT/tmp/」以下に「tags」という名前で作成したアプリケーション用のタグファイルを読み込んでくれる事になります。


というわけで、アプリケーション用のタグファイルに関しては特に設定は不要です。

それでは、Rails アプリケーションのルートディレクトリから vim を起動し、どのタグファイルを使用しているかを確認します。

:set tags


以下のような感じで、読み込み対象のタグファイルが表示されます。
ここで表示されたパスにタグファイルがちゃんと生成されている事を確認してください。

tags=C:\InstantRails-2.0-win\rails_apps\exampleapp/tmp/tags,C:\tags\ruby\gems.tags,C:\InstantRails-2.0-win\rails_apps\exampleapp/tags

使ってみる

それでは、実際に vim から Rails アプリケーションのソースコードを開き、適当なメソッド名などの上にカーソルを置いた状態で「Ctrl-]」を押してみて下さい。
該当のメソッドの定義部分に自動でジャンプできたのではないでしょうか。
RubyGems のタグファイルも読み込ませているので、Rails が提供するクラスのメソッドなどにもジャンプできるはずです。

vim ではタグジャンプのために以下のようなコマンドが用意されています。

設定名 意味
Ctrl-] カーソルの位置にある単語のタグにジャンプする。
Ctrl-t タグジャンプする前の位置に戻る。
g, Ctrl-] カーソルの位置にある単語のタグが複数存在する場合に、候補の一覧を表示する。
Ctrl-w, } カーソル位置の単語のタグジャンプ先の定義を、プレビューウィンドウで表示する。
:pc プレビューウィンドウを閉じる。


これで Rails アプリケーション開発時にソースコードを読むのが大分楽になりました。
オープンソースで公開されている Rails アプリケーションのソースコードを読んで勉強する際にもかなり役立っています。