DevOpsハッカソン入門編に参加してきました(2日目)
DevOps!!DevOps!!
1日目に引き続き2日目にも参加してきました。1日目の様子はこちらから。
いやー楽しかった!初ハッカソンでしたが、知らない人たちと2日間という短い期間で話し合いながら開発するのは楽しいですね。今後ハッカソンへ参加する良い足掛かりになりました。
道中の問題や所感はさておいて、今回は当チームがどのようにDevOpsを進めたか、また総評も書き残しておきたいと思います。
作成するプロダクトについて
プロダクト概要
プロダクト名:TodoSpam
Todoを管理するWebアプリ。特徴は期限切れになったTodoから催促のスパムメールが飛んでくる。
アーキテクチャ(Dev)
チームにJavaを経験している人が多かったのでサーバーサイドはJavaを選択。JSPやJSFなどのサーバーレンダリング技術を採用するとView担当とうまく切り分けができないだろう、とのことでフロントエンドはJavaScriptのみ。サーバーとのやりとりはJSONで行い、サーバーサイドはRESTでJSONを返却する仕組みとした。また、FWは採用せずに生のServletを採用。手軽に作成するならSpringBootもいいかと思われたが、学習コストを掛ける時間がないため不採用。
アーキテクチャ(Ops)
ただのWebアプリなのでサーバーとSQLServerがあればOK。JavaのWebアプリなのでTomcat、WildflyなどのAPサーバーがあれば基本的に動く。ロードバランサーやらパフォーマンスモニタやらはサービスができてから考える。というか、アプリ作成がミッションなのでそこまで手が回らないと予想。
- サーバー
- なんでも
- DBサーバー
要件
最初は要件定義としてTodoSpamにどんな機能を付けるのかを話し合いました
などなど。色々上がりましたがまずはシンプルなアプリを作ることに専念しました。
シンプルとは
- Todo一覧が見れる
- Todoが期限付きで登録できる
- Todoの期限が切れたら無慈悲にスパムメールを送信する
以上です。
これらが出来たら、新しい機能として何を追加するか話し合おう、というルールで進めました。
役割分担
当チームはDevOpsハッカソンなのにまさかのDev5人、Ops0人という特殊なチームでした。なのでOpsにも興味がある私ともう一人でOpsに挑戦し、ときおりDevも兼任するという形で役割を分担しました。
- Dev
- ビュー担当:1名
- サーバーサイド担当:2名
- Ops
- IaC、継続的デプロイ担当:1名
- 自動テスト、CI、DB担当:1名
採用するDevOpsプラクティス
DevOpsを実現するには下記プラクティスがあります。
この中で採用できそうなところとして
- IoC
- 継続的インテグレーション
- 自動テスト
- 継続的デプロイ
は実現したいと話していました。
開発結果
- IoC
- MSが提供しているARMテンプレートにJavaとTomcatを載せたサーバーがあったのでそれを使用
- https://github.com/Azure/azure-quickstart-templates/tree/master/201-web-app-java-tomcat
- これだけでIoCのほとんどが終わってしまった...便利
- 継続的インテグレーション
- 自動テスト
- 継続的デプロイ
- アプリ(サーバーサイド)
- アプリ(クライアントサイド)
- 画面作成
- Todo一覧の表示
- Todo登録
- Ajaxによるサーバーサイドとの連携もできたが、JSON解析から動的に反映するところまでは実装できなかった
- そのため、JavaScriptでデモ用に実装してうまく繋いだ
- その他
- カンバンの採用
- カンバンで作成したチケットからGitのブランチを作成してチケット駆動開発の採用
結果発表
アプリとしては完成までは行けなかったものの、採用したDevOpsプラクティスが評価されたのか、ありがたいことに優勝させて頂きました。
所感
今回Opsが居ないチームでしたが、結果的にDevOpsとしては失敗したのではないかと感じています。
Devはアジャイルな開発などで短いサイクルによる開発経験があります。しかし、Opsはゲームエンドと呼ばれているように短いサイクルでの構築作業に慣れていません。そのため、どうしても色々な観点でインフラ構成を詰め込みすぎてしまうのかなと感じました。
DevOpsはそこを解決する認識です。
他のチームのインフラ構成を見ていると、いかに我々のインフラが付け焼き刃なのかを痛感しました。だからこそシステム構成としてミニマムに作れたのです。
我々はDevOpsのプラクティスを僅かに多く実践できましたが、これらはあくまでDevの仕事でした。本来のOpsとしての仕事はほとんど盛り込めなかったと感じています。
ですから優勝はさせて頂いたものの、DevOpsとしては失敗であると感じたのです。