ブログサイト

ブログ

【技術スピンオフ】「せっかくの記録が消えるの、嫌じゃないですか」── 学習データを"全部残す"と決め、50万ユーザーへと育てたPing-t開発の裏側

『納品のない受託開発』の事例に関わったプログラマにインタビューする、技術スピンオフ企画。

今回は、株式会社Ping-tさまが運営するIT試験学習サイト「Ping-t」の構築とリプレイス(システムの作り直し)に7年伴走してきた開発責任者の坂川と、3年前から案件に合流した菅野の2名にインタビューしました。

「Ping-t」はもともとは中川社長が個人で開発し、20万人以上のユーザーを集めていたサービスでした。しかし、成長によって規模が大きくなる中で、インフラやパフォーマンス面で限界が来たのが、今から7年前のこと。 そこからソニックガーデンが伴走し、今では50万人規模のサービスへと成長しています。

本記事では、その成長の裏にあった技術的な積み重ねや、生成AIをはじめ新たな技術を取り込み続けている現在について聞きました。

【事例記事本編はこちら】 50万人が学ぶIT試験学習サイトを、止めずに変える ──AIと伴走開発で進化する『Ping-t』の7年

インタビューに参加したプログラマ

  • 坂川

    ソニックガーデン
    坂川 雅俊(さかがわ・まさとし)
    株式会社ソニックガーデン プログラマ・開発責任者。
    2015年の参画以来、『納品のない受託開発』で実績を重ねる。現役の第一線で自ら手を動かすことにこだわりながら、2023年からは「親方」として次世代の育成も手掛ける。本案件でも初期から参画しており、弟子とともに息の合ったコンビネーションで開発・運用を進めている。

  • 菅野

    ソニックガーデン
    菅野 竜聖(かんの・りゅうせい)

    株式会社ソニックガーデン プログラマ・開発メンバー。
    弊社主催の「ソニックガーデンジム」を経て、2023年4月に入社。本案件ではメインでコードを書き、開発を推進する。


目次

    50万ユーザーを、基本の積み重ねで支える

    「Ping-t」は、アクセスが非常に多いサービスですね。
    坂川の顔坂川
    本当に多いです。なにしろ50万ユーザーですからね。その上、ユーザー数だけではなく、動かしている処理も負荷が高いんです。

    例えば、ユーザーが一番よく使う、問題を解く画面。単なる回答フォームだったら楽なのですが、実際には裏で過去の回答履歴や、ユーザーがつけたメモなどの情報を取得しています。そんな処理をしながら、朝の通勤時間帯のアクセス集中時でも、スマホでサクサク回答できる速度を確保しなければなりません。
       回答画面
    坂川の顔坂川
    回答画面以外にも、集計系の画面も高負荷ですね。

    Ping-tでは、連続回答を「コンボ」としてカウントしたり、正答推移をグラフにして成長を可視化したり、ゲームのような要素も用意しているんです。それを個人の結果画面で表示したり、他ユーザーのランキングに出したりしているので、このあたりの画面は表示するだけで大量のデータベース処理が走ります。
    集計画面
    まるでオンラインゲームの運営のような話ですね。その負荷をどう受け止めているんですか?
    坂川の顔坂川
    7年前にソニックガーデンが入って、Ruby on RailsとAWSでリプレイスをはじめた時点ですでにアクセスが多かったですし、そこからさらに増えると予想していました。なので、最初の段階から「アクセスがめちゃくちゃ来るぞ」という前提でコードを書いてきました。

    といっても、特別なことをしているわけではなく、パフォーマンスの問題が起きないように、基本を押さえたコードを書いています。一覧系の画面では、表示のたびに集計するのではなく、あらかじめキャッシュする処理を仕込んでいます。当たり前のことではあるのですが、ここで油断すると一発でサーバーが落ちるんですよね。なので、基本通り丁寧に作っています。
    菅野の顔菅野
    この「基本通り」が、すごく高い水準にあるんです。私が自分では速度を考慮したつもりのコードを書いても、コードレビューで坂川に「このSQLはこうすればもっと速くなる!」と指摘されて驚くことがあります。この妥協のないチューニングを、私が参加する前から長年積み重ねたことで、現在のパフォーマンスが実現していると感じます。
    「Ping-t」は最初は中川社長が個人で開発されていましたが、その頃はどうやって負荷を処理していたのですか?
    坂川の顔坂川
    当時から20万人以上のユーザーがいましたし、既に学習記録関連の高負荷な機能の原型はあったんです。なので、もはや多少の工夫では負荷がさばききれず、中川さんは「学習の記録データを3か月ごとに削除する」という手段を取るところまで追い詰められていました。

    我々が入った最初の頃、リプレイスの相談をする中で中川さんから「やっぱりデータは3か月ごとに消さないと動きませんよね?」と聞かれたのを覚えています。中川さんもエンジニア経験があるので「この規模でこのパフォーマンスを実現しようと思ったら、データを消すしかない」という諦めの感覚をもっていらっしゃったんだと思います。

    でも、私は「いやいや、ユーザーからしたら、せっかく問題を解いた記録が消えるの、嫌じゃないですか」と言いました。そこから、要件や予算の制約の中で、データを全部残しても動く設計とコードを考えて、リプレイスを進めました。

    その甲斐あって、現在では全データを残したまま、当時の倍以上の50万ユーザーに快適に使っていただいています。

    生成AIを組み込んだ先の、改善の仕組みまでつくる

    「Ping-t」には生成AIを活用した機能もありますが、開発ではどんな工夫をしましたか?
    坂川の顔坂川
    技術面で工夫を凝らしたのは、問題文をAIでレビューする機能です。出題する問題に矛盾がないか、専門用語にちゃんと説明がついているか、解説の分かりやすさはどうか。複数の評価項目ごとに配点が付いて、すべての基準をクリアしないと問題を公開できない、という仕組みです。
    それを全問題に対して回すとなると、かなりの量ですよね。
    坂川の顔坂川
    そうなんです。「Ping-t」には大量の問題がありますし、「評価基準を変えたから1000問まとめて再レビューしたい」みたいなことも起こります。なので、単に1問ずつ手でAIに投げて終わり、では成り立たない。APIで一斉にAIに指示を送る機能を作るのはもちろん、改善の仕組み全体を考えて「AIの回答精度をどうやって上げ続けるか」という課題に取り組みました。
    一度作って終わりではない、と。
    坂川の顔坂川
    AIの回答って、最初から完璧にはならないんですよね。「ここの評価が甘い」「この観点も入れたい」と、お客さまが使うたびにプロンプトを調整していくのが望ましい。また、AI自体も進化していっているので、常にその時点で良いアウトプットが出せるように改善していく必要があります。なので、もしプロンプトをシステム内に埋め込んでいたら、調整するごとにシステムを改修することになり、とても実務が回りません。

    そこで、お客さまがプロンプトを直接編集できる管理画面を作りました。これは「プロンプトのGit管理」みたいなもので、いつ、どんな理由でプロンプトを調整したかの変更履歴が全部残ります。さらに、実際にレビューした際にAIに送ったプロンプトと、処理したモデル、返ってきた応答、トークンの消費量まで全件保存しています。
    全件ですか。
    坂川の顔坂川
    はい。採点結果を人の目で見て「この問題の採点がおかしい」と感じた時に、当時のプロンプトのバージョンとAIの応答を遡って確認できるようにしたんです。

    要は、「AIに投げて終わり」ではなく、お客さまが自分でAIの使い方を改善し続けられるシステムを作ったということですね。他にも細かい工夫として、AIとスムーズにやり取りするために、回答の型指定とか、画像にプロンプト内で独自IDを振るとか、話は尽きないのですが、一番大事だったのは「改善し続ける仕組み」全体の設計です。ここまでやって、Ping-tの中で生成AIを本当に「実用化」することができました。
    菅野の顔菅野
    コスト面の考慮も、実用上欠かせませんでした。大量の問題を評価するとトークン量が膨大になりますが、この機能の性質上、採点基準などを記述したプロンプトの前半は全ての問題で共通になります。ですので、この共通部分をAI側でキャッシュすることでトークン消費を抑えています。

    「ソニックガーデンさんが言うなら」── 信頼の上で挑む新しい技術

    決済でも、新しい取り組みがあったそうですね。
    菅野の顔菅野
    決済にはStripeを使っているんですが、Stripeの「銀行振込」機能が追加されるタイミングで、すぐに採用して組み込んだんです。まだ事例がほとんどない中、開発環境で何度も振込を試しながら手探りで実装しました。銀行振込には「金額がズレていたら管理者に通知する」といったお客さまの業務フローが絡む特殊な考慮があり苦労しましたが、結果的に先行事例として注目され、Stripeのユーザーグループで発表することになりました。
    ユーザーグループでの発表
    生成AIやStripe新機能など、新しい技術への挑戦を続けているのですね。お客さまとの関係性はいかがですか?
    坂川の顔坂川
    普通の受託開発では、新機能に限らず、技術的な話をお客さんに提案すると、そのたびに稟議があったり、説得のためのコミュニケーションが発生すると思うんです。

    でも、中川さんに技術観点で「これやった方がいいですよ」みたいな提案、二要素認証の導入とか、データベースのアップグレードとか、断られたことがないんです。「ソニックガーデンさんが言うなら、そうですよね」と。任せてもらっているなと感じますね。

    中川さんも技術のことを勉強されているので、「AIでこんなことできるらしいよ」と先に投げてきてくれたりする。こちらも「できるかわからんけど、やってみるね」と1回作ってみて、そこから一緒に詰めていく。お互い、楽しんで開発しています。
    これまでの伴走を振り返って、いかがでしたか?
    坂川の顔坂川
    7年前は「データを3か月で消さないと回らない」ところまで追い詰められていたシステムが、パフォーマンスの壁を越え、AIを取り込み、成長し続けている。感慨深いですね。これからも新しい挑戦を続けていきたいと思います。
    本日は貴重な裏話をありがとうございました!

     

    この記事を共有する