2019」が2月14日~15日に開催されました。」に登壇したのは、株式会社デンソーの佐藤義永氏と冨田進氏。Summitで発表した内容をベースに、この1年で実際にサービスをリリースするまでの知見やアジャイル開発・チームビルディングについて語りました。冨田進氏(以下、冨田):商用に近づくにつれてチームが大きくなり、さらにプロジェクト自体も、当初は4名ぐらいだったプロジェクトが、いまは70名。10倍以上に膨れ上がっています。なると、やはり苦労した点としては、インフラが問題となってきました。いうのもインフラのエンジニアがすごく潤沢にいるわけでもなく、すごく少ないメンバーで回していかなければいけません。プロジェクトごとにインフラはきちっと用意してあげなくてはいけなくて、「じゃあ、少ない人数で保守・運用可能なインフラってどうすればいいのかな?」という課題が出てきます。スクラムの特徴なのかもしれませんが、次々とお客さんの要求が変わるとか、市場が変わることがあります。その場合にインフラも引きずられて、構成変更が必要になることもあり、変更に素早く対応できるインフラも必要です。アプリケーション開発がメインということもあって、アプリケーションのエンジニアが多いんです。新しいメンバーがインフラに詳しいかというと、やはりそこまで全部知っている人というのはなかなか多くなくて。メンバーが意識しなくても、アプリケーションの開発に専念できる環境づくりが必要で、「なるべく中身を意識しなくてもいいインフラをどう作っていくか?」というのが課題としてありました。3つ、主にポイントがあります。1つ目は、極力インフラをコード化しておく。することで、なるべく手動で作業をするということをなくし、構築ミスをなくす。AWSを使っているんですけども、中身を意識しなくてもうまく使えるようなかたちにしておく。2つ目は、横展開も可能なインフラのテンプレート化。これは今回のmobi-Crewsの話だけではなくて、組織全体の話になるんですが、プロジェクトがいくつも出てくるときに、インフラもすぐ作りたい。いろんなパターンがあると、その都度「コード化したけど書き換えなきゃいけない」「変更しないといけない」とすごく大変なので、「インフラの基本パターンはこれ」とテンプレート化しておいて、それを横展開していくことで素早くしていきたいと考えています。3つ目は、これは構築というよりも運用・保守の観点からなんですが、自分たちでサーバーのソフトウェアを管理してると、管理工数がかかってきます。あとは障害に強い事も大事です。商用サービスに耐えられるインフラを作るというのはすごく大変で、極力マネージドサービスを使用して、運用・保守の負担も考慮するというのがポイントとしてありました。インフラ構成のポイントインフラの構成は先ほど説明があったんですけど、Terraformというサードパーティーのツールを使いました。これは、AWSを使っているときの構成を定義できるツールです。何がうれしいかというと、1コマンドでインフラがパッとできます。作るだけならおそらく30分もかからない。インフラの構成をパターン化しました。大きな考え方としては、大規模なシステムや、「社内のデモで少し動かしてみたいんですけど」などいろいろな要望に合わせて、その構成を大規模向け、小規模向けみたいなかたちで分けています。だいたいいまの状態だと、6パターンしか用意していないです。構成を限定することで、要はどのプロジェクトであっても、だいたいの構成は「あ、こんなものね」というのをみんなわかっているので、問題のある場所の切り分けとかがすごく簡単になりました。調査時間を短縮することができました。あとは、構成がある程度の人にわかっているので、「とりあえずインフラは大丈夫そうだね。アプリでいこう」という切り分けもスムーズになりました。別に宣伝ではないんですけど。Beanstalk、ロードバランサーであるとか、サーバであるとかを全部管理してくれるようなAWSのサービスがあるんですが、それを使うことで、開発者はアプリケーションの開発に専念できるし、さらにインフラを見ている人は、構成管理の手間も減る。Beanstalkに用意されているので、さらに障害にも強いと。非常にお得な感じになりました。商用リリースにあたっての3つの課題(スライドの)次のページで、「どんな感じの構成になっていますか?」というのを、少し写真に出しました。これは、クラウドを使った構成をしたときの基本的なパターンと言えるのかなと。Beanstalkがいて、Web側がいて、ワーカーがいて、クラウドフロントがいて、データベースがいて、というかたちになっています。大規模であればこのフルフルの構成なんですが、ちょっとしたデモであれば、例えばワーカーを立ち上げずに対応していく、というのがパターンになります。次は具体的にどういう技術を使っているのか。洗い出してみたんですが、「意外と多くないな」という印象を受けました。ある程度いろんなサービスがあって、AWSには100以上あるんですが、使っているのは10もいかない......ある程度少なめでやっています。いろいろなサービスが出てくるんですけど、僕たちが大事にしているのは、もしなにか新しいサービスを使いたいとなったときにも、「本当に必要なのかな?」「それってなんでいるんだっけ?」というのを議論して、使うサービスを限定しています。サービスを使いすぎると、運用・保守が大変になってくるのです。商用リリースのフェーズに近づいてくると、また新たな問題が出てきました。