こんにちは、小中高プロダクト基盤開発グループの @kazu9su です。 この記事では、チームで取り組んでいるInternal Platform開発についてご紹介できればと思います。
Internal Platformとは
AWS, GCP, Shopifyのような、SaaS/IaaS/PaaSとして提供され、それ自体で利益を生むPlatformをExternal Platformと呼びます。Internal Platformとは、External Platformのようにそれ自体で利益を生むことを目的とせず、ユーザーである自社の開発者が本来集中したいことに集中できるようにすることを目的としたPlatformです。 *1
スタディサプリにおけるInternal Platform開発
スタディサプリは、
- 小学講座
- 中学講座
- 高校・大学受験講座
- 大学受験講座合格特訓コース
などの複数のサービスによって構成されており、それぞれのサービスは、担当するチームによって開発・運用されています。
スタディサプリが拡大するにつれて、各サービスのコードベースも巨大になり、開発者の認知負荷も増大し、開発効率が悪くなってきています。
小中高プロダクト開発基盤グループはこれまで、そのような各サービス開発者の認知負荷の削減するために、特定のサービスに属さない横断的なInternal Platformの開発・運用を行ってきました。具体的な例を上げると、Video Platform(スタディサプリの動画配信全般を管理)などがあります。
これら既存のInternal Platformは性質的に、スタディサプリにビジネス上必要不可欠なものであり、運用し続けなければいけない種類のPlatformでした。
今後はさらに、開発者が求めるものをチーム自ら定義し、さらなる認知負荷の削減を行うべく、新たなInternal Platformを提供していきたいと思っています。
しかし、では実際に開発者が求めるものをどう定義していくのか、どうやって優先順位を決め、開発をスタートしてばいけばいいのかわからないという課題がありました。
プロトタイプ開発
Developer Surveyをして、優先順位を付け、開発を始めるというのが、王道であり、いずれは踏襲すべき手法です。
しかし、現時点で「こういったものがあったら便利だな」という声を少なからず聞いているにも関わらず、プロジェクトを形式に沿って進めることに拘って手を動かさないのはもったいないのではないか?という想いがありました。
そこで現在、仮説・検証のサイクルを素早く回しながら答えを見つけることを目的として、プロトタイプ開発スタイルを採用し、Internal Platform開発を進めています。
手戻りを恐れずに開発し、ユーザーである開発者に触ってもらえるものを用意して、フィードバックをもらっていきます。
最初から本番運用するPlatformを作ることを想定せず、立てた仮説が棄却されれば即座に開発をやめよう。という意思を表明するものとして、プロトタイプ開発という言葉を使っています。 *2
新しいサービス開発における技術選択について少し紹介させていただくと、Goをメイン言語として積極的に採用しています。
言語自体の魅力もさることながら、既存のリソースに縛られず、新しいものを作っていきたいというチームの想いを体現するためです。*3
K12UserActivity サービス
具体例として、K12UserActivityサービスというプロトタイプの紹介をさせていただければと思います。
スタディサプリでは、ユーザーがログインするときに、認証ログと同意証跡を記録しています。
スタディサプリの各アプリケーションは、ログインの処理の中で上記2つのサービスへのAPIリクエストをしています。
この2つのサービスには、
- 普段触らないので、変更が必要なときに毎回何をやっているかをコードを読んで確認する必要があって面倒で、かつ実装がアプリケーションと密接に絡み合っている
- 毎回認証ログとは何か、同意証跡とは何かを思い出す必要がある
という問題がありました。
これらの問題は、
- これらを抽象化したGatewayとなるサービスを作り、アプリケーションは新サービスにのみ依存するものとする
- 新たに定義したGatewayサービスを使う専用のSDKを用意し、アプリケーションも新ドメインを中心にリファクタリング可能にする
という2つの仮説を達成することによって解決できるのではないかと考えました。
- 新規アーキテクチャ図
そこで、K12UserActivityというドメインを新たに定義し*4、GatewayサービスとRubyとGoアプリケーション用のSDKを用意しました。
ユーザーの声
変更を実際のアプリケーションに反映したPull Requestをベースに、認証ドメイン担当チームにフィードバックをもらいにいきました。
- 実際のコメント
K12UserActivityというドメインを導入したことで、既存のコードをどうリファクタリングするかが明確になり便利になったのではないかと思っていたところ、実際にコードが見やすくなってよかったというコメントをもらうことができました。
これから
K12UserActivityの開発を通して改めて、仮説を持って検証しながら、ユーザーに使ってもらえるものを作ることの重要性を肌で感じることができました。
小中高プロダクト開発基盤グループでは今後もこのように、Internal Platform開発を通じてユーザーに価値を提供していきたいと思っています。
すでに第2弾のプロトタイプの開発も始めていて、こちらは最初から作るものに対する解像度を上げるために開発と並行してユーザーインタビューを実施する予定です。
さらに当然、プロトタイプとして作ったサービスを本番リリース・運用を見据えてさらに開発していく必要があったりと、やることが盛りだくさんです。
まとめ
以上、小中高プロダクト開発基盤グループで最近はじめたInternal Platformの開発について紹介させていただきました。
- Internal Platformの開発を通じて開発者の開発効率を改善する
- Ruby/PHP/Pythonなどでのアプリケーション開発経験を活かして、Goでマイクロサービスを構築する
- モノリシックなアプリケーションをマイクロサービスアーキテクチャで作り変える
といったことがやりたい方に是非おすすめのチームなので、もしご興味があればお話しましょう。 募集要項はこちらでご覧いただけます。