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 として存在している 

HTC Evoで使ってるアプリまとめ

とりあえず現状で一回まとめ。

  • AlarmDroid
    • 標準の時計のアラームのスヌーズがなぜか10分間隔固定だったので
  • android.icio.us
    • 文字化けせずに普通に使えそうだったので
  • AndroIRC
    • 他にもいくつかあったけど見た目が黒背景しばりじゃなくてちゃんとパスワードの設定ができた
  • Calendar Pad
    • Evo の画面をちゃんと使い切ってくれて月の表示のままでもある程度スケジュールが分かるため
  • Dolphin Browser HD
    • 標準のブラウザの開けるウインドウ枚数が少なすぎるため。Firefox も Opera も試してみたけどしっくりこなかった
  • Dropbox
  • EasyTether Lite
    • Mac では HTC Sync が使えないので USB テザリングの際に必要なため
  • Evernote
  • Flick Note
    • Simplenote は Android 公式アプリがないので
  • Foursquate
  • iPaper
    • いくつか試した instapaper クライアントの中でよさげだから選んだはずなんだけど、なんか market で見つからない…
  • iReader
    • CHM Reader として
  • iSyncr
    • リンク先は Mac 用
  • K-9 Mail
    • 結構使ってる人多いみたいなんだけど、個人的にはクセが強いような気がする。気が向いたら乗り換えるかも。
  • LDRMate
    • ちゃんと FDLR にも対応してたので
  • NHK時計
    • どうしても常にアナログ時計を表示し続けていたい場合に利用
  • QE Droid
  • QR Droid private
    • なんかとりあえず
  • Rememeber The Milk
  • SDReader
    • ファイラ。本当はこういうの使いたくないんだけど、たぶんあった方がいいので。
  • Simeji
    • フリックと四方向のカーソルキーがあるため
  • StarBooks
  • Task Manager
    • 教えてもらった。タスクスイッチャとしても使えるのと auto kill list が便利
  • twicca
    • 正直操作性がイマドキどうなんだろうと思わなくもないけどキビキビ動くし総合的にはいいと思う。最近なぜか Evo だと WiFi で利用しているときによくネットワークを見失う。
  • Widgetsoid
    • いろんな設定や確認をホーム画面上で行えるウィジェット。Apple の OS がとてもよくできていると思うことの一つは設定操作のシンプルさ。これは OSX も iOS も変わらない。OSX に対して Windows の設定が、iOS の設定に対して Android の設定が、とてもまどろっこしく遠く感じる。だからこそこういう設定系のソフトがわんさかあるんだろう。とりあえずメモリ/バッテリの状態表示、ミュート(サイレント)、WiFi/GPS の ON/OFF, 画面の縦横の切り替えに反応するかどうか、オートロックを掛けるかどうか、USB接続時にメモリーカードモードにする、などをホーム画面から操作できるようにしてある。便利。
  • ウェザーニュースタッチ
    • 正直重たくてあまり好きではないんだけど、時間ごとの気温の変化が分かりやすく表示されて Android 対応のアプリはこれくらいしかたぶんない。1

正直、不満は少なからずある。特に設定周りの煩雑さをウィジェットで補わなければいけない部分、SDカードのマウント/アンマウントで気を使わなければいけない部分、ePub, CHM のビュワー環境がかなり貧弱な部分など。

でもだいぶ慣れた。

ちなみに iOS の方は

こんな感じ。少ない。

  • AeroReader
  • Dropbox
  • Echofon
  • Evernote
  • Google Mobile Apps
  • Simplenote
  • Kindle
  • RubyHelper

有料のもの

  • iChm
  • iDisplay
  • Limechat
  • Prowl

iDisplay と Prowl は買っただけでまったく有効に使えなかった。

  1. 海外のデータをもとにしてるやつはだいたいちょっとおかしい。 

プログラミング入門者ではない人間が新しく言語を学ぶ際に気になること

あるいは Python-FIT 第0回に参加したでござるの巻。

Python-FIT とは北陸の Python 勉強しようグループです。Google group のページはまだ何も書いてないですけど。

場所は福井の Web 制作会社サーフボードさんのセミナールーム(?) 開発(かいほつ)で開発(かいはつ)されてます1

輪にテーブルを並べて集まる形は初めてだったけど、これはいいな。

進行がグダグダに見えてやたら濃いめの話ありーの無茶振りありーので不思議なバランスの勉強会だった。自分の中では

  • Python に何を求めているのか?
  • Python の何を特に知りたいのか?

が全然明確になっていないことがよく分かった。

これまではなんか Python は進んだ取り組みも多く、「参考になる +5」みたいな印象で情報だけつまみ食いする感じでつきあっていたんだけど、改めて Python を自分で触るとなると何がしたいのかは実はよく分からない。Ruby に特に大きな不満はないし、Pyton のメリットは GAE でネイティブで動くこと?みたいな感じになってしまっている。

何が分からないと不安か

しかし久しぶりの新しい言語、何かはつかみたいと思い、まずは自分なりに Python を知ろうと手を動かし始めて、急に気がついた。

  1. ライブラリの入手、検索方法が分からない
  2. 言語およびライブラリのドキュメントの見方が分からない
  3. 何を揃えておけば自律的なユーザーになれるのかが分からない

これは不安だ。

Rubyでは何を知っていて安心なのか

例えば Ruby に置き換えると、無料で手に入る分だけで

  1. Rubygems 使え2
    • Ruby 1.8 ではシステムの package、あるいは setup.rb で Rubygems をインストールして、あとは gem の使い方を覚える
    • Ruby 1.9 では Rubygems は標準なので gem の使い方を覚えるだけ
  2. ri か refe. 自分は refe は使っていないのでよく分からない
  3. 上で挙げた ri, refe 以外に以下のサイト、サービス

こんな感じ。

Pythonの分を調べてみた

これが Python で今のところ分かってる範囲では

  1. easy_install でインストールできる
    • 最近は pip なのかな?
  2. pydoc ?
  3. 以下のサービス

特に 2 のドキュメントの見方が分からないのは痛いのでなんか記憶を頼りに手を動かしたら

pydoc

って言葉が出てきた。zsh で

$ pydoc <TAB>

と打ったらなんか補完された! これでいろいろ読める! かと思ったらライブラリは補完されてないような? あくまで文法や機能の説明用なのか? perldoc や ri のように非標準ライブラリも補完してほしい。

いや、待てよ?

$ pydoc help

お。modules って入れるといいらしい。

$ pydoc modules

なんか module がいっぱい出てきた!

$ pydoc modules setuptools

おぉ、setuptools のドキュメントが読める! よしよし、これで terminal から離れずにあれこれやれそうだ!

easy_install は setuptools でした。インストール方法はまた今度まとめるかも。

※ ついでに phpdocr っていう php のドキュメントをコマンドラインで表示できる gem を見つけて何コレと思ったけど、中身は php.net のドキュメントを Mechanize で検索して引っ張ってくるだけっぽかった。イラネ。

  1. 福井県人にはたぶん全然面白くない 

  2. setup.rb もあるよ! 

ちょっと環境整備

イントラのフィードは Thunderbird で

常用ブラウザである Camino でフィードを読むのは難しいので、イントラのフィードはどうしようかと先送りにしてきたんだけど、Firefox の Sage で auto-discovery から引っこ抜いて、これを opml export して Tnunderbird で読むことにした。ブラウザでもメーラでもないアプリをわざわざそれ用に立ち上げるのもだるいし、ティッカーってゆうの?あの画面上に居座るやつ。あれも XGA の環境では非常に使い勝手が悪い。メールチェックはどうせするので Thunderbird に一本化という形に。

フィードが増えた場合はまた Sage からスタートし直しってことで。

ただこれ、メッセージの表示スタイルをプレーンテキストにしてあると、プレーンテキストのフィードがない場合に何も表示されないという欠点があるんだな。まぁ description に HTML を放り込んでるような無作法なフィード1が悪いっちゃ悪いんで、あんまり気にしないことにしよう。

[追記] ダメだった。Trac 0.10.x になっても HTML しか存在しない Feed だったので Thunderbird で plain text しか表示しないようにしてると中身が見えない。まぁ commit message は Subject に出ているのでそれ見りゃほとんど分かるし、リンク辿れば詳細は分かるしなぁ…。なんか微妙。

ヒマがあったら Fresh Reader - Fast RSS feed reader - boost your productivity - とか試してみるべきか。

localhost を utf-8 で Emacs 22 に

Emacs 21.3.50 では、なぜか ruby-mode になっても色分けされたりされなかったりするという謎の現象をずっと引きずっていたんだけど、Emacs 22 にしたらとりあえず問題なさそう。ついでに

(set-default-coding-systems 'utf-8)

にして全面的に utf-8 に移行。

(load "ls-lisp")

して Emacs 立ち上げ時に LANG=C にするとかいう小細工もやめる。ついでに

(setq grep-command "lgrep -n -Au ")
(setq grep-program "lgrep")

してエンコーディングの混ざった状態でも正しく grep の結果を受け取れるように。

physical-line-mode は動かないらしいので以前どこかで見つけた別なコードをコピペ。(というかコメントアウトしてあったのを戻しただけ。)

色の問題は以前解決済みなので無問題。

速いし、OSX 上で日本語ファイル名を認識できるし、とりあえず言うことなし。やっと Terminal が OSX のデフォルトのエンコーディングに戻りました!

他の環境ではとりあえず screen の

encoding eucJP UTF-8

とかでしのぐことにする。

  1. Trac の Timeline の feed なんだけど、バージョンが古いせいかな? そのうちアップデートするんでそのときまた考えよう。 

onLoading が変?

先日書いた Ajax のテスト を得意げに動かそうとしたら…。

Windows 版 Firefox で動かねぇ! えー。Safari で動かないのは確認してたけど。

見たらどうも Ajax の request を投げる際の options の onLoading でセットしたものが Complete したあとに復活してる! どういうこっちゃ。Windows IE, Windows Firefox 1.0.7/1.5.0.3, Safari 1.3 が同じ挙動。Mac Opera 8.5x, Mac Firefox 1.5.x は狙い通り動いている。

あと Safari 1.3 で dblclick が拾えないなぁ。Javascript - Event compatibility tables によると拾えるはずだし、ここのテストページではちゃんと動いてるんだけどな。

まぁとりあえず dblclick はあんまりよくないかなぁと思って使わないようにすればいいやっていうのと、onLoading に書く処理を Ajax request そのものの前に書いて、onLoading を消したら狙い通り動いた。

ここに書く
var options = {
  onLoading: function() {
    ここに書くのはやめる
  }
}
new Ajax.Request( URL, options );

うーん、そういうもんなのか。そういうもんなのか?

About

例によって個人のなんちゃらです

Recent Posts

Categories

Tool 日々 Web Biz Net Apple MS ことば News Unix howto Food PHP Movie Edu Community Book Security Text TV Perl Ruby Music Pdoc 生き方 RDoc ViewCVS CVS Rsync Disk Mail FreeBSD Cygwin PDF Photo Zebedee Debian OSX Comic Cron Sysadmin Font Analog iCal Sunbird DNS Linux Wiki Emacs Thunderbird Sitecopy Terminal Drawing tDiary AppleScript Life Money Omni PukiWiki Xen XREA Zsh Screen CASL Firefox Fink zsh haXe Ecmascript PATH_INFO SQLite PEAR Lighttpd FastCGI Subversion au prototype.js jsUnit Apache Trac Template Java Rhino Mochikit Feed Bloglines CSS del.icio.us SBS qwikWeb gettext Ajax JSDoc Rails HTML CHM EPWING NDTP EB IE CLI ck ThinkPad Toy WSH RFC readline rlwrap ImageMagick epeg Frenzy sysprep Ubuntu MeCab DTP ERD DBMS eclipse Eclipse Awk RD Diigo XAMPP RubyGems PHPDoc iCab DOM YAML Camino Geekmonkey w3m Scheme Gauche Lisp JSAN Google VMware DSL SLAX Safari Markdown Textile IRC Jabber Fastladder MacPorts LLSpirit CPAN Mozilla Twitter OpenFL Rswatch ITS NTP GUI Pragger Yapra XML Mobile Git Study JSON VirtualBox Samba Pear Growl Mercurial Rack Capistrano Rake Win RSS Mechanize Sitemaps Android JavaScript Python RTM OOo iPod Yahoo Unicode Github iTunes God SBM friendfeed Friendfeed HokuUn Sinatra TDD Test Project Evernote iPad Geohash Location Map Search Simplenote Image WebKit RSpec Phone CSV WiMAX USB Chrome RubyKaigi RubyKaigi2011 Space CoffeeScript Nokogiri Hpricot Rubygems jQuery Node GTD CI UX Design VCS Kanazawa.rb Kindle Amazon Agile Vagrant Chef Windows Composer Dotenv PaaS Itamae SaaS Docker Swagger Grape WebAPI Microservices OmniAuth HTTP 分析基盤 CDN Terraform IaaS HCL Webpack Vue.js BigQuery Middleman CMS AWS PNG Laravel Selenium OAuth OpenAPI GitHub UML GCP TypeScript SQL Hanami Document SVG AsciiDoc Pandoc DocBook Develop Jekyll macOS Node.js Vite Heroku Transformer AI Data Cloud Wasm