DevOpsハッカソンのルール
DevOpsハッカソンでは、任意の実践テーマにもとづいて環境構築作業を行い、2日目の最後に用意されているチームごとの発表で優勝チームを決める、という「チーム対抗戦」の形式で進められました。ハッカソンを実践する上でのルール・条件には以下のようなものが提示されていました。非常にシンプルかつ制限の少ない形となっています。これら以外の部分についてはチームで自由に決めることができます。
- チーム構成は、インフラ技術者と開発者の組み合わせであること
- 実践する内容として、「Infrastructure as Code」と、その他の別のDevOpsの手法を1つ以上、アプリに実装すること
- どこにもない、クリエイティブなソリューションを生み出すこと
またこれらのルールと併せて、サンプルアプリケーション(Microsoft系のものと非Microsoft系のもの)や、Microsoft系のアカウント情報(Azure Pass, Visual Studio Onlineなど)も運営スタッフ側から用意されました。
実践テーマ(課題)のアイデア出し~投票~チーム分け
実践するテーマについては、着席している参加者が自ら思い付いたアイデアを書き出す所から始まりました。座学セッションでの着席時に座っていたテーブルの島単位で、ホワイトボードを前に今回取り組んでみたいアイデアを出し合いました。

いくつかアイデアが出揃ったところで、アイデア発案者によるテーマの内容と、そこにかける思いなどをDavid氏、牛尾氏にアピールします。この時点で人によっては英語で直接語りかけるという、英語と日本語が交互に飛び交うような場となっていました。
ちなみに、イベント開催中は参加者全員に同時通訳レシーバーが貸与かつ同時通訳のスタッフの方も2名常駐されており、参加者やスタッフ間の英語・日本語のやり取りを適宜通訳されていました。この対応は素晴らしいものであり、英語に付いていけない部分を適宜フォローしていただき、とても助かりました。この場を借りて感謝の意を表したいと思います。ありがとうございました。

テーマの数がある程度が揃ったところで、次は参加者が「自分が実践してみたい!」と思うテーマに投票(という名の意思表示)を行いました。この投票で集まったメンバーでチームを組み、投票したテーマについてハッカソンを進めていくことになります。若干の人数、体制調整が行われ、最終的には6テーマ(=6チーム)が出揃う形となりました。

チームが新たに編成され、いよいよハッカソンもスタート。この時点で昼食休憩の時間となっており、お弁当もスタンバイ済みで食べられる状況にはあったのですが、ハッカソンを進めるにあたってのディスカッションに集中していたこともあって、皆さんともに食事の時間も惜しい!というような雰囲気でした。

チームディスカッション/ハッカソン実践(1日目)
1日目のハッカソンはイベント開催時刻終了の17:00まで。運営スタッフからは「"残業"は18時までとします」との通達もあり、"残業"時間も含めて各チーム制限時間一杯まで、テーマについてのディスカッションや調査に取り組んでいました。参加メンバーの中にはGitやVisual Studio Online、Azureなどのツールやソフトウェア類を触ったことがないというメンバーも一定数いたほか、チームでやりたいことがうまく行かなかった場合に備えて、適宜サポートメンバーやスタッフによる技術的・実践サポートが展開され、そこかしこでチームメンバーで1つのディスプレイを眺め、問題解決に取り組む姿が見られました。

チームディスカッション/ハッカソン実践(2日目)
2日目のハッカソンは午前中および午後のチームごとの発表タイムまでの時間目一杯を使う形で引き続き行われました。
ハッカソンパートでは、実現したい環境を構築するにあたり、「現時点ではそのバージョンは対応していない」「扱っている製品やツールがベータ版のため、動作保証や利用に際するテンプレート、OSイメージなどがなく、場合によってはそれらを作成することからやらなければならない」と言った問題に直面しているケースが多く見られました。それらを何とか自作して臨むチーム、また断念して別の道を模索するチームなど対応はさまざまでしたが、こういう局面・課題にぶつかることで参加者自身にも勉強になる部分が多かった、という声も聞くことができました。
Visual Studio OnlineやAzureに今回のハッカソンで初めて触った、という人もいましたが、イベント用に用意されていたサンプルアプリを動かしてみることで、アプリの挙動と併せて環境の仕組みや使い方を身に付けることができていたようです。終盤に差し掛かる頃には、ある程度の目処が立ち発表に向けての準備に取り掛かっているチーム、最後の最後まで環境設定やアプリの挙動について試行錯誤しているチームとその雰囲気もさまざまでした。

実践結果発表
15:30をもってハッカソンは終了。ここからは各チームによる発表タイムとなりました。発表の順番は牛尾氏とDavidによる「乱数生成Webアプリ」による抽選形式でランダムに決められました。各チーム7分程の持ち時間でこれまでの成果を順次発表していきます。

発表時には各チーム卓へ参加者全員が集まり、スタッフ(審査員)の質疑応答も交えてチームの発表内容に興味深く聞き入ります(ちなみにこのタイミングでも発表者の英語プレゼンに対応する形で同時通訳が行われていました)。
各チーム非常に興味深い発表となっていましたが、その中でも特に目を引いたのが「チーム4」と「チーム6」の発表内容でした。実際審査員・スタッフの中でもこの2チームのどちらを優勝とするか、最後まで選考に悩んでいたようです。以下、2チームの発表内容に関する概要を記します。
チーム4:Visual Studio Onlineを使った継続的デリバリビルドの実践
- デプロイや機能テスト、負荷テストなどの実践を行うCIシステムの構築を目標とした。Infrastructure as Codeも実践
- アプリは(イベント提供の)サンプルアプリを用いた。JavaのサンプルアプリでGlassfishで稼働するもの。ソースがコミットされるとWARファイルが作成され、Dockerで梱包し、デプロイする流れを実現した
- ベンチマークも取り、結果をPowerBIで可視化するというフローも実現できた
- 反省点としてはAzureもVisual Studioも使い方が分からない状態で臨んだこと。この点についてはサンプルを使い込むことで理解を深め、スタッフに適宜アドバイスをもらうことで乗り越えることができた
- DevとOpsをどのように連携・協調して目標を達成させるか、という点については「カンバン」を使うことで対応した。残された時間の中で問題の切り分けを行い、デモを見せる所まで辿り着くことができた

チーム6:MesosやDockerを使った、Dockerイメージからのクラスタアプリデプロイメント環境の構築
- MesosとDockerを使い、CI環境を実現させるというのを目標とした
- MesosはクラスタリソースマネージャのOSSプロダクト。物理マシン(または仮想マシン)を1つのクラスタとして管理し、タスクを処理させたいときに、空いているマシンを探して、そこでリソースを割り当てて実行してくれるような仕組みを持つ(プロダクト公式サイト)
- Mesos環境の構築ではVisual Studio Onlineなどを使いDockerイメージを作成
- クライアントサーバの構築についてはChef Soloを用いた。Azure環境に乗せるのが大変だった
- 開発側の環境ではASP.NETを稼働させるというのを目標にした。ビルド周りでいくつか問題があり、最終的にはビルドせずにコミットを行い、ソースコードをDockerに乗せてビルドエージェントマシン上で環境を構築するという流れに落ち着いた。トリガーはソースコードをコミットするたびに走るようになっており、CIも実現できている
そして運命の優勝チームの発表。優勝を勝ち取ったのは……、「チーム6」でした!


Davidを含めた講師・スタッフの総評の後は参加者スタッフに記念撮影で締めとなりました。計2日間、座学とハッカソンの2部構成で展開された今回のDevOps体験イベント。イベントを通した参加者の表情を眺めた限りでは、慣れない環境に悪戦苦闘しながらも、周囲の助けを借りつつ、チームで物ことに取り組む姿に(若干の疲労感がありながらも)充実感に満ちていたように見えました。

今後のイベント開催予定
今回の「DevOpsハッカソン」は、今後も継続して開催が予定されているようです。興味のある方は下記サイトから参加申込を行い、予習や素振りを踏まえた上で当日イベントに臨まれてみてはいかがでしょうか。また、イベントハッシュタグや参加スタッフのTwitterアカウントをフォローしておくことで、イベントに関する情報を素早くキャッチアップできるかと思います。こちらもぜひ参考にしてみてください。
- 今後の開催予定に関する情報:
- 現時点での開催予定日程:
- DevOps関連ハッシュタグ:#DevOpsJp
- 講師:牛尾 剛氏(@sandayuu)
- 講師:寺田 佳央氏(@yoshioterada)