はじめに:「勉強したはずなのに、解けない」
勉強を続けていると、こんなことが起きます。
- 前に解いた問題を、また解いている
- 「TLSが苦手」とは分かるけれど、何が曖昧なのか説明できない
- 支援士の勉強で覚えたことを、CySA+や実務に活かしきれない
- ChatGPTに前回の進み具合を毎回説明する
- 学習ログは増えているのに、次に何をするかは結局その日の気分で決めている
学習時間を記録するだけでは、「何を理解できて、何がまだ怪しいのか」が見えにくい。そこで、Google Sheetsを学習状態の正本にして、ChatGPTを問題作成や振り返りに使う仕組みを作りました。
現在は、情報処理安全確保支援士、CompTIA CySA+、CCNA、Linux、セキュリティ実務の学習を、共通の知識テーマでつなげています。
この記事では、実際に使いながら育てている個人用の学習DBについて、設計の考え方と運用例を紹介します。
1. 学習日記から「状態を見られるDB」へ
最初は、日付・勉強内容・勉強時間・感想を残すだけでした。
2026/09/20
TLSを勉強
2時間
CertificateVerifyが難しかった
記録としては便利です。でも、後から「TLSのどこが難しかった?」と聞かれると、過去ログを探して読み直す必要がありました。記録はあるのに、次の勉強に使いにくい状態です。
そこで、学習テーマを小さく分け、それぞれに固定のIDを付けました。
TLS-001 TLSハンドシェイク
TLS-002 CertificateVerify
TLS-003 Finished
WIN-001 Windows Event ID 4624
WIN-002 Windows Event ID 4625
DNS-001 DNSログ解析
WEB-001 XSS
WEB-002 CSRF
WEB-003 SSRF
IDを固定しておけば、テーマ名を後から調整しても、学習状況や演習履歴とのつながりを保てます。Topic_IDは知識テーマを結び付けるキーです。
2. 資格別ではなく、知識テーマでつなぐ
TLSは、支援士にもCySA+にも、ネットワークやSOCの学習にも登場します。資格ごとに別々のTLS管理表を作ると、同じ知識が重複してしまいます。
このDBでは、資格や演習の側から共通のTopic_IDを参照します。
情報処理安全確保支援士 ─┐
CySA+ ──────────────────┼── TLS-002 CertificateVerify
SOCトレーニング ────────┘
知識を資格ごとの箱に閉じ込めず、「どの試験・演習から出会ったか」と「何の知識か」を分ける考え方です。あるテーマを学んだ成果を、別の資格や実務学習にも活かしやすくなります。
3. CoverageとStableを分ける
学習状態を管理するとき、「勉強した/していない」だけでは足りません。勉強したけれど、まだ自分の言葉で説明できないテーマがあるからです。
そこで、学習範囲に触れたかを示すCoverageと、理解が安定しているかを示すStableを分けています。
| 項目 | 見ていること |
|---|---|
| Coverage | そのテーマを学習対象として扱ったか |
| Stable | 問題や説明で、理解を安定して示せるか |
| Priority | 今取り組む優先度 |
| Weakness | どこでつまずいたか |
| LastStudy / NextReview | 学習日や次の確認タイミング |
例えば、Kerberosを一度学習していても、TGTとTGSの役割が混ざっているなら、次のように状態を残せます。
Topic_ID: KRB-001
Coverage: TRUE
Stable: FALSE
Weakness: TGTとTGSの役割の整理
「学習済み」と「理解できた」を同じ扱いにしないことで、勉強した回数ではなく、知識の現在地を見やすくします。Stableの判定や復習の仕組みは、今も運用しながら調整しています。
4. Topicの現在状態と、学習した証拠を分ける
学習DBの中心にはTopic_Indexを置いています。ここには、各テーマの現在の状態をまとめます。
| Topic_ID | Topic_Name | Coverage | Stable | Priority | Weakness |
|---|---|---|---|---|---|
| TLS-002 | CertificateVerify | TRUE | FALSE | 高 | 秘密鍵所有の証明との関係 |
| TLS-003 | Finished | TRUE | FALSE | 高 | Transcript Hashとの関係 |
| KRB-001 | Kerberos | TRUE | FALSE | 高 | TGT/TGSの整理 |
一方で、問題を解いた記録は演習履歴に残します。Topic_Indexが「今の状態」なら、演習履歴は「そう判断した根拠」です。日次ログには、その日に何を学んだかや次に続けたいことを残します。
過去問もTopic_IDと関連付け、問題ID、出題状況、結果などを管理します。ただし、問題本文の正本と学習状態の正本は別です。問題文は公式資料などの元ファイルで確認し、Engineer Learning DBには対応関係や進捗を記録します。問題文そのものを、DBに無条件で複製する設計にはしていません。
5. ChatGPTは「記録帳」ではなく、学習支援役
この仕組みでは、ChatGPTの会話や記憶を正式な学習記録とは扱いません。学習状態の正本はEngineer Learning DBです。
ChatGPTには、DBで確認できる情報をもとに、次のような作業を手伝ってもらいます。
- Priorityが高く、Stableでないテーマから問題を作る
- 解答を採点し、弱点を具体的な言葉にする
- 同じテーマを別のシナリオで復習する
- 複数のログをもとに、FACTとHYPOTHESISを分けて考える練習をする
大事なのは、DBを見ずに現在地を推測しないことです。出題済みか確認できない問題を「未出題」と決めつけたり、会話の印象だけで学習済みにしたりすると、データが少しずつずれていきます。
例:誤答を「次の学習」に変える
例えば、Windowsのプロセスログを読む問題で、メールソフトからコマンド実行、ファイル作成、外部通信へ続く流れを確認したとします。
まず、ログで直接確認できるFACTと、そこから考えたHYPOTHESISを分けます。
FACT:
・メールソフトを親プロセスとしてコマンド実行が始まった
・一時フォルダーにファイルが作られた
・その後、外部IPへの通信が記録された
HYPOTHESIS:
・メールを起点とする侵害の可能性
・正規ツールを悪用した実行の可能性
・外部通信がC2である可能性
次にEDR、DNS、Proxy、Windowsイベントログなどを確認し、仮説を検証します。解答で「FACTと推測が混ざった」ことが分かれば、単に不正解と記録するだけでなく、関連するTopicのWeaknessに反映できます。
6. DB更新は、対象を確かめてから行う
AIに学習記録の更新まで任せると便利ですが、誤ったTopicを更新したり、実際には扱っていないテーマまで学習済みにしたりするおそれがあります。
そのため、更新は次の順で扱うルールにしています。
今回の操作を判定
↓
適用する運用ルールを確認
↓
正本と対象Topicを確認
↓
更新前の整合性を確認
↓
対象データを更新
↓
更新後の状態を確認し、記録
更新対象は、今回実際に学習したTopicや、演習結果から確認できた弱点などに限定します。DBの場所やTopicとの対応を確認できない場合は、想像で書き込まず、まず確認が必要な状態として扱います。
これは完了した製品機能というより、学習履歴を汚さないために定めている運用ルールです。どこまでを自動化し、どこで人が確認するかは引き続き改善しています。
7. 実務の「分からなかった」も学習テーマにする
このDBには、資格の勉強だけでなく、仕事で出会った課題も学習テーマとして取り込みます。
例えば、uplink trunkに必要なVLANが含まれておらず通信できなかったなら、業務上の記録に加えて、TrunkやAllowed VLAN、VLAN forwardingに関する知識として整理できます。SFPの互換性判断に時間がかかったなら、光規格やトランシーバーの対応条件を次の学習テーマにできます。
仕事で分からなかったこと
↓
関連するTopicを特定する
↓
弱点や確認事項を記録する
↓
別シナリオ・問題で練習する
↓
次の業務で使う
仕事の出来事をそのまま資格問題に置き換えるのではなく、仕事で見えた知識の穴を、学習可能な単位にするのが狙いです。
8. 作ってみて分かったこと
この仕組みを作って一番変わったのは、学習時間の見方です。
「今日は2時間勉強した」は記録できます。でも、それだけでは何ができるようになったかは分かりません。Topic単位で状態と弱点を残すと、「今はTLS全体をやり直すより、FinishedとTranscript Hashの関係を確認しよう」のように、次の一手を具体化しやすくなりました。
一方で、Topicを細かく分けすぎると管理が重くなります。Stableの基準も、最初から完璧には決まりません。復習タイミングの自動化や可視化も、まだ改善したいところです。システムを作ること自体が目的にならないように、実際の学習で使いながら必要な部分を直しています。
9. まず試すなら、この列から
同じ考え方を試すだけなら、最初から大きなDBを作らなくてもよいと思います。Google Sheetsに、次の列を用意するところから始められます。
Topic_ID
Topic_Name
Coverage
Stable
Priority
LastStudy
Weakness
ChatGPTには、例えば次のように頼めます。
学習DBでStable=FALSEのテーマを確認し、
Priorityの高いものから1問ずつ出してください。
回答を採点したら、
・正誤
・回答から確認できた理解
・残っている弱点
を分けて説明してください。
DB上のテーマや現在状態を確認できない場合は、
推測で学習済み・未出題と判断しないでください。
まずはテーマを10個ほど登録して、問題を解くたびにWeaknessを具体化するだけでも、学習日記とは違う見え方が出てきます。
おわりに
作ったのは、Google Sheets、Topic_ID、ChatGPTを組み合わせた個人用の学習管理システムです。
- Google Sheets(Engineer Learning DB)で学習状態を管理する
- Topic_IDで資格や演習をまたいで知識をつなぐ
- ChatGPTで問題作成、解答評価、弱点整理を手伝う
- 実際に確認できた内容だけをDBに反映する
まだ育てている途中ですが、「勉強した時間」だけでなく、「何が分かっていて、どこが曖昧か」を次の勉強につなげられるようになりました。
資格勉強やChatGPTを使った学習で、同じ問題を繰り返したり、自分の弱点が曖昧になったりしている方にとって、知識をTopic単位で管理する方法が参考になればうれしいです。
みなさんは、勉強の進捗を「時間」以外にどんな単位で管理していますか?