NetBeans 7でRails 3開発環境を作ってみた

完全にお試しです。ゴリゴリ開発するところまでは行ってません。

コマンドラインスキーの自分がなんでこんなことやったかというと、

  • コマンドラインだけだと適性のある人以外に伝えるときにある程度以上つきっきりにならざるを得ないこと
  • 身の回りからちょっと広い範囲の間になんとなく Rails やってみたい人が増えてる感

の二つが大きいです。自分自身の普段の作業の効率という意味で乗り換えることはあり得ませんが、かといって説明や共有不能な状態のままというのもいかがなものかなぁという感じですね。

これはエディタについても当てはまっていて、自分は Emacs で満足しているけど、決してこれはオススメではないと思っています。ターミナル + Emacs でしか Rails の話ができない状態は、インターフェイスとしてとてもよろしくない。少なくともそういうのが得意なエンジニア以外には自分は Rails の説明をすることすらできません。ターミナルを見せた段階で引かれます。

まぁ少し誇張してますが、概ね事実です。入り口として terminal + emacs である必要はまったくない。そこで別な選択肢を試してみようと思いました。どれくらい作業できそうかなと思って。

Eclipseは厳しい

まず Eclipse を試しました。以前 Titanium Mobile を試した際に Aptana が入っているので。これは一応 Ruby および Rails 対応のはずです。

自分は Eclipe の経験がないわけではありません。昔、数ヶ月ほど Eclipse で PHP を書いたり DB を覗いたりしていた時期もあります。

しかしきつかった。コマンドラインの知識があるとこの操作体系は飲み込むのが難しいです。例えば rake に入っている migration が commands に入っているかと思えば generator はどこにいった?1といった具合です。commands って書かれているのを見たら何かのコマンドが実行するのを期待すると思うのですが、コード補完だったり、ちょっと意味がよく分からない。

あとインストールすらしてない機能がメニュー上に最初から存在しているのもちょっとどうなんだろうという感じ。要するに自分の中の IDE に対する苦手意識を増幅するものがすべて揃っています。

情報がありすぎて何したらいいのか分からない

さらに悪いことに操作体系に一貫性があるように見えず、なんでこれがここにあるの?と感じてしまい、なまじコマンドラインの知識があると混乱します。これではコマンドライン側の人間として歩み寄ってコミュニケーションを取るのは難しいです。

NetBeansのRuby対応はpluginに分離している

NetBeans 自体は知っていました。Ruby に対応しているという話も知っていました。そして NetBeans 7 から Ruby 対応が外れたことも知っていました。

実はこの分離した時点で不安があったので今まで試さずにいました。でもそれは間違いでした。特に plugin の説明の記述が古くて Rails 2.3.x 対応と書かれていますが、実際には普通に Rails 3 で開発できると思います。これを試した2012年5月現在も、これを書いている6月現在もちゃんとメンテナンスは続いています。むしろ開発を継続しやすいように本体から分離したのかもしれません。Rails は変化が速いですから。

以下、Netbeans + Rails plugin について感じたことを並べますと、

  1. NetBeans は Eclipse より軽快に動く
    • ちょっと肩すかしというか、なんだこれ?あれ普通に使えるんじゃないの?と思ってしまう感じでした。
  2. メニュー構成も Aptana より素直で分かりやすい
    • IDE 音痴の自分でもあまり迷いません
  3. rvm で入れた Ruby も普通に認識して動かせる
    • 試してないけど rbenv についても同様にいけそうな感じです
  4. ただし bundler 前提は難しい

最後がイマドキの Rails および gem 開発ではとても惜しいのですが、入り口としてはだいぶいいと思います。「とりあえず localhost の環境で開発できる」という意味ではなんら支障はありません。

なんだ、NetBeans でいいじゃん

というのが正直な感想です。

ただ、気をつけることはいくつかあります。

2012-05時点で気をつけること

最初のRailsのインストールは面倒見てくれない

rails コマンドが使えればそこから今回のプロジェクトに使う雛形を作り開発を進めることはできますが、その最初のハードルを越えることは NetBeans + Rails plugin の範疇ではありません。そこは誰かのサポートを得るか、頑張ってコマンドラインを使うか、最近では RailsInstaller の力を借りる必要があります。

RailsInstaller は Windows 版もあり、素の環境に Ruby が何一つなく、rvm など考える必要がない Windows の方がこれからは最初の環境を作るのは楽なのかもしれませんね。native extension な gem が絡んでくると難しくなりますが。

rvm環境ではgemのPATHが合っていない

GEM_PATH が Mac 標準のものしかない。

rvm で入れた ruby バイナリは正しく認識できるのに gem PATH が合ってないので、まともに作業を始めることができません。これが rvm 環境に特有の現象かどうかは分かっていませんけど、たぶんそうなんじゃないかな。rvm 環境だと GEM_PATH は動的に変わりますからね。なんとなく Mac 標準の Ruby であれば大丈夫そうに見えますが、さすがにそれはオススメしたくないですしねぇ…。

ただし対処方法はあります。

  1. メニューから [ ツール ] -> [ Ruby Platform Manager ] を呼び出して Gem Path を追加する
    • . から始まるフォルダを開かなければいけないので注意が必要
  2. Mac だと ~/.netbeans/#{VERSION}/build.properties ファイルがあり、この中の rubyplatform.Ruby_#{num}.gem_path を書き換える

自分の環境は 10.5 だったせいか GUI からうまく ~/.netbeans フォルダを開くことができなかったので、2 の方法を使って直接ファイルを書き換えました。

例えば自分の環境で NetBeans 7.1.2 を入れている状態では

/Users/watanabe/.netbeans/7.1.2/build.properties

というファイルがあり、この中にもろもろ設定があります。ruby platform manager 関係の部分を抜粋するとこんな感じ。

...
rubyplatform.Ruby_0.ruby_version=1.9.2
rubyplatform.Ruby_1.gem_home=/Users/watanabe/.rvm/rubies/ree-1.8.7-2011.12/lib/ruby/gems/1.8
rubyplatform.Ruby_1.gem_path=/Users/watanabe/.gem/ruby/1.8:/Users/watanabe/.rvm/rubies/ree-1.8.7-2011.12/lib/ruby/gems/1.8
rubyplatform.Ruby_1.gem_version=1.5.3
rubyplatform.Ruby_1.interpreter=/Users/watanabe/.rvm/rubies/ree-1.8.7-2011.12/bin/ruby
rubyplatform.Ruby_1.ruby_kind=Ruby
rubyplatform.Ruby_1.ruby_lib_dir=/Users/watanabe/.rvm/rubies/ree-1.8.7-2011.12/lib/ruby/1.8
rubyplatform.Ruby_1.ruby_patchlevel=357
rubyplatform.Ruby_1.ruby_platform=i686-darwin9.8.0
rubyplatform.Ruby_1.ruby_release_date=2011-12-28
rubyplatform.Ruby_1.ruby_version=1.8.7

この中で gem_path を : でくっつけて並べた(Unix風のパスの記述なので Windows は違うかも)というわけです。

rakeが動かない

NetBeansでRails3のRakeタスクが取得できない - 雨の降らせ方

です。

これは NetBeans に限らず rake が 0.8 から 0.9 になった段階であちこちで起きたうぎゃー動かないと同じ話かもしれません。とりあえず今から Rails 3 を始めようと思ったら上の設定はしとかなきゃ、で覚えてしまってよいと思います。

まとめ

何カ所かハマりポイントがあるので本当の初心者に自信を持ってオススメします!とは言いにくいですが、まぁ許容範囲かなと思えますし、とりあえず今後自分はいろいろ分からないけどやってみたいという人がいたら NetBeans + ruby plugin でいんじゃね?と言うと思います。

  1. call generate script として存在している 

More