12月4日(土)に、北海道のRubyユーザが中心となって「札幌RubyKaigi03 」が札幌市で開催された。本稿では、その模様をレポートする。
レポートの前に、地域RubyKaigiについて説明しておきたい。「 地域RubyKaigi(Regional RubyKaigi) 」とは、その名の通り国内各地域で行われるRubyKaigiである。もともとは、国内だけでなく海外からも多くのRubyユーザが集まる「RubyKaigi」というイベント(以下わかりすさのために「本家RubyKaigi」と呼ぶ)が毎年夏に大規模に開催されている。地域RubyKaigiはその弟分であり、小規模なイベントのため、開催したい人と思う人がいれば各地で比較的気軽に開催されている。なお、ここでは説明のために「弟分」と紹介したが、本家RubyKaigiと地域RubyKaigiには階層関係があるわけではない ( これについては、後述の角谷氏のセッションレポートも参照のこと) 。
札幌RubyKaigiは、地域RubyKaigiのひとつである。今でこそ各地で開催される地域RubyKaigiであるが、地方で最初に開催されたのが札幌RubyKaigiであり、今回で3回目となる。また発表者も年々豪華になっており、今回はRubyの父であるまつもとゆきひろ氏が基調講演を務めた。筆者の印象であるが、札幌RubyKaigiは数ある地域RubyKaigiの中でもいちばん熱気と勢いを感じるKaigiである。
司会の島田浩二氏
※今回のレポートの写真は、Kuniaki IGARASHI 氏より提供いただいた(オリジナルの写真はflickr を参照) 。
Shibata Hiroshi氏「Rubyのテスト文化とツール 2010」
Shibata Hiroshi氏
発表の先陣を切ったのは、北海道出身で、現在はtDiaryやasakusa.rbで活躍されているShibata Hiroshi 氏。氏は、Rubyやアジャイル関連で有名な永和システムマネジメントに今年入社しており、入社して得られたRubyとRails界隈のテスト事情について発表を行った。
氏はまず、「 Rubyには非常に成熟したテストのツールと文化がある」と述べ、それから永和システムマネジメントでの文化について、Rubyでのツールとともに説明した。発表では4つの文化が紹介された。
その1:テストを書く
ツール:RSpec、metric_fu。
その2:テストを書くレイヤーを分割する
ツール:モックやスタブではrspec-mocks, rr, mocha, flexmock, webmock。フィクスチャではfactory_girl, Machinist。受け入れテストではCapybara, Selenium Webdriver。
その3:動かないテストを放置しない
ツール:Hudson、paralell_tests。
その4:バグを再現するテストを書いてから直す
ツール:Spork ( ロード時間を短縮する), Guard::Rspec/Zentest ( ファイルを保存した段階でテストを自動実行) 。
その5:DRY (Don't Repeat Yourself)
ツール:RSpecのCustom Matcher。
ただし、すべてがうまくいっているわけではなく、テストの高速化など課題もあることが説明された。
Ruby on Railsやアジャイル方面で有名な永和システムマネジメントのテスト事情(どのような文化が根付いているのか、またどのようなツールが使われているか)は、Ruby on Railsユーザでなくても参考になるので、ソフトウェア開発者の方はぜひ動画 を参照してみてください。
村田賢太氏「高速な乗除算の実現と性能評価」
村田賢太氏
次に発表を行ったのは、苫小牧出身の村田賢太 氏(株式会社ジェネティックラボ) 。氏は、Rubyにおいて巨大な数を使った乗算の高速化について説明した(除算は発表までに間に合わなかったそうだ) 。
氏はまず、乗算や除算を筆算で行ってみせ、筆算のやり方だと桁数が増えるほど計算コストが増大することを説明した。それから巨大な数の乗算を高速に行うアルゴリズムを紹介した。
(A) Karatsuba
(B) Toom-Cook
(C) Shonhage-Strassen Multiplication
(D) Fuler Multiplication
このうち(A)はRuby1.9で使われているが、より高速な(B)を氏が1.9.3に向けて実装し、まつもと氏により承認されたことが紹介された。
またベンチマークでは、最大で2倍以上高速化されることが説明された。巨大な数の乗算なんて使う人はいるのか?という疑問もあるが、氏によると有理数を計算するRationalや素数を計算するprime.rbなど必要な場面は確かにあるそうで、なにより『速さはロマンである』と断言した。
質疑応答では、巨大な数では速くなることはわかったが、そのオーバーヘッドのせいで巨大ではない数で遅くなる可能性はあるかという質問に対し、巨大な数に対してのみアルゴリズムが適用されるようになっているため、小さい数で遅くなるようなことはないと回答された。
まつもとゆきひろ氏「基調講演:Rubyの未来/未来のRuby」
まつもとゆきひろ氏
基調講演は、Ruby生みの親であるまつもとゆきひろ 氏(株式会社ネットワーク応用通信研究所)が行った。氏はまずRubyの歴史を簡単に振り返り、1993年には利用者がわずか1名(もちろん氏自身のこと)だった言語が、2010年にはTIOBE Indexでランキング10位になるほどの人気言語になったことを紹介し、『 言語の数は数千とも万とも言われる中で、Rubyがトップ10に入っている』と感慨をこめて語った。
それから話は氏の経歴に移った。大学卒業後は職業プログラマーになり、バブル崩壊後は景気が悪くて残業代が出なくて困ったこと、Rubyの開発は会社のマシンでこっそり行っていたこと、プログラマー歴は20年になるが実はチームでソフトウェア開発をしたことがないこと、などが氏の口から語られた。
またRuby開発の動機として、次の要素を合わせ持った言語が欲しかったことが言及された。
Lispの「高階関数」というパワー
Smalltalkの「オブジェクト指向」というパワー
Perlの「簡潔さ」というパワー
たとえば「オブジェクト指向」は今でこそ当たり前の存在になっているが、Rubyの開発が始まった1993年当時はそうではなかった。当時でもSmalltalkやC++は存在したが、C++はオブジェクト指向を面倒くさいものにしてしまっており、かといってSmalltalkは日常で使えるオープンソースな処理系がない(まともな処理系はどれも商用だった)という状態であった。それを考えると、Smalltalk級のオブジェクト指向機能を持ち、気軽に使えるスクリプト言語であり、オープンソースで開発されているRubyは、まさに当初の狙い通りであろう。
このあとは、Ruby 2.0で入る予定の新機能(詳しくはMatz日記(2010年11月13日) を参照のこと)や、東大平木研 と共同で行っているHPC ( High Performance Computing)への取り組みや、組み込み分野向けの取り組みなどが紹介された。特に最後の組み込み分野については、「RiteVM」という新しい処理系 を開発する意向であることが発表された。この新しい処理系はRubyのサブセットを対象とし、実装はLua言語を参考にするとのことだ。残念ながらソースコードの公開は2年ぐらい先になるらしいのだが、まつもと氏自身が手がける新しい処理系なので、注目を集めること必至であろう。
このほかにも講演では、「 良いものを届ける、なければ自分で作る」「 自分を変えよう、世界がそれについてくる」など、"まつもと語録"が満載であった。
島田浩二氏「スポンサーセッション:Rubyの教えてくれたこと」
島田浩二氏
午後に入って、島田浩二 氏(株式会社えにしテック)が、Rubyに感じている「良さ」について発表を行った。氏は札幌RubyKaigiの発起人であり、過去3回とも本イベントの司会を務めている(氏の会社であるえにしテックは札幌RubyKaigiのスポンサーである) 。さらに、今年の本家RubyKaigiでは運営委員長補佐を務め、来年の本家RubyKaigiでは運営委員長を務める予定になっている。つまり、氏は国内のRuby界隈で非常に重要な人物である。
Rubyでのプログラミングは気持ちいいとよく言われるが、なぜ気持ちよくなるかを氏なりに考えると、その一つはブロックのおかげであると説明した。そして、ブロックは次のことができると言及した。
イテレータ
繰り返し
具体的な処理の記述
対称性のある処理の保証
アルゴリズムの差し替え
これらはデザインパターンで実現できるものもあるが、それと比べるとブロックは「構造を複雑にせずに、程よい柔軟性を確保できる」という特長があるとした。
また、書籍『達人プログラマー -- システム開発の職人から名匠への道』( Andrew Hunt、David Thomas著、村上雅章訳、ピアソンエデュケーション)から「ソフトウェアは複雑さの増大によってダメになる」という言葉を引用しつつ、ソフトウェアの複雑さには次の2種類があることを説明した。
問題にもともと存在している複雑性(本質的複雑性)
動かすために入れてしまった複雑性(偶発的複雑性)
たとえば在庫管理のソフトウェアであれば、在庫管理にまつわるルールや処理の複雑性は前者にあたる。「 在庫管理」というのはもともと難しいものであり、これが複雑なのは仕方ないこと。これに対し、フレームワークやコードの複雑性は後者にあたり、これは作り手の都合によって発生した複雑性だといえる。
後者の複雑性を排除するためにどうすればいいかについて、氏は以下のキーワードやスローガンを用いながら説明を行った。
YAGIN ( You Ain't Gonna Need It, どうせいらないって)
変化を抱擁せよ
SOLID Principle
変化にテキヨウする
シンプルなコードと包括的なテスト
このほか、次のような「しまだ語録」が登場しているので、録画で確認してほしい。
「読める」と「分かる」は違う
弟子は師匠の鏡
良い仕事のためにはツールに愛を
また氏は『プロダクティブ・プログラマ -- プログラマのための生産性向上技術 --』( Neal Ford 著、島田浩二監訳、夏目大訳、オライリージャパン発行)の監訳を行っており、今回の発表内容はその本と共通する部分が多い。この本を読んでから改めて録画を見れば、発表内容をより深く知ることができるはずだ。
前田智樹氏「スポンサーセッション:北のRails開発現場から'10(仮)」
前田智樹氏
続いて、前田智樹 氏(株式会社アンタス)が新人教育におけるペアプログラミングの効果について、実際の体験談を発表された。なお、氏は今回の札幌RubyKaigi運営委員長である。
氏の会社では、技術者間の技術力の差や、作業のやり方の違いが大きいことが悩みのタネだったという。特に、中途入社の経験者と新卒入社の新人との差が大きく、入社後2~3年たっても差が全然埋まらないそうだ。
なぜだろうかと考えた末、デスクワークな仕事では「仕事っぷり」が見えないのが原因だと氏は結論づけた。そしてそれを解決するために、ペアプログラミングを行うようになったという。
ペアプログラミング が何かは多くの方が知っていると思われるが、一応説明しておくと、一組のディスプレイとキーボードを2人で使ってプログラミングすることである。といっても2人が同時にキーボードを叩くのではなく、一人がキーボードを叩き、もう一人は横からあれこれ口出しする形になる。一見、非効率のように思われる作業形態であるが、エクストリーム・プログラミングでは効果の高いプラクティスとして紹介されている。
氏はペアプログラミングを実践した結果、次のような効果を実感できたという。
考える部分が加速できる(開発のボトルネックはキーボードを打つことではなく考えることであるため)
ものすごい集中力とよい緊張感が得られる
コーディングとコードレビューと教育と引き継ぎを一気に行える
「動いたー!」という喜びを共有でき、これが実に楽しい
細かいとこまで丸見えにできる
これらのうち、最初の「開発のボトルネックはキーボードを打つことではなく考えることである」という指摘は重要であろう。この指摘が正しいとすると、一見非効率に見えるペアプログラミングがなぜ高い効果を上げるのかが、うまく説明できるからだ。つまり、ペアプログラミングを実行することは、次のことを生むだろう。
キーボード入力の効率は半分になる。しかしそこは開発のボトルネックではないので、大きな問題ではない。
2人であれこれ話し合うため、アイデアを出したり問題点を指摘することが、一人のよきより効率よく行える。そしてこの部分こそが開発におけるボトルネックなので、そこを効率化できるペアプログラミングは確かに効果がある。
新人の教育に悩んでいる人や、ペアプログラミングの効果に疑問を持つ人は、動画 をぜひ確認してほしい。
なお、このあとの懇親会で、筆者は氏と話す機会を得た。このとき、「 ペアプログラミングにおいては、ソースコードはディスカッションの議事録である」という意見が出た。これはソースコードの果たす役割を見つめ直す、興味深い考え方であった。
はしむかいとしかつ氏「(カーリングとRuby)2投目 - Making Ricochet with the Ruby stone into Granites.」
はしむかいとしかつ氏
続いて、昨年の札幌RubyKaigi02で衝撃的(笑撃的?)なデビュー を飾った、はしむかいとしかつ 氏(妹背牛カーリング協会)が1年ぶりの発表を行った。氏は現在、北海道で稲作農家をされている。稲作農家がなぜRuby?と思う人もいるだろうが、氏は大学時代にプログラミングを勉強し、プログラマとして働いていた経験があるそうだ。
氏は妹背牛(もせうし)カーリング協会の強化委員長を務めており、北海道カーリング協会の競技委員と広報担当とホームページ総括担当も務めている。その中で、カーリングの試合結果やスコアをホームページに載せたいという要求が当然のようにあり、そのためにRubyで作られたtDiaryやHikiを活用していたそうだ。
特に気にかけたのは、「 GeekでもSuitsでもない人たちのためのUI」だそうだ。カーリングのスコアや試合結果を表示するための機能なんて、どのCMSやWikiにもない。そこで、カーリングのスコアや試合結果を表現するための文法を考え、tDiaryのパーサに手を入れて独自拡張した。こうすることで、一般の人でも更新できるようにしたという。
また将来の希望として、試合の記録や統計(ショット率)などが見れるようにしたい、カーリングの試合をUstreamで中継したい、ビデオ画像を射影変換することで石位置を記録したい、など夢を語った。
氏の発表 は、目線がRubyistというよりは一般ユーザに近い。技術系カンファレンスではどうしても開発者目線の発表が多いので、このような一般ユーザ目線の発表は気づかされることが多い。「 GeekでもSuitsでもない人たちのためのUI」という言葉にそれがよく表れている。
最後に、自作のお米(!)を希望者にプレゼントしていた。このような場面が見られるのも、地域RubyKaigiならではであろう。
ライトニングトーク
ライトニングトークとは、1人5分ずつの時間で、多くの人が次々と交代するスタイルの発表である。以下、タイトルと発表者のみ紹介する。
「RVMについて語るときに僕の語ること」( m 氏)
「文書検索ラングバ」( 須藤功平 氏)
「Rails 3.1(仮) 」 ( 松田明 氏)
「JRubyによるエンタープライズWeb開発」( takai 氏)
「HTMLデザインをまったく崩さない、美しいテンプレートエンジンの作り方 パート2」( 桑田誠 )
「たまにはcgi.rbのことでも話してみる」( xibbar 氏)
「Perl &heart; Ruby」( 山川宣仁 氏)
「Rubyでネイティブスマートフォンアプリ開発」( @sandinist 氏)
「どこでもRubyといっしょ ~WindowsMobile携帯にRubyを入れて遊んでみた~」( H.Hiro/Maraigue 氏)
「コンサドーレ札幌の情報収集をrubyでやるには」( ヽ(´・肉・`)ノ 氏)
「Pusherアプリの作り方」( 大和田純 氏)
「或るWebサービス開発のこれから - "オープンWebサービス"という妄想 -」( 白土慧 氏)
これらの資料と動画は札幌RubyKaigi03のページ から参照できる。
ところで今回のライトニングトークでは、小学生の女の子がドラ娘を担当された。おそらく史上最年少のドラ娘であろう。
ドラ娘の大役を果たした、佐々木楓花ちゃん(10歳)
関将俊氏「ご自宅用ツール間同期メカニズム兼ストレージのご提案(仮題)」
関将俊氏
休憩を挟んで、dRubyやERBの作者である関将俊 氏による、「 Drop」というソフトウェアについての発表が行われた。
Dropは、氏が作成されたRinda (Rubyで書かれた分散処理システム)の実験的な応用であり、いろんなモノに見えるライブラリだそうだ。いろんなモノに見えるとはどういうことかというと、次のように見えるらしい。
プロセス間の動機・変更通知の機構
オブジェクトの保存場所
バッチ処理のミドルウェア
インタラクティブ処理のミドルウェア
Twitterのタイムライン
具体的には、Dropは時刻をキーとしてオブジェクトを保存するデータベースである。内部ではオブジェクトが時系列に並んでおり、オブジェクトを取り出すには時刻を指定して取り出す。オブジェクトを保存するときにはタグを付加することができ、これを使ってオブジェクトをフィルタできる。
また指定時刻よりも後に追加されたオブジェクトがない場合は、追加されるまで処理をブロックすることができる。これを利用することで、新しいイベントが発生するまで待機するという「待ち合わせ」を実現できるという。
興味深いのは、オブジェクトの更新や削除ができないという点だ。この特徴により、「 並行処理のイヤなことを気にしないですむ」と語る。
使い道としては、Wikiの全文検索やメッセージングシステム、バッチ処理が挙げられていた。またirbで作ったオブジェクトをメモすることにも使えるそうだ。
発表内容は結構高度なので筆者には半分も理解できなかったのだが、分散処理というといつも「これだけ性能が向上しました」という発表が多いように思うが、氏の発表は「こういうことができます」という面を強調しているのが印象に残った。
最後に、『 dRubyによる分散・Webプログラミング』( オーム社)は発売から5周年たった今でもまだ初刷が買えるそうなので、「 ぜひ買っててください」とのこと。
大場寧子氏「Railsアプリ開発 野生のカン」
大場寧子氏
続いて、本日が誕生日であるという大場寧子 氏(株式会社万葉)による、Ruby on Railsについての発表が行われた。氏は、この一年新しいことをやってないし、いまだRails2メインであると断りを入れつつ、Railsにおけるコードレビューやリファクタリングについて、自身で気をつけている点について話をされた。
一例を挙げると、RESTfulインターフェースでのコツとして「名詞で調整する」ことが挙げられた。ご存知の通り、RESTではGET, POST, PUT, DELETEの4つの動詞しか使わないが、それ以外の動詞を使いたければ、名詞を調整することでRESTfulなインターフェースが設計できるという。
たとえば「本を借りる」という挙動を「POST /books/189/borrow」と表現してしまうと、RESTにはない「borrow」という動詞が入ってしまう。そうではなく、「 貸し出しデータ(borrowing)を作成する」と考えて「POST /books/189/borrowing」と表現すべきと説明した。
またRailsのフィルタについて、:onlyと:exceptでは、可読性を考えれば:onlyを使うべきだと説明した。理由としては、人間は指定されてないものは把握しづらい(ので明示的に指定する:onlyを使うほうがよい) 、また:exceptは未来に追加されるアクションにも勝手に適用されてしまうと語る。
氏の発表は、Railsを使っている人なら10人中10人に参考になると思うので、ぜひ動画 を参照してほしい。内容は高度だが、このような高度な内容が発表されること自体、札幌RubyKaigiの水準の高さを表しているように思う。
なお氏はRESTを見るたびに、『 ガラスの仮面』( 美内すずえ、白泉社)の一場面を思いだすそうだ。『 ガラスの仮面』では、主人公が「はい」「 いいえ」「 ありがとう」「 すみません」という4つの台詞だけでお芝居を行うシーンがある。これが、4つの動詞だけを使うRESTとよく似ているため、連想せずにはいられないという。「 ガラスの仮面を読んで、ぜひREST脳になってください」と呼びかけていた。
高橋征義氏「私のプロフィール」
高橋征義氏
続いて、日本Rubyの会会長である高橋征義 氏(株式会社達人出版会)が発表を行った。氏は北海道出身であり、これまでの札幌RubyKaigiにはすべて参加している。その氏が、これまでの半生を自ら語るという発表内容の予定であった。
しかしながら、半生を語るには30分という時間はあまりに短いため、そのダイジェストと、氏が現在注力している達人出版会 についての説明を行った。
半生としては、大学時代にミステリー研究会に所属しており、そのときミステリー関連のリンク集(みすりん)を作成していたこと、高校時代は生徒会長をしており、この頃が第1期会長期で現在は第2期会長期であること、就職はIP Reachableであることが決め手となって会社を決めた、などが軽快な口調とスライドとともに語られ、会場は笑いの連続であった。
仕事としては、2010年6月2日に達人出版会を設立し、電子書籍の制作・販売を開始。現状の書籍制作は労働集約的なので、近代的な書籍制作環境を実現したいと語った。具体的には、次のことが説明された。
執筆支援環境
進捗管理にRedmine、バージョン管理にGitを使う(分散SCMを使うことで、バックアップが破損しても復元できるようにする) 。また著者と編集者には開発者アカウント、レビュアにも必要に応じて開発者アカウントを発行する。
組版システム
Rubyで作られたReVIEWというシステムを使用する。これはWikiに似た書籍執筆用マークアップ言語を使い、ブロックとインラインの記法が拡張可能という特徴がある。これとRedmineとを連携させるプラグインを使っている。
販売サイト
Ruby on Railsで作成。運用を極力省力化できるようにしている。またイベント用に、対面販売できるようにしている。
余談であるが、氏は「高橋メソッド 」と呼ばれるプレゼン手法でも有名である。これは日本のみならず海外でも認知されて おり、多くの人が「大きいフォント」と「枚数の多いスライド」を真似している。しかしそれらに加え、本家である氏のプレゼンにはリズムと笑いが加味されているように思う。高橋メソッドを真似するなら、一度ご本人のプレゼンを見ることをお勧めしたい。
氏は最後に、「 何にしても無駄にはならない、とは決して言えないが、無駄にならない道も選べる。そして選ぶかどうかは自分次第。よい人生を!」と述べ、発表を締めくくった。
角谷信太郎氏「There Is No Spoon:Revisited」
角谷信太郎氏
最後に発表を行ったのは、Ruby方面だけでなくアジャイル関連で著名な角谷信太郎 氏(株式会社永和システムマネジメント)である。氏はこの夏に開催されたRubyKaigi2010でも発表を行っているが、このときトラブルがあり、語りたかったことがうまく語れなかったそうだ。そのため、札幌RubyKaigi03でリベンジを果たすべく、ほぼ同じ内容で発表を行った。
氏の発表内容は、3年前のRubyKaigi2007にさかのぼる。そのときに基調講演を行ったのが、達人プログラマーとして有名なDave Thomas であるが、氏はこのとき彼から『Rubyが持っている価値観を、新しい人たちに伝えること』という宿題をもらったという。その宿題に対する中間レポートが、この発表なのだそうだ。
発表内容は多岐に渡り、とてもここではすべてをお伝えできないので、筆者にとって印象的だった部分を紹介する。
Rubyの良さとは何か?それは、Rubyには「Quality」があることである。ここでいう「Quality」とは、人がものを認識する時に、論理や感情よりも前の段階で直感的に感じてしまう、人とモノとのつながりを表す言葉。
そもそも、Rubyがなぜいいのかはうまく説明しづらい。今年のRuby Conference 2010でも、Ruby on Rails 開発者David Heinemeier Hanssonや、Rubyの父まつもと氏や、達人プログラマーDave ThomasがRubyのよさを説明しようとしているが、誰もうまく説明できてない。だから、Rubyのよさを説明するのは諦めて、それは前提にしちゃっていいだろう。
西海岸のスタートアップでは、Ruby以外の言語を使うと「なぜRubyを使わないのか?」と(おそらくベンチャーキャピタルから)言われるくらい、Rubyが浸透している。それと比べると、日本ではRubyを使おうとすると「安定してる?」「 ドキュメントは?」「 コミュニティとは?」とすぐ言われてしまう。そこで、自分なりにコミュニティを広げる活動を行ってきた。その一環がRegional RubyKaigiであり、今まで19のRegional RubyKaigiが開催され、それらにほとんど参加してきた。
コミュニティはツリー構造ではない。参加している人が繋がってできるもの。たとえばRubyKaigiが上にあって、その下にRegional RubyKaigiがあるわけではない。
氏の発表は、いつも人やコミュニティを話題としている。これは技術系カンファレンスでは珍しいが、ソフトゥエア開発でいちばん重要なのが人やコミュニケーションであることを考えれば、そこに焦点を当てる氏の発表は、いちばん大事なことを語っているとも言える。コミュニティについて興味のある人は動画 を見てほしい。
札幌RubyKaigi03を終えて
最後に、筆者の感想を述べてみたい。
勝手な主観であるが、地域RubyKaigiの中でも札幌RubyKaigiは活気があり、注目度が高いように思う。これは、北海道以外からの参加者が結構な数に上ることからも感じられる。
札幌RubyKaigiが注目される理由はわからないが、筆者なりに推測すると、島田氏が中心となって北海道のRubyコミュニティが成長したことが大きいのではないかと思う。コミュニティが成長することで地域RubyKaigiが盛り上がり、それがまたコミュニティの成長を促すという、理想型になっているように見える。運営の裏側ではきっと我々の知らない苦労をされているとは思うが、今のこの好循環を保っていただきたい。
最後になりましたが、札幌RubyKaigi03実行委員会の皆さん、お疲れさまでした。そして、ありがとうございました。