2010-03-20
■[Ruby] Rubyのための開発補助ツール、RSenseをリリースしました

未踏プロジェクトの援助を受けて、ここ数ヶ月集中して開発していた、Rubyのための開発補助ツールRSenseをようやくリリースしました!配布物やドキュメントは次のURLから入手できます。
http://cx4a.org/software/rsense/index.ja.html
RSenseの最大の特徴は、他の開発環境(IDE)では実現できていない高精度なコード補完を実現しているところです。周知のことだと思いますがRubyは動的型付け言語です。そのためプログラムを実際に実行してみないと、ほとんどの式の型は分からないのです。型情報からユーザーの入力を補助するコード補完機能の分野では、これはかなり致命的な問題です。RSenseは型推論の技術を応用することで、この問題を解決しました。上記のURLにもありますが、以下に実際のスクリーンショットやデモが貼っておくので、ぜひご覧ください。
現在利用できるエディタはEmacsとVimだけです。バックエンドをうまく分離しているので、理論的にはEclipseやTextMateなどの他のエディタにも対応できるはずです。フロントエンド対応したいという方がいらっしゃましたら、僕に連絡ください。可能な限り手助けいたします。TextMateはここを読む限り、案外簡単に実装できそうですが、OS Xをもっていないので何もできません。
あと未踏の成果報告の関連で利用者の声というのを募集しています。一行でいいので、何かコメントがあるかたがいしゃっらいましたら、僕に連絡ください。
メールアドレスは tomo@cx4a.org です。
将来的には静的コードチェック機能や、ソースコードジャンプ機能、リファクタリング機能を実装したいと考えています。ただ現状では以下のような制限事項があるので、まずはこちらから解決することになるでしょう。
- 416 http://reader.livedoor.com/reader/
- 245 http://b.hatena.ne.jp/hotentry
- 232 http://pipes.yahoo.com/pipes/pipe.info?_id=faa858a20082ef6d25ad27557e37e011
- 204 http://pipes.yahoo.com/pipes/pipe.info?_id=tDfBdGWF3RGl9XNm1L3fcQ
- 171 http://www.google.com/reader/view/
- 162 http://b.hatena.ne.jp/hotentry/it
- 128 http://d.hatena.ne.jp/
- 125 http://www.google.co.jp/reader/view/
- 97 http://dev.ariel-networks.com/Members/matsuyama/rsense-was-released
- 82 http://www.google.co.jp/reader/view/?hl=ja&tab=wy



資料中で1点気になる箇所がありますので、コメントさせて頂きます。
http://cx4a.org/pub/emacs-lisp-for-scripting.ja.html#.E4.BF.9D.E5.AD.98
バッファ → 保存 の最後の例(gnulize2.el)中で
replace-string 関数を使用されていますが、この間数は
This function is usually the wrong thing to use in a Lisp program.
です。スクリプトとして使用するならば問題なさそうに思えますが、
本資料で学習された方が自分の .emacs 等に同様の処理を追加するという場合に
まずそうなので、修正した方がよろしいかと思います。
「この方法は正攻法ですが、直感的には、Emacsには文字列置換機能があるのだから、それに関連した関数があるはずだと考えます。そしてreplace-stringなる便利な関数を見つけるのです。」という文があるので大丈夫だと思ってますがどうでしょう。
一点、JRubyのpatch部分について、ライセンスの記述があるとよいと思います。
> 「この方法は正攻法ですが、直感的には、Emacsには文字列置換機能があるのだから、
> それに関連した関数があるはずだと考えます。
> そしてreplace-stringなる便利な関数を見つけるのです。」
> という文があるので大丈夫だと思ってますがどうでしょう。
最初に必要な関数を探し出す際には、直感的でいい表現だと思います。
ただし、replace-string に限らず、 previous-line, next-line,
beginning-of-buffer, end-of-buffer あたりはプログラム中で使用すると
副作用がありますので、
「中には副作用のある関数があるので注意が必要です」等の
警告文があればよいかと思います。
ただ、ここの説明が replace-match → replace-string の流れなので
ちょっとややこしいですね。下記の流れだと説明しやすいのですが。
・文字列の置換手段として replace-string があります。
・ただし副作用があります。
・なのでプログラム中では replace-match を使用しましょう。