以下の内容はhttps://tech.classi.jp/より取得しました。


学習記録をもっと使いやすく。「一日の振り返り」改善ができるまで

こんにちは。Classi のコーチング/校務支援チームの とみやま(id:tommy1038)です。

この記事では、過去に担当した学習記録の「生徒の一日の振り返り」に関する改善施策を題材に、 Classi では日々どのように機能改善を進めているのかを、具体的な事例を通じてご紹介します。

今回題材にする機能

今回取り上げるのは、先生用の画面で

  • 生徒の「一日の振り返り」の記入履歴
  • それに対する先生のコメント数

を、生徒ごとの詳細画面を開かなくても 「生徒一覧」画面でまとめて確認できるようにした改善 になります。

もともとは、振り返りやコメントの状況を確認する際、

生徒の詳細画面を開く→ 内容を確認する → 一覧へ戻る → 次の生徒を開く……

という操作が必要でした。 この導線を見直し、一覧画面上で状況を把握できるようにしたのが、今回の改善です。

改善後の生徒一覧画面

なお、本機能については、ヘルプページでも紹介されています。

support.classi.jp

この改善に取り組むきっかけ

先生方からは、次のような声が寄せられていました。

  • 生徒が数日前や1週間前にさかのぼって振り返りを記録した場合、見逃してしまうことがある
  • 週初めや休暇明けなど、複数日の記録をまとめて確認したい場面で、ひとつずつ画面を開くのが大変

特に、“記入された振り返りへ、きちんとコメントを返したい” という思いが強い学校ほど、見逃しが発生しやすい構造になっていました。

そこで今回は、

  • 生徒ごとに「一日の振り返り」の記入がある、最新3件の日付
  • それぞれの日付に対する先生からのコメント数

を、生徒一覧画面に表示するようにしました。 これにより、生徒ごとの状況を詳細画面を開かなくても把握しやすくなることを目指しました。

タスクの選定

Classi では、機能ごとに担当チームがあり、そのチームの中で新機能の実装・改善・保守運用を行っています。

改善要望を確認したあとは、次のような観点で「どういった時期に対応するか」を検討します。

  • 緊急度・優先度
  • ユーザーへのインパクト
  • 実装および運用コスト

今回の改善は、学校現場での困りごとが明確であり、比較的小さな実装で先生の負担感が改善される見込みがあったため、対応することに決めました。

対応決定後は、

  • どの画面で、どう見えると先生は使いやすいか
  • 既存 UI との整合性はどうか
  • どのように実装するとシンプルで保守しやすいか

といった観点で、もう少し深く検討を進めていきました。

UI案の検討

仕様の方向性がある程度見えたところで、UI モックを作成し、複数案を検討しました。

例えば、

  • 先生が最後にコメントした日時を表示する案
  • 生徒の振り返りコメント日をすべて表示する案

なども候補に挙がりました。

検討した表示案

しかし、これらの案には

  • 情報量が多くなりすぎる
  • 一覧画面としての見通しが悪くなる

という課題がありました。

最終的に

  • 生徒ごとに「一日の振り返り」の記入がある、最新3件の日付
  • それぞれの日付に対する先生からのコメント

という形にすることで、必要な情報を保ちつつ、一覧としての見やすさも損なわないバランスを実現できると判断し、現在の仕様に落ち着きました。

多職種での協働

今回の改善では、開発チームだけでなく、

  • CS チーム
  • QA チーム
  • 学校現場を支援している社内メンバー

とも相談しながら進めました。

さらに、実際に学習記録を活用いただいている先生にもヒアリングの機会をいただき、

  • どのような表示だと確認しやすいか
  • 現場の運用イメージと合っているか

といった観点でご意見を伺いながら検討しました。

こうした 多職種での連携を自然に行える体制 は、Classi の開発の大きな強みだと感じています。

実装から QA 検証へ

UI 案と仕様の方向性が固まった段階で実装に進み、一覧画面への表示追加や、必要なデータ取得の調整を行いました。

検証環境で動作を確認した後、QA チームと連携してリグレッションテストを実施します。

今回の改善に限らず、実際の利用シーンや権限の違いなど、さまざまなパターンを想定して確認してもらっています。

開発側だけでは気づきにくい観点も多く、QA チームにはいつも支えてもらっています。

リリースと先生の反応

QA を通過したのち、本番環境へリリースしました。 リリース後、営業メンバーを通じて

夏休み直前のタイミングでリリースしてもらえて、本当に助かりました

といった声もいただきました。 実際の現場で役立っている様子を伺えるのは、開発者として本当に嬉しい瞬間です。

おわりに

今回ご紹介した改善は、学習記録をより使いやすくするための取り組みの一つです。

その中で、

  • 学校現場での困りごとを拾いあげ
  • チームで検討し
  • 関係者と連携しながら形にしていく

というプロセスを続けていくことが、 Classi の使いやすさ向上につながると考えています。

今後も、いただいた声を参考にしながら、学校のみなさまにとって使いやすいサービスを目指して改善を続けていきます。 ここまで読んでいただき、ありがとうございました。

学習トレーニング機能の「メモ機能」のリリースと開発プロセスの振り返り

学習トレーニングチームのいもりです。

学習トレーニングは11月初旬に新機能として、画面上にメモを取ることができる「メモ機能」をリリースしました。

chienowa.classi.co.jp

リリース後の活用は徐々に伸びており、特に計算が必要な数学で活用いただいています。

この機能は他プロジェクトと並行して進めていたため、検討に割けるリソースは限られていました。今回は要件定義のフェーズでAIによるプロトタイピングを活用し、チームの認識合わせを効率化するアプローチを取りました。

「動くもの」をベースに議論することで、検討開始から仕様確定までを約1ヶ月で完遂し、顧客に必要な機能を素早く届けることができました。本記事では、その開発プロセスについて紹介します。

開発経緯

「学習トレーニングの画面内でメモを取りたい」という要望は、学習トレーニングリリース当初からいただいている改善要望でした。

とはいえ、私が現在のチームに所属してからの半年間は、より緊急度や要望数の高い別の課題への対応を優先して進めていました。しかし、それらのクリティカルな課題を一つひとつ解消していくにつれて、ユーザーの不満点が「より良い学習体験」へとシフトし、結果としてメモ機能への要望が以前よりも顕著に届くようになりました。

メモ機能がないことが学習体験における最大のボトルネックになった今こそ、この要望に向き合うべきタイミングだと判断し、本格的な開発に着手しました。

「動くもの」を共通言語に

まずは現状分析を行いました。データサイエンティストが主導してVoC分析を行い、顧客が直面している課題を浮き彫りにしていただきました。

印象的だったのが、「紙を用意するのが面倒なだけでなく、PCのメモ帳アプリを横に開いて計算している生徒もいる」という事実です。いかなるデバイスであっても学習を画面内で完結させたいニーズがあることがわかったため、すべてのデバイスで利用可能なWebの機能として実装する方針が固まりました。

ですが、いざ要件定義に入ると既存の解答画面への影響やどの機能が必要か?という懸念が生まれ、具体的な実装イメージが定まりませんでした。

そこで、社内で開催されている「フロントエンド互助会」に相談を持ち込み、先行事例や方向性のアドバイスをいただきました。いただいた知見をベースに、AIコーディングを活用してプロトタイピングを実施し、解答画面上に被せてメモが取れる機能を20分程度で作成しました。

画像内に登場する画面は開発環境になります

実際に動くものができたことでチーム内の議論の解像度が一気に高まり、具体的な機能要件へ踏み込むことができるようになりました。

「引き算」の意思決定

AIコーディングを活用すれば機能追加を行うこと自体は難しくありません。実際に何が必要な機能かを見極めるために、開発当初は既存ペイントツールにあるRedo/Undoなどの様々な機能を搭載したメモ機能をプロトタイプで作成し、社内ドッグフーディングを行いました。

社内ドッグフーディングを経て見えてきた課題は、スマートフォンでの限られた画面領域における操作性でした。多機能を搭載したメモはキャンバスエリアが狭くなり、ボタンの押し間違いも発生しやすく使い勝手を損なうことがわかりました。

そこで私たちは「ペイントツールではなく問題を解くための補助的なメモ機能である」という原点を思い出し、学習中のメモを取る際にストレスなく利用できるシンプルさを最優先事項としました。誤操作により体験を損なう可能性のあるRedo/Undoなどは搭載せず、必要な機能だけに絞り込む「引き算」の意思決定を行いました。

この決断で各機能の要件がシンプルになり、要件定義がスムーズに進行したことが短期間のリリースに繋がりました。

リリース後の反響と振り返り

リリースから1ヶ月以上が経過しました。グラフは1日ごとのメモの利用回数ですが、利用状況は順調に推移しています。また、リリース当初は解答UU数に対して1日あたり6%程度の利用数だったのに対し、現在は13%程度まで増加しています。

特に近い時期にリリースした数学Ⅲの問題での活用はトップクラスであり、当初の狙いであった「紙を用意する手間をなくし、学習に集中する環境を作る」という価値を必要としているユーザー層に届けられたと実感しています。

社内からの反応も励みになりました。ドッグフーディングでは早くリリースしたほうがいいと感想をいただいたり、窓口対応チームからは「特に良い改善だった」という声をいただいたことは素直に嬉しかったです。作り手として自信を持ってユーザーに案内できる機能を提供できたことはプロダクト開発における理想的な形を実現できたのではないかと考えています。

今回の開発を振り返って個人的に最大の収穫だったのは、AIなどの技術を活用することで、エンジニア個人の「要件定義の質とスピード」を劇的に向上させられると実感できたことです。 「どう実装するか(How)」をAIや互助会の知見でショートカットできた分、チームの議論が「何を作るべきか(What)」という本質に迫ることができ、機能の「引き算」といった意思決定に時間を割くことができました。

新しい技術を適切に活用することで、エンジニアは顧客の課題により深く向き合えるようになります。今後も技術の力を借りながら、ユーザーにとっての正解を最短距離で探り当てるプロダクトエンジニアリングを追求していきたいです。

ディップ×ココナラ×ギフティ×Classi 合同勉強会 開催記|若手エンジニアが「外」に出て見つけた、技術の先にあるもの

こんにちは、Classi エンジニアの yuu.kun です。

2025年12月2日、ディップ、ココナラ、ギフティ、Classiの4社合同勉強会「大規模Webサービスの技術負債、どう向き合う??を開催しました。

今回のイベント、Classiからは新卒メンバーとエンジニアリングマネージャーの鳥山が参加しました。私はその中で、企画・運営担当として携わりました。 本記事では、イベントの裏側である「開催に至るまでの経緯」や「運営サイドから見た気づき」を私から、そしてイベント本編のテーマである「技術負債に関する知見」を鳥山から、それぞれレポートします。

開催に至る経緯

今回の合同勉強会は、会社からのトップダウンで決まったものではなく、現場のエンジニア同士の繋がりから生まれました。まずは、開催までのプロセスを振り返ります。

1. きっかけは社外イベントへの参加

スタートは、私自身が「Kaigi on Rails 2025」や「TSUDOI by giftee Tech #1」といった社外のイベントへ継続的に参加していたことでした。

普段はフルリモートワークで開発していますが、積極的に外の場へ足を運ぶ中で、他社のエンジニアとの接点が増えていきました。その中で出会ったのが、ココナラの新卒エンジニアの方です。 同世代のエンジニアとして交流するうちに意気投合し、「自分たちの会社を巻き込んで、合同でイベントをやりましょう」という話が持ち上がりました。

2. 個人の繋がりを「公式イベント」へ

今回のイベントは、ディップ株式会社と株式会社ココナラの共同主催という枠組みの中で、私たちClassiも運営・登壇企業として参画させていただく形となりました。 「一緒にやろう」という合意の後は、この大きな枠組みの中にClassiとして正式に参加するための調整フェーズに入りました。

  • 企画内容のすり合わせ: ディップ・ココナラ両社ですでに策定されていたテーマ(技術負債)やターゲット設定について共有を受け、Classiとしてどのように参加するか、認識のすり合わせを実施。
  • 社内調整: 上長への企画提案、開催承認の取り付け。
  • 関係各所への確認: Classiのロゴを使用し、看板を背負って開催するため、PR室(広報)への確認やコンプライアンスチェックなどを実施。

単なる個人の勉強会ではなく、複数社が関わるオフィシャルなイベントとして、必要な手順を一つひとつクリアし、Classiとしての参画を実現しました。


当日のセッションと技術負債への向き合い方

このセクションは、社内で誘いを受けて実際に登壇した鳥山(to_lz1)の執筆です。 最初に、当日発表に使った資料をリンクしておきます。

speakerdeck.com

以下、資料の内容とも重複しますが、執筆にあたって考えたことをいくつか記したいと思います。

1. 技術的負債の原義と定義

発表前にまず気づいたのは、「自分は『技術的負債(Technical Debt)』の原義についてあまり知らない」ということでした。

t-wadaさんのブログで国内でも有名になった「負債のメタファー1というものがありますが、ここでも「負債」とだけ言われていて「技術的負債」とは必ずしも言われていません。調べてみると「技術的」という形容詞を付けて使い始めたのはまた別の方らしく、こうした経緯は発表に当たって調査をすることで初めて知ったので勉強になりました。

このように定義付けがハッキリしていないのにも関わらず、我々エンジニアは確かに「技術的負債」なるものがあると認識し、この概念について語ることをやめられません。執筆を通し、この言葉に宿るそんな不思議な魔力を感じました。また、発表に当たっては定義が曖昧になって聞き手の理解を損ねてはならないので「本発表における技術的負債の定義」を序盤に説明するように注意を払いました。

2. 借入のポジティブな側面

細かい内容は資料に譲りますが、私は個人のキャリアを通して「頑張りすぎず、かつ作りすぎなかった時にこそ最良の結果が得られた」という経験を複数持っています。

もちろん、困難な技術的課題を解決する腕力とでもいうべき技術力はエンジニアに必須です。しかし、その持てる力を全て注いだコードというのは得てして複雑になりがちです。また、そうしたコードが保守しきれずに腐っていくというシーンも目にしてきました。

それよりも、エンジニアとしての様々な経験から来る「この課題に対してなら、より実装工数の軽いこういう設計があるのでは?」といったアイデアやアーキテクチャの方が、成功を導くことが多かったりするのです。そうしたソリューションはリリースも早く出来ますから、結果としてビジネス的な成果にも繋がりやすくなります。この中で、「今はXXXを実装しない」という判断が効率的に下されていたならば、それは「事業価値を生み出す借り入れ」と呼んでも良いのではないでしょうか。

「技術的負債」にはネガティブな側面も多くあります。しかし、私は今回こうした「負債のポジティブな側面」について実感を伴って理解してもらえると良いな、と思って資料作成と発表に臨みました。

また、こうしたやり方で本当に価値を生み出すためには、いわゆる「要件定義」への食い込みや、社内外との交渉も必要になってきたりします。今回のイベントではいわゆる若手の方も多いと事前に聞いていました。そうした技術力を伸ばしたい盛りのエンジニアには嫌われがちな「要件定義」フェーズですが、逆に「技術力を活かすフィールド」として再解釈してみると面白いんじゃない?という私からの提案として、今回の発表資料をまとめさせて頂きました。


運営を通じての気づき・発見

ここからは再び、運営担当の yuu.kun が、イベントを通じて感じた「組織文化」や「技術広報」への気付きについてお話しします。 今回、運営サイドとして参加して強く印象に残ったのは、共催であるディップ株式会社の運営体制と文化 です。

1. 同世代からの刺激と「負けられない」という思い

会場(ディップ株式会社の四谷オフィス)では、私と同世代である20代前半のエンジニアの方々が主体となって、運営を回していました。

印象的だったのは、彼らが単に決められたタスクをこなすだけでなく、どうすれば社内の風土が良くなるか、どうすればイベントが盛り上がるか、彼ら自身も手探りで模索しながら動いている様子が伝わってきたことです。 同じ若手エンジニアとして、組織をより良くしようと奮闘する彼らの姿に、「自分も負けていられない」という強い活力を貰いました。

2. 「技術広報」が根付く文化

運営の方々と話をする中で、ブログの発信頻度の高さや、月に数回のペースでイベントを開催していることなど、組織として「技術情報を発信する」「技術ブランディングする」という文化が深く根付いていることを知りました。

素晴らしい技術を持っていることと、それを外部に認知してもらうことは別の筋肉が必要です。 技術力はもちろんですが、それを届けるための「発信力」や、エンジニアが集まる「場を作る力」。これらもまた、エンジニア組織にとって不可欠な要素であることを、ディップ株式会社の体制から学びました。

おわりに:今後の展望

個人の繋がりから始まった企画でしたが、実際に4社合同という規模で開催できたことは、私自身にとって大きな手応えとなりました。

今回のイベントを一過性のものにせず、得られた知見を社内に還元するとともに、今後も積極的に社外との接点を作り、Classiのエンジニア文化をより外に開かれたものにしていきたいと思います。

2025年のAIを活用した伴走型エンジニアリングを振り返る

はじめに

背景

普段はエンジニアとして、Classi で提供している学習トレーニング機能の問題を管理するCMSの機能強化などを行っています。それが2025年度からは開発だけでなく「コンテンツチーム」にも兼任という形で所属することになりました。 目的はシンプルで、「コンテンツ制作の現場と連携を強化し、その知見をCMS開発へダイレクトに反映していくこと」です。

趣旨

この記事で伝えたいことは以下の3点です。

  • CMSへの「入稿前段階(コンテンツデータ作成)」に関わることで、エンジニアの貢献ポイントが劇的に増えた。
  • Vibe Coding(Claude Code等)で「使い捨てスクリプト」を量産し、AI(Gemini等)で「中身」を補完することで、開発・制作双方の工数を圧縮した。
  • 「100点を目指さない(AI活用)」×「汎用化を目指さない(ワンショットスクリプト)」という割り切りが、最大の成果を生んだ。

※このエントリーで取り扱っている「コンテンツ」は、Classiの「学習トレーニング」上で生徒さんが取り組む「問題」のことを指しています。さまざまな科目、利用用途に合わせて問題群を充実させていくようにコンテンツチームが中心となって制作をおこなっています。

発見:「入稿」の前にエンジニアの仕事があった

続きを読む

プロダクト共有会のご紹介

プログラマ兼、プロダクト共有会司会の onigra です。本日は、私が所属するプロダクト本部で定期的に開催している「プロダクト共有会」をご紹介します。

プロダクト共有会の様子

プロダクト共有会とは?

プロダクト本部が行った、Classiサービスの機能追加・改善などのリリースについて広く共有する会です。主に、マーケティング本部(セールスマーケティング、カスタマーサポート&サクセス等を行う本部)に向けて開催しています。 1

リリース情報の共有は日々行なわれていますが、Classiとtetoruはサービス内に複数の機能が存在し、デプロイも1日に平均して7~10回行われているため、それらを全て、背景や目的を含めて把握することは困難です。

そこで、これらのリリースについて、実際に企画・開発に関わったメンバーから紹介・解説・デモを行い、フィードバックをもらったり、営業活動に活かせる情報を提供することを目的としています。

営業活動に活かす

Classiではマーケティング、セールス、カスタマーサクセスが連携して営業活動を行っています。この体制において、プロダクト本部とマーケティング本部の連携は生命線です。

そのためプロダクト共有会は、単なる機能紹介にとどまらず、プロダクトマーケティングの一環として機能の価値を正しく伝え、営業活動を支援する取り組み(セールスイネーブルメント)にしていきたいと考えています。

機能が解決する課題や開発の意図、活用事例を共有し、日々の提案活動に活かしてもらうことで、プロダクト本部のメンバーも間接的に営業活動に参加し、全社で顧客価値を届けるための場所にしていきたいという狙いがあります。

開発者の声を届けたい

スペックや操作方法だけならドキュメントを読めば分かります。しかし、プロダクト共有会で大切にしたいのは、「なぜこれを作ったのか」や「何に苦労し、どこにこだわったのか」という、生産者の顔が見える情報です。

ストーリーを開発者・企画者自身の言葉で語ってもらうことで、機能は単なる記号から、熱の通ったソリューションへと変わります。その熱量は、営業やCSメンバーを通じて、必ずお客様にも伝播すると信じています。

また、新しくClassiに入社したメンバーはチームでサポートしつつ発表の機会を設け、成果とともにメンバーの紹介を行うことで、成功体験を積むオンボーディングの場としても活用しています。

まとめ

プロダクト共有会は、情報の伝達場所というだけでなく、プロダクト本部とマーケティング本部をつなぎ、組織全体でプロダクトの価値を最大化するためのハブとして運営しています。

今後も、部門の垣根を超えてClassiをより良く、より多くの方に届けるために、楽しく運営していきたいと思います。

おまけ: プロダクト共有会の前身

プロダクト共有会は、Classiの 「申請・提出物/カスタム名簿」機能の開発チームが行っていた「共有会」を前身にしています。

良い取り組みであり、毎回盛り上がっていたため「もっと共有対象を広げよう」ということになり、現在のプロダクト共有会に発展しました。

「申請・提出物/カスタム名簿」開発チームのメンバーにはこの場を借りてお礼を申し上げます。


  1. 参加者に制限は設けていないので、さまざまな組織のメンバーが参加しています

「あえてSQLは書かせない」営業現場で“そのままでも使える“レポート生成AI Agentの紹介

この記事は ADK Advent Calendar 2025 の 22日目の記事です。

こんにちは、データプラットフォームチームの白瀧です。

突然ですが、皆さんの会社の営業チームから、こんな悲鳴を聞いたことはありませんか?

「明日の訪問準備、データを見る時間が全然足りない……!」

Classiでは、学校現場へ訪問して先生方を支援する営業活動が日々行われています。しかし、1日に何校も訪問するスケジュールの中で、学校ごとの詳細なデータ分析を行い、それを資料に落とし込むのはかなり困難です。

今回は、そんな営業の課題を解決するために、「学校訪問時にそのままでも出せる活用レポートを生成するAI Agent」 をAgent Development Kit(以下、ADK)をベースに構築した話をします。

データはあるのに活用できないジレンマ

これまで営業向けのダッシュボードを用意し、営業チームと議論し拡充もしてきました。

しかし、現場としては以下のような状況でした。

  • 訪問の合間の移動時間や、限られた準備時間の中で、ダッシュボードを深掘りしてインサイトを見つけ出し、営業資料にまとめる時間がなかなか作れない
  • 新たなダッシュボードを提供しても、結局は使い慣れた「いつものダッシュボード」だけを確認して終わってしまう

結果として、本来提供できるはずの深いデータインサイトや、多角的な視点が学校に届かず、情報の幅が属人化・固定化してしまいます。これはプロダクトとしても、顧客である学校にとっても大きな機会損失になります。

そこでデータを見て、解釈をして、資料に落とし込むところまでAIを使って自動化してしまえば、営業の効率化と同時にデータを活用した営業による品質向上に貢献できるんじゃないかということから本プロジェクトが始まりました。

開発までの流れ

1. 良い営業資料を集め、品質を再現するための情報整理

まず最初に行ったのは「営業資料の理解」です。
社内で共有される良い営業資料を収集し、営業がどのような話の流れ・資料のフォーマット・文章の書きぶりをしているのかを理解するところから始めました。

全く新しい構成のレポートをAIが出力しても、営業担当者からすれば「見慣れない資料」となり、内容を理解して自分の言葉で話すためのコスト(認知負荷)が高くなってしまいます。そのため、既存の営業資料をフォーマットや構成を踏襲することで、営業担当者がスムーズに受け入れられる設計をベースにおきました。

2. 深掘り観点の策定

既存の再現だけでは、単なる省力化に留まります。そこで、「AIだからこそ出せる価値」を付加するために、レポートに含める独自の深掘り観点を検討しました。

  • これまで営業が「活用しきれていないデータ」、「解釈しきれていないデータ」は何か?
  • その中で、営業トークとして使いやすい(話しやすい)データはどれか?

この点については営業メンバーと議論を重ね、「このデータがあれば、先生ともっと深い会話ができる」というポイントを絞り込みました。

絞った観点に対して単にデータを羅列するだけでは意味がありません。

  • この機能でこのような活用ができています
  • この数字が上がっているのは良い傾向です
  • 特に⚪︎年生でこの機能がしっかり使えています

といった、伝えたいメッセージやデータの解釈までを出力させることが営業現場で活用するハードルを下げ、価値につながると考えました。

3. フォーマット・図の確定と開発

ここまできたら、具体的な出力フォーマットや掲載するグラフ(図)の形式を固め、AI Agentの開発フェーズへと移行しました。

AI Agentの構成

システム全体の構成は以下で、

システム構成

Agentの構成は以下のようにしました。

Agentの構成

  • Root Agent
    • 全体の進行管理役です。必要なSub Agentを呼び出し、Sub Agentの出力をまとめてレポート形式に整形することのみを行います。
  • Sub Agent (= Agent as a Tool)
    • サマリー生成Agent: 必要なデータを取得し、指定されたフォーマットに従って文章を生成します。
    • グラフ・表生成Agent: データの可視化グラフや表など、指定された画像を生成します。

この設計からもわかるようにレポートの構成を固定し、さらに各セクションの出力フォーマットも固定しています。

学校ごとにサービスの利用目的や利用傾向からAgentにレポートの構成から考えさせるという選択肢もありました。
今回は以下の利点から、フォーマットに固定して出力させることにしました。

  • Sub Agentを独立に実行できるようになり、容易にWorkflow化 & 並列処理による高速化が可能
  • どの学校で出力をしても同じフォーマットであることによる認知負荷の低減

AIにSQLを生成させない選択

今回の活用ユースケースとして、レポートをそのまま学校に持っていくことを想定しています。そのため、「他校のデータが混ざる」ということは強く避けるような設計が求められました。

生成させるレポートのフォーマットを確定させたことで幅広くデータを取得する重要性が高くないことから「AIにSQLを書かせない」という選択を取りました。

具体的にはSub AgentがFunction Toolでデータを取得する際、SQL自体を生成させるのではなく、事前に人間が検証した安全なSQLテンプレートを用意し、「学校ID」の部分のみを可変にする実装にしています。これにより、ハルシネーションによる誤ったデータ抽出のリスクを排除しました。

また、データの正確性だけでなく、レポートとしての品質や文脈の適切さを担保するために、生成されたレポートは必ず営業担当者が内容を確認・微調整した上で学校へ提出する運用としています。

実際のコードイメージは以下の通りです。

def get_wau(
    start_date: str,
    end_date: str,
    school_id: str,
) -> dict:
    """特定の学校について、所定の期間内の週次アクティブユーザ数(WAU)を取得します。

    結果はdictionary形式で返され、各キーの説明は field_definitions に含まれます。
    Args:
        start_date (str): The start date in YYYY-MM-DD format.
        end_date (str): The end date in YYYY-MM-DD format.
        school_id (str): The school identifier.
    Returns:
        dict: A dictionary containing WAU data and metadata.
    """
    if not start_date or not end_date or not school_id:
        raise ValueError("start_date, end_date, and school_id must be provided.")

    client, project_id = get_client()
    query = f"""
    select
        format_date("%Y-%m-%d", target_week) as target_week,
        user_type_name,
        grade_name,
        function_name,
        wau,
        wau_rate
    from `{project_id}.<dataset_id>.wau`
    where
        target_week >= "{start_date}"
        and target_week <= "{end_date}"
        and school_id = {school_id}
    order by
        target_week,
        user_type_id,
        grade_code,
        function_name
    """
    data = execute_query(client, project_id, query)
    meta = {
        "target_week": {
            "type": "string",
            "description": "対象週の開始日(YYYY-MM-DD形式)",
        },
        "user_type_name": {
            "type": "string",
            "description": "ユーザ種別名(例: 先生、生徒、保護者)",
        },
        "grade_code": {
            "type": "string",
            "description": "学年名",
        },
        "function_name": {
            "type": "string",
            "description": "機能名",
        },
        "wau": {"type": "integer", "description": "週あたりのアクティブユーザ数"},
        "wau_rate": {
            "type": "float",
            "description": "週あたりのアクティブユーザ率(登録ユーザ数に対する割合)。0から1の範囲で表現される",
        },
    }
    result = {"wau": {"data": data, "field_definitions": meta}}
    return result

成果と気づき

これまでのダッシュボード提供とは一線を画し、営業担当者から素早い活用と非常にポジティブな反応を得ることができました。

特に顕著な成果として、リリースからわずか1ヶ月という短期間で、契約校全体のうち約21%にあたる学校に対して、活用状況レポートが生成されました。これは、ツールの導入・活用を促す上での高いニーズと、AI Agentが提供する価値が即座に受け入れられたと感じています。

営業担当者からは以下のような具体的な声が寄せられました。

またレポートが使われた結果、以下のような学校での動きもありました。

  • 活用レポートを受けて、学年通信に「学習トレーニング機能に取り組んで伸びた」という記載を載せていただいた
  • 活用計画を先生と一緒に立て、活用後に再度レポートを出力して、振り返りをするサイクルの確立

上記の成果から本施策は、営業活動の効率化だけでなく、その先の学校への影響・変化をもたらした事例を作ることができたことが、最も大きな成果だったと思います。

レポート形式が持つ付加価値

今回の開発を通じて、ダッシュボードでは伝えきれない、より詳細で深い情報をレポートというテキストベースでは提供できるという気づきを得ました。

ダッシュボードは、情報を一目で理解しやすくするために、データのビジュアライズが不可欠です。しかし、このビジュアライズの過程で、意図的に情報量を絞り込んだり、データの背後にある文脈や詳細なニュアンスを省略したりすることがあります。これは、解釈の容易さを優先する上でのトレードオフです。

それに対し、テキスト形式を用いることで、単なるデータや結果だけでなく、そのデータが何を意味するのか、どのような解釈が導き出されるのかという点まで踏み込んで記述できます。これにより、ユーザーは情報を受け取るだけでなく、その情報の価値や次に取るべきアクションの示唆までをダイレクトに、かつ明確に受け取ることが可能になります。
この「解釈を与える」機能こそが、テキストがダッシュボードを補完し、時にはそれを超える価値を提供できると認識しました。

おわりに

今回は、活用状況のレポート生成により営業の資料作成を効率化するAI Agentについてご紹介しました。

営業との密な連携こそが今回の成果につながったと思っています。現場の営業担当者が必要としている情報が何であるかを深く掘り下げ、継続的にフィードバックの収集と改修を繰り返しました。

その結果、多忙な営業担当者が迅速かつ的確にアクションを起こすために有効なツールとなり、これまで「お決まりのダッシュボード」しか見ていなかった状態から、AIが自動的かつ親切に多角的な視点を提供することで、データ活用の水準が底上げされたと考えています。

現状のAI Agentはまだまだ開発初期段階だと思っています。生成したレポートをベースにした「対話的な修正機能」や、より高度な「学校ごとのパーソナライズされたレポートの生成」などにも挑戦し、営業担当者がより本質的な課題解決に時間を使えるようサポートしていきたいと思います。

新しい学習トレーニングチーム発足から成果を出すチームになるまで

はじめに

こんにちは。学習トレーニングチーム(以下、学トレチーム)でソフトウェアエンジニアをしている工藤 ( id:irisuinwl ) です。最近のマイブームはウイスキーを飲むことと氷作りです。

自分は2023年までアダプティブラーニングチーム(以下、ALチーム)のリーダーをしていました。

tech.classi.jp

現在ではALチームを再編し、学習トレーニングチームでソフトウェアエンジニアをしております。
新しくなった学習トレーニングチーム発足から1年半ほど経ち、いくつものリリースを通じて、チームとして上手く機能できています。
この記事では、自分がどのようにチーム再編を意思決定し、メンバー全員がチームで活躍できるようにどう取り組んだか、新チームとして上手く機能するために何をしてきたかを書きます。

続きを読む



以上の内容はhttps://tech.classi.jp/より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14