ZEN Study 教材基盤システムを振り返って

はじめに

ZEN Studyは2026年4月にリリースから10周年を迎えました。本記事では、このZEN Studyのバックエンドを支える、特に教材基盤システムの歩みを振り返ります。

焦点とするのは、ZEN Study(旧N予備校)の教材基盤システムが2021年以降に辿った変遷です。この年は、ZEN Studyのバックエンドを構成するマイクロサービスアーキテクチャの中で、教材や進捗の管理をするシステムの改善プロジェクトがバックエンドセクション内で発足した転換期にあたります。 また2023年には、バックエンドセクションから教材基盤の開発を専門とする「教材基盤開発セクション」が独立して発足しました。 教材基盤開発セクションでは、以下のシステムを開発しています。

  • 教材基盤システム:教材入稿システムから受け取ったデータを管理・配信し、学習進捗や採点情報を管理するシステム
  • 教材入稿システム:教材制作者が作った教材や構造化されたカリキュラムデータを教材基盤システムに登録するためのシステム

その他のマイクロサービスについては、N予備校のマイクロサービス および ZEN Study バックエンドの 10年を振り返って の記事をご参照ください。

この記事の執筆は、教材基盤開発に携わる複数の有志メンバーによって行われました。

背景

2021年以前のZEN Studyには、N高等学校・S高等学校・R高等学校の生徒の日々の学習のための高校必修教材と、大学受験講座・クリエイティブ・エンタメ・プログラミングなどドワンゴ独自で教材制作している課外教材の2種類が存在していました。 教材の制作者は、作った教材を旧教材入稿システムを通して旧教材基盤システムに取り込んでいました。

一方で旧教材基盤システムや旧教材入稿システムは、ドワンゴの教育事業参入当初から様々な機能追加を重ねた結果、技術負債が多大に蓄積し、特に以下のような点が課題となっていました。

  • 旧教材基盤システム
    • 過度な自由度を持ったDBスキーマによる可読性やクエリパフォーマンスの低下
  • 旧教材入稿システム
    • DBとNASサーバーの二重のマスターデータで管理されており、不安定で利便性の低いコンテンツ管理体制
    • 教材制作者がNASに教材データをアップロードし、Jenkinsパイプラインを実行するとRuby on Railsで実装されたCLIツールが実行され、旧教材基盤システムにデータが登録される
    • Jenkinsは非エンジニアの教材制作者にとっては特に馴染みがなく、ユーザビリティが低くトラブルシューティングが難しい

その結果、教材基盤改善プロジェクトが発足しました。このプロジェクトは、現行仕様に合わせてDB設計からやり直す新しい教材基盤システムと、NASサーバーへの依存から脱却し、WEB UIによって快適なコンテンツ管理を実現する新しい教材入稿システムの開発を目指しています。

新教材基盤システムへの移行完了時期が見通せない状況であったため、旧教材基盤システムについても、APIスキーマの再整理を中心とした改善作業を並行して進めていました。

OpenAPIを使ったRailsスキーマ駆動開発

2021〜2022年:教材基盤改善プロジェクトの発足

新教材基盤システム

当時のバックエンドセクションでは、旧教材基盤システムの全面的な刷新を目指して改善プロジェクトが発足しましたが、当初はどこまで理想を実現できるか、見通しが立たない状況でした。

新教材基盤システム構築の第一歩として、旧教材基盤システムからマイクロサービスとして分離されていた「テスト問題」と「採点」に関連するドメインを、新しいシステムとして再構築することを目標に開発がスタートしました。 単にコードを書き直すだけでなく、教材基盤の核となる概念は何かという根源的な問いから検討し、設計をやり直しました。

旧システムはRuby on Railsで構築されていましたが、サービスの仕様や実装が複雑になりすぎたため、改善プロジェクトでは言語やフレームワークを含めて根本的な再検討が必要だと判断しました。

言語選定では、ドメイン知識を表現できる豊富な機能と、未経験者でも新たに学習しやすいことのバランスを重視しました。

その結果、新教材基盤システムの開発には、KotlinとgRPCが採用されることになりました。 また、ドメイン側の要求や仕様変更にも迅速に対応可能な構成を目指しました。

N予備校バックエンドでサーバーサイドKotlin移行を始めました

grpc-kotlinの実装をinterfaceの定義によってテンプレート化する

新教材入稿システム

旧教材入稿システムは、N予備校の発足当初から運用されており、Ruby on Railsで開発されました。このシステムは、Jenkinsサーバー上でCLIアプリケーションとして動作する形態でした。

しかし、NASの運用やJenkins + Ruby on RailsのCLIアプリケーションによって動作する既存システムに上述のような技術負債が蓄積したため、快適なWEB UIでのコンテンツ管理を実現するために、新たな教材入稿システム「ZEN Import」の開発が開始されました。

フロントエンドにはTypeScript + React + Vite、バックエンドにはTypeScript + NestJSを採用しました。 技術選定の決め手は、バックエンドエンジニアがフロントエンドとバックエンドの両方を開発する体制において、言語を統一できる点と、型安全なシステム構築が可能であるという点でした。

新教材入稿システムへの移行プロジェクトは、まず旧教材基盤システムで扱っている2種類の教材のうち、課外教材を新システムで入稿可能とすることを目指した1stリリースから開発がスタートしました。

開発当初の体制は、PMを含めた4名チームでした。内訳は、バックエンド主担当が2名、フロントエンド主担当が1名です。

開発当初、メンバーはフロントエンド・バックエンドともにTypeScriptを用いた開発経験がなかったため、技術的なキャッチアップや、フレームワーク・ライブラリの調査から着手しました。特にフロントエンドについては、ZEN Studyのフロントエンド担当者からの助言を得ながら習得を進めました。

バックエンドエンジニアがフロントエンドの開発をすることになった話

2023〜2024年:教材基盤開発セクション発足とZEN大学の発表

バックエンドセクション内で進めてきた改善プロジェクトを背景に、以下の目的から「教材基盤開発セクション」として独立することになりました。

  • 教材や学習進捗に関する意思決定と開発のスピード・効率・品質を向上させる。
  • 教材制作部門との連携を強化し、改善要望を積極的に取り込むことで、ZEN Studyの学習体験向上を主導する。
    • 既存仕様を前提としつつ、ZEN Studyが目指す理想的な教材の姿を実現する。

新教材基盤システム

2023年6月にZEN大学の設立が発表されました。

新しいオンライン大学「ZEN大学」設立に関する発表会を開催

N高グループなどと同様に、ZEN大学の授業や学習を ZEN Study でどのように実現するかを考えていきました。

しかし前述した通り、旧教材基盤システムには技術的な課題があり、そこに大学対応のコードをさらに組み込むことに対しては、開発工数や既存サービスへの影響といった点で懸念がありました。

そこで、大学の学習は、開発中の新教材基盤システムを利用して提供することになりました。 同時に、「大学単位認定 -> 高校必修 -> 課外」という形で段階的に新教材基盤システムに切り替えるという、現在進行中の教材基盤移行のロードマップもこのときに決まりました。

大学での学習全般を提供するためには、旧教材基盤システムが担っていた機能が必要です。しかし、その機能を大学仕様に最適化する形で設計してしまうと、継ぎ足しを繰り返した旧教材基盤システムと同じ轍を踏むことになりかねません。

新教材基盤システムでは、大学との仕様の差異をうまく抽象化・吸収しつつ既存仕様を再分析しました。これにより、将来的に大学以外の学習にも対応できるよう、拡張性を意識した設計となっています。

当初は、システム連携先やインターフェース仕様など、不明点が多い状態での開発となりました。 とはいえ、外部との連携仕様が未確定な段階でも、アプリケーションの共通モジュールについては、基本的なドメインモデルや共通処理が大きく変わる可能性は低いと予測し、本格的な開発開始に先行して着手していました。 教材のインポート機能から始まり、大学のマスターデータ連携、そして学習機能の開発へと順に進めていきました。結果として、実際の運用に近い順序でシステムを構築していったことになります。

同時に、GitHub Actionsを用いたCI/CDの導入や、ログ・メトリクスを監視する体制の整備も並行して進めました。 開発着手以降、様々な課題を乗り越え、2025年4月の大学開学という目標に向け、本番リリースまで完遂できました。

新教材入稿システム

旧教材入稿システムでは、カリキュラムや教材に関するメタデータをExcelで管理していました。そして、このExcelファイルをシステムに取り込む形で入稿作業をしていました。

新教材基盤システムの移行ロードマップでは、大学対応の次に高校必修対応を計画しています。そのため、大学対応の段階で入稿フローを大幅に変更すると、その後の教材制作や入稿業務に大きな影響を及ぼす懸念がありました。

新教材入稿システムでは既存の仕様を踏襲しつつ、大学・高校・課外といった違いによらず、入稿フローが大きく変わらない設計を目指しました。その結果、新教材基盤システムの拡張性を考慮した設計に合わせながら、新教材入稿システムの大学対応を開始しました。

カリキュラムや教材の入稿ロジック・画面を作りつつ、事故無く簡単に、一度に多くの入稿をできるシステムを目指して開発を進めました。 事故無く簡単に、一度に多くの入稿をできる機能の一例を紹介します。 全体のシーケンスの概要を図1に示します。

図1. 教材制作から入稿までのシーケンス

大学のカリキュラム・教材の制作過程において、まずはどんな授業内容にするか(カリキュラム)を決め、授業動画の収録やテキスト・レポートの制作、単位認定試験の作問などを行います。 そうして出来上がった1科目分のカリキュラム・教材を事故無く簡単に一度に入稿したいという要望がありました。

新教材入稿システムは、まず指定のフォーマットに沿ったカリキュラムデータと教材が格納されたフォルダをAWS Storage Gateway経由でAWS S3にアップロードします。その後、画面上で入稿操作をすると、様々なバリデーション処理を経て、教材に使用されている動画や画像の変換・登録が行われます。最終的にカリキュラムの登録と教材との紐づけ処理が実行されます。 それらの処理1つを小さなtaskとして実装し、エラーハンドリングをしながら順に実行するワークフロー機能(workflow job)として実現しました。

またカリキュラムや教材のデータは、入稿時のフォーマットに合わせてAWS S3へエクスポートする機能も実装しました。エクスポートされたファイルはAWS Storage Gateway経由で修正可能です。これにより、入稿済みデータの一部を修正したい場合、エクスポートされたデータの一部を修正し、再度入稿操作をするだけで、簡単に修正作業を完了できるようにしました。

2025年:大学開学と高校必修への対応準備開始

新教材基盤システム

大学開学という絶対に失敗できない状況で初稼働を果たした新教材基盤システムでしたが、幸いなことにほとんど不具合を出さずに安定して稼働し続けることができました。

開学後しばらくは大学側の細かい仕様変更への対応がありました。 それが落ち着くと、今度は新教材基盤システムを既存の高校必修へと対応させるための開発が始まります。

大学向けに開発した際の設計は、高校への横展開を前提としていたため、コードの大部分はそのまま流用可能です。ただし、大学向けにはなかったVR対応や学力診断用テストなどの機能については、新たに追加開発が必要となります。

また、大学のときとは違い、稼働中のサービスで仕様を変えずに裏側のシステムだけを入れ替える作業となるので、稼働中の他システムとの連携などの仕様面の調整は、大学開発とは違った大変さを感じます。

新教材入稿システム

大学開学後は、新教材入稿システムは入稿者からの改善要望に答えていきながら、高校必修の対応を進めています。 大学対応で開発した土台を活用しながら、高校必修にしかない仕様や機能の開発をしています。

高校必修の場合は、来年度の1年分のカリキュラムや教材を、夏頃から入稿を始めるスケジュール感で進みます。 新教材基盤システムやZEN Studyへの対応を進める中で、現在、開発作業がまさに山場を迎えています。

おわりに

ZEN Studyの教材基盤システムは、過去10年、特にこの数年で大きな変遷を遂げました。技術負債の解消と、ZEN大学のような新しい教育の形への対応という、2つの大きな課題に立ち向かう中で、私たちはシステム設計の根幹から見直しを行い、新たな技術(Kotlin/gRPC, TypeScript/NestJS/React)を採用してきました。

教材基盤改善プロジェクトの発足から現在に至るまで、関わった多くのメンバーの尽力により、この大規模なシステム移行と新サービスへの対応を成功させることができました。私たちは、今後もZEN Studyの改善と挑戦を続けていきます。