以前のブログでも書いたことがあると思いますが、
私は、Java Doというコミュニティの運営スタッフをしております。
そのJava Doの活動で、2018/11/17(土)~18(日)の2日間に渡って、弊社のラウンジと会議室を使い、Azure Kubernetes Service(AKS) ハックフェストを実施しましたので、その時の様子などを紹介します。
今回、Microsoftの寺田佳央様をお招きし、Azure × Kubernetes をテーマにしたハックフェストを実施して頂きました。
イベントページでは「ハッカソン」と書いていますが、寺田さんは「ハックフェスト」とおっしゃっていました。
寺田さんは、もともとSun Microsystems、OracleでJavaやGlassfishのエバンジェリストをされていた方で、
Javaチャンピオン(日本人は2人しかいない)の日本人第2号という、Java界隈で知らぬ人はいないという、超絶凄いお方。
そして、2015年夏にMicrosoftにJOINされ、「Sr. Cloud Developer Advocate」という肩書で、Azureを中心にCloudの技術を伝え・広めるため、世界を舞台に活躍していらっしゃいます。
参加者は11名(申し込みは12名ですが、1名、体調が優れないとのことでお休み)で、
DockerやKubernetesの経験者(使ったことがある・使っている、勉強している)が4名、
初心者(勉強しようとしているが初めて使う)が7名という構成でした。
※私はDockerは少し使ったことがあるのですが、Kubernetesは触ったこともないので、初心者として参加しました。
今回は、経験者グループと初心者グループに分かれ、それぞれ別の部屋(会議室)で実施しました。
(会議室が複数あって、とても助かりました。)
それぞれの会議室は、以下のような感じで取り組んでいました。
【初心者グループの様子】
初心者グループでは、初日は寺田さんがほぼ付きっ切りで基本を説明し、2日目は基本的にメンバー同士で復習しながら初日にやったことを自力でやるのを目標に取り組みました。
【経験者グループの様子】
経験者グループでは、最初からメンバー同士で議論しながらテーマを決めて取り組んでいたようです。
ラップアップで発表したのを聞いたところ、1日目はDevOpsを立ててデプロイの自動化など、2日目はコンテナ環境の動作状況監視などを中心に取り組んでいたようです。(すみません、言っている用語がよくわかりませんでした。。。)
※いずれも2日目に撮った写真で、1日目だけ参加する方もいらっしゃったので、写っている人数は少ないです。
※プライバシーを考慮し、顔の部分はぼかしてあります。
そして両日とも、最後の30分はラウンジに全員集まり、ラップアップ(総括)として、
それぞれのグループの代表が
・その日に取り組んだこと
・(最終日以外では)翌日に取り組むことと目標
そして、全員で感想を発表し合います。
2日目のラップアップでは、それぞれの感想に加えて、
今後、どのようなことを勉強していきたいか、どのように取り組んでいくか、といった熱い気持ちを発表していました。
今回、初心者グループ、経験者グループとも、「モブ・プログラミング」による「ハックフェスト」という形で実施しました。
モブ・プログラミングというのは、
・1グループあたり5名程度でグループを組む
・1グループで画面を1枚共有(大きめの画面が望ましい)
・グループ全員で1枚の画面で一つのものを作り上げる
・1人が「ドライバー」として実際にコードやコマンドなどを打ち込む
・他のメンバーが「ナビゲーター」として、ドライバーに打ち込んでもらう内容を話し合いながら決めていく
※考えたり調べたりするのは、基本的にナビゲーター
・一定時間(15分とか、30分とか、長い場合は1時間とか)が経ったら、あるいは、切りのいいところで、ドライバーを交代する
※全員が少なくとも1回はドライバーをやるように
というやり方です。
ペア・プログラミングの発展形みたいな感じですね。
次に「ハックフェスト」についてですが、
Microsoftが提唱するハックフェストでは、
一緒にプログラミングをしながら、グループのメンバーが対話しながら、互いの理解を深めていくことに重きを置いているようです。
一般的に「ハッカソン」というと、自分たちでテーマや目標を決めて、プランナー、デザイナー、プログラマーなどの担当を決め、
並行して作業していき、アプリケーションやプロトタイプを完成させるのを目標にする、場合によってはコンテスト形式でグループ同士が競い合う、
というのがよく見る形ですよね。
Microsoftでは、ハッカソンとハックフェストは、明確に使い分けているそうです。
同じグループでも、メンバーそれぞれ、バックグラウンドは異なり、テーマとなる技術の習得レベルも違う中、
ハックフェストでは、モノを完成させるのが目的ではないので、無理なく全員で知識を共有しながら進めることができます。
講師がテーマや答えを教えながら参加者が作っていく「ハンズオン」というのもありますが、ハンズオンは自分で手を動かすとはいえ、基本的には受け身の形。
一方、今回のハックフェストは、メンバーそれぞれが主体的になりながら進めていくことが大切。
「誰かが調べてくれるから待ってればいいや」という考えでは先に進みません。
課題を進めるなかで躓いたら、ナビゲーターは懸命に調べるし、調べたことを共有して具体的にどう進めるかを議論し、試行錯誤を繰り返していきます。
メンバーが皆でフォローしあいながら目標達成に向けて取り組むので、一般的なハッカソンでよくある、
メンバー同士のもめ事やチームの空中分解という心配はほとんどありませんが、
皆で協力して必死に調べながら議論して進めるので、ハンズオンと比べると、かなりエネルギーを使います。
※ハンズオンは、答えが決まっているし、最悪、コピー・アンド・ペーストで作っていけば一応動くものを作れますから。
今回のような、モブ・プログラミングでのハックフェストのやり方は、
Startup Weekendのように、ビジネスのプランとプロダクト(あるいはプロトタイプ)を短時間で作り上げて競い合うために、メンバーそれぞれが役割を分担して並行で進めていかなければならないイベントには向かないかもしれません。
しかし、会社での教育プログラムに取り入れると非常に有効だと思います。
また、モブ・「プログラミング」といっても、プログラミングに限らず、運用しているシステムやサービスで障害が発生した際の対応や、その後の恒久的対応・改善の施策を決めるときなど、ノウハウの共有にも有効だと感じています。
寺田さんは、ハックフェストやハッカソンなど、メンバーが自ら主体的に課題を決定して取り組んでいくことの重要性を、2日間通して、かなり強調していらっしゃいました。
ただ一方で、勉強会の形として、「もくもく会」、「ハンズオン」、「ハックフェスト」というように色々な形があり、それぞれメリット・デメリットがあります。
※ハックフェストは非常に有効な方法ではある一方、開催期間は1日では足りず、まとまった日数を確保する必要がある、といったデメリットがあります。
Java Doでは、定例の勉強会はハンズオンの形で色々な技術を紹介しつつ、
年に1~2回程度、週末で連休が重なるタイミングをうまく使ってハックフェストを実施するのが、ちょうどいいバランスなのかな、
と個人的には考えています。
M.clacla