Sapporo RubyKaigi 2012 スペシャルレポート

札幌Ruby会議2012,3日目レポート[更新終了]

この記事を読むのに必要な時間:およそ 25.5 分

Tatsuo Sakurai (tatsuoSakurai)さん「たのしい開発へ至る道」

スタートアップRubyの著者である,株式会社万葉の櫻井さんの発表です(スライド等はこちら⁠。

櫻井さんが悩めるプログラマだった頃

櫻井さんは,プログラマになったときにいろんな悩みを抱えていました。頭がよく効率的に仕事をするのがプログラマだと思っていましたが,現実には技術に興味が無い人や,プログラムを書きたくない人,成長を望まない人たちがいて,会社の中でひとりぼっちで仕事をしている感覚に捕われていました。自分が考えていた仕事の仕方とのギャップを強く感じたそうです。

仕事での開発はたのしくありませんでした。そこではチームワークやコミュニケーションがない,ミスをなくすための工夫が共有されない,そもそも工夫がされてない,その場しのぎのコードでごまかしてしまうなどということがありました。

他にも「失敗すると思ってた」と言われることや,無駄な争いを見ることで,誰のために何を作っているのかがわからなくなりました。憧れていたプログラマ像と現実の間にギャップが生まれてしまいました。

たのしい開発への道

上記のような,たのしくない開発を続けていると,ちゃんと仕事がしたいと思うようになりました。このときに,

  • どんなところで仕事がしたい?
  • どんな人たちと働きたい?

を主眼としてちゃんと仕事をすることについて考えてみたところ,

  • 新しいこと,変化することを恐れない人と働きたい
  • 前に向かって進むこと
  • チームで成長できること

の3点が自分の望むちゃんと仕事をするために大事にしたい価値観だということに気がつきました。同時に,ソフトウェア業界で気になる言葉が見つかりました。それは,⁠アジャイル開発」「ペアプログラミング」という2つの言葉でした。実際にアジャイル開発とペアプロを実践してみたいと思うようになりました。

そこで,次の3つの条件で転職先を探してみました。

  • アジャイル開発をしている会社
  • コミュニケーションをきちんと取るオープンな会社
  • 社長がエンジニアである会社

これらの条件をすべて満たす,万葉という会社と出会いました。万葉に入社し,Railsアプリを作るようになったときに,Ruby,RailsだけでなくHTMLやCSSなどいろんなことを覚える必要が出てきました。

学ぶための方法

櫻井さんは,今なら勉強するいろんな方法があるといいます。それは次の通りです。

  • 写経
  • ペアプログラミング
  • コミュニティ

ペアプログラミングでは,どんな熟練度の相手とペアプログラミングをしても学べることがあると言います。ベテランからは言語の歴史などを,中級者からはかっこいいコーディングスキルを,初心者には教えてあげることで,自分が学ぶことができます。

一点,注意すべきことがあります。すごい人とペアプログラミングをしたときに,自分がうまくできなくても,凹んではいけないということです。凹むということは,とても無駄なループ処理のようです。凹んでいる時間がもったいないということに気がつきましょう。それよりも,うまくいったらハイタッチをして喜んでみることをおすすめします。

コミュニティは参加する前は怖いと思っていましたが,Rails勉強会@TokyoやTokyu.rbというコミュニティも実際に参加してみると全然怖くなく,初心者にも優しいところでした。コミュニティを通して日本Ruby会議や地域Ruby会議を知り,TokyoRuby会議03という地域Ruby会議で初めてスタッフとして参加しました。スタッフとして参加できたことで,たくさんのRubyistと知り合いになることができ,今思えばLife Changingな出来事だったと振り返りました。また,TokyoRuby会議03で知り合ったRubyistたちとたくさんのRuby会議にスタッフとして参加するだけでなく,東京ボルダリング部などの部活や勉強会を始めました。

まとめ

櫻井さんにとってのRuby会議とのつながりはTokyoRuby会議03で始まりましたが,今では舞台に立つことができるようになりました。この発表を聞いていた初心者のみなさん,これからはあなたの舞台です。きっかけになる舞台は,何個もあります。RubyKaigi2013や,東京Ruby会議10のような地域Ruby会議かもしれません。

最後に「私にとってRubyistと出会えたことはLife Changingだった。Rubyたのしい!」と発表を締めくくりました。

画像

画像

角谷信太郎さん「DCI and the application builds our mental models」

Rubyエヴァンジェリストであり,アジャイルサムライの監訳者でもある,永和システムマネジメントの角谷信太郎さんの発表です(スライド等はこちら⁠。

角谷さんの自己紹介の後に行われた告知から1点ピックアップして紹介します。2011年に一旦終了した日本Ruby会議が,いよいよ来年リブートすることが決まりました。開催期間は2013年5月30日?6月1日で,東京にて行われます。今から楽しみですね。

DCI

DCIとはData Context Interactionの各単語の頭文字を抜き出した3文字単語です。DCIはMVCアーキテクチャの提唱者でもあるTrygve Reenskaug氏により提唱されたMVCアーキテクチャを補完する新たなパラダイムです。角谷さんにとってのマスター・センセイであるJames O.Coplien氏はDCIを広めるエヴァンジェリストとしても活動してます。彼から直接話を伺ったこともあり,角谷さん個人にとってDCIは気になっていたキーワードでした。

そして最近DCIが至るところで研究されていることもあり,日本の皆さんにもDCIをきちんと紹介したいと角谷さんは考えていました。今回のセッションでは,なぜDCIが注目を浴びているのか,背景にある考え方を紹介できればよいと考えています。

「ソフトウェアはどこにあるのか?」

表記の質問はこの1~2年ほど角谷さんを悩ませている問題です。少なくともExcelで書いた仕様書でないことは確かですが,ソフトウェアはコードの中に含まれていると考えるのが普通の反応です。しかしどうやらそうでもなく,角谷さんは「ソフトウェアは頭の中にある」と考えています。

なぜ頭の中にソフトウェアがあるのでしょう,ソフトウェアはたいてい使う人がいるものです。実際にソフトウェアを使った人が「これはこういうソフトウェアなのだ」と捉え,認識した部分にこそ,実はソフトウェアが含まれているのではないか,そう角谷さんは考えました。

エンドユーザーのメンタルモデルをソースコードとして表現する。

ユーザーは実際に触ったり使ったりすることでしかソフトウェアを感じることができません。そのため,一度に規模の大きなソフトウェアを作って渡しても一度に全体を認識することは不可能です。ユーザーが頭の中に思い描いたソフトウェアは,何もない段階から少しづつ開発者に要望として伝えられます。ユーザの要望を聞いた開発者は作ったソフトウェアをエンドユーザに使ってもらい,フィードバックを受け取って,さらにソフトウェアの改善を重ねます。この過程を何度も繰り返し,作る人と使う人とで認識を合わせながらソフトウェアを育てていくことが大事であり,⁠実践テスト駆動開発」からの引用で,"Software Development as Learning Process"であると言います。

この開発手法はいわゆる「アジャイル」なやり方でもあります。ユーザーに使ってもらうためにコードを書きます。コードを書いてできあがったソフトウェアを動かす,つまりソフトウェアからフィードバックを受け取らなければできあがったことがわかりません。それを確認しながら進めていく開発手法がテスト駆動開発です。また,角谷さんはオブジェクト指向言語を使ったオブジェクト指向設計を「適切な名前のついたコードを適切な場所に置く」ことと捉えています。そして,思っていることを素直に書けるRubyという言語が大好きです。

角谷さんはエンドユーザーのメンタルモデルをソースコードとして表現するためにDCIを活用してほしいと願っています。今回のセッションではRuby on RailsでどのようにDCIを使っているのかフォーカスして話しました。Webのアプリというものは極端に言うと,URLという文字を送るとサーバからコンテンツという文字が戻るシステムです。システムをRubyで作ると,送受信した文字をRubyのオブジェクトに変換する必要が生じます。このようなシステムの枠組みをRailsはうまく作っていると角谷さんは感じています。

また,マーチン・ファウラーが提唱したActive Recordパターンに基づくRailsのActiveRecordは,データベースという表から行を抜き出しRubyのオブジェクトに変換する,または,Rubyオブジェクトを永続化するための作戦であり考え方です。

Rails doesn't save YOUR applications

このようにRailsはWebとデータベースをRubyオブジェクトに変換するためのよい作戦なのですが,そこにはあなたのアプリケーションをどのようにうまく組み立てるか?という思いは一切含まれていません。要するにMVCアーキテクチャーを採用したからといって,あなたのプロジェクトは成功しません。

それが2日目に行われた浦嶌さんのセッションでも語られた「共通にハマる罠」です。浦嶌さんの話ではRailsが死ぬ原因として3点があげられていました,本セッションでは取り扱うのは「モデルになるには太りすぎている」のケースです。⁠モデルになるには太りすぎている」というのは,肥大化しすぎたモデルの状態を示しています。例として全体で500行ほどのモデルを挙げ,なぜこれだけ肥大化したか?というと,コントローラーでもなく,ビューでもなく,どこに置いたらわからない処理をどんどんモデルに書いた結果,だんだん膨らんでしまったそうです。

「適切な名前のついたコードを適切な場所に置く」というオブジェクト指向設計から外れたやり方を重ねていくとこうなってしまいます。

そこでDCI

そこでDCIという考え方が生まれてきます。DCIを乱暴にまとめるとこうなります。

  • Data:ActiveRecord
  • Context:Ba(場)
  • Interaction:Role

Dataはデータベースに入ってるデータで,Contextはユースケースである状況においてやりたいことを記述し,Interacionはデータに役割をもたせます。このように分けるといい感じになるよ,というのがDCIです。ただし,DCIはアーキテクチャーと呼ばれてるものの,未だ試行錯誤の段階で,Railsのようによくできたフレームワークが存在していません。かといってただ指をくわえて待っていても,目の前のプロジェクトは進んでいくだけであるため,角谷さんのチームではなにかしら手を打つ必要がありました。

mikepackdev.comの図によると,Railsの構造にDCIを取り入れるのはそれほど難しいことではありません。

  • モデルの部分ではデータを扱う処理しか書かない
  • コントローラーの中でContextを作る
  • ユースケース毎に必要なデータにロールを合わせて使う

この方針を元にして,角谷さんのチームで開発したQA@ITで行ったのは,DataはActiveRecord,Contextはユーザの行う操作であると捉えて,ユーザーのアクティビティとしてまとめ,Interactonはモジュールとして切り出してみる,というものでした。そして,コントローラーからはアクティビティを呼び出し,取り出したデータに対しモジュールを当てはめて動かす,というやり方でDCIを試してみました。

実例

ソースコードで示したのは,QA@ITの「回答を受け付ける処理」および「パッチを送る」処理です。

回答を受け付けるコントローラーの更新処理では,回答のデータを作ったあと,回答を受け入れるアクティビティを検索します。検索されたアクティビティはモデルとは別に用意されており,質問と回答を受け付け,回答のステータスを変更する処理が記述されています。⁠パッチを送る」機能も同様に,パッチを受け付けて文章を修正する処理がアクティビティにまとまっています。

このようにして,いままで適切な置き場がなくモデルにまとめていた処理をアクティビティに切り分けることで,処理の流れを顧客に説明しやすくなり,チームの中でも話がしやすくなったと言います。こうして少しづつ変更していくやり方で,サイトを作り変えているそうです。このDCIは割と具合はいいので,ぜひ皆さんも試してみてくださいと話していました。

まとめ

角谷さんが過去行なってきた発表と比べると,今回はコーディング例を交えた技術的な内容で,そこに意外性を感じた方もいたかもしれません。全体を通じて聞くと,角谷さんが取り組んできたアジャイル開発とDCIが自然に繋がっていくことがわかる内容だったと言えるのではないでしょうか。

画像

画像

著者プロフィール

KaigiFreaks レポート班

KaigiFreaksとは,会場に来れなかった人にも雰囲気や内容を楽しんでもらえることをミッションとする特別編成チーム。配信班とレポート班の2班で構成される。レポート班の作業はエクストリームスポーツとして知られていたが,今回はその評判を覆すべく史上最大規模の編成で臨む。


前鼻毅(まえはなつよし)

Ruby札幌,アジャイル札幌,CLR/Hなど札幌のコミュニティで活動中。RICOH IT SOLUTIONSにてRubyやObjective-Cのコードを書いている。

twitter:http://twitter.com/sandinist


にく

北海道出身で沖縄や東京に住んだ後,今は札幌在住のプログラマ。コンサドーレ札幌が好き。Ruby,Emacsが心のメインツール。最近はHaskellを試している。

twitter:https://twitter.com/niku_name
blog:http://niku.name/


小野寺大地(おのでらだいち)

北海道大学大学院,一般社団法人LOCAL,Ruby札幌あたりで活動中。普段は複雑ネットワークの研究をしていて,肉チャーと二郎系ラーメンをこよなく愛している。

twitter:http://twitter.com/onodes
facebook:https://facebook.com/onodes


H.Hiro

北海道大学大学院在籍。Ruby札幌,札幌C++勉強会などで活動中。コレクションの要素数を数えるのに便利なライブラリ「multiset」などを作っている。Rubyで好きなものは「ブロック付きメソッド呼び出し」「Domain-Specific Languageの文化」。

twitter:http://twitter.com/h_hiro_


小玉直樹(こだまなおき)

生まれも育ちも札幌のプログラマ。RubyにハマってからはWebアプリを作るのが楽しくて日課になっている。1年ほど前からコミュニティ活動にも参加を開始し,素敵な技術者と出会える日々に感謝。

twitter:https://twitter.com/volpe_hd28v
blog:http://d.hatena.ne.jp/koda_hd28v/


うさみけんた

いまをときめく自宅警備員…だったのですが,Ruby会議の半月前に退職して東京に移住しました。Python札幌などでも活動。セキュリティ&プログラミングキャンプ2011言語クラスチューター。函数型言語の浅瀬で溺れる。

twitter:http://twitter.com/zonu_exe
blog:http://d.hatena.ne.jp/zonu_exe


すずきゆうすけ

札幌市に隣接する風の街・江別市で働く自営業。Ruby札幌にときどき顔を出す。Garage Labsにもときどき出没。プリキュアと朝ドラをこよなく愛し,日々変動する体重に怯えるごくごく普通のアラフォー。

twitter:https://twitter.com/yuskesuzki


みぃお

一般社団法人LOCALで主に活動中。お家でRubyをちょくちょく書いている。男の娘。お仕事はPHPでソーシャルゲームを作っている。

twitter:https://twitter.com/ayako119
homepage:http://miio.info/


永沼智比呂(ながぬまちひろ)

首の長いプログラマー。達人プログラマー読書会を主催したりしていた。Ruby札幌やSapporo.js,アジャイル札幌に参加。Ruby界隈の文化って面白い!

twitter:https://twitter.com/onjiro_mohyahya
blog:http://onjiro.blogspot.jp/


わたなべしゅうじ

札幌在住のプログラマ。札幌Javaコミュニティ代表。Java,Ruby,Python,JavaScriptなどを扱い,ユニットテストが好物。

twitter:https://twitter.com/shuji_w6e/
blog:http://d.hatena.ne.jp/shuji_w6e/


菅井祐太朗(すがいゆうたろう)

北海道から上京して一年。ようやく仕事でRubyを使えそう。Ruby札幌,Asakusa.rb,Yokohama.rbなどに顔を出している。

twitter:https://twitter.com/hokkai7go
blog:http://d.hatena.ne.jp/lncr_ct9a