連載
» 2011年01月24日 10時00分 公開

Railsで目指せ、情熱エンジニア(3):DojoとKataでRubyを学ぼう

Ruby on Railsでコードを書くにつれて、徐々に高い“Ruby力”が必要なことに気付くものです。では、どうやってRubyによるコーディング能力、“Ruby力”を磨けば良いでしょうか?

[井上真,@IT]

Ruby力の限界

 Railsを始めてしばらくの間は、「どこまでがRailsのマジックで、どこまでがRubyのおかげなのか」に迷うことがあるかもしれません。Railsでコードを書くにつれて、だんだん自分のRuby力の限界を思い知らされるものです。

 私もRailsを始めてから1年ぐらい経つまでは、Ruby力が足りないなと思うことがしばしばありました。でも、どうやってRubyのスキルを上げればいいのかが分かりませんでした。そんな頃、私が住んでいるロンドンから電車で1時間ほどのイギリス南部の町、ブライトン(Brighton)で「Coding Dojo」なるイベントがあると聞き、早速参加してみることにしました。

Coding Dojoで日々の練習を!

 「Dojoって、何の略語?」と思われる方もいるかもしれません。これは日本語の「道場」を、そのまま英語にしたものです。

 Coding Dojoとは、実際の仕事とは関係のない(比較的小規模の問題を)グループでプログラミングする場のことです。プログラミングの世界で道場という言葉を使う背後には、次のような考えがあります。

 「格闘技の世界では練習もせずいきなり試合にでるなんて自殺行為に等しい。スポーツや芸術、手工芸の世界でも常日頃から地道な反復練習が必要不可欠だ。それなのに、プログラミングの世界では最初に大学などで基礎を習った後、仕事をしながら技術力を高めようと考えるのが常識だ。これはおかしい。プログラミングの世界でも、既存技術の反復練習や新技術の習得に、継続的にいそしむべきだ」

 さて、Coding Dojoの開催方法はいろいろあるのですが、私が何度か通ったBrighton Coding Dojoでは以下のようなフォーマットで行われていました。

  • 一度の定員は10人ぐらいまで(あまり規模が大きいと全員の参加が難しいため)
  • 最初にまず解決する問題をグループで決めておく
  • Dojoにはプロジェクターを置き、そこに1台のマシンと2つの席を用意する
  • 1人はドライバー(パイロットとも呼ぶ)として実際にコードを書く。もう1人はナビゲーターとして、ドライバーと共にコードの実装方法について話し合う
  • テストコードを書くまでは、実装のコードを書いてはならない
  • 黙ってコードを書かない。ドライバーは常に自分の書いているコードの意図をナビゲーターや傍観者にも分かるように説明する
  • 他の参加者は、周りでペアプログラミングの様子を観察する。傍観者はなるべくペアプログラミングをしている人たちに横から口を挟まない
  • 5-10分ごとにローテーション。ドライバーの人は、傍観席に戻る。ナビゲーターの人はドライバーに昇格。そして傍観席の中から新たにナビゲーターに加わる

 こういった手順でしょうか。傍観者は横からペアの2人に口を挟まないというルールになっていますが、これは、ついついやってしまいがちです。コードにタイプミスがあったり、ペアから質問を受けたときには発言しても良いのですが、「私だったら別の解き方をする」といった発言は、なるべく自分の番が来るまで待つようにしましょう。

 コーディング道場の醍醐味の1つに、自分の番が来たときに「この解き方は納得いかないのでやり直す」と、前の人が書いたコードを一気に削除し、まったく別の方法にやり直すというものがあります。ただ、その際にはちゃんと正しく自分の意図を説明しないと、他の人に納得してもらえず、次の人にまた削除されてしまう可能性もあります。

 このように常に違うスキルレベルの人たちとペアプログラミングをすることで、いろいろ勉強になることがあります。私は当時Railsを初めて1年程度の身でしたが、参加者の中にはRubyが初めてな人もいたので、逆に教える立場になることで、自分の理解度が上がるということがあります。

 また同じ問題をいろいろ違った方法、または言語で解いてみるのも非常に勉強になります。私も一度Rubyで解いた問題を、翌週はSmalltalkで解き直したことがあります。そのときも参加者の中に1人、Smalltalkに精通している人がいたので非常に勉強になりました。

 こうしたコーディング道場というのは世界各地で行われています。残念ながらBrighton Coding Dojoは今は継続されていないのですが、自分の会社で開催したこともありました。

 今年のRubyKaigiでもPivotal Lab(Pivotal Trackerというバグトラッキングシステムでも有名な米国のRuby on Rails開発会社)のSarah Meiさんが「Pair Programming Cultural Exchange」と題して、和田卓人さん(@t_wada)らと、道場スタイルのインタラクティブペアプログラミングのセッションを持っていました(Sarahさんのブログ)。

 ご自分の会社でも、一度コーディング道場を開催してみるのはいかがでしょうか?

RubyKaigi2010 Pair Programming Cultural Exchangeにて。撮影:Lee Lundrigan氏 RubyKaigi2010 Pair Programming Cultural Exchangeにて。撮影:Lee Lundrigan氏

空手のように型で練習する「Code Kata」

 Coding Dojoのところで触れていなかった点として、「解くべき問題はどこから探せば良いか」というのがあります。

 私がDojoに通っていたときは、「達人プログラマー」の著者と有名なデーブ・トーマスさんが主催するCode Kataのサイトから問題を選んでいました(もちろん、「Kata」も日本語の「型」から来ています)。一例を挙げると「Karate Chop」という変わった名前の問題があります。ソートされた配列から特定の値を探し出すとき、単に先頭から探して行っては非効率です。そこでまず配列のど真ん中の値を取り出し、「今探している値は、この取り出した値より大きいか、小さいか、もし大きければ右半分の真ん中、もし小さければ左半分の真ん中の値を取り出してまた比較しなさい」という探索の手法があるのですが、これを何通りの実装方法が可能かを競うというものです。

空手のように型を練習することでプログラミングスキルを向上させるというコンセプトで、デーブ・トーマスさんが主催する「Code Kata」 空手のように型を練習することでプログラミングスキルを向上させるというコンセプトで、デーブ・トーマスさんが主催する「Code Kata

 他にも以下のようなサイトに、いろいろな問題が出ています。

 Dojoのようなスタイルで、他の人と直にペアプログラミングをするのが技術力向上の一番の近道ですが、もし周りでペアプログラミングできる状態にない方は、以下のサイトで他の人のコードをリファクタリング(機能はそのままにしたまま、より良いコードへ改変すること)してあげるのも良い練習になるかもしれません。

他の人が書いたコードをリファクタリングするという「Refactor My Code」 他の人が書いたコードをリファクタリングするという「Refactor My Code

Code武者修行 by Corey Haines

 先ほど、「周りでペアプログラミングできないときは」という話をしましたが、逆にペアプログラミングの相手を求め、世界中を旅して回っている達人がいます。その名はCorey Hainesさん。彼のプロフィールページには、このように書かれています。

In September of 2008, after losing my job, and I found that I had stashed away a few months worth of savings. This allowed me to take a step back from the day-to-day grind and look at what I might want to do with my life. That's when I decided to finally go on my pair-programming tour.

2008年の9月に仕事を失った後、2-3ヶ月ぐらい過ごせるだけの貯金があることに気が付いたんだ。このおかげで、ちょっと日頃の雑事から一歩身を引いて、自分が人生を通してやってみたいことについて考えるようになったんだ。このとき、ペアプログラミングツアーを思い付いたんだ。

In December, 2008, I set out on the road, spending 3 weeks on the road, pair-programming with different people in exchange for room and board.

2008年の12月に旅は始まり、3週間かけて各地を回ることにしたんだ。泊まる場所を提供してもらう代わりに、一緒にペアプログラミングをすることにしたんだ。

 彼はその後1年間に渡り、このペアプログラミングの旅を続け、行く先々で会った人たちとの会話をビデオブログに収録しています。

 2009年に一度フリーランスの仕事についた後、2010年からは“Code Retreat Tour”というプログラミング上達のためのさまざまな技法を広めるためのツアーに出かけているそうです。

 ここまでプログラミング技術の上達に人生をかけている人もすごいですね。最後に、彼がKataやDojoについて説明しているスクリーンキャストをご紹介します。ちなみに彼は、katacastsというサイトでもRubyだけに限らず、さまざまな言語で解いたKataの多くをスクリーンキャストとして公開しています。

Profile

井上真

New Bamboo


Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。