v1.0.245 をリリースしました。今回は二本立てです。ひとつは 学習アプリ向けの「受験コーチ」API(受験日記・生活と学習時間のログ・目標点とテスト結果・今日の学習提案と週間レビュー・データの書き出し)。もうひとつは 「正しく数え、正しく守る」ための見直し ― 採点ルールの統一、招待とシート数の整合、サインインが必要なページの保護、そして料金・採点・組織間のデータ分離を確かめる自動テストの整備です。
今回のハイライト
受験コーチ API
受験日記、生活・学習時間のログ、目標点とテスト結果、今日の学習提案と週間レビューを API で提供します。
採点ルールの統一
合格は四捨五入前の正確な割合で判定。正解が設定されていない設問で点が入ることもなくなりました。
招待とシート数の整合
招待にもシート上限を適用。一度外したメンバーを再度招待しても、シートを二重に数えません。
ページ保護の見直し
アカウント設定ページはサインインが必要に。公開コース内の非公開レッスンは表示されなくなりました。
MCP でテストを仕上げる
テストの設問を並べ替え、制限時間を含むすべての設定を読み戻して確認できます。
自動テストと英語版ページ
料金・採点・組織間の分離を 403 件の自動テストで確認してから配信。英語版のヘルプとニュースも表示されます。
1. 受験コーチ API ― 学習アプリのために
ワカルートをはじめとする学習アプリ向けに、学習者が自分で記録した事実と、Manabu2 が記録した学習 をもとに、毎日の学習を組み立てるための API を公開しました。学習者本人の権限でだけ読み書きでき、組織からは見えません。
1.1 受験日記と生活・学習時間のログ
- 1 日 1 件の 受験日記(できたこと・困ったこと・明日やること、集中度と疲れ)を保存できます
- 学校・部活・塾・自習・宿題・スマホ・睡眠などの区分で、1 日の時間の使い方 を記録できます。今日と過去 31 日分を書き換えられます
- 1 日の表示では、学習者が記録した学習(自己申告)と、Manabu2 で行った学習(自動記録)を 並べて表示し、合算しません。同じ時間を二重に数えないためです
1.2 目標点とテスト結果
- 定期テスト・模試・小テストなどの種類ごと、科目ごとに 目標点 を設定できます
- 学校や模試会社から返ってきた点数を、満点とあわせて記録できます
- 目標との差は、種類と満点が同じときだけ 計算します。満点の違う点数を比べた差は表示しません。合否の判定はしません
1.3 今日の学習提案と週間レビュー
- 前日の持ち越し、つまずいた前提への戻り、再確認の期日、直すべき誤答、新しい単元の順に、最大 5 件 の「今日の学習」を提案します。目標から最も遠い科目を優先します
- 1 日の学習時間は、学習者自身の直近 1 週間の実績から決めます(20〜120 分)。試験 30 日前からは、直すべきものがある間は新しい単元を後回しにします
- 提案を受け入れる・変える・延期する・やめる・終えたと記録するのは 学習者本人 です。コーチが代わりに決めることはありません。提案の理由は本人のデータから作り、点数を約束する表現は使いません
- 月曜〜日曜の 週間レビュー で、目標との差、計画と実績、今週到達した理解要素、来週の最初の提案を振り返れます。日記の本文は含めません
1.4 データの書き出しと成果指標
- 学習者は、目標・結果・日記・時間ログ・計画と判断・学習記録・習熟度を 1 つの JSON として書き出せます
- 組織向けには、ヒント後の自力正解率・類題の正答率・再確認の定着率・計画の実行率などの 成果指標 を集計で提供します。個人ごとの数値は出しません
- アカウントを削除すると、日記・時間ログ・目標・テスト結果・計画も削除されます
| 追加 | 内容 |
|---|---|
/api/v1/me/journal |
受験日記、生活・学習時間のログ、1 日の表示、集計 |
/api/v1/me/scores |
目標点、テスト結果、目標との差の集計 |
/api/v1/me/coach |
今日の学習提案、提案への判断、週間レビュー |
GET /api/v1/me/export |
学習者データの書き出し(JSON) |
/api/v1/organizations/{id}/ai-ops/learning-metrics |
組織向けの成果指標(集計のみ) |
2. 採点ルールを一つにまとめました
レッスンのクイズと学習パスのテストは、これまで別々の処理で採点していました。今回、同じルール で採点するようにまとめ、あわせて次の 2 点を改めました。
| 項目 | これまで | これから |
|---|---|---|
| 合格の判定 | 四捨五入した点数で判定。23 問中 16 問正解(69.57%)は「70%」と表示され、合格ライン 70% で 合格 になっていました | 四捨五入する前の正確な割合で判定。表示は「70%」のままですが、合格ライン 70% には 届きません |
| 正解が設定されていない設問 | どの選択肢にも正解が設定されていない設問は、未回答でも 全員が正解 扱いでした | 誰も正解にはなりません。設問数には含めるため、設定漏れに気づきやすくなります |
あわせて、複数選択の設問は「正解の選択肢をすべて、過不足なく」選んだときだけ正解になること、同じ回答が二重に送られても一度として数えることを、自動テストで確認しています。
3. 招待とシート数の整合
- 招待にもシート上限を適用: 招待中のメンバーはシートを 1 つ確保します。これまで上限の確認は画面側で行っていましたが、招待そのものに組み込みました。どの経路から招待しても上限を超えることはありません
- 再招待でシートを二重に数えない: HR が一度外したメンバーを再度招待し、その後 HR がもう一度追加すると、同じ人に 2 件の所属が作られ、シートが 2 つ数えられることがありました。再招待では以前の所属を使い直すようにしました。以前の権限(管理者など)は引き継がず、新しい招待と同じ「学習者」から始まります
- 再招待された方がサインインできる: 最後の所属組織から外された方は、サインインできない状態になります。HR による再追加では解除されていましたが、招待を承認した場合は解除されず、承認後もサインインできませんでした。招待の承認でも解除されるようにしました
- 削除済みアカウントは招待できません: 退会(アカウント削除)された方は招待できず、退会前に届いていた招待も承認できません。招待が取り消されている場合、承認画面は「無効な招待」と表示します(これまでは「参加が確認されました」と表示されていました)
4. ページ保護の見直し
サインインせずに表示できるページを一つずつ確認し、それぞれ公開してよい理由を記録しました。今後、公開ページが増えたときは自動テストで気づける仕組みです。確認の中で見つかった 2 点を修正しました。
- アカウント設定ページ: パスワード変更などのアカウント設定ページに、サインインしていない状態でもアクセスできていました(個人の情報は表示されず、「ユーザーを読み込めません」と表示される状態でした)。サインイン画面へ案内するようにしました
- 公開コース内の非公開レッスン: 公開コースのページに非公開のレッスンも一覧表示され、URL から内容を閲覧できる状態でした。公開済みのレッスンだけを表示するようにしました。サイトマップは以前から公開済みのレッスンのみでしたので、検索結果への影響はありません
5. MCP と API の追加・変更
| 対象 | 内容 |
|---|---|
MCP ツール reorder_test_questions |
新規追加。テストの設問の並び順を変更します。全設問を重複なく指定したときだけ反映し、一部だけの指定や他のテストの設問は受け付けません。受験済みのテストでも過去の結果は変わりません |
MCP ツール get_test_answer_key |
説明・合格ライン・必須かどうか・制限時間・学習パスを返し、設問を学習者に出る順に並べます。作成・更新した設定をそのまま読み戻して確認できます |
MCP ツール list_tests |
各テストの制限時間を表示します |
GET /api/v1/paths の courseCount |
呼び出した方が閲覧できるコースだけを数えるようにしました。学習パスの詳細に表示されるコース数と一致します(これまでは非公開や下書きのコースも数えていました) |
6. 安定性・品質・その他
- API の利用回数制限を全サーバーで共有: 1 分あたりの上限を、サーバーが複数台になっても正しく数えるようにしました。集計用のストレージに一時的につながらない場合も、API は止まらず各サーバーで数え続けます
- 自動テストの拡充: シート数の計算、クイズとテストの採点、組織間のデータ分離(他の組織のコース・メンバー・教材・テスト・レポートは API から「見つからない」と返ること)、公開カタログの表示ルールを、403 件の自動テスト で確認してから本番に配信しています
- 英語版のヘルプとニュース:
/en-US/helpと/en-US/newsで英語の記事が表示されるようになりました(これまでは記事が見つからない状態でした)
今後について
受験コーチ API は、ワカルートでの運用に合わせて改善を続けます。次は、英語版ヘルプの内容の刷新、期限や更新に関する通知の画面内表示、組織管理者向けの SSO(Entra ID・Google)に取り組みます。