← ガイダンス一覧へ戻る

StudyGuide / アーキテクチャ

英文のページを写真に撮ると、読解ガイドと単語テストが1ページぶん出来上がるアプリ。 出来たページは音声・持ち出し用ファイル・学習記録・単語帳として使い回される。

抽象度 Lv.4(技術用語+システム上のやりとりまで/製品名・ライブラリ名は書かない)
入口・読取・選択 書き込み系 データストア 人が判断する所 保存領域への書き込み 箱の中の AI利用 の印=そこだけAIを使う

枠が太く、タイトルに下線のある箱は押せます。 そのブロックの中で何工程に分かれ、誰と何をやりとりしているかの詳しい解説へ進みます。 いまは 1番2番3番 の3つ。

利用者(ブラウザ画面)
写真の送信、本文の確認、学習の操作をする
12 認証チェック
暗証番号で発行した印を毎回確かめる。家族は1つの利用者として扱う
元表現: 玄関(認証)係
作成フェーズ ── 1ページを作る
1 画像テキスト抽出 ›
1〜4枚の写真から英文を取り出し、洋書か英語教材かを判定する
元表現: 写真読み取り係 AI利用
人による確認・修正
取り出された英文を画面で見て直す。ここだけ人が判断する
2 処理オーケストレーション ›
工程の順番と受け渡しだけを担う。内容の判断そのものは持たない
元表現: 司令塔
3・4・5 ── 同時に走る(並列)
3 読解ガイド生成 ›
文の区切り・訳・語句と文法の説明を作る
元表現: 読解ガイド係 AI利用
4 出題履歴の突合
過去に出した語句が今回も出るかを機械的に照合し、復習候補を選ぶ
元表現: 復習履歴係
5 習得状態の参照
「覚えた」と印を付けた語句を、出題禁止の一覧として返す
元表現: 習得済み係
6 語彙問題生成+出力検証
8問を作り、書式・重複・禁止語を点検。外れていれば1回だけ作り直す
元表現: 単語テスト係 AI利用
7 ページ永続化
3番と6番の結果を1ページにまとめ、途中状態が残らない形で保存する
元表現: ページ保存係
保存領域(データストア)
ガイドと問題/元画像/音声/習得状態/学習記録/削除の退避/移行前の控え
学習フェーズ ── 出来たページを使う
8 音声合成とキャッシュ
保存済みの英文だけを外部サービスに渡し、1文ずつ作って取っておく
元表現: 音声係 AI利用
9 単独ファイル書き出し
1ページを持ち出せる1つのファイルにする。内容は言い換えない
元表現: HTML書き出し係
10 学習記録の保存
読み終えた日と体感の難しさを、ページごとに記録する
元表現: 学習記録係
11 語彙一覧の集約
全ページの出題語を1冊分にまとめる。品詞は規則ベースの判定(AIではない)
元表現: 単語帳係
13 語彙スコア記録・出題抽選
単語帳から出題を選び、正誤を0〜5点として記録する(新しい担当・元図に無し)

システムの骨組み

ここから下は、上の図で矢印1本になっている所が、実際にはどういう通信で行われているかです。 図が「誰が何をするか」、ここが「どうやり取りしているか」にあたります。

API の一覧

画面(ブラウザ)とサーバーの間は、すべて HTTP でやり取りします。 取ってくるだけなら GET、送りつけて何かを起こすなら POST、 すでにあるものを丸ごと置き換えるなら PUT、一部だけ直すなら PATCH、消すなら DELETE、 という使い分けになっています。

メソッド・パス担当受け取る形式返す形式主なステータス
POST /api/auth/login12番application/json(PIN)application/jsonSet-Cookie200 / 400 / 401 / 429
POST /api/auth/logout12番なし303 リダイレクト+Cookie失効303
POST /api/extract1番multipart/form-data(画像1〜4枚+種類)application/json200 / 400 / 401 / 500
POST /api/generate2〜7application/json(本文・タイトル・画像の鍵)application/json(ページID)200 / 401 / 500
GET /api/guides/{id}/speech?sentence=N8番クエリ文字列audio/mpeg200 / 400 / 401 / 404 / 500
GET /api/guides/{id}/html9番なしtext/html(添付扱い)200 / 401 / 404
PUT /api/guides/{id}/progress10番application/json(完了日・難易度)application/json200 / 400 / 401 / 500
PUT /api/vocabulary/mastery5番application/json(語句・覚えた/解除)application/json200 / 400 / 401 / 500
PUT /api/vocabulary/scores13番application/json(語句ID・正誤)application/json200 / 400 / 401 / 500
PATCH /api/guides/{id}7番application/json(タイトル・ページ番号)application/json200 / 400 / 401 / 404 / 500
DELETE /api/guides/{id}7・10なしapplication/json200 / 401 / 404 / 500
GET /api/healthなしapplication/json200

401 が全部の行に並んでいるのが要点です。 どのAPIも最初に「あなたは誰か」を確かめ、確かめられなければ中身の処理に入りません。 12番がすべての矢印の手前に立っている、というのはこのことです。

画面そのもの(トップ、ページ表示、単語帳、クイズ)は、サーバー側でHTMLを組み立てて GET で返しています。上の表のAPIは、その画面から呼ばれる裏方です。

認証のしくみ(12番)

OAuth 2.0 のような外部の認可のしくみは使っていません。 GoogleやAppleに「この人を認証してください」と任せる方式ではなく、 家族で共有する暗証番号(4〜12桁の数字)1つだけで入る、自前の簡素なしくみです。 家族向けの小さなアプリなので、外部の認可基盤を持ち込むより単純にした、という判断だと読めます。

この方式の帰結として、家族全員が「同じ1人の利用者」として扱われます。 誰が操作したかの区別は付きません。データも家族で1セットです。

外部サービス(AI)への呼び出し

保存とキャッシュ

この図から読み取れること

未確認事項

※ この図は、2026年8月14日時点の studyguide のプログラムを読んで作成しました。

※ 抽象度は Lv.4 で統一しています。通信の方式・データの形式・認証のしくみ・ステータスコードまでは書き、製品名やライブラリ名、関数名までは踏み込みません(そこは Lv.5)。

※ 箱の隅の「元表現」は、先に作った擬人化版の解説(12人の「係」)での呼び名です。番号もそちらと同じものを使っています。13番だけは擬人化版に無い、あとから足された処理です。

StudyGuide を開く

akuramochi1.com — personal tools for learning and thinking.