What is it, naokirin?

Ruby合宿 2011に参加してきました!

(今回は本のような形で書いていきます。理由?そうした方が楽しそうだから。)

まえがき

参加してきましたよ。

Rubyスクリプト言語RubyってRuby on Railsでよく使う言語でしょ?Webアプリケーション作る気ないし、今はやらないかなー」という発言をしたのが2年ほど前。
そんな私がRuby合宿に参加してきたのです。

その記録をこのブログに記そうと思います。

目次

・まえがき
・参加するまでの道のり
・いざ、島根へ
・であい
・開発、開始!
・合宿のいろいろ
・わかれ
・みらいへ
・あとがき

参加するまでの道のり

自分で考えても面白い話で、「自分がRubyに興味を持つとすればRailsだろう」と考えていたのに、結局やり始めた理由は「TDDBCでRubyの綺麗なコード&RSpecで書かれたのコードを見て感動したから」でした。

それで少しばかり勉強してみて、「この言語は肌に合いそう」という感覚を覚え、Ruby合宿に参加してみようと思い立ったわけです。


・・・いえ、嘘です。

実は夏季休暇中にインターンシップに行ってみたいと考えていた私の前に“集中講義”という名の休暇潰しが現れたのでした。

はてさてどうしたものか、できれば今年の夏季休暇中に集中的に自分を高められるイベントやインターンシップに参加したいと思っていたのにこれでは無理だ、難しい。
そういえば、夏ってRuby合宿ってあってたよね、アレなら行けるんじゃ…。
という流れでした。

他にも理由はあって、同じようなことに興味がある、また意識の高い同年代の学生の方に会って、話したり開発をしたりしてみたいと考えました。こういうことに関して言えば、学生の時にしか感じられないですし、インターンシップとはまた異なった良さがあると考えた次第です。

まあ、はっきり言ってしまえば、行く前までの私は「Rubyじゃなくても合宿には行ってた」状態でした。

いざ、島根へ

参加するとはいえ、私は九州の佐賀在住の身です。
島根ってまあまあ遠い。
行くのにかかった時間は乗り換え含めて5時間。

日本海側、山陰を3時間以上特急に揺られての旅でした。


そんな中でも、面白いことがありました。

私が特急に乗ってから30分ほどした後、小学1〜2年生くらいのお兄ちゃんとそれより2歳ほど幼い妹の兄妹が電車に乗ってきました。保護者の人はいないみたいで、私の隣に座っていました。

私もいつもなら席を譲るところですが、あまりの荷物の多さに動くに動けなかったために二席並んでいる真ん中のひじ掛けを上げて、私とその兄妹3人で並んで座ることにしました。

特急に1時間以上乗った後、迎えの人もいないのに乗換もしないといけないと言っていたので、心配でしたが大丈夫だったのかな?と気になっていましたが、ついていけるわけでもなく、彼らを見送ったのでした。

そんなこともあったりしながら、私は特急の中で景色を楽しみつつプログラミングGroovyの読書をしていたのでした。
Rubyの本は読まないのかって?きっと大丈夫、と高をくくっていたのです。

であい

集合場所であるオープンソースラボは松江駅のすぐ目の前で、さっそく行ってみました。

入ってみると、Ruby関連のポスターが色々貼ってあるとはいえ、普通の部屋と言う感じでした。
ですが、そこに普通にまつもとゆきひろさんがいらっしゃったのでびっくり。さすがに「…おお」と心の中で驚いていたり。

一時してから、オリエンテーションが始まり、実際に合宿スタート。
まつもとゆきひろさんによる講演がまずあって、講演はまつもとさんがどのようにプログラミングを始めたか、またどのような経緯でRubyが生まれたか、そしてRubyという言語はどのようなものか、というお話でした。

Rubyについてはまつもとさんが「こうなっているとプログラミングしていて気分がいい」と思ったように作ってあるそうです。それでも、それが多くのRubyistの共感を生んだと考えると、プログラミングにおいて「気分がいい」とプログラマが感じる部分と言うのは多くの部分で共通しているのだろうと思いました。


まつもとさんの講演が終わった後、オープンソースラボを後にし、実際に合宿が行われる地へと移動するのでした。。。



移動後、アイスブレイクと宿泊に際しての注意事項が行われました。
アイスブレイクで少し緊張もほぐれ、みなさんとお話をしたりしました。このときに話していて、思わぬつながりに驚いたりもしました。

アイスブレイクはかなり重要だったと思います。
やはり5日もあるような合宿に集まったとはいえ、みんな5日間の合宿でしかも初めて会う人がほとんどだったために、やや緊張はしていたと思います。

それがほぐれたのはすごく良かったです。

夜になって、Mac miniと液晶タブレットを出して(部屋の冷房がきかず、汗だくで)作業をしていたら、いろんな人が興味を持ってくれました。さすがにこんなのを持ち歩く人は少ないよね。

開発、開始!

二日目からはさっそくRubyについての学習が始まりました。

午前中にRubyの基礎的な部分と、午後に今回の合宿の開発で使うdxrubyとdrubyの解説がありました。
Rubyに慣れていない人には結構早く感じたのでは?と思いましたが、実際に1日で行おうとするとあのくらいのスピードで解説しないと追い付かない部分も多いので仕方ないかなと他の人と話をする中で思いました。

実際にはそれこそ講義の終わった後に、私のようなある程度Rubyをやったことがある人が、フォローすればよかったのでしょう。あとで振り返っての反省点でした。

二日目の最後にどのようなゲームを作るかの話し合いをし、私たちのチームではライフゲームのようなゲームを作ることにしました。
このときにホワイトボードを用いてゲームの仕様を詳細に決定した後、モデルを洗い出していきました。

この作業はかなり後々開発の役に立ちました。


三日目には、とうとう開発開始です。
前日に洗い出したモデルや仕様を元に開発です。

私自身はゲームのロジックの部分の担当をしていて、それをサーバー、クライアントの接続部分のコードを書いていたチームメイトに渡して見せたりしていました。

チームメイトの一人、中村君はRubyらしいコードを書いていて、感動しました。
私はRubyに慣れていないのでなかなかあれほどRubyらしいコードが書けないのですが、エディタの使い方も慣れていて、「すごい学生の人がいるな」と思って参考にしていました。

実際にはゲームロジック部分だけでなく、間でGUI側のコードを見たり、サーバー・クライアントのコードを書いているチームメイトとペアプログラミングしたりしていました。

しかしながら、こうやって開発を進めていくうちに、分担が上手くいかなくなり、私ともう一人がほとんどの部分をペアプロで書いて、他の人の手が余っている状態になっていました。

そのあたりの分担を分けるのはかなり大変だと思い知りました。チーム内でレベル差のあるチーム開発でおそらくこういうことがあるだろうと思いながら合宿に参加したのですが、実際にその場でその問題を解決できなかったのは残念でした。

合宿のいろいろ

合宿ではいろいろなことがありました。

特に開発以外で大きなウェイトを占めていたのは、夕飯後のIT企業交流会でした。

この交流会では島根のIT企業の方との質疑応答〜雑談の間くらいのお話をしました。
その中から私が感じたこと、心に残っていることを抜粋して紹介したいと思います。


・企業で働いている技術者の方に「コードを書く際に重視していることは?」と伺ったところ、「見やすいコードを書くこと」という答えがあった。人が見ることを意識したコーディングは重要だと再認識した。

・プログラミングを勉強する際には、言語やライブラリを本などで勉強したあと、実際に自分で手を動かしてみて、その後は人のソースを見ると言うのが重要だと言う話があった。

・プログラミングスキルも重要だけれど、コミュニケーション能力も重要。

・学生のうちにしかできないことをやることも重要。

・人に教えることは自分のためにもなる。

・学生のうちに勉強癖をつけておく。(後々に重要になる。)

Rubyメタプログラミングを活用するのは難しい。特に人が読みにくくならないか注意が必要。


番外編
・物理に興味があって、KEKに興味があると言う方がいた。ちょっとだけ私とその方の二人だけで盛り上がってしまった(笑)

・TDDBCと和田さんは有名だった。「TDDBC」というと「和田さん?」という返答が返ってきて、チームメイトが「和田さんに会ったの?」と言っていた。TDDBCへの参加はある意味ステータスのようなものなのだと改めて実感した。TDDBCの名に恥じないように頑張りたいですね。


あと企業の方とチームメイトが話しているのを聞いていて思ったこととして、「自ら情報を集め、問題を見つけ、それに対しての解決策、解決法を見つけられるというのは重要」だと感じた。これ自体は大学院でやっていることではあっても、プログラミングに役立てられていないのが残念だと自分で感じた。

わかれ

最終日、実際に作成したゲームを企業の方々の前で発表しました。

私は見ていて、みんな発表が上手いと感心しました。私自身、発表は得意ではないため、勉強するところは多かったです。


発表会の後、企業の方との懇談会が開催されました。
参加者の学生が一定時間おきに席を転々と移動して行くという形でした。

私は懇談会の最後にまつもとゆきひろさんの隣に座らせていただきました。
何となく座って、「そういえば!」と気がついて、「緊張」の一言です。

最初は話がはずまなかったのですが、Rubyについて伺うと「今はLuaのような機能をRubyに追加できないか考えている」というお話をされて、凄く興味が湧き、興奮して色々お話しました。

他にも「JRubyはいいよ」とJRubyの開発者に言われて、負けないように頑張ってると言ったことや、言語を学ぶ際にどのようなことを考えて学ばれているのかということを教えていただきました。

最後にこのお話を聞いて、Rubyを使っていくと言う以上にRubyという言語自体が楽しみになりました。
Ruby自体のコードも見てみたいかもと考えたりもしています。
やはり言語開発者の方のお話を聞くと、その情熱やその中に存在する面白さを直に感じられて、本で勉強したり、ただ聞いたりするのとは全く違うのだと感じました。


私自身この懇談会の影響で興奮さめあらぬ中、合宿の最後として企業視察がありました。

データセンターのセキュリティの高い部分を見せてもらえたり、トータルソリューション開発を行っている企業の説明、また有名なネットワーク応用通信研究所の視察も行いました。

それぞれ雰囲気の違う環境で、いろんなIT企業の形を見せてもらえたのはよい経験だったと思います。

みらいへ

企業視察も終わり、合宿は終わりました。

私はバタバタと特急に乗りました。
特急では東京方面に帰るという参加者の人と一緒になりました。とはいえ、二人ともつかれていたため、電車待ちの間はどんな言語をやっているかなどの話はしましたが、電車に乗った後は話をすることはほとんどなく、二人とも寝てました。

私は特急に乗った後、さっそくですが合宿の反省やこの先に活かすべきこと、心に残ったことなどをアナログでアウトプットして行きました。
今回、この作業もなかなか良かったと我ながら思いました。
どうせなら、毎晩でもこういうまとめのようなことを行っておけばよかったと思ったりもしました。
実際、このブログは半分以上はこの時のアウトプットが元です。

今回、Ruby合宿で感じたことは、プログラミング、そしてRubyに興味がある人がとても多かったということ。そしてその熱気、熱意はすごかったということ。
私自身、その熱気や熱意に触れて、気持ち的に変えられた面はありました。
この感覚を忘れることなく、あの合宿で感じた熱意を忘れないようにしたいです。

あとがき

あとがきと言う名のKPT(ぉ

Keep
Rubyを使い続ける。
・TDD(テストも)・DVCS重要!
・様々な言語を学ぶ。(まつもとさんは「この機能をRubyに入れるとしたらどうすればいいかと言ったことを考えると言っていたので、そういう目線も面白そうだと思った。」)
・様々なイベントに参加する。(人に会うことは重要だと感じた。)
・バインダを持っておく。(アナログのアウトプットがしやすい。)
・勉強癖をつけておく。
・人に教える。

Problem
・チーム内にレベル差のある場合の開発の進め方。
・できる人だけでやってしまっていた。
・分担が上手くできていなかった。
・情報・知識共有が上手くいっていなかった。
・相互にフォローしやすい環境が上手く作れていなかった。
・私自身はRubyらしいコードが書けていなかった。

Try
・発表の仕方
・カメラを持ち歩く。(これはいいと思った。)
・チーム開発の際に相互にフォローしやすい環境づくりをする。
・作業をする前に先に目的・設計を明確にする。
・IT業界に入った後のすすんでいく道のビジョンを持つこと。
・サインペンを用いる。(人に見せるときや、書くときにサインペンの方がよさそうだった。)
・聴衆に合わせたプレゼンを行う。
メタプログラミング


あとがきですが、今回のRuby合宿に際して、主催してくださった島根県・および担当の栂さん、合宿の間お世話になった株式会社イーストバックの倉橋さん、元恒さん、NaClから来てくださっていた講師・サポートの方々、サン・レイクの職員の方々、交流会や発表会、企業視察で協力してくださったIT企業の方々、合宿に参加していた参加者の方々、そして忙しい中何度も顔を出してくださったまつもとゆきひろさん。

皆さんにお礼を言わせていただきます。本当にありがとうございました。

皆さんがいたからこそ、Ruby合宿 2011に私は参加することができ、そしてそこで貴重な体験をすることができました。ありがとうございました。

またどこかで皆さんとお会いできる日を楽しみにしています。その時には成長した私が見せられればよいと考えています。