SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Developers Summit 2023 セッションレポート(AD)

モノリシックからマイクロサービスへの移行に挑戦! コドモンで取り組んだ手法やプロセスを全て見せます

【10-E-7】保育・教育施設の業務省力化を提供するWebサービスの改善と技術的負債解消への取り組み -マイクロサービスへの挑戦-

  • X ポスト
  • このエントリーをはてなブックマークに追加

 マイクロサービスのメリットはよく語られているが、全ての環境に向いているとは言いがたい。特にまだプロダクトが小さい初期段階だと、マイクロサービス化することでかえってオーバーヘッドが増えてしまう。しかし順調にプロダクトが成長したら、どこかのタイミングでマイクロサービスに移行するというチャレンジに直面することになるだろう。コドモンがマイクロサービスへの挑戦の経緯を語る。

  • X ポスト
  • このエントリーをはてなブックマークに追加

サービスの拡大で「早くたくさん機能を作る」から目標を転換

 コドモンは「子どもを取り巻く環境をテクノロジーの力でよりよいものに」をミッションに、主に保育・教育施設職員の業務を支援するWebアプリケーションを開発している。他にも保護者と施設のやりとりを支えるモバイルアプリケーション、施設職員向けモバイルアプリケーション、外部サービスと連携するAPIなども開発している。

 2015年のリリース以来、加速的に利用者が増え、現在では1万4000以上の施設に利用されるほど成長した。継続利用率も高い。コドモン プロダクト開発チーム マネージャー 岡村謙杜氏は「リリース当初から2020年までは『早くたくさん機能を作る』を目標にしていました」と話す。これは安定してユーザーに価値を届け続けることが難しくなり得る側面を持つ。

 結果として現在、安定稼働を最優先事項として技術負債に取り組んでいる。例えば「Aを修正したら、関係のないと考えていたBに影響が出た」「一箇所で問題が発生すると、システム全体に波及してしまう」「リリース後に1つ不具合が発見されると、全てロールバックする必要がある」など。そこでコドモンでは目標を「ユーザーに安定して素早く価値を届け続ける」へと転換した。

 この目標を実現するための手段はいろいろ考えられるが、コドモンではこの機会にマイクロサービスアーキテクチャへと移行することに決めた。その理由として岡村氏は、独立してデプロイ可能、耐障害性向上、特定箇所のみスケール可能、副次的にチームの自律性向上、技術選定の機会を得られるなどを挙げる。マイクロサービスアーキテクチャを採用することにより起こりうるデメリットも存在するが、現在のコドモンではメリットの方が上回ると判断し、移行を決断した。

 とはいえ、会社としてはマイクロサービスアーキテクチャの移行に取り組むのは初めての挑戦となる。社内にナレッジがあるわけではなく、経験者も少なく、どのくらい時間がかかるかも予想しづらい状態であり、最初に全体の戦略を立てるために不確実性を減らす必要があった。

 移行対象の選択は「改修可能性を上げることで事業成長につながるか」というビジネス視点と、技術視点による「改修・移行難易度」の2つの視点を組み合わせて判断した。コンテキストマップを作成してドメインを整理したところ、「シフト」と「資料室」ドメインが候補に浮上した。他のサービスとの接続が少なく、リスクが少ないと考えられるためだ。「シフト」ドメイン自体は複雑性が高いものの、アプリとのつなぎ込みやデータ移行もなく、「シフト」の改修可能性を上げることで事業成長にも繋がるため最初の取り組みには良いと判断された。

コンテキストマップを作成し、分割すべきドメインを特定した
コンテキストマップを作成し、分割すべきドメインを特定した

 実際の移行はXP(エクストリームプログラミング)を取り入れた。採用した理由について岡村氏は「テクニカルプラクティスが明確に定義されていることが大きな理由の1つ」と話す。数年前までのコドモンでは作業が属人化しており、ソースコードが読みにくいとか、改修が大変といった問題があり、XPで打破できると期待できたためだ。

 XPの取り組みでは書籍『Clean Agile』を参考にした。岡村氏は「すべてのプラクティスを取り入れ、守破離の守を大切にすることを強く意識しました」と言う。プラクティスは1つだけ取り入れることもできるが、複数組み合わせることで相互作用が働き効果を増幅させることができるため、できるだけプラクティスを採り入れることにした。

 例えばペアプロをしながらTDD(テスト駆動開発)をすることにより、開発にリズムが生まれ、属人化が減り、共同所有が促されていく。そしてそこに、継続的インテグレーションや受け入れテストを組み合わせることにより、小さなリリースがやりやすくなる。プラクティスに取り組むことにより、他のプラクティスに取り組みやすくなると共に、一つひとつの効果を大きくし、理想に近づくことができる。

 実際の開発サイクルでは、最初に「ユーザーストーリーの受け入れ条件について認識を合わせる」ところからスタートし、受け入れテストを記述、ペアでTDDを実践しながら進める、ローカルでテストが通ることを確認、リモートリポジトリにプッシュ、CIでテスト実行、ステージング環境で確認、本番環境にデプロイというサイクルを回し続けた。

 続いてブランチ戦略ではトランクベース開発を採用した。これは開発者が直接トランク(メインブランチ)に小さく頻繁にプッシュしていくというもの。これのメリットは継続的インテグレーションを実現でき、開発時の運用もシンプルになり、コンフリクトを早めに検知できて、修正も少なくてすむ。

 岡村氏は「XPに取り組み、プラクティスを取り入れたからこそ、トランクベースがうまく回ったのかなと思っています」と話す。

次のページ
マイクロサービスへの移行はStrangler patternで

関連リンク

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Developers Summit 2023 セッションレポート連載記事一覧

もっと読む

この記事の著者

加山 恵美(カヤマ エミ)

フリーランスライター。茨城大学理学部卒。金融機関のシステム子会社でシステムエンジニアを経験した後にIT系のライターとして独立。エンジニア視点で記事を提供していきたい。EnterpriseZine/DB Onlineの取材・記事や、EnterpriseZine/Security Onlineキュレーターも担当しています。Webサイト:http://emiekayama.net

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

CodeZine編集部(コードジンヘンシュウブ)

CodeZineは、株式会社翔泳社が運営するソフトウェア開発者向けのWebメディアです。「デベロッパーの成長と課題解決に貢献するメディア」をコンセプトに、現場で役立つ最新情報を日々お届けします。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

提供:株式会社コドモン

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/17473 2023/04/13 12:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング