1 月 31 日に、ついに、 Ruby 1.9.1 がリリース されました。作業をされたみなさん、ありがとうございます。 このリリースは、1.9 系統初の安定版リリースです。 Ruby 1.9 については、 今号のるびまにもいくつかの記事 (Ruby M17N の設計と実装、Ruby 1.9 で Web アプリを想定したベンチマークをとってみた、Ruby 仮想マシン・ガチンコバトル (2008 年 12 月版)) がありますが、 るびま以外にも多くの皆さんが記事を書いてくださっています。
Yuguiさんも、「Ruby 1.9 はそろそろ、普段のスクリプトに使う程度には耐えら れる動作安定性/仕様安定性になりました。あとはみんなが使ってくれないと改 善されません。」とおっしゃっている1 ように、これからは皆さんにも Ruby 1.9 を使ってもらえるとうれしいです。 この記事では、 あわよくば読者の皆さんにも Ruby 1.9 系列を使ってみてもらえることを願って、 既に Ruby 1.9 系列を使ってみた皆さんの記事を紹介します。
これらの記事は、ささださんの呼び掛けに応じて、 1.9 Links に集められたものの一部です。 URL を追加してくださった皆さん、ありがとうございます。
(執筆・編集: zunda)
松江 Ruby 会議 01 でのパネルディスカッションと ささださんによる Ruby 1.9 の紹介記事についてまとめたあと、 Ruby 1.9 でスクリプトを書く人や Ruby 1.8 のスクリプトを Ruby 1.9 に対応させる人向きの記事を紹介します。
http://www.ustream.tv/recorded/1116584
松江 Ruby 会議 01 に、Ruby 開発者の皆さんが集まり、 パネルディスカッションが開かれました。 ここから、Ruby 1.9.1 について、また Ruby 1.8 からの移行についての議論を まとめておきます。
移行する時の手順。下記のようにすれば、 「誰でも比較的簡単に移行できるのではないかと思います。」
まず、Ruby 1.8.6 を使っているプログラムは、Ruby 1.8.7 に対応させる。 Ruby 1.8.7 で警告を表示するオプションをつけてプログラムを起動すると、 標準エラー出力などに、例えば、String#each や String#map など、 Ruby 1.9で動かなくなる機能について警告が出る。 それらについては、Ruby 1.9 でどうなっているかを調べて修正していく。 Ruby 1.8.7 には Ruby 1.9 の便利な機能を大胆に取り入れてある。
次に、このプログラムを Ruby 1.9.1 で実行しようとすると、 日本語を使っている場合には Syntax error が出る。 これを回避するために、マジックコメントを追加して、 文字列のエンコーディングを指定しないといけない。 指定していないと Ruby はスクリプトを US-ASCII として解釈してしまう。
次に、ブロックローカル変数に関連して、Syntax error が出る。これを直す。
プログラムが走るようになると、 文字列のエンコーディング関連のエラーやバグが出る。 このようなプログラムには、 従来から文字コード関連のバグがあった可能性があるのでよろこんで直す。
さらに、一部のライブラリが削除されたので、 それらに依存しているプログラムは動かなくなる。 削除されたライブラリはほとんど使われていないはずだし、 ほとんどには代替のものがあるはずなので、それを使ってほしい。
また、いままで依存していたライブラリが Ruby 1.9 に対応していない場合がある。 Ruby 1.8 系列と Ruby 1.9 の間でライブラリの API が変化したので、 バイナリのライブラリの場合は再コンパイルが必要な場合がある。 API の変化が大きすぎて再コンパイルできない場合は、修正して作者にパッチを送る。
Ruby 1.8 までは、2 番目の数字が偶数なら安定版、奇数なら開発版だった。 Ruby 2.0 は、 いつか手に入る理想の Ruby としてバージョン番号を出し惜しんでいるので、 Ruby 1.9 については、1.9.0 が開発版、1.9.1 以降は安定版という位置付けになる。
このように、Ruby 1.9.0 と比較して、Ruby 1.9.1 は言語の仕様が 当面これで安定する、という段階に逹っした。 今後は、1.9.1 では、1.8 系列と同じくバグが発見されたらつぶすことになる。 実装の面でも、テストがだいたい通るまでの品質にできた。
Ruby 1.8 系列と比べて、最も大きい変化は、Multilingualization (M17N)。 これまでは、コードセット非依存な実装が可能かどうか疑問がもたれていたが、 Ruby では成功した。
ブロックローカル変数については、スコープが変更になったので、 Ruby 1.9 系列では動かなくなるプログラムがあるかもしれない。
この他、Hash に順序がついた、キーワードっぽい引数が使えるようになった、 「lambda」の代わりに「->」という記号が使えるようになったなど、 300 - 400 くらいの機能が追加された。
コアのエンジンの部分をバーチャルマシンにして性能を向上させた。 文字列まわりには M17N で便利になった代わりに少し遅くなる部分もある。 パフォーマンスの特性が変わった。 「JRuby と同程度に Ruby 1.9.1 は速いので、適材適所で使ってみてください」 とのことです。
パッケージマネージメントシステム RubyGems やビルドシステム Rake が 標準添付になった。 有理数や複素数のクラスが組み込みになった。
この他、クリーンなテストライブラリ minitest、 Ruby プログラムのパーサ Ripper、素数を含めた数学関連のライブラリ、など びっくり箱のように楽しめる。 プロセスを、シェルを介さずに起動できる spawn 関数もうれしい。 Time がナノ秒を扱えるようになったなど、細かい変化もたくさんある。 ドキュメントに書かれていない機能を見つけたら、 ドキュメントを送ってもらえるとうれしい。 なるべくドキュメントを書くようにしているが、 忘れているものもあるかもしれないので。
RubyGems に対応したライブラリはたくさんあるが、 便利なパッケージは Ruby の実装のコアの部分を扱っているので 1.9 ではまだ動かなかったりもする。
http://www.atdot.net/~ko1/activities/#idx12 (KyushuRubyKaigi00_ko1.pdf をご覧ください)
「Ruby 1.9 を最近使い出した newbie」ささださんによる、 「最新の Ruby の今」の紹介です。
というわけで、M17N 以外にも、Hash の拡張、Enumerator、 組み込みクラスやメソッドの変更、文法の変更、ライブラリの拡張、 Fiber のサポートなどについて網羅的に紹介されています。
使う人も迷ってる人も一度眺めておくといいよ。
http://d.hatena.ne.jp/ku-ma-me/20090126/p1
ku-ma-meさんによる「あとで読まれる」ための記事。 もう、1 年ちょっと Ruby 1.9 を使っているとのことで、 Ruby そのもののソースコードの美しさや、 マジックコメントなどの多言語化についてまとめていただいています。
ku-ma-meさんが好きな新機能ベスト 3 は
だそうです。『これらのおかげで、だいぶ関数型プログラミングがしやすくなっ たと感じてます。というか、ぼくが知ってる言語の中では「Haskell の次にリス ト処理がしやすい言語」です。』ほら、そこの関数型脳のみなさん。いかが?
http://d.hatena.ne.jp/nagachika/20090121#ruby_1_9_1_migration_try
nagachika さんの PB memo より、「仕事のプロダクトが 1.9 でどの程度動 くかまた挑戦してみ」た記録。仕事のプロダクトですよ!
コードにいくつかの修正をすることで、「とりあえず動いたかもという 状態にはな」ったとのことです。インパクトが大きいのは、やっぱり encoding 関連だったそうです。
が大切でしょうか?
「正直 1.9 系を本気でプロダクトで使ってリリースするのはまだ早いん じゃないかとも思いますが、…かねてから要望があったものの 1.8 では 実現の難しかった項目が解決 or 対応の可能性ができる」そうです。 というわけで、お仕事にお使いのみなさん、今なら「1.9.1 の正式リリー ス前に踏めるバグは踏んでお」けますよん…あ、正式リリースは過ぎち ゃいましたけど。
http://d.hatena.ne.jp/xibbar/20090126#1232946944
「東北の福島へ Ruby on Rails で U ターンしちゃいなヨ!」の xibbar さんが、 ご自身の仙台 Ruby 会議 01での 発表から M17N に関する部分をまとめてくださいました。
重要なこと
この他、Encoding クラスについての解説や、 外部エンコーディングの設定の仕方もまとめてくださっています。 はい、みなさんご一緒に、「マジコメっといてくださいね。」
http://d.hatena.ne.jp/conceal-rs/20090119#1232348671
Rust Stnard さんが、 David A. Black さんによる 2009 年 1 月の記事 「10 things to be aware of in moving to Ruby 1.9」 を翻訳してくださいました。
「これは Ruby 1.8 のコードを Ruby 1.9 で動くようにするために必要な変更点であり, 知らなければひどい目にあいそうな事項のリストである」
「これらの変更に注意を払っていれば,…バージョン 1.9 やその先でも Ruby のファンでありつづけられるでしょう」とのこと。 がんばろー!
http://d.hatena.ne.jp/rubikitch/20090126#1232964347
「Ruby 1.9 に移行する際に注意すべき 10 のポイント」 のなぜ「Symbol が String のようになった」のかという疑問への、 rubikitch さんによる、回答。
『Ruby 1.9 ではメソッド名に限らず、ありとあらゆる「名前」が Symbol で返されるようになる』し、「動的にメソッド名を得たりとか」したい ので、致し方ない、とのことです。
Ruby に限らず、一瞬キモいと思ってしまう仕様変更って、 けっこうありますよね。
http://d.hatena.ne.jp/hs9587/20090127#1233044886
ふだんは「Rubyで win32ole 経由で (Adobe) Illuistrator を自動操作」している hs9587 さんによる、Racc の Ruby 1.9.1 対応の記事です。
Racc 1.4.6 は Ruby 1.9.1 RC2 でちゃんと動いたとのことです。 すばらしい。
http://d.hatena.ne.jp/takehikom/20090129#1233169748
村川猛彦さんが、Ruby 1.8 と 1.9 の非互換生についての情報をもとに、 コードが Ruby 1.9 に対応しているか検証する 簡単なプログラムを作ってくださいました。
下記のいずれかに該当する Ruby スクリプト を指摘してくれるそうです。
これは便利そうです。
http://d.hatena.ne.jp/cyross/20090201#1233490888
「やっぱり Ruby は面白いですね」という cyross さんによる、 1 月 31 日に開催された 第 32 回 Ruby/Rails 勉強会@関西 の紹介と、cyross さんによる Fiber の紹介です。
Fiber の 3 つの特徴
をふまえて、Fiber のメソッドの説明とサンプルの動作の説明があります。
で、更に細かい操作ができるんですね。
そういうわけで、「みんな Fiber 使おう!」
C のレベルまで潜って Ruby を楽しんでいる方向けの情報を紹介します。
http://d.hatena.ne.jp/hajimehoshi/20081116#1226822973
hajimehoshi さんによる、ライブラリ開発者のための情報です。
ライブラリを Ruby 1.8 と 1.9 の両方に対応させるには、 まず、Ruby 本体の 1.8 と 1.9 を共存させて、 Ruby 1.8 は 1.8 の最新版 (1.8.7) に移行する。 exconf.rb を編集して、 それから ruby.h 以外のヘッダーをインクルードしている時には、 パスを変更することになるそうです。
せっかく作ったライブラリです。これからも末永く使われるようにしよう!
Ruby 1.9.1 RC1 より前の Ruby 1.9 に関する情報を紹介します。 残念ながら、るびま編集には、ご紹介する記事に書かれた Ruby 1.9 の挙動を Ruby 1.9.1 で検証する余裕がありません。 ごめんなさい。
http://d.hatena.ne.jp/rubikitch/20080508/ruby187
rubikitch さんによる記事。「Ruby 1.8.7 では Ruby 1.9 からの backport が とても多い。つまり、Ruby 1.9 のあのメソッドが Ruby 1.8 でも使えるよ うになったということだ!!」
2008 年 5 月の記事ですが、「数年以内に訪れるであろう Ruby 1.9 時代に備えて」 移行を始めるには Ruby 1.8.7 を使うのが良さそうです (Ruby 1.8.6-p287 以前と 1.8.7-p72 以前のバージョンには REXML の DoS 脆弱性があるので注意してくださいね)。 正直 Ruby 1.9 に移行するのはまだ早いかもしれないけれど、 将来「ぎゃっ」と言いたくないみなさんにお薦め。
http://d.hatena.ne.jp/Gimite/20080101/1199199332
Gimite さんが、 文字列オブジェクトの振る舞いについてまとめてくださってます。 open の第 2 引数も大事だよね。
http://d.hatena.ne.jp/macks/20071216#p1
MATSUYAMA Kengo さんが、Ruby 1.9 trunk (r14828) で遊んでみてくださ いました。『「おっ」と思った点』として、いくつか挙げていただいています。
「単項演算子 ! がメソッド扱いになり、再定義できるようになった。」 のは…
とか楽しすぎますね。
http://d.hatena.ne.jp/macks/20080102#p1
「Ruby 1.9 の新機能を調べてみた」 に引続き、MATSUYAMA Kengo さんによる M17N のまとめです。 Ruby 1.9 trunk (r14835) での、
についてまとめてくださいました。
http://eigenclass.org/hiki/Changes+in+Ruby+1.9
eigenclass.org より、2007 年 10 月現在の ChangaeLog の、 英語での網羅的なまとめです。 さて、Ruby 1.9.1 との差はいかほどか!?
http://wota.jp/ac/?date=20071216#p02
「The Kumagmatic Kumagrammers」っていうか 「ノk|*‘−‘)<ノリマツ!愛だよ、愛!」より、 2007 年 12 月の Rails 勉強会@東京第 25 回での、 ささださんの発表についてのまとめです。
「こういうときに apt で 10 秒後には速攻で試せるのが Debian の魅力だ。」 そう、みんな試すんだ!
http://www.tbray.org/ongoing/When/200x/2008/09/18/Ruby-I18n
「ongoing」の、String@each_codepoint があるよ!っていう記事です。 コメントも興味深い。
http://pragdave.blogs.pragprog.com/pragdave/2008/09/fun-with-procs.html
Dave Thomas さんによる、Ruby 1.9 の Proc オブジェクトについての記事。 curry メソッドを使うことで Proc オブジェクトをカリー化できます。
カリー化だけでも楽しいけれど、Proc#=== と組合せるとあら不思議! こんなマジックが Ruby 1.9 ではすぐに使えますよ。
http://pragdave.blogs.pragprog.com/pragdave/2008/04/ruby-19-standar.html
Dave Thomas さんによる、 2008 年 4 月現在の標準添付ライブラリの変更点についてのまとめです。 まだまだいろいろ変化していた時ですが、 「新しいイディオムによって、コードを書くことが、 ちょっとだけいままでよりも楽しいものになっていくのを見るのは愉快なことだ」 とのことです。うふふ。
http://www.infoq.com/jp/news/2008/03/to_proc-currying-ruby19
Werner Schuster さんの文章の、角谷 信太郎さんによる翻訳です。
Symbol#to_proc や、Proc#curry の追加による、 Ruby の表現の幅の広がりについての解説です。 「& 演算子は Proc オブジェクトをブロックへ変換し、 ブロックを Proc オブジェクトへ変換します。 この場合、& はシンボル :+ をブロックへ変換しようとします。」 こんがらがってきましたか?そんなことはない? そんなあなたには Ruby 1.9 の甘美な世界をどうぞ。
http://mono.kmc.gr.jp/~yhara/w/?Ruby1900MethodsBuiltin
yhara さんの Wiki サイト「Greenbear Laboratory」にある、 Ruby1.8.6-p111 と Ruby1.9.0-0 のメソッドとクラスの増減のまとめです。
Ruby 1.8 と 1.9 の両方で動くコードを書く時に不安があれば 確認してみるのもいいかもしれません。
http://mono.kmc.gr.jp/~yhara/d/?date=20071215#p03
yharaさんによる、2007 年 12 月 15 日の Ruby/Rails 勉強会でのまつもとさんの発表のまとめです。 「昨年の RubyKaigi2006 で、 2007 年のクリスマスリリースを発表」 …いろいろありましたよね。
というわけで、開発の基本方針についてまとめられています。
http://www.rubyist.net/~matz/slides/kobe07/
まつもとさんによる、 2007 年 12 月 15 日の Ruby/Rails 発表のまとめです。
yhara さんによる記事 の元ネタでもあります。
「2007 年クリスマスリリース…ってもうすぐじゃんっ」
http://www.rubyist.net/~matz/20070627.html#p01
2007 年 6 月の、 On The Horizon : Ten Things I like about Ruby 1.9 より、まつもとさんによる、 Gregory Brown が Ruby 1.9 の新機能で好きなこと 10 選のまとめ。
いかがでしたか?Ruby 1.9.1 を使ってみたくなりましたか?
この記事が、Ruby ユーザーの皆さんのプログラミングの助けになるとともに、 Ruby の発展にも寄与できるとうれしいです。 —-
http://twitter.com/yugui/status/1087754452 ↩