サービスの拡大で「早くたくさん機能を作る」から目標を転換
コドモンは「子どもを取り巻く環境をテクノロジーの力でよりよいものに」をミッションに、主に保育・教育施設職員の業務を支援するWebアプリケーションを開発している。他にも保護者と施設のやりとりを支えるモバイルアプリケーション、施設職員向けモバイルアプリケーション、外部サービスと連携するAPIなども開発している。
2015年のリリース以来、加速的に利用者が増え、現在では1万4000以上の施設に利用されるほど成長した。継続利用率も高い。コドモン プロダクト開発チーム マネージャー 岡村謙杜氏は「リリース当初から2020年までは『早くたくさん機能を作る』を目標にしていました」と話す。これは安定してユーザーに価値を届け続けることが難しくなり得る側面を持つ。
結果として現在、安定稼働を最優先事項として技術負債に取り組んでいる。例えば「Aを修正したら、関係のないと考えていたBに影響が出た」「一箇所で問題が発生すると、システム全体に波及してしまう」「リリース後に1つ不具合が発見されると、全てロールバックする必要がある」など。そこでコドモンでは目標を「ユーザーに安定して素早く価値を届け続ける」へと転換した。
この目標を実現するための手段はいろいろ考えられるが、コドモンではこの機会にマイクロサービスアーキテクチャへと移行することに決めた。その理由として岡村氏は、独立してデプロイ可能、耐障害性向上、特定箇所のみスケール可能、副次的にチームの自律性向上、技術選定の機会を得られるなどを挙げる。マイクロサービスアーキテクチャを採用することにより起こりうるデメリットも存在するが、現在のコドモンではメリットの方が上回ると判断し、移行を決断した。
とはいえ、会社としてはマイクロサービスアーキテクチャの移行に取り組むのは初めての挑戦となる。社内にナレッジがあるわけではなく、経験者も少なく、どのくらい時間がかかるかも予想しづらい状態であり、最初に全体の戦略を立てるために不確実性を減らす必要があった。
移行対象の選択は「改修可能性を上げることで事業成長につながるか」というビジネス視点と、技術視点による「改修・移行難易度」の2つの視点を組み合わせて判断した。コンテキストマップを作成してドメインを整理したところ、「シフト」と「資料室」ドメインが候補に浮上した。他のサービスとの接続が少なく、リスクが少ないと考えられるためだ。「シフト」ドメイン自体は複雑性が高いものの、アプリとのつなぎ込みやデータ移行もなく、「シフト」の改修可能性を上げることで事業成長にも繋がるため最初の取り組みには良いと判断された。
実際の移行はXP(エクストリームプログラミング)を取り入れた。採用した理由について岡村氏は「テクニカルプラクティスが明確に定義されていることが大きな理由の1つ」と話す。数年前までのコドモンでは作業が属人化しており、ソースコードが読みにくいとか、改修が大変といった問題があり、XPで打破できると期待できたためだ。
XPの取り組みでは書籍『Clean Agile』を参考にした。岡村氏は「すべてのプラクティスを取り入れ、守破離の守を大切にすることを強く意識しました」と言う。プラクティスは1つだけ取り入れることもできるが、複数組み合わせることで相互作用が働き効果を増幅させることができるため、できるだけプラクティスを採り入れることにした。
例えばペアプロをしながらTDD(テスト駆動開発)をすることにより、開発にリズムが生まれ、属人化が減り、共同所有が促されていく。そしてそこに、継続的インテグレーションや受け入れテストを組み合わせることにより、小さなリリースがやりやすくなる。プラクティスに取り組むことにより、他のプラクティスに取り組みやすくなると共に、一つひとつの効果を大きくし、理想に近づくことができる。
実際の開発サイクルでは、最初に「ユーザーストーリーの受け入れ条件について認識を合わせる」ところからスタートし、受け入れテストを記述、ペアでTDDを実践しながら進める、ローカルでテストが通ることを確認、リモートリポジトリにプッシュ、CIでテスト実行、ステージング環境で確認、本番環境にデプロイというサイクルを回し続けた。
続いてブランチ戦略ではトランクベース開発を採用した。これは開発者が直接トランク(メインブランチ)に小さく頻繁にプッシュしていくというもの。これのメリットは継続的インテグレーションを実現でき、開発時の運用もシンプルになり、コンフリクトを早めに検知できて、修正も少なくてすむ。
岡村氏は「XPに取り組み、プラクティスを取り入れたからこそ、トランクベースがうまく回ったのかなと思っています」と話す。