メインコンテンツへスキップ
見出し画像

【開発備忘録①】娘の漢字検定対策に、AIと一緒に"模擬試験自動生成システム"を作った話

    娘が漢字検定9級を受けることになりました。

    こんにちは、じゅんです。

    今回はいつもとちょっと違う記事です。
    最近、AIを使ったアプリ開発を本格的に始めまして、その開発過程をありのままに記録していこうと思っています。

    ツールの使い方でも、成功談でもなく、「こういう流れで作った、こういうところで詰まった」という備忘録に近い内容です。

    私自身プログラミング未経験者なので、プログラミングの知識はゼロでも大丈夫です。同じようにAIを使って何か作ってみたい方に「自分にもできそう」と感じてもらえたら嬉しいです。

    ということで、今回の開発テーマはこちら。

    漢字検定9級の模擬試験を自動生成して、学習履歴まで管理できる仕組みを作る。


    ① なぜ作ろうと思ったか

    きっかけは、小3の娘が3月から通い始めた塾のイベントです。

    「受けてみませんか」という案内が来て、親としてはせっかくだしと思ったのですが、本人のテンションはというと、正直あまり高くありませんでした。

    「べつにいいけど〜」くらいの温度感。

    まあそうだよな、とは思いつつ、せっかく受けるならちゃんと準備させたいと思って、まず市販のドリルを買ってみました。

    ところが、これが続かない。
    同じ問題を繰り返すだけの構成なので、やればやるほど「答えを覚えてしまう」状態になります。それ自体は悪くないのですが、娘のモチベーションはじわじわ下がっていく一方でした。問題が新鮮じゃないと、やらされてる感が増すのでしょう。

    そこで考えました。
    毎回違う問題が出てきて、しかも苦手なところを重点的にカバーしてくれる仕組みが作れないか。

    私はプログラマーでもIT系の出身でもありません。生成AIを仕事に取り入れながら、その活用範囲を少しずつ広げてきた、いわゆる非エンジニアです。そんな自分が「だったらClaudeに頼もう」と思ったのは、ある意味自然な流れでした。コードは書けなくても、AIに指示を出しながら一緒に作り上げていくバイブコーディングというスタイルがあるからです。

    Claudeと壁打ちしていくうちに方向性が固まっていきます。
    ・模擬試験の生成はClaudeのプロジェクト機能に任せて、
    ・出題履歴や苦手漢字の管理はGoogle Sheetsで蓄積していく
    ——という二本立ての構成です。

    娘のモチベーション対策のつもりが、気づいたらちょっとした開発プロジェクトになっていました。


    ② 何を作ったか

    作ったのは、ClaudeとGoogle Sheetsを組み合わせた学習管理の仕組みです。

    構成はシンプルで、2つの役割に分かれています。
    Claudeのプロジェクト機能が「模擬試験を作る側」、
    Google Sheetsが「学習履歴を記録・分析する側」です。

    【Claudeのプロジェクト機能】

    Claudeには「プロジェクト」という機能があり、特定の指示や情報をあらかじめ設定しておくことができます。

    今回はClaudeと対話しながら、漢字検定9級の試験情報・出題構成・問題の書式ルールまでを含んだ詳細なプロンプトを一緒に設計しました。このプロジェクトに設定しておくことで、以降は「模擬試験を作って」と一言打つだけで、本番と同じ7大問構成・150点満点の試験問題がWordファイルで出力されます。問題シートと解答シートのセットで、そのままプリントして使えます。

    なお、Claudeのプロジェクト機能は無料版でも利用できます(最大5プロジェクトまで)。今回のような個人利用であれば、課金なしで始められます。

    【Google Sheetsの学習管理】

    Google Sheetsは3枚のシートで構成しました。

    • 出題履歴シート:試験回ごとの点数・合否・出題した漢字・間違えた漢字を記録

    • 漢字マスターシート:9級の配当漢字240字すべての出題回数と誤答回数を管理

    • 苦手ダッシュボード:誤答回数の多い漢字が自動でランキング表示

    画像
    出題履歴シート
    画像
    漢字マスターシート(一部抜粋)
    画像
    苦手ダッシュボード(一部抜粋)

    実際に2回試験を終えた時点で、シートにはこんなデータが蓄積されています。

    火(1年生):誤答2回 町(1年生):誤答2回 歌(2年生):誤答2回

    苦手ダッシュボードより

    「火」と「町」と「歌」が鬼門のようです。親としては「そこか」と少し意外でしたが、データは正直です。次の模擬試験ではこの漢字たちが優先的に出題されます。

    点数を入力するだけで正答率と合否が自動計算され、試験問題生成時にClaudeから出力される出題した漢字リストを貼り付けるだけで240字分のマスターデータが自動更新されます。
    試験後の作業は、点数を入力して出題リストをコピペ、間違えた漢字を入力するだけで完了です。


    ③ 実際の開発プロセス&詰まったこと

    開発といっても、私はプログラマーではありません。コードは書けないし、Google Apps Scriptも「なんとなく聞いたことある」レベルです。いわゆるバイブコーディング——AIに指示を出しながら、出てきたコードをそのまま使っていくスタイルで進めました。

    最初にClaudeと設計を固め、「Google Sheetsのひな形をApps Scriptで一括生成したい」という方針になりました。
    Claudeがコードを書いてくれて、私はそれをApps Scriptエディタに貼り付けて実行するだけ——のはずでした。

    1回目のエラー。

    Exception: Ranges must have at least one range.
    

    条件付き書式の書き方が間違っていたらしく、処理が途中で止まりました。Claudeに報告すると即座に原因を特定して修正版を出してくれました。

    2回目のエラー。

    TypeError: ...setFontWeight is not a function
    

    条件付き書式のAPIには存在しないメソッドを使っていたとのこと。再度修正。

    3回目のエラー。

    Exceeded maximum execution time
    

    今度は処理が終わらないまま6分が経過してタイムアウト。Claudeは「セルへの書き込みを1行ずつではなく一括処理に変更する」という方針で全面的に書き直してくれました。

    ここで私がやらかしたのは、エラーが出るたびにスプレッドシートの中身を確認せずにいたことです。

    4回目の実行後もタイムアウトエラーが表示されたので「またか」と思っていたのですが、ふとスプレッドシートを開いてみると——3シートすべてのデータがきれいに入っていました。タイムアウトしたのは処理の最後に表示しようとしていたアラートダイアログの部分だけで、肝心のデータ書き込みはすでに完了していたのです。

    Claudeにそのことを報告すると、こんな返事が来ました。

    「大丈夫です!これは成功です。タイムアウトエラーには『処理が止まったエラー』と『処理は終わったが後処理に失敗したエラー』の2種類があります。今回は後者でした」

    Claudeの回答

    エラー=失敗、ではないのだと学んだ瞬間でした。

    GASのエラーが落ち着いたあと、もう一つ詰まった箇所がありました。

    模擬試験の書式です。最初に生成された試験問題は、解答欄のかっこが途中で改行されてしまったり、1ページに問題が詰め込まれすぎて見づらかったりしました。小学生が手書きで答えるものなので、解答スペースの広さや文字の大きさは特に気を使いました。Claudeとやり取りしながら大問ごとに書式ルールを細かく設定し、v2で納得のいく仕上がりになりました。

    画像
    出力された第1回模擬試験

    もう一つは区切り文字の問題です。
    Claudeが提示する出題漢字リストを出題履歴シートに貼り付けると、漢字マスターシートに反映されないという問題が起きました。原因を調べると、リストの区切りが「・」だったり「、」だったりスペースだったりと一定でなかったためです。これもClaudeがApps Scriptのコードで対応してくれて、どの区切り文字でも自動判別できるようになりました。

    こういう細かいところを一つひとつ潰していく作業が、実は開発の大半を占めていたかもしれません。


    ④ できあがったもの・現在の状況

    現在、第2回模擬試験まで完了しています。

    第1回は120点でぎりぎり合格ライン、第2回は107点で不合格でした。結果だけ見ると「大丈夫か?」となりますが、苦手漢字のデータはしっかり蓄積されています。「火・町・歌」を中心に、次回は重点的に出題される予定です。

    娘の反応としては、毎回違う問題が出てくることで「また同じやつだ」という感覚がなくなったようで、ドリルのときよりは取り組む姿勢が前向きになってきました。ゲームのステージをクリアしていく感覚に近いのかもしれません。

    システムとしては、開発の過程で作ったコードや設定内容をまとめた開発手順書も整備しました。同じ仕組みを8級や他の資格試験に転用するときは、漢字リストとClaudeへの指示文を差し替えるだけで使い回せる設計にしてあります。一度作ってしまえばずっと使えるのが、この仕組みの一番のメリットです。


    ⑤ 今後の展開

    試験本番まで、あと数回の模擬試験を重ねる予定です。

    苦手漢字が絞り込まれてくるにつれて、試験の難易度は自然と上がっていきます。それが本番に向けた仕上げになるはずです。

    娘が合格できるかどうかは、続報をお待ちください。

    合格したあかつきには、8級アップデート版として記事にする予定です。そのときは今回の仕組みをそのまま引き継いで、対象漢字と試験形式だけ更新します。「一度作ればずっと使える」を実証できるかどうか、そちらも楽しみにしていただければと思います。

    プログラミング未経験でも、AIと一緒ならこういった仕組みは作れます。
    エラーが出ても焦らず、まず結果を確認する——そのくらいの心構えで十分です。

    同じように「子どもの学習をサポートしたい」「何か作ってみたいけどコードは書けない」という方の参考になれば幸いです。


    このシリーズでは、
    非エンジニアがAIと一緒に何かを作る過程を、
    ありのままに記録しています。

    コードが書けなくても大丈夫、手順通りに動けば結果は出る。
    次は、あなたが作る番です!

     
     
    医療機器業界18年。2人の娘の父。 40代後半でキャリアブレイクを経て、今は個人でAIを使った仕事をしています。 AIに任せること、自分で決めること。その間で試したこと、迷ったこと、気づいたことを日々書いています。 「自分にもできるかも」と思えるきっかけになればうれしいです。

    あなたへのおすすめ