作りたいプログラムが具体的にあり、そのプログラムを作る上で非常に参考になるプログラムがある場合、初心者は、その参考になるプログラムを理解するために、分からないところを書籍やネットで調べることになる。初心者は、目次や索引を手がかりにして書籍のどこを参照すればよいか、どのサイトを参照すればよいかを調べるが、初心者であるため探すのに時間がかかったり、コードの書式と書籍の解説例の書式に多少でも違いがあればその違いを理解するためにも時間を使うことになり効率が悪くなる。
このような場合、参考になるプログラムの内容だけを理解できればよいので、参考になるプログラムそのものを、学習用の教材にするのが効率的ではないかと考え、コードが得意と噂のGPT-5にその教材の作成を依頼した。
学習教材にしたいプログラムとして、下記の記事で紹介した装置(災害・危機管理通報サービスの災害等の情報を受信してWebサーバーのホームページに表示する装置)で使ったプログラム(Arduino IDEで編集したスケッチプログラム)を用いた。
添付のコードは準天頂衛星みちびきを利用した災害・危機管理通報サービス「災危通報」の情報を受信し表示するものです。そのコードを完全に理解したいので、そのコードを学び理解するためのテキストを作成してください。また、テキストを作成する方法に関して提案があれば教えてください。
(補足)
「GPT-5」のモードでチャットを始めたが、「GPT-5 Thinking」モードに自動的に変わっていたので、以降の回答は「GPT-5 Thinking」モードでのものである。
GPT-5 の回答
了解です。いただいたスケッチを“しくみ→各部の役割→データの流れ→デバッグ手順→拡張ポイント”の順で徹底分解します。最後に、このコードを学びやすいテキスト(学習資料)をどう作ると良いかの提案もまとめます。
全体像(何をしているコード?)
- u-blox GNSSモジュールからUBXプロトコルで生の衛星データを受信
- QZSS(みちびき)L1Sが載せる災危通報(DC/DCX)のメッセージを抽出・デコード
- 受信サマリをESP32の組み込みWebサーバで配信(最新10件の履歴表示)
- 状態(現在時刻/衛星数/QZSS数/測位可否)も同時にダッシュボード表示
(追記) 災危通報(DCXメッセージ(Lアラート)の例(2025年8月10日日本時間19時32分)

(追記) 災危通報(DCレポート、DCXメッセージ(Lアラート))の例

主要ライブラリと役割
SparkFun_u-blox_GNSS_Arduino_Library.h
UBXバイナリでu-bloxと会話。自動コールバック登録、setUART1Output(COM_TYPE_UBX)
でUBX出力に設定、setAutoRXMSFRBXcallbackPtr
などでイベント毎に関数呼び出し。QZQSM.h
QZSSのDC(Disaster/Crises)レポート用。QZQSM dc_report; dc_report.Decode()
→GetReport()
で人間可読に。"QZSSDCX.h"
DCX(拡張版)のデコーダ。DCXDecoder dcx_decoder; dcx_decoder.decode()
/printSummary()
を使用。WiFi.h
/WebServer.h
固定IPでAPへ接続し、ポート80でHTTPサーバを起動。トップでHTMLダッシュボードを返す。
ハード構成・シリアル配線
Serial1
をGNSSモジュール用UARTとして使用。ボード別にrxPin
/txPin
を切り替え。- ESP32C6: RX=15, TX=21
- ESP32S3: RX=40, TX=35
- 汎用ESP32: RX=19, TX=21
- GNSS初期化は 9600bps フォールバック→失敗時 38400bps 再試行 → 失敗なら停止。
データフロー(重要)
[u-blox] --UBX/RXM-SFRBX--> newSFRBX()
└─> QZSS(gnssId==5)のみ抽出
└─> 32Bバッファ l1s_msg_buf に展開(エンディアン変換)
└─> ヘッダ pAb / メッセージ種別 mt 抽出
├─ mt==43: DC → QZQSM.Decode() → GetReport() → 履歴へ
└─ mt==44: DCX → DCXDecoder.decode() → 条件付きで履歴へ
並行して:
[u-blox] --UBX/NAV-SAT--> newNAVSAT() → 総衛星数/QZSS数 集計
[u-blox] --UBX/NAV-PVT--> newNAVPVT() → 時刻/測位可否 更新
[HTTP] GET "/" --> handleRoot() (10秒オートリロードHTMLを返す)
主要コールバックの読み解き
1) newSFRBX(UBX_RXM_SFRBX_data_t *data)
役割:各衛星から降ってくる“生のフレーム語(SFRBX)”を受け取り、QZSS(L1S)のDC/DCXメッセージだけを取り出す中核。
ポイント:
data->gnssId == 5
でQZSSに限定(0:GPS, 5:QZSS)data->dwrd[i]
(u-bloxは32bit語×最大10語)をビッグエンディアン順でl1s_msg_buf
に並べるために手動でバイト分解l1s_msg_buf[off+0] = (w >> 24) & 0xFF; // 上位バイトから格納 ...
pab = l1s_msg_buf[0]
はプレアンブル/属性バイト、mt = l1s_msg_buf[1] >> 2
でメッセージタイプ抽出(L1S規格に沿ったビット位置)pab
が0x53
,0x9A
,0xC6
のいずれかを対象(実運用で観測されるヘッダ)- DC (mt==43):
dc_report.SetYear(2024); dc_report.Decode(l1s_msg_buf)
→GetReport()
で文字列化し履歴へ追加
(途中省略)
重要な注意点/落とし穴
- 年の固定
dc_report.SetYear(2024);
は固定。UTC年をNAV-PVT
から得て動的に設定した方が安全。
- UBX-CFG-GNSS の書き戻し
- 一部の受信機FWでは、L1Sのビットやマスクが機種依存のことあり。
QZSS L1S
が受信しない場合は、GNSS信号の有効化/マスクをデータシートで要確認。
- 一部の受信機FWでは、L1Sのビットやマスクが機種依存のことあり。
- 文字コード/HTMLエスケープ
- レポート本文が記号を含む場合、
handleRoot()
でHTMLエスケープが必要(&
,<
,>
など)。 - フィールドにユーザ入力はありませんが、将来外部入力が混じるなら必須。
- レポート本文が記号を含む場合、
- スレッド/割込み安全性
- コールバック内で
String
を多用(ヒープ断片化のリスク)。 - 長期稼働なら、固定長バッファ+
snprintf
で堅牢化を検討。
- コールバック内で
- 時刻の表示
newNAVPVT()
のformatTime()
はUTC想定。JST表示にするなら**+9時間**を加算(翌日繰上げに注意)。
- 再接続処理
- Wi-FiやGNSS切断時のリカバリは未実装。
loop()
で状態監視して再接続を。
- Wi-FiやGNSS切断時のリカバリは未実装。
動作確認のステップ(最短で原因切り分け)
- Wi-Fiのみ確認
- GNSS配線前にビルド→起動→シリアルにIPが出る→PCブラウザで
http://192.168.0.10
表示OKか。
- GNSS配線前にビルド→起動→シリアルにIPが出る→PCブラウザで
- GNSS検出
- 9600→38400 試行ログを確認。「not detected」が出たら配線/電源/電圧/TX-RX交差/共通GNDを再点検。
- 衛星カウント
- 屋外視界で
newNAVSAT
が呼ばれ、総衛星/QZSS衛星が増えるか。DBG_PRINT_SAT
を1
にして内訳を見る。
- 屋外視界で
- 時刻/測位
newNAVPVT
により「現在時刻」「測位中」がWebに反映されるか。
- SFRBXの生出力
DBG_PRINT_SFRBX
を1
に。QZSS衛星があるときgnssId==5
のワード列が出るか確認。
- DC/DCX受信
- 受信条件が揃うタイミングで、シリアルにDC/
printSummary
が出る → DCは履歴に追加される。 - DCXはダミー判定のため履歴は空のまま(仕様どおり)。実データに変更後は履歴に溜まることを確認。
- 受信条件が揃うタイミングで、シリアルにDC/
コード各部の“目的→読み方”早見表
dwrd_to_str()
:SFRBXの32bitワードをデバッグで16進文字列にaddReport()
:時刻(gnssData.currentTime
)と本文でリングバッファへ追加formatTime()
:hh:mm:ss.mmm
形式に整形handleRoot()
:状態カード+レポート2列のHTML生成enableQZSSL1S()
:UBX-CFG-GNSSでQZSSとL1Sを有効化して書き戻しsetup()
:Wi-Fi固定IP→HTTPサーバ開始→u-blox起動→自動コールバック登録loop()
:HTTP応答/myGNSS.checkUblox()
とcheckCallbacks()
のポンプ
学習用ミニ課題(理解を定着)
- JST表示:
newNAVPVT()
の表示をJST(UTC+9)に。日付跨ぎも正しく。 - DCXの本文生成:
decode()
の結果から、種別/地域/有効期限を整形してaddReport()
へ。 - 年を動的化:
dc_report.SetYear()
をNAV-PVT
からのUTC年に置換。 - HTMLエスケープ:レポート本文を
& < > " '
を置換して安全化。 - 健全性監視:Wi-Fi切断時に再接続、GNSS無応答時に再初期化を実装。
- メモリ最適化:
String
をやめ、固定長バッファ+snprintf
に変更してヒープ断片化を抑制。 - テレメトリ:最終受信時刻、受信件数、エラー件数を上段カードに追加。
よくある質問(想定)
- Q: QZSSが0のままです
A: 屋内や見通し不良だとQZSS衛星が見えません。南天空の見通しが良い屋外で再試験を。アンテナの帯域(L1)と感度も確認。 - Q: 受信機の設定が効かない
A: 受信機の型番/ファームでL1Sビットマスク値が異なる場合があります。データシートのUBX-CFG-GNSS
の信号マスク定義を要確認。
「学習テキスト」を作る方法の提案
1) 構成テンプレート(Markdownで十分)
- はじめに:目的/対象読者/必要機材
- 背景知識:QZSS L1SとDC/DCXの概要、UBXの基本
- 全体アーキテクチャ:データフロー図(Mermaid推奨)
- ビルド&配線:ボード別ピン、電源、アンテナ注意
- コード逐次読解:関数ごとに「何を・なぜ・どうやって」
- デバッグ手順:フラグON/OFF、チェックポイント
- 拡張課題:JST対応、DCX整形、再接続、ログ最適化
- トラブルシューティング:FAQと症状→原因→対処
- 付録:用語集、参考リンク、UBXメッセージ表
Mermaid例(データフロー図)
flowchart LR U[u-blox GNSS] -- RXM-SFRBX --> SFRBX[newSFRBX] U -- NAV-SAT --> SAT[newNAVSAT] U -- NAV-PVT --> PVT[newNAVPVT] SFRBX -->|mt==43| DC[QZQSM.Decode] SFRBX -->|mt==44| DCX[DCXDecoder.decode] DC --> Hist1[DC履歴] DCX --> Hist2[DCX履歴] PVT --> State[表示用状態] SAT --> State State --> Web[Webダッシュボード] Hist1 --> Web Hist2 --> Web
2) コード注釈版も併記
- 元コードに短い行内コメントを丁寧に付与した“注釈付き版”を付録として掲載。
- 変更候補は
// TODO:
タグで示すと学びやすい。
3) 図・表の入れ方
- 1ページに1図まで(詰め込みすぎない)
- 表は「衛星ID→GNSS名」「mt値→種別」などの対応表に限定し、可搬性を高める。
4) 自動ビルド可能なドキュメント
- GitHubで
README.md
を中核に、docs/
に詳細版。 - 将来的にSphinxやDocsifyへ移行するとサイドバー付きWebドキュメントにしやすい。
- コード断片は ““cpp` ブロックでコピーしやすく。
5) 段階的課題(演習)を組み込む
- 前節のミニ課題を「章末問題」にしてチェックリスト化。
- 提出物はスクショ(HTMLダッシュボード)、シリアルログ、改変コード差分。
必要なら、この内容を学習資料(Markdown)として整形した版や、注釈付きコード版も作れます。どちらが良いですか?(例:Markdown 1ファイル/注釈付き .ino
/両方)
下記はHTML版(抜粋)


装置製作用のテキストとしては素晴らしいものが提案され、下記の内容などが含まれていた。これはこれで、参照用プログラムを理解する上での有用な解説資料なのだが、質問があいまいだったためか、想定していたものと違ったので、別の依頼を行った。
・主要ライブラリと役割
・主要コールバックの読み解き
・重要な注意点/落とし穴
・動作確認のステップ(最短で原因切り分け)
・コード各部の“目的→読み方”早見表
・学習用ミニ課題(理解を定着)
・よくある質問(想定)
・Mermaid例(データフロー図)
このコードで使われている文法(基本構文など)を、プログラミング初心者が学習できるように、文法学習用の教科書を作りたいと思いますが、できますか。
GPT-5 の回答
できますよ!まずはサクッと使える形にしました。初心者向けの「文法教科書」を Markdown と HTML の2種類で用意しています。
(ダウンロードリンク省略)
内容は、あなたのコードに実際に登場する文法に絞って、
- 変数・型・定数(
const
/#define
) - 配列/構造体/関数(参照渡し
&
など) - 条件分岐/ループ
- ビット演算・シフトとマスク(プロトコル解析の要)
- 文字列整形(
snprintf
) - クラスとメソッド、コールバック登録
- プリプロセッサ分岐(
#ifdef
) - 継承と
override
(Stream
を継承した擬似出力) - リングバッファと CRC32
- WebServer と HTML 生成、エスケープ
…を 短い実例+演習付きで解説しています。
もっと詳しくしたい章や、DCX 部分のビット配列を題材にした「ビット演算の演習問題」を増やす、などの要望があれば言ってください。章立ての拡張や図解(Mermaid 追加)も対応できます。
下図に示すように、おおむね想定通りの初心者文法学習用教材をサクッと作ってくれたのだが、下記のような不具合があり、何度も修正を依頼した。
・マークダウン形式のHTML文だが、マークダウン仕様の表示になっていない(#や##が効いていない)
・HTML文で、タイトルだけが表示され中身がない。
・コードの階層構造に従って解説が表示され、下層のコード解説が画面の右端に押しつけられ縦書きになった。
・PDF形式でも出力できるというので依頼したら日本語が文字化けした。
出力が弱いところはあまり変わっていないようだったが、何度もやりとりしていると、PDF出力に関しては、下記の複数の対策が提案された。この点は進歩している。Notoフォントの埋め込みを依頼したら、文字化けしていないPDFファイルが作成された。
(対策1・・・HTML文をPDF形式で印刷してPDFファイルを作成する方法)
日本語フォント埋め込みの互換性の都合で、もっとも綺麗に出力できるのは「A4印刷HTML → ブラウザでPDFに保存」の手順です。上の「A4印刷HTML」を開き、印刷(⌘/Ctrl+P)→宛先を「PDFに保存」にすると、本文が濃色・均等余白で出力されます。
もし完全にオフラインで配布可能なPDFが必要なら、次のどちらかを選んでください。すぐ作ります。
(対策2・・・日本語フォントをアップロードする、従来からある方法)
・お手持ちの日本語フォント(例:NotoSansCJKjp-Regular.otf
など)をアップロード → そのフォントをPDFに埋め込みます。
(対策3・・・外部からフォントを導入する方法)
・「外部アクセスOK」であれば、私の側で公式の Noto フォントを取得して埋め込みPDFを生成します。
作成されたHTML形式の教材(抜粋)は下図の通り。(記載内容の正確性を保証するものではない)






プログラミングの書籍の目次に出ている見出し(「条件分岐」、「繰り返し」、「構造体」など)の項目が多数抽出された。分かりやすい表現にするなどの改良が必要だが、おおよそ想定していた形のものができた。
想定外だったのは、下記の3点。
・各文法項目の解説に記載されている実例は、そのプログラムで実際に使われている例(記載)である。書籍等で、違う例を見るのに比べ、理解したいプログラムに含まれる例なので理解しやすく効率的
・「演習」や、それを使う上での「注意点」などの記載が付加されている
・ミニテストや付録が付いている
作ってもらった資料には、「演習」が含まれており、すばらしいと思いますが、もともと、作ってもらった資料を、「学習モード」の状態でアップロードして学習できるようにすることを考えていました。その際に入力するプロンプトをどのようにするのが良いか提案してください。ユーザーのレベルを選択できるようにするとか、さらなる詳細内容を参照できる外部リンクを添付するとかです。
また、GPTにする場合についても同様に、どのような指示文にすれば良いか教えてください
GPT-5 の回答
いいですね。アップロードした教材を“学習モード”で使う前提で、そのままコピペして使えるプロンプト雛形と、カスタムGPT用の指示文を用意しました。どちらもレベル選択・外部リンク・演習対応・ハルシネーション抑制を含みます。
学習モード用:起動プロンプト雛形(汎用)
あなたは学習コーチです。以下の教材だけを一次情報として使い、日本語で指導してください。
教材: {教材のファイル名/URL/要約}
対象: {初級|中級|上級}(※以後、説明の深さ・語彙・例題難易度をこのレベルに最適化)
モード: {講義|演習|確認テスト|復習スパイラル}
時間枠: {例: 20分}(※セクションをこの時間に収まるよう分割)
指導ポリシー
- まず学習者の目的と既知/未知を3問以内で確認してから開始。
- 1セッション= ①要点ミニ講義(3〜5項目)→ ②小演習(2〜3問, 段階的)→ ③自己採点・フィードバック → ④要約(3行) → ⑤次の宿題。
- コードはC++/Arduinoで提示。重要行にインラインコメント。長いコードは折りたたみ案内。
- 「この教材にない内容」は推測しない。必要なら「未掲載」と明言し、許可があれば信頼できる公式資料のみを案内。
- 専門語は初出で簡潔に定義。比喩は短く、冗長な描写は避ける。
- 誤答にはヒント→再挑戦→必要時のみ解答を段階公開。
- 進捗メモ:{学習者名}のレベル、到達セクション、誤り傾向、次回の復習キューを要約して最後に箇条書き。
外部リンクポリシー(ON/OFF:{外部リンクON|OFF})
- ONのときは各セクション末に最大3件。必ず公式/一次資料のみ、各リンクに1行説明を付す。
- 例: Arduino Reference, u-blox UBX仕様, QZSS災危通報の公式資料など。
出力フォーマット
- セクション見出し
- 重要ポイント(• で3〜5件)
- コード例(```cpp ... ```)
- 演習(難易度★→★★→★★★)
- フィードバック(模範解答は折りたたみガイドで)
- 3行要約 / 次の宿題
使い方例(最初の指示)
上の設定で「1. ヘッダの取り込み と 2. 変数・定数」を30分で。レベル=初級、モード=講義→演習。外部リンクON。
学習モード用:ワンライナー指示テンプレ(早見)
- 「初級で『ビット演算』を10分、演習2問つきで。」
- 「前回の続き(構造体)を要点3つ→演習3問→要約3行で。」
- 「確認テストだけ、5問、合格ライン80%、不正解はヒント後に再挑戦。」
学習モード用:評価・フィードバックのルーブリック(短縮版)
採点基準(各20点)
1) 用語の正確性 2) 手順の妥当性 3) 例の関連性 4) コード品質 5) 安全/根拠
80点以上=合格。改善点は「次回の宿題」に反映。
学習モード用の「ワンライナー指示テンプレ(早見)」はどのように使うものですか
GPT-5 の回答
いい質問です。
「ワンライナー指示テンプレ(早見)」は、一行の日本語コマンドだけで学習セッションを組み立ててもらうためのショートカットです。長いプロンプトを毎回貼らなくても、レベル・章・時間・モード・外部リンクなどをサッと指定できます。
使い方(超シンプル)
- まず教材(今回の文法教科書やコード)をチャットにアップロード or 参照可能にしておきます。
- 下のような一行の指示を送ります。→ それに合わせて、講義 → 演習 → 要約…の流れを自動生成します。
- 途中で方針変更したい時も、次の一行を送ればOK(「演習だけにして」「5問に増やして」など)。
文の型(コピペ用)
「レベル」で『章/トピック』を「時間」、モード=◯◯。外部リンク=ON/OFF。出力=要点→コード→演習n問→要約。
スロットの意味
- レベル:初級 / 中級 / 上級
- 章/トピック:例「9. ビット演算」「構造体」「コールバック」など
- 時間:10分 / 20分 / 30分…(だいたいの分割目安になります)
- モード:講義 / 演習 / 確認テスト / 復習モード / コード中心
- 外部リンク:ON→公式のみ / OFF→教材だけ
- 出力:順序や粒度を指定(例:要点3つ→コード20行以内→演習3問→3行要約)
すぐ使えるワンライナー例
- 「初級で『ビット演算』を15分、講義→演習。外部リンクON(公式のみ)。出力=要点→短いコード→演習3問→3行要約。」
- 「中級『構造体』20分、演習だけで4問、模範解答は最後に。」
- 「上級『コールバック』30分、コード中心、例はESP32/Arduino、行数は20行以内で。」
- 「確認テスト5問、合格80%、誤答はヒント→再挑戦の流れで。」
- 「復習モード。前回の誤り傾向を先にまとめてからスパイラル演習3問。」
- 「教材のみ参照。未掲載は明言し、推測しない。」
- 「演習を初級→中級→上級の段階式に。各問に想定学習時間も書いて。」
- 「外部リンクON。章末に最大3件、Arduino/UBX/QZSSの公式だけ、各1行説明付きで。」
途中での微調整も“一行”
- 「演習だけに変更。3問→5問。」
- 「レベルを上級にして同じトピックを再実施。」
- 「要点を3→5項目に増やして。」
- 「コードはC++/Arduino限定。危険な書き方には注意書きを付与。」
- 「時間オーバーなら省略提案して、必ず3行要約で締めて。」
うまくいかない時のコツ
- 情報源を絞りたい:
→「この教材だけを一次情報。必要なら公式のみ補足。」 - 冗長さを抑えたい:
→「各セクション5〜8行、コード20行以内。」 - 解答をすぐ出してほしくない:
→「ヒント→再挑戦→必要時のみ解答の順で。」
必要なら、あなたの運用に合わせて固定の“ひな形ワンライナーを数個つくってボタン化(LMS/メモ)しておくと便利です。用意しますよ!
「ボタン化(LMS/メモ)」を説明してください
GPT-5 の回答
いいよー。「ボタン化(LMS/メモ)」は、よく使う“ワンライナー指示”をワンクリック/ショートカットで呼び出せるようにする工夫のことです。やり方はだいたい次の3系統。
1) ブラウザ&PC側でボタン化(いちばん手軽)
A. ブックマークレット(クリックでプロンプトをクリップボードへ)
- ブラウザのブックマークを新規作成
- 名前:
初級/ビット演算(15分)
- URL に下を貼る(中身は好きに差し替えOK)
javascript:(()=>{const t=`初級で『ビット演算』を15分、講義→演習。外部リンクON。出力=要点→短いコード→演習3問→3行要約。`;navigator.clipboard.writeText(t).then(()=>alert('プロンプトをコピーしました。チャットに貼り付けてください。'));})();
→ クリックするとプロンプトがコピーされます。あとはChatGPT等に貼り付けるだけ。
B. テキスト展開ツール(キー入力で展開)
- macOS標準「システム設定 › キーボード › テキスト置換」
例:;;bits15
→ 上のワンライナーへ展開 - Windows/Mac共通:espanso(無料), TextExpander, AutoHotkey など
espansoの例(match/base.yml
):matches: - trigger: ";gpt-bits15" replace: "初級で『ビット演算』を15分、講義→演習。外部リンクON。出力=要点→短いコード→演習3問→3行要約。"
C. 物理ボタン
- Elgato Stream Deck / Loupedeck などで「テキストを貼り付け」アクションにプロンプトを登録。
- iPhone/ショートカット
「テキスト」→「クリップボードにコピー」→「通知表示」を作ってホーム画面に追加。
2) LMS/ナレッジ上でボタン化(チームで共有)
A. Notion
/template
(テンプレートボタン)を使い、ボタン押下でページ本文に固定のプロンプト文が展開されるよう設定。- タイトル例:「🟢 初級/ビット演算/15分」「🟠 中級/構造体/20分」など色絵文字で難易度を識別。
B. Confluence / SharePoint / Google Sites
- ページに“コピー用ボタン”付きのHTMLブロックを置く(HTML許可環境なら可能)。
HTMLが禁止なら、コードブロックでプロンプトを掲載+「クリックで全選択→コピー」の手順を明記。
C. Google フォームで“生成ボタン”
- ドロップダウン(レベル/章/時間/モード)→ 送信後に Apps Script で合成テキストを表示&コピー。
- これをLMSの「資料」リンクにしておけば、誰でも選んで即コピペできます。
3) “メモページ”型ボタンパッド(自分用のランチャー)
- ローカルHTML(オフライン)に複数ボタンを並べ、クリックでクリップボードにコピーする方式が便利。
- 要れば、あなた用に「初級/中級/上級 × 章 × 時間」のボタンパッドHTMLを作ってお渡しします(例:30個のボタン、コピー済みトースト表示つき)。
設計のコツ(運用しやすくするために)
- 命名規則:
[難易度] / [章] / [時間] / [モード]
をボタン名に。例「🟢初級/ビット演算/15分/講義→演習」 - バリエーション最小化:よく使う型(講義→演習 / 演習だけ / テスト)を3〜5種に絞る。
- 差し替え可能なスロット:{章}{時間}{問題数}など波括弧で変数っぽく表示し、使う時に上書き。
- 公式リンク同梱:外部リンクON版のボタンには、章末に付ける推奨リンク3件を定型で埋め込む。
- レビューしやすい粒度:各ボタンは“1セッション分”に限定(長文は分割)。
必要なら、今の“ワンライナー”を使って
- ブックマークレット一式、
- Notionのテンプレートボタン付きページ、
- ローカルのボタンパッドHTML(クリックでコピー)
を実ファイルで作成します。どの方式で行きますか?(複数でもOK)
「ボタン化(LMS/メモ)」とは、「よく使う“ワンライナー指示”をワンクリック/ショートカットで呼び出せるようにする工夫」とのことだが、今のところ、頻繁に学習モードの仕様を切り替える必要はなく、面倒そうなので実施しないことにした。
以降は、カスタムGPT用指示文に関する回答
カスタムGPT(GPTs)向け:指示文(Instructions)雛形
System / 開発者メモ(Instructions)に貼る内容
役割: C++/Arduino学習コーチ。アップロードされた教材を一次情報として扱う。
言語: 日本語。学習者のレベルに合わせて語彙と説明の深さを調整する。
行動規範
- 最初にレベル・目標・時間を質問してから進行。
- 教材の内容範囲を超える場合は「教材に記載がない」と明言。許可があればのみブラウズして公式資料に限定して補足。
- 毎回「要点」「短いコード」「演習」「フィードバック」「3行要約」「次の宿題」を出力。
- コードは```cppで、コメントは日本語。危険な誤用は注意書きを入れる。
- 学習履歴(レベル/到達/誤り傾向)をメモに保存し、次回の復習に使う。
- ハルシネーション防止: 教材優先。曖昧なら質問で確認。断定しない。
外部リンク(ブラウズONの場合)
- 公式/一次資料のみを許可。各リンクに1行の要約を添える。
- 推奨ドメイン例: arduino.cc/reference, u-blox.com のUBX仕様, qzss.go.jp の災危通報文書 等。
出力スタイル
- 見出し→箇条書き→コード→演習(★→★★→★★★)→フィードバック→要約→宿題。
- 長文になりすぎない(各セクション5〜8行目安)。
ショートコマンド(ユーザーが入力しやすい合図)
- 「演習だけ」「要点だけ」「コード中心で」「復習モード」「確認テスト5問」 等。
GPTの「初回メッセージ」例
はじめまして。学習の目的・現在レベル(初級/中級/上級)・今日の時間枠を教えてください。
教材のどの章から始めますか?(例: 1. ヘッダ、2. 変数・定数、…)
GPTの「知識ソース」設定のコツ
- アップロードした教材を最上位に。
- ブラウズを使う場合は「公式サイトのみ許可」の方針をInstructionsに明記。
- メモリをONにして「レベル/到達/復習キュー」を保存する旨を加える。
具体的な“章ごとの呼び出しプロンプト”テンプレ
章: {章タイトル}
ゴール: {到達目標を1行}
レベル: {初級|中級|上級}
所要時間: {例: 15分}
やり方: ミニ講義→演習2問→解説→要約→宿題。
配慮: 例はESP32/Arduino。ビット演算は図示、C++固有語は初出で定義。
外部リンク: ON(各1行で公式資料のみ)
「外部リンク」を付けるときの運用
- 先に自分で信頼できる公式URLの短いリストを教材末尾に貼っておく(学習モード/GPTはそこから引用)。
- 例:
- Arduino Language Reference(keywords, control structure)
- u-blox UBX Protocol Specification(RXM-SFRBX, NAV-PVT 等)
- QZSS 災危通報 仕様・技術情報(公式)
- それ以外へ広げるときは「確認を求めてから」。
失敗しがちな点と回避プロンプト
- 長すぎる説明 →「各ポイント3〜5行に要約して。コードは20行以内で。」
- 演習の難易度がズレる →「初級=語彙平易/穴埋め/選択問題中心、上級=実装+理由説明。」
- 即答で模範解なし →「まずヒント→誤答分析→必要時のみ模範解答を開示。」
- 教材外の憶測 →「教材にない内容は“未掲載”と明言。追加情報が欲しいか必ず確認。」
すぐ使える一発プロンプト(まとめ)
以下の教材を使って、初級レベルで「9. ビット演算とシフト」を15分の学習セッションに分解してください。
形式は「要点→短いコード例→演習(★/★★/★★★)→フィードバック→3行要約→宿題」。
教材外の推測はしない。可能なら最後に公式リンクを最大3件、各1行説明で。
必要なら、この雛形をあなたの運用環境用に微調整してお渡しします(例:会社のLMS向けフォーマット、Moodle/Google Classroom用見出し、PDF/印刷用の章立て最適化、進捗メモをCSVに出力 etc.)。
初心者用文法学習用教材を確認したのち、学習モードで、その教材をアップロードして習得度合いを確認するとか、初心者用文法学習用教材を確認したのち、GPT-5に、作りたいプログラムの作成を依頼し、その回答をレビューするとかという使い方ができそう。
GPT-5 関連記事