書いた人:こなみ (各プログラムのログおよび KOF 関連の記事を参考にして再構成しています)
2008 年 11 月 7/8 両日にわたって、関西で初めての Regional Ruby Kaigi として、関西 Ruby 会議 01 が KOF2008 との共催で開かれました。KOF2008 には 2004 年に日本 Ruby の会の関西在住の有志として参加し、それをきっかけとして Ruby 関西が結成されるなど、浅からぬ協力関係を保ってきています。今回初めての共催、そして初めての関西 Ruby 会議ということで、試行錯誤の中で KOF2008 の実行委員会にも助けられながら 2 日間の日程を終えました。
Redmine は Ruby on Rails という Web アプリケーションフレームワークを用いて開発されたプロジェクト管理ツールです。発表者のあきぴーさんは Web 開発のプロジェクト管理の立場から Redmine を使ったチケット駆動開発の有効性について講演されました。
冒頭、Redmine を使ったことがありますか?と聴講者にたずねたところ、手を挙げた人は約半分でした。
この種の管理ということでは Excel がよく使われています。しかし、タスクの管理に時間がかかることや、結合テスト以降のプロジェクト管理や繰り返しの管理が難しいといった問題点が指摘されます。
次にソフトウェアのプロジェクト管理ツールとして知られる Trac を Redmine と比較すると、Redmine の方が SVN のコミットログとチケットの連携が簡単であること、Trac は複数のプロジェクトを作れないのに対して Redemine ではそれができる、といったことが優位な点であるといえます。
ロードマップによる Redmine による開発管理の流れの説明の後、チケット駆動開発でアジャイルな開発をどう進めるかという、実践的な開発スタイルについての紹介がありました。
Redmine の運用フローはアジャイル開発そのもの。チケットを受け取ってから仕事を行うという「チケットファースト」の徹底が重要ということです。また、チケットの粒度を追跡可能な単位にまで分割して「分割統治」に持ち込むこと、バージョンごとに小刻みにリリースしていき振り返りをきちんと行うことも重要です。
チケット駆動開発においてガントチャートはそれほど重要ではありません。開発の特徴としては、運用保守においてソースからのリバートが楽であること、チームのコミュニケーションの活発化が期待できること、チケットで問題点が見えるようになることといった点が挙げられます。
最後に、チケットを乱発しないことと放置しないこと、大規模開発においてはチケット管理の専用要員を置いた方がよいといった注意点を述べて締めくくられました。
講演の印象として、Redmine を活用したあきぴーさんのやりかたはプロジェクト管理の方法として有効と感じました。問題は、この利点を社内でどううまく説明して導入に持っていくか、また、質問にもあったようにチケットの粒度をどれぐらいにするか、といったところのようです。
メール受け取って返信するアプリケーションを Ruby on Rails で作ってみました。
Justsystem から、ATOK ダイレクトを Ruby で作れるという API が公開されました。これを使って、色々遊びます。
Ruby から Wii リモコンのボタンや加速度センサーの情報を取得します。まだ、少し情報をとれる程度ですが、簡単なデモを行いたいと思います。 現時点では Windows 限定です。
プログラマたるものいかに楽をして成果を出すかが重要。ということでフレームワーク、ライブラリ、プラグインの使用するといかに楽に Web アプリができるかをプレゼンします。
script/console の TIPS 集です。 Live coding は手が震えてしまってプレゼン失敗するので、すべて irb のヒストリに仕込んで 「 LiveHistory 」 しました。 使い方は、config/initializers に置いてください。モデルとかは適当に作ってください。
遅延リストの意義と、Ruby でどのようにして実現するかを簡単に、触りだけ。 濃ゆいマニアックネタだったのですが、ライブコーディングがトラブって時間切れしてしまいました。後で聞いたら、風邪で苦しくて頭が回らなかったとのこと。うじひさ節が聴けなくて残念!
2001 年、1.6 系から業務用 CGI システムで Ruby を使用して来て、 全国 274 団体に Ruby で作ったシステムが稼働しています。PHP、ASP、Perl、 Java も開発に使ってみましたが、Ruby はアプリの規模に見合っていて、かつ 日本語の扱いが楽だったので決まり。tDiary が出てきたので、ソースを印刷して 一生懸命に読んで勉強しました。最近になってdRuby を使いこなし始めて、 連携先のシステムまで Ruby に切り替えるということもあります。
困っているのは、バージョンの移行の問題。まだ 1.6 で稼働している資産がかなりあるので、どう移行したらよいのかが悩み。さらに 1.8.5、1.8.6、1.8.7 と微妙に互換性のないものが並列する状況で、それぞれのメンテナンスがいつまでなされるのかが気になっているところです。さらにその上に 1.9.1 が登場したらどうなるのか、Rails は 1.9.x に対応するのか、そこいらの悩ましさが増しています。
12 月以降の勉強会に参加してもらうことを考えての出張版勉強会です。 会場は定員 16 名の PC トレーニングルームで、2 回に分けて実施されました。1 回目は満員、2 回目は定員よりもやや少ない入りでした。
Ruby 関西で用意した DevianLive の CD を会場の PC で起動して、トレーニング環境を構成しましたが、アンダースコアの入力がうまくできないというトラブルが起きました。幸い X に詳しい人の助言で解決したものの、時間ロスが発生してしまいました。
勉強会のお題は Ruby で動く電卓を作ろうというもので、配列をスタックとして利用することで RPN (逆ポーランド記法) 電卓を実現しようというものです。ただし、主眼としてはむしろテストを行いながらコードを書いていく開発手順を知ってもらおうという内容でした。プログラミングのレッスンとしては異例という印象もありますが、それはそれで okkez さんの狙いなのでしょう。配列を表示させるサンプルプログラムの部分はほとんどの人に理解していただけていたようです。ただし、# で始まるコメント行を律儀に打ち込むといった人もありました。
この手のイベントでは受講者のレベルの差が大きくなりがちですすが、そんな条件の中で、初心者には TA がつきっきりで教えていました。残念ながら時間が足りないこともあって、テストのとっかかりを少し書いたところで終わった初心者の参加者もかなりいました。
全体として、Ruby 勉強会の雰囲気を伝えることには成功していたようです。最初のサンプルからいきなり Unit テストというやり方には賛否両論があるかもしれませんが、テストの重要性を認識してもらう意味では意義があったのではないでしょうか。16 名という少数の参加者に大勢の TA がついて教えることは、聴講者にとって収穫だったと思います。
20 世紀の終わり、京都の Linux Conference 2000 Fall & Perl/Ruby Conference の講演「dRuby による分散オブジェクト環境」からはじまった dRuby 入門行脚を、2008 年の秋、再び関西で行うこととなりました。 dRuby は Ruby のメソッド呼び出しを拡張し、プロセス、マシンを越えて行うことを可能にするシンプルなライブラリです。本講演は dRuby を使える・書けるきっかけとなる入門です。dRuby の簡単な使い方を紹介し、その実装を解説します。 タプルスペースモデルを用いた並列処理糊言語「Linda」の Ruby による実装である Rinda について述べます。
RubyKaigi2008 における池澤さんの感動のプレゼンで一躍有名になった toRuby から来ました。第一水曜日に開催してます。みなさん来ますね?(笑)
dRuby は 2001 年に京都のイベントで初お披露目したのですが、再び関西で。それもついに関西 RubyKaigi 01。実は京都でやるもんだとすっかり思い込んでました。
Ruby っぽく書いていると OOP な自分になれたように勘違いさせてくれる超かっこいい言語。
‘D’ は Distributed。なので dRuby は分散な Ruby。 原型は原さんが公開された shttpsrv + servlet。Ruby のモジュールを動的にロードできるようにしたもので、別のプロセス/マシンのオブジェクトに メッセージを送り、メソッドを起動する仕組みです。 つまり dRuby は Ruby の RMI ( Remote Method Invocation )です。言葉を換えれば、「あらゆるプロセスはサーバでありクライアントである」、まるで OOP のよう(咳さんて言葉のうまい人だなあ:こなみ)。
同じマシンの中で2つのターミナルを起動して、irb を使って 2 つのプロセスの間でメッセージを送る実験をしてみます。ちなみに咳さんは Mac OSX で実演。
生産者消費者問題を解いてみました。スレッド同期のメカニズムがそのまま動く例です。地味でした。
実装は [ruby-list:15406]にある初版のソースをじっくり読んでみましょう。いろいろバグはあるけど、細かいことは気にしない。約 200 行をしっかり読んで。はい、これで dRuby を書けるようになりましたね。
たぶん、たくさんありそう。
最初に Linda の紹介、Linda は並列処理糊言語で、TupleSpace 上の Tuple というデータレコードがやり取りされる。エンジン(サーバと同じ役割?)やクライアントは Tuple Space だけを知っているというかっこいい並列処理。
Rinda は Ruby による Linda の実装で dRuby を意識してくれる。Tuple は Array で表現、要素ごとに Marshal する。TupleSpace への書き込み/読み出しは、 Linda では in/out、Rinda では write/take。
最後に Tiny MapReduce by TupleSpace、Tokyo Cabinet 一族はかっこいい、OODB Koya は
世界は Hash だと思っていた。しかし実は BigTable であることに気がついた。
仕事で Ruby っていう話をよく聞くようになりました。同時に、地域 Ruby という切り口が、そこかしこで聞かれます。なんでそうなってるんだろう。どんな文脈なんだろう。福岡を中心に活動を続ける「 Ruby ビジネス・コモンズ (RBC) 」は、Ruby が持つ新たな可能性を感じながら行動をしています。このセッションでは、RBC が行っている活動。そして、そこから広がって来ている様々な動きを紹介することで、Ruby が開くビジネス領域での可能性について考えました。
「仕事は楽しいですか?」、「仕事に思いを込めていますか?」講演の冒頭、最首さんは聴講者にこう問いかけました。そして人脈の大切さを語って、そこから RBC の活動の紹介になりました。2007 年の 7 月から多数の勉強会を主催、海外でもプレゼンを行い、579 名のメンバーがいて、その 9 割が勉強会つながりということです。
RBC 立ち上げのきっかけは、開発会社を福岡で作ったものの実際には下請け仕事ばかりで、そんな状況を打破したかった。街ぐるみで技術を勉強できるような仕組みを立ち上げたかったからとのことでした。
初心者でも分かって、1 日でできるようなコンテンツ作成、たとえば次のような感じで。
最初のうちは、パソコンを持ってきてもらって Ruby の開発環境を環境構築するのが大変だったが、今はなれたのでそれほどでもないとのこと。 町のふつうのおっちゃんに Ruby を教えて、Ruby にとにかく慣れてもらう話が最高でした。
これ以外にビジネスの勉強会もこれまで 5 回やっている。いわゆるスーツとギークという対立しそうな二者だが、どうやってうまくビジネスをやっていけるかを模索している。
これまでの実績を振り返ると、まず参加比率はソフトウェア開発者よりも それ以外の人の方が多い、IT 系ではない人とつきあうことで開発の幅が広がる のではないかと期待しているとのことでした。
最近の行政(福岡)としては、箱ものよりも人に投資していくこと、 地元のニーズを地元でカバーするといった姿勢を持つようになっている。しかし、コンテンツが既存のルートでしか出てこないのは問題。これはなんとかならないものだろうか。
開発するにはアイデアを提案できる会社が需要を起こすこと、というお話は感慨深かったです。この考えこそ、IT のゼネコン体制を打破できるのでは?
これからはもっとビジネスサイドの場を提供したいとのことなので、これにも期待したいと感じました。
「はじめての Ruby」の著者にして Ruby 1.9.1 のリリースマネージャの Yugui さんから、1.9.1 の内容とプロジェクトの現況について紹介。
Ruby 1.8.x はメジャーバージョンとして現在のアプリケーションを支えているメジャーバージョン、1.9 は 1.8 までとは大きく異なる、次へのステップとなるバージョンであり、2.0 は理想の姿だということです。
1.9 になって新しくなったことは沢山ありますが、その中で重要なものはというと次のようなところです。
YARV について。1.8 までは構文木を生成し構文木を直接実行していたのですが、1.9 で Virtual machine を採用してたことで速度は 5 倍以上となり、シューティングゲームのようなものを Ruby だけで書けるようになりました。なお、バイトコードにいったん変換するようになっており、Java でいうクラスファイルに書き出すことができます。
スレッドへの対応ということでは、まずネイティブスレッドに対応しました。スイッチングは軽くなりましたが、スレッドの生成は重くなっています。マルチコアには対応していません。また Fiber という一種の軽量スレッドを採用しています。
Multilingualization の対応も大きな変化です。Ruby 1.9 では 文字列オブジェクト自身が自分のエンコーディングを覚えていて、的確な文字処理を可能にしています。入力された文字列のエンコーディングは自動的に決定されます。またこれまでは Fixnum を返していた文字リテラルが、String を返すようになりました(ここで「文字リテラル ?d って (100 の意味で) 使ってないですよね?」と会場に尋ねたところ、挙手2名)。ソースコードの文字コードを指定するためのマジックコメントに対応して、$KCODE は廃止しました。
最もメジャーな Ruby アプリケーションである Rails を Ruby 1.9 上で走らせる ことは当然重要な課題ですが、まだ衝突する機能が多く、そのままでは走りません。multiple VM が可能になるわけですが、これも現状ではまだです。また eval を使うような処理は 1.9 系統では遅くなるので注意が必要です。最適化と eval は両立しません。
とはいえ、パフォーマンスの改善はまちがいなく期待できるわけですから、Rails は来年初頭に Ruby 1.9.1 が出たら1すぐに対応するだろうと思います。
1.9.1 は 2009/01/25 にリリースされる予定です2。1.9.2 は 2010 年になるかどうか、まだ分かりません。
この辺がリリースマネージャとしての Yugui さんの本領発揮というところです。マネジメントのためにやったことは次のようになります。
サポートレベルは Supported ( perfect )、Best effort ( enough to use )、Perhaps 、Not supported の 4 つに区別され、OS 等の実行環境をサポートレベルにわけてサポートを管理します。例えば FreeBSD は Best Effort 扱いです。
Issue tracker には Rails によるプロジェクト管理ツールの Redmine を使用しています(あきぴーさんの講演を参照)。Ruby の開発者はあまり Rails に興味がないのだけど Redmine を使っているわけで、これで Rails も安泰ですね(笑)。
ブロックパラメータ、ブロック内ローカル変数の扱いが変わったので、Syntax Error になるソースもある。ソース内のマルチバイト文字はマジックコメントを挿入して対応。(エンコーディングを明示しておらず、潜在的に文字化けしていたようなコードはエラーになる)だいたいこんなところに気をつけてください。
現代的で、より速く、より使いやすいのが新しい Ruby です。リリースされたらその時点で安定した Ruby なので、ぜひ使ってくださいな。