こんにちは。斎藤です。
みなさん、ハッカソンは大好きですか?!ハッカソンというとソフトウェアを開発すると考える方が多いと思いますが、今回はDevOpsです。
内容は、プログラマとITインフラエンジニアが共同で Continuous Integration (CI), Continuous Delivery (CD)を実践し、技術的な点ではもちろん、仕組みを開発するにあたりチームビルディングをどうしていくかという学びを得るイベントでした。
9/5, 9/6の2日にわたって催されたMicrosoft DevOps ハッカソン(本会)、今日はその模様についてお話しします。
公式ブログにも模様が掲載されています: 「DevOps ハッカソン開催報告 (9/5~6) & 次回予告 - MSDN オンライン チームブログ」
概要
本会は、次のプログラムで構成されていました。
- 1日目 9:00〜11:30: Microsoft (MS)のDevOpsエバンジェリスト @dtzar さんによる、DevOpsの定義の確認と、オープンソース、MS製品の位置づけの理解。
- 1日目 12:00〜18:00: 開発。
- 2日目 9:00〜15:30: 開発。
- 2日目 15:30〜16:00: 成果のプレゼンテーション。
- 2日目 16:00〜16:45: @dtzar さんによる講評。
また、本会の成果物として求められていたものは次の通りです。
- プログラマ・ITインフラエンジニア 混成チームであること (実際は5〜6人/チーム)
- Infrastructure as Code (IaC), DevOps の要素をそれぞれ必ず入れる
- どこにもないクリエイティブなソリューションを生み出すこと
- (アプリはサンプルアプリベースでも良い)
肝は、IaCやDevOpsの実践の結果としてCI, CDが実現できることです。また、再利用性についても重視されていました。
30人ほどが集まり、6チーム編成して開発を行いました。
プラットフォームとして提供されるのは、Microsoft Azure(Azure), Visual Studio Online (VSO)でした。Visual Studio (VS)も利用でき、イメージが配布されていました。
チームでの作業
チーム編成にあたっては、やりたいことを一人一人が挙げた中で、共感できる人に投票し、チームを編成しました。私の所属したチームは6人いまして、プログラマの方、ITインフラの方、両方できる方、またデータ分析などMicrosoft製品に造詣がある方など、バランスがとれた構成でした(私見)。
チームの目標を「CI, CDを活用した素早いリリースを体感する」に置き、次の流れで作業を実施しました。
- CIのフローを棚卸し
- やってみたいことを挙げてタスク化
- タスクを分類しプライオリティをつけて担当分け
- 技術検証
- (2日目に入る際に)状況の棚卸し, 残タスクの所要時間確認, 問題解決の指針作成
- 実装
- テスト
- スライド作成
1, 2, 3 ですが、「ハッカソンだしやりたいことベースでやってみてはどうか」という意見があり、目から鱗でした。いつも「理想・やるべきことベース」から考える癖がついてしまっていたので、楽しむことをベースに考えるという視点が抜けていました。それに、仕事でもないですし。こういうの、普段の生活が出てしまいますね。
4は最も大変な所でした。というのも、VS, VSO, Azureの知見は他のCI, CDのツールと違い実践した人があまりおらず、かつパブリックな情報として存在するのが公式のドキュメントとサンプルがほとんどでした。最初、ここで悩んで時間を消費してしまったのが失敗でした。まずは王道であるサンプルアプリケーションを触って理解することからやり直し、その後はMicrosoftの方々や知見を持っている方に質問することで一つずつ攻略したのでした。これだけで1日目すべてと2日目の少しが潰れてしまいました。 王道が重要 であることを再認識した出来事でした。
6は、はやい方だと1日目から、本格的に進んだのが2日目からでした。これは4で集めた情報を基にとにかくガリガリとやるだけでした。その中でもやはり引っかかることがあり、ちょくちょく質問しつつ前進して行く形でした。動き始めたのが、14:30頃だったと思います。
7では、git pull
のトリガーの確認、デプロイ結果の確認の実施、及び準備して頂いたベンチマークツールを流す作業に当てました。平行して8を実施していました。
成果発表のプレゼン資料は以下の通りです。
所属していたチームはトップ賞を取るための最終選考(2チーム)まで残っていたそうですが、惜しくも獲得するにはなりませんでした。トップ賞を取ったチームは、Mesos, Chefまで活用できていて、さすがだなと感服したのでした。
とはいえ、タスクの整理のしかたや、文脈を整えるための情報整理については、初対面の人たち同士でここまでできたのは本当に素晴らしかったです。ここでは健闘できたのではないかと振り返っています。これは、整理に慣れた方がチームにいたおかげでして、一緒にハックする中でとても学びがありました。
以下のフローの図は、誰が何を担当していて、どのような流れになるのか文脈を統一する際に大変活躍しました。また、最終プレゼンでも、この紙1枚あれば今回の成果を説明することができる状況にありました。
個人的には、ITインフラ担当として、Serverspec, Infratester, そしてインスタンスの自動起動・オートスケーリングまで実装できたら最高だったなと思いました。使い方を復習して、今後の課題にしたいと考えています。
得られた知見
VS で書ける言語でしか使えないというのは真ではない
今回採用したサンプルアプリケーションはJavaベースで、サーブレットコンテナにGlassfishを利用しました。VSOの管理下にあるAgent(ビルドサーバ)でビルドできる状況にあれば、特に言語に縛られることなくCI, CDが実現できます。
また、AzureもWindowsばかりでなくLinuxも利用可能でして、今回はCoreOSを選択しています。CDの際にも、bash, Chefなどが利用でき、OSSで培った知見が無駄にはならないことがよくわかりました。
この様子は、動画「GlassFish on Docker with Microsoft Azure」をご覧頂くとわかります。
ソフトウェア開発環境と統合されたCI, CD
これまでソフトウェア開発環境とITインフラ環境はどちらかというと統合されたとは言い切れない状況にあったと私は考えています。その中で、VS, VSOを使うと、ソースコードとITインフラの情報が1つのプロジェクトに全て統合することができ、開発環境からいつでも実行環境を構築して立ち上げることができるようになります。
この流れは、サンプルアプリケーション Parts Unlimited を使うと確認することができます。
DevOps 実践にあたっては共通言語があると良い
DevOpsというと、CI, CDの実装と運用は重要な要素の一つです。
一方で、カバーしなければならない技術の範囲が広大で、一人でカバーすることは至難の業です。そこで、分野が違うソフトウェアエンジニアが集まるチームになって進めて行くことになるパターンが多いかと思いますが、これが難しい。文脈の基礎となる 前提条件 や前提知識が違うため、自分自身・相手が想定していたこととは違う結果を生み出すことがままありました。
食い違った結果を放置してしまうと、CI, CDとするためのパイプラインをつなげて行くことができなくなります。結果に直接結びつくのです。そのために、ちょっとしつこいかもしれないけど...納得いくまで質問・確認をしていくことで、理解を進めてゴールに向かう重要性を再認識したのでありました。また、共通言語となる基盤、今回ではフロー図などのドキュメントを整えることで、議論をしやすくしたり、原点に立ち戻りやすくすることも欠くことができないと理解しました。
当たり前のことと言えば当たり前なのですが、ソフトウェアを通じて価値を提供する際、チームの運営方法をより意識する必要がある時代に入ったのかもしれません。
感想とまとめ
楽しかったです!初めての方といきなりチームを組んでうまくやって行けるのか正直心配していた所もありましたが、きちんと結果がが出せて良かったです。恐らく、チームの皆さんは、普段の開発の現場でも積極的にリードされている方ばかりなのだろうなと想像しました。本当に素晴らしい方々でした。
また、新しい技術を理解するにあたり、ハンズオン以上に理解が深まったように思います。とはいえ、かなりスパルタンな感じがしますが(!)、やるしかありませんし、やればわかるものですね。
今後もやるそうですので、興味のある方は参加されてみてはいかがでしょうか。
お世話になったMicrosoftのみなさま、会場のみなさま、そしてチームメンバーのみなさま、どうもありがとうございました。
それでは皆様、ごきげんよう。