はじめに
僕は2013年から西脇.rbというRubyコミュニティを主催しています。
まあ実際は西脇.rb単体で活動することはなくて、Akiさん(@spring_aki)が主催している神戸.rbといつも合同で毎月1回Ruby勉強会を開くのが主な活動です。
前々からコミュニティのメンバーとは「合宿って面白そうだよねえ。いつかやってみたいよねえ」みたいな話をしていたのですが、場所を探したり、あれこれ準備をしたりするのが大変そうでなかなか着手できませんでした。
ところが、今年に入ってから新しいメンバーもどんどん増えコミュニティ的にいい感じに盛り上がってきました。
そこで「よし、じゃあみんなで合宿でも行ってみるか!!」と一念発起して開発合宿を開催することにしました。
というわけで、今回は2014年10月4日(土)と5日(日)の2日間で開催された西脇.rb & 神戸.rbのRuby開発合宿の様子を書いてみます。
Photo by @jnchito
合宿を開催した場所はエオの森 研修センター
合宿を開催したのは兵庫県三木市にあるエオの森 研修センターです。
この研修センターは三木ホースランドパークという大きな公園の中にあります。
緑がたくさんあって、乗馬体験もできます。(このあと乗馬の写真も出てきます)
館内は無線LANが使えて、研修室ではプロジェクタを借りることもできるので、勉強会を開くのにも打ってつけです。
ただし、無線LANはときどきスムーズにつながらないことがあったので、僕はiPhoneのテザリングでネットにつなぐことが多かったです。
Photo by @yuji_shimoda
参加してくれたメンバーはなんと14人!
この合宿にはなんと14人ものメンバーが参加してくれました。
もともとは16人の参加希望者がいたのですが、仕事の都合で来られなくなったメンバーが2人いたので結局14人になりました。
最初は「多くても10人ぐらいかな~」と思っていたので、16名も希望者が出たことにちょっとびっくりしました。
なお、合宿の告知はこれまで西脇.rb & 神戸.rbの勉強会に参加したことがある人に限定して告知しました。
みんなで一緒に泊まるとなると、どんな人か事前にわかっていないと、ちょっと不安になるからです。
合宿のテーマは「長めのもくもく会」
合宿のテーマは簡単に言うと、「長めのもくもく会」です。
基本的には個人個人が作りたいプログラムを2日間かけてじっくり作る、というのが大まかな目標です。
ただし、興味の近いメンバーがいれば一緒にチーム開発してもいいですし、「もくもく会」と言えど、何か質問や相談があれば他のメンバーとわいわい話しても全然構いません。
また、合宿の最後には成果発表会を行い、この合宿で自分が作ったものを披露してもらいます。
合宿1日目
それではここからみなさんにも僕たちの開発合宿を追体験してもらえるよう、時系列順に実施内容を紹介していきます。
10:00~10:30 自己紹介&やること宣言
最初は自己紹介とこの合宿で開発したいプログラムを各人に説明してもらいました。
Raspberry Piで何か作りたいというメンバーや、Ruby-Processingを使って鬼ごっこのアルゴリズムを可視化&シミュレートしたいというメンバーなど、やりたいことは各自様々でした。
Photo by @spring_aki
10:30~12:00 コーディングタイム
自己紹介が終わったら早速コーディングに取りかかります。
興味の近いメンバーが何組かいたので、そういう場合は興味が近い人同士で隣り合うように席を変更しました。
Photo by @yuji_shimoda
13:00~18:00 コーディングタイム
昼食が終わったらコーディング再開です。
いちおう「コーディングタイム」となっているものの、特に行動を縛るわけではなく、自由に散歩してもらったりしても良かったのですが、みんながっつりコードを書いていました。
Photo by @yuji_shimoda
19:00~20:00 買い出し or お風呂
夜に飲みたい人たちは夕食後に近くのコンビニへ買い出しに出かけました。
特に買い出しするものがないメンバーはその時間で先にお風呂に入りました。
ちなみに、近くのコンビニといっても徒歩で行ける距離ではないので、メンバーが乗ってきた車に相乗りして出かけました。
20:00~21:00 中間発表会
1日目の締めくくりとして、現時点での進捗を各メンバーに報告してもらいました。
今回の合宿ではソフトウェアで完結するプログラムだけでなく、Raspberry PiやArduinoといったハードウェアと組み合わせたプログラムを作ろうとしている人もいます。
Photo by @spring_aki
各自が作ったプログラムはそれなりにできあがりつつありますが、まだ完成には至っていないようです。
Photo by @jnchito
21:00~深夜2:00 (?) フリータイム
中間発表会が終わったらあとは自由です。
寝るのもOK、飲むのもOK、はたまた飲みながらコードを書くのもOKです!
Photo by @yuji_shimoda
僕は朝型人間なので22時頃には布団に入ってしまいましたが、中には2時頃までコードを書いていたメンバーもいたみたいです。
ちなみに寝室は最大10人入れる和室を2部屋借りて、7人ずつ分かれて寝ました。
Photo by @jnchito
合宿2日目
つづいて合宿の後半戦、2日目の様子をご紹介します。
6:00 (?) ~7:30 フリータイム
朝食は7:30からだったので、それまでは自由です。
僕は6時前に起きて、館内の図書スペースでコードを書いていました。
コードを書いていると他のメンバーも何人かやってきて、一緒にコードを書いていました。
Photo by @jnchito
また、朝の散歩に出かけるメンバーもいました。
公園内はかなり広いので、かなり良い散歩コースになったみたいです。
Photo by @pinzolo
8:30~11:00 コーディングタイム or 乗馬タイム
8:30から昨日と同じようにコーディングを再開します。
Photo by @jnchito
ただし、一部のメンバーは乗馬の予約をしていたので、9時過ぎから乗馬センターに移動して乗馬を楽しんでいました。
乗馬していたメンバーはもちろん馬の上でもコードを書いて・・・いるはずはありません(笑)。
Photo by @yuji_shimoda
11:00~13:00 バーベキュー大会
11時からは昼食のバーベキューを始めました。
バーベキューの材料は僕の妻に車で運んできてもらいました。
14人分の買い出しや野菜のカットなどもやってもらったので、とても大変だったと思います。
妻はこの合宿の影の功労者です。どうもありがとう!!
おかげでバーベキュー大会は非常に盛り上がりました。
野外でわーわー言いながら肉や野菜を焼くのはとても楽しかったです。
Photo by @jnchito
13:00~16:00 ラストのコーディングタイム
バーベキューが終わったら、またまたコーディングの時間です。
コーディングの時間はいよいよこれでおしまいです。
このあとの成果発表会に向けて、みんなラストスパートをかけます。
うまくいかないところがあれば、他のメンバーに相談したりして解決していきます。
Photo by @jnchito
16:00~17:00 成果発表会
16時でコーディングタイムは終了です。
ここからはこの2日間の開発の成果を発表していきます。
もともとは成果発表会とコードレビューをセットにして、もっと時間を使う予定だったのですが、「もっとコードを書きたい!!」というメンバーが多かったので、コーディングの時間を増やしました。
代わりにコードレビューの時間を削り、基本的に自分の作ったプログラムの動きを見てもらうだけの時間にしました。
毎月やってる普通のもくもく会だと、時間がなくて非常に限られた部分しか作れなかったりしますが(ログイン画面だけとか)、さすがに丸2日あるとプログラムとして全体的な形が見える(データの登録や表示など、一通りの操作ができる)ものが多かったです。
Photo by @jnchito
17:00~17:30 片付け&解散
楽しかった開発合宿もこれにて終了です。
研修室を元通りに片付けて、研修センターをあとにしました。
あっという間の2日間でした。
Photo by @yuji_shimoda
合宿でかかった費用
合宿でかかった費用は宿泊代、研修室代、食事代を合わせて一人9500円でした。
意外とリーズナブルだと思ってるんですが、いかがでしょうか?
なお、お酒を飲む人は各自で別途購入してもらっています。
また、乗馬代も利用したメンバーだけで別途支払っています。
僕が作ったプログラム
ところで、この合宿で僕が作ったのはDossier(ドシエ)というgemをもっと便利に使うためのサンプルプログラムです。
DossierはRails上でSQLから簡単にレポートを作成できるgemです。
凝った集計レポートの作成はSQLの得意分野なので、ActiveRecordよりもSQLで直接書いてしまった方が速いです。
Dossierを使うとSQLの実行結果をそのまま画面に表示できたり、CSVに出力したりできます。
また、パラメータを追加してwhere句の条件を動的に変更したりすることもできます。
このようにSQLが得意な人にとってDossierはとても便利なgemなのですが、レポートごとにRubyのクラスを定義しなければいけないのが難点です。
レポートを追加したり、SQLを変更したりするたびにソースコードを変更しなければいけません。
# Dossierを使ってレポートを定義するコードの例 class UserBirthYearDistributionReport < Dossier::Report def sql <<-SQL SELECT Strftime('%Y', birthday) AS birth_year, Count(*) AS user_count FROM users WHERE annual_income > :annual_income_greater_than GROUP BY birth_year ORDER BY birth_year SQL end def annual_income_greater_than options[:annual_income_greater_than].to_i end end
そこで、レポートのSQLやパラメータをクラスの中で定義するのではなく、データベースに保存してレポートを簡単にCRUDできるようにしたいと思いました。
これが今回作ったサンプルプログラムの開発の動機です。
サンプルプログラムの動きはこんな感じ
最終的にはgemにして簡単に使えるようにしたいのですが、とりあえず今回は技術調査用にサンプルプログラムを開発してみました。
下の例ではユーザーの生まれた年ごとにユーザー数をカウントするレポートを作成しています。
さらに年収を検索条件として指定できるようにしています。
このように気軽にレポートを追加したり変更したりすることができれば、サイト運営者なら誰でも知りたがる月ごとの売上や新規ユーザー数の変化をサクサクとレポート化することができるはずです。
なお、今回作成したサンプルプログラムのソースコードはGitHubに置いています。
気になる方は参考にしてみてください。
GitHub - JunichiIto/dynamic-dossier-sandbox: A sandbox Rails application for Dissier gem.
合宿中の進捗や今後の展望など
1日目はDossierのコードリーディングでほとんど終わってしまい、サンプルプログラムを書き始めたのは2日目からでした。
見た目はScaffold丸出しな感じでちょっとイケてないですが、一応SQLやパラメータをCRUDして動的にレポートを作れるようにはなりました。
実はこの「簡単にレポートがCRUDできるプログラム」は前職で使っていたWindowsアプリケーションをお手本にしています。
そのアプリケーションは内製ツールだったのでもう触ることができないのですが、かなり便利だったので同じようなアプリケーションを作ってみたいな~とは前々から考えていました。
今後のもくもく会や空いた時間でこのプログラムをどんどん発展していけたらと思っています。
まとめ
というわけで今回は西脇.rb & 神戸.rbで初めて開催したRuby開発合宿の様子を紹介してみました。
毎月やっている普段の勉強会もそれはそれで楽しいのですが、合宿はそれ以上に楽しかったです。
メンバーがたくさんいたので、コーディングの最中にも質疑応答が活発に発生していい感じでした。
やりたいことにじっくり取り組めるという時間も最近あまりなかったので、個人的にも貴重な2日間となりました。
また、乗馬やバーベキューなど、ちょっと特別なイベントを挟むと、「非日常感」がより高まってテンションが上がります。
参加したメンバーもみんな楽しそうにしていたので、開催して良かったな~と思いました。
スムーズな合宿運営に協力してくれた西脇.rb & 神戸.rbのメンバーにも本当に感謝です。
今後も年一回ぐらいはこういう合宿を開催したいですね。
勉強会を主催している方で合宿はまだやったことがないという方は、一度やってみるときっと面白いはずです。
段取りや準備はちょっと大変ですが、同じ興味を持ったメンバーで合宿を開催するととても楽しいので、ぜひ参考にしてみてください!
西脇.rb & 神戸.rbについて
西脇.rb & 神戸.rbは西脇~神戸近辺で活動するRubyコミュニティです。
毎月1回ぐらいのペースで、Rubyに関する勉強会を開いています。
参加者全員が自分の手と頭を使ってコードを書き、それをみんなでレビューする、というのを勉強会の基本スタイルとしています。
Ruby初心者の方や初めて参加する方でも大歓迎ですので、興味のある方は気軽に参加してください。
Doorkeeperのコミュニティページでメンバー登録してもらうと、勉強会の開催通知を受け取ることができます。
また、西脇.rb & 神戸.rbのFacebookページもあります。
「いいね!」してもらうと、コミュニティに関する最新情報をキャッチすることができます。
あわせて読みたい
最近の活動内容をまとめたり、1年間勉強会をやって感じたことなどをまとめたエントリです。
興味のある方はこちらもどうぞ。