| @技術/プログラミング

RVMを使ってます。RVMで入れたRubyがshebangに #!/usr/bin/env ruby と書いたときに呼び出されて欲しいと思ってます。シェルから

#!/usr/bin/env ruby

puts RUBY_DESCRIPTION

なファイル(hoge.rb)があったとします。これを

$ ruby hoge.rb

とシェルから呼び出したときにはちゃんと

$ ruby 1.9.2p136 (2010-12-25 revision 30365) [x86_64-darwin10.6.0]

と表示されます。しかしTextMateでRunしたときや、Apacheから同じshebangで呼び出したときには、systemのRubyが呼ばれます。

これ、もう半年くらい解決方法探してる気がする。

TextMateでRunしたときにsystemのRubyが呼ばれるのはともかくとして(テストするときはシェルから呼び出すのでRVMのRubyで実行できる)、Apacheで新しめのRubyを使いたいときはどうすればよいのでしょう。まさかshebangに ~/.rvm/bin/ruby-1.9.2-p136 とか書くんじゃろか。

cxxさんに質問したら RVM: Ruby Version Manager - Installing RVM System Wide というURLを教えてもらった。今日は眠いのでまた今度試す。

| @技術/プログラミング

Ruby 1.9、Rails 3、RSpec 2で開発してる。いままでRubyとRailsになれるのに一杯一杯でテスト駆動開発できてなかったので、きちんとテストファーストでやることにした。

そんで環境を整えてたんだけど、RSpecはRails 3に合わせてVersion 2が出てるみたい。しかも結構変わってる。

$ spec -c spec/*

とかやってもエラーが出る。 which spec すると /usr/bin/spec と出ちゃう。どうやら spec で発動されるのはRSpec 1.3のものみたい。

RSpec 2からはコマンド名が変更されており、テストコードを実行したいときは以下のように書くみたい。

$ rspec -c spec/*

これできちんとテストコードが実行された。かと思いきやFailureが。

Ruby 1.9で動かしてるから、コードの中に日本語を書くときは一行目に

# -*- coding: utf-8 -*-

と書いてテキストエンコーディングを明示してあげないといけない。

| @技術/プログラミング

いやまぁテキストエディターにはいろいろあるわけでして、皆さんEmacsとかVimで日夜しこしこコードを書いておられると思うんですけど、僕はGUIしか使えない情報弱者なので主にTextMateを使ってます。

TextMateで便利なのが "Run" っていう機能です。Rubyのコードを書いていて、 + R でさくっと実行結果を確認できます。いちいちTerminal開いて

$ ruby hogehoge.rb

とか面倒くさいことをやらずにすみます。

で、これからが本題なんですけど、先月Ruby 1.9.2がリリースされて、さらに gem update でRails 3が入るようになってしまったので、お試しでRuby 1.9.2とRails 3を使ってみることにしました。しかし1.8系を完全に捨てることは恐ろしいので、RVMを使って複数のバージョンのRubyを切り替えながらしばらく過ごしてみることにしたわけです。

上に書いたとおり僕ちゃんは情報弱者なのでTextMateに依存したコーディングライフを送っており、 + R で動くRubyもRVMのRubyにしたいと思ったのですが、これが分からなかった。RVMのサイトを見たらいろいろごちゃごちゃやり方が書いてあるんだけど(RVM: Ruby Version Manager - Textmate Integration with RVM)、結局この通りにやってもうまくいかず。

しかし先ほどなにげなく

$ rvm 1.9.2 --default

としてあげたところ、TextMateでもRVMのRubyが走るようになりました。

| @技術/プログラミング

RubyKaigi 2010に行ったのでその感想を軽く。

自分のスペック

Rubyは使い始めて8ヶ月くらい。元々何もできなかったのでいまも初心者レベル。プレゼンテーション聞いてても分からないことが多かった。

感想

永和システムマネジメント永和システムさんの「Head First ふつうのシステム開発」は面白かった。プログラミングのやり方を人から教わったことがないので、普通の会社はこうやって開発してるんだってのが分かった。テストの様子を見られて参考になった。あとVimがすごくカスタマイズしてあってすごかった。用事があって途中までしか見られなかったのが残念。

MongoDBについてのプログラム(Practical Ruby Projects with MongoDB)で、気にはなっていたけどよく分からなかったMongoDBのことがより一層気になった。情報の連結とかそういうコムズイことはSQLでやるんじゃなくてプログラム側でやるべき、ってことなのかな。

クックパッドのセッションも見学した。CTO氏が質疑応答で「専属デザイナーはいなくてデザインもできるプログラマーがデザインやってる」って言ってたのにびっくりした。大規模サービスをやってたら負荷分散のテクニックとか参考になったかもだけど、自分が作ってるサイトは多くても5000UU/日くらいなので「ふーん」という感じで聞いてた。

東京とつくばの移動に時間がかかったこと、他にも予定があったこと、帰りの飛行機の都合、などなどであまりゆっくり参加できなかったのが残念だったです。28日は用事があったので基調講演見られないから生Matzを拝むの諦めてたけど、Jeremy Kemperの基調講演がキャンセルになったかわりにトークセッションがあってて、そこにMatzも登場しててRubyの教祖を拝めたのでまぁ良かったと思います。あとジュンク堂RubyKaigi支店でで技術書買いすぎて散在した!

2010年9月26日修正

すみません、永和システムマネジメントさんのことを「永和システムさん」と書いてました。はてブのコメント欄で角谷さんに指摘されてた!

| @技術/プログラミング

「PHPは汚い、Rubyはきれい」とかそういう言説の意味が昔は分からなかったんだけど、昨日今日、久々にCakePHPで作ったサイトのメンテナンスをしてて「PHP、確かにきちゃないわ」と思った。

オブジェクト指向っぽい何がしかのコードをPHPで書いてみる。

<?php
class Hoge {
  var $a; 
  function hoge() {
    return $this->a = "hogehoge";
  }
}

$fuga = new Hoge();
echo $fuga->hoge();
?>

つぎにRubyで同じコードを書いてみる。

class Hoge
  @a  
  def hoge
    @a = "hogehoge"
  end
end

fuga = Hoge.new
puts fuga.hoge

まずPHPは中括弧たくさん書かないといけない。これが面倒くさい。中括弧はキーボードでは shift + [ とか shift + ] とかだから、 shift の分だけキーボードをたたく回数が増える。実にめんどい。最初はRubyのインデントでブロックを表現するところに慣れなかったけど、慣れたらちまちま中括弧をかかないとダメなPHPにいらいらするようになった。中括弧の閉じ忘れでエラーが出ることとかも多いし。

さらにメソッドとか変数へのアクセスもめんどい。Rubyだと . でアクセスできるのに、PHPだと -> だ。入力するときはキーボードに -shift + . と打たなきゃいけない。アホか。Rubyだとキーを一個打つので済むのが、PHPだと三個だ。

他にも予約語が長いとか、変数のスコープがおかしいんじゃねとか、Rubyを触る前は分からなかったPHPの変態的なところが目につくようになってきた。

PHPちゃん、僕もう疲れたよ(特にCakePHPの配列地獄)。

| @技術/プログラミング

XREAでRailsを使おうと思っていろいろ調べてみた。Railsは rake rails:freeze:gems してアップロードすればオッケーらしいんだけど、RubyGemsはインストールしないといけないみたい。ところがネットに乗ってる情報を参考にインストールしてみたけど全然うまくいかなかった。指示通りにやってるんだけどパスが通らないのか、インストールしても 'rubygemsをrequireできねーぞゴラ!' みたいなエラーが出る。

.profile で記述した GEM_HOMERUBY_LIB のパスは間違ってないと思うんだけど、何回やっても $HOME/lib/ 直下にRubyGems系のファイルが展開されてしまう。これがエラーの原因っぽい。しょうがないので力業で guantlet_rubygems.rb, rbconfig/ rubygems/ rubygems.rb, ubygems.rb$HOME/lib/ruby/site_ruby/1.8 に移動させた。その後 source ~/.profile して適当な場所で gem -v してみたところ、ちゃんと 1.3.5 と表示された。

蛇足だけど最初、RubyGems 1.3.7をインストールしようとしたら、利用予定地のサーバーのRubyのバージョンが1.8.5なためにインストールできなかった。そういうわけでRubyGemsは1.3.5を入れた。

あとRubyGemsが入ったからといってシェルで gem install rails とかやってもプロセスを kill されるっぽいのでよい子のみなさんは必要な gem は自分のパソコンでインストールしてからアップロードした方がよさげです。

| @技術/プログラミング

irbが素晴らしい! 惚れた!! PHPとかクソ!!!