「カード作りが面倒すぎる」問題をAIで解決したら、資格勉強が続くようになった
はじめに:エンジニアの「積ん読あるある」
AWS Solutions Architect、情報処理技術者試験、LPIC、TOEIC……
エンジニアなら一度は「今年こそ取る」と決意した経験はないだろうか。参考書を買い、最初の数日は順調に進む。でも気づいたら積ん読になっている。
私も何度もこのループを繰り返してきた。でもあるとき気づいた。問題は「やる気がない」ことではなく、勉強を始めるまでの摩擦が大きすぎることだった。
この記事では、その摩擦の正体と、AIフラッシュカードアプリ(個人開発)で解決した話を、技術的な実装も含めて書いていく。
続かない本当の理由=「暗記カード作成コスト」
スペーシング復習(間隔反復)が効果的なのは知っていた。AnkiやQuizletも試した。
だが毎回こうなる:
- テキストを読む
- 重要な部分を抜き出す
- 問題文と答えを考える
- ツールに入力する
ステップ2〜4が、勉強そのものより時間がかかる。
AWS SAA を例にすると、IAM・VPC・S3・RDS・Lambda……カバーすべきサービスだけでも数十ある。各サービスの概念・ベストプラクティス・料金体系まで含めると、必要なカードは数百枚規模になる。
私のケースでは、1枚のカードを手動で作るのに平均2〜3分かかっていた。100枚作ろうとすると約4時間。これではカードを作り終える前に心が折れる。
インプットではなくカード作りに時間を使っている、という本末転倒な状態だった。
既存ツールで感じた壁
| ツール | 良い点 | 壁になった点 |
|---|---|---|
| Anki | SRSアルゴリズムが強力、自由度が高い | 標準機能でのカード作成は手動のみ、UIに学習コストがある |
| Quizlet | UIが洗練されている、共有しやすい | 日本語でのAI生成精度にムラがある、無料プランの制限が大きい |
特に課題だったのは以下の2点だ:
- 日本語テキスト・画像からのカード自動生成に対応していない(AWSの公式ドキュメントも情報処理試験の参考書も日本語)
- 学習内容から文脈を理解して四択を生成する機能がない(情報処理試験のような選択問題の練習には不十分)
「じゃあ、AIにカード作成を丸ごと任せるアプリを作ればいいのでは?」というのが出発点だった。
作ったもの:Cobo Memo
Flutter + AWS Amplify Gen2 + Google Gemini API で構成したフラッシュカードアプリだ。Flutterを選択したのは、iOS, Android, Webサービスを一体で作りたかったから。Amplifyを選定したのは、Claude Codeや、Cursorを使ってAIエージェントにフロントエンド+バックエンド一気通貫で開発を進めたかったから。Google Gemini Flush Lite APIを選択したのは、精度とコストパフォーマンスの効率が最高だったからだ。
全体アーキテクチャ
┌─────────────────────────────────────────────────┐
│ Flutter App (iOS / Android) │
│ ├── SQLite(ローカルストア) │
│ └── Amplify DataStore ⇄ DynamoDB(クラウド同期) │
└──────────┬──────────────────────────────────────┘
│ REST API (API Gateway)
▼
┌─────────────────────────────────────┐
│ AWS Lambda (Python) │
│ └── Gemini API 呼び出し │
│ ├── テキスト → カード生成 │
│ └── 画像/動画 → カード生成 │
└─────────────────────────────────────┘
▲
│ REST API (API Gateway)
┌──────────┴──────────────────────────────────────┐
│ Webコンソール(ブラウザ) │
│ └── カード作成・編集・デッキ管理 │
└─────────────────────────────────────────────────┘
コア機能
| 機能 | 概要 |
|---|---|
| AIカード生成 | テキスト or 画像入力 → 問題・答え・補足・四択選択肢を自動生成 |
| ChatGPT出力の取り込み | ChatGPTの回答をそのまま貼り付けてカード化 |
| Webコンソール | PCブラウザからカード作成・管理。業務中のデスクでも使える |
| スペーシング復習 | 忘却曲線に基づく復習スケジュールの自動管理 |
| オフライン対応 | SQLiteをプライマリストア、DynamoDBと双方向同期 |
| 共有デッキ | ロールベースの権限管理(オーナー・編集者・閲覧者) |
技術的な話:AIカード生成の実装
ここからは実装の詳細に踏み込む。
Gemini API でのカード生成
Lambda(Python)から Gemini API を呼び出して、構造化されたカードデータを生成している。
ポイントはプロンプトでJSON形式を強制することだ。自然言語で返されるとパースが面倒になるので、出力フォーマットをプロンプト側で厳密に指定する。
import json
import google.generativeai as genai
def generate_cards(text: str, num_cards: int = 5) -> list[dict]:
"""テキストからフラッシュカードを生成する"""
prompt = f"""
以下のテキストから、学習用フラッシュカードを{num_cards}枚生成してください。
## 出力形式
以下のJSON配列のみを出力してください。説明文やMarkdownのコードブロック記法は不要です。
[
{{
"question": "問題文",
"answer": "正解",
"supplement": "補足説明(なぜその答えになるかの解説)",
"select1": "誤りの選択肢1",
"select2": "誤りの選択肢2",
"select3": "誤りの選択肢3"
}}
]
## ルール
- 問題文は具体的に。「〜とは何か」だけでなく「〜の場合、どのサービスを使うべきか」のような実践的な問いも含める
- 誤りの選択肢は、もっともらしいが明確に間違っているものにする
- 補足説明には、正解の根拠と誤りの選択肢がなぜ違うかを含める
## テキスト
{text}
"""
model = genai.GenerativeModel("gemini-2.0-flash-lite")
response = model.generate_content(prompt)
# レスポンスからJSON部分を抽出してパース
raw = response.text.strip()
# Geminiが```json ... ``` で囲むケースに対応
if raw.startswith("```"):
raw = raw.split("\n", 1)[1].rsplit("```", 1)[0]
cards = json.loads(raw)
return cards
画像からのカード生成
参考書のページを撮影してカードを生成する機能もある。Gemini のマルチモーダル入力を使い、画像を直接渡す。
import base64
def generate_cards_from_image(image_bytes: bytes, mime_type: str = "image/jpeg") -> list[dict]:
"""画像からフラッシュカードを生成する"""
prompt = """
この画像に含まれる学習内容から、フラッシュカードを生成してください。
(出力形式・ルールは上記と同様)
"""
model = genai.GenerativeModel("gemini-2.0-flash-lite")
response = model.generate_content([
{
"mime_type": mime_type,
"data": base64.b64encode(image_bytes).decode("utf-8")
},
prompt
])
raw = response.text.strip()
if raw.startswith("```"):
raw = raw.split("\n", 1)[1].rsplit("```", 1)[0]
return json.loads(raw)
プロンプト設計で苦労したこと
開発中、いくつかの課題にぶつかった:
-
出力が安定しない: JSONの前後に余計なテキストが入ることがある →
```jsonの除去処理で対応 - 「もっともらしい誤答」の品質: 最初は明らかに違う選択肢ばかり生成された → プロンプトに「同じカテゴリの類似サービス名を使う」と指示を追加して改善
- 日本語特有の問題: 英語に比べて1トークンあたりの情報量が少ない → カード枚数の上限とテキスト量のバランス調整が必要だった
ChatGPTの出力をそのまま貼り付けてカード化する
ここまではアプリ内蔵のAI(Gemini)によるカード生成の話だったが、実はすでに手元にあるChatGPTの出力を活用するワークフローの方が、実務では使う場面が多い。
エンジニアなら、業務中にChatGPTで技術的な概念を調べたり、コードの仕組みを聞いたりする場面があると思う。そのとき得た知識を「あとで復習したい」と思っても、別途カードを作るのは面倒でやらない——というのがよくあるパターンだ。
Cobo Memo では、ChatGPTの回答をそのままテキスト入力欄に貼り付けるだけでカード化できる。
実際のワークフロー
ステップ1: ChatGPTに聞く
たとえば、AWSのサービスについて整理したいとき、ChatGPTにこんなプロンプトを投げる:
AWSのストレージサービス(S3、EBS、EFS、FSx)の違いを、
以下の観点で整理してください:
- ユースケース
- 料金体系の特徴
- パフォーマンス特性
- 選択時の判断基準
ステップ2: 出力をCobo Memoに貼り付ける
ChatGPTが返してきた回答を、Cobo Memoのテキスト入力にそのままコピー&ペーストする。
ステップ3: AIがカードを自動生成
貼り付けたテキストをもとに、Gemini APIが問題文・答え・補足・四択選択肢を生成する。たとえばこんなカードができる:
Q: 大容量の非構造化データを低コストで保存し、静的Webサイトのホスティングにも使えるAWSサービスはどれか?
A: Amazon S3
補足: S3はオブジェクトストレージで、99.999999999%(イレブンナイン)の耐久性を持つ。EBSはEC2にアタッチするブロックストレージ、EFSは共有ファイルシステムで用途が異なる。
ChatGPTで「理解する」→ Cobo Memoで「定着させる」、という2段構えの学習ループが作れる。
応用:ChatGPTにカード形式で出力させる
さらに効率を上げたいなら、ChatGPTへのプロンプト自体を工夫する方法もある:
AWSのS3ストレージクラスの違いについて、
フラッシュカード形式で5問作ってください。
各カードは以下の形式で出力してください:
- 問題文(実務的なシナリオベース)
- 正解
- 補足説明
- 誤りの選択肢3つ(もっともらしいもの)
この出力をそのまま貼り付ければ、AIがさらに整形・補完してくれる。
Webコンソール:スマホアプリだけじゃない
Cobo Memo はスマホアプリだけでなく、PCブラウザから使えるWebコンソールも用意している。
これが意味するのは、業務中のデスクでもそのまま使えるということだ。
「勉強ツール」から「仕事のナレッジ管理」へ
フラッシュカードというと通勤時間にスマホでポチポチ、というイメージがあるかもしれない。だがWebコンソールがあることで使い方が変わる:
- 業務中に調べた技術知識をその場でカード化 — ChatGPTやドキュメントで調べた内容を、ブラウザのタブを切り替えてすぐにカードにできる
- PCのキーボードで大量のカードを効率的に作成・編集 — スマホでの入力よりはるかに速い
- チームのナレッジベースとして運用 — 共有デッキと組み合わせれば、チームの技術知識を体系的に管理・復習できる
スマホアプリは「復習」、Webコンソールは「作成・管理」と使い分けることで、学習のサイクルが回りやすくなる。
技術的な話:スペーシング復習の仕組み
各カードは以下の状態を持っている:
enum CardState {
unlearned, // 未学習
learning, // 学習中(短い間隔で復習)
learned, // 習得済み(間隔を広げて復習)
}
class CardProgress {
DateTime nextReviewDate; // 次回復習日
double progressRate; // 習熟度(0.0 〜 1.0)
CardState state; // 学習状態
int consecutiveCorrect; // 連続正答数
}
回答の正誤に応じて次の復習間隔を決定する。ロジックの概要は以下の通りだ:
-
正解 →
progressRateを上げ、次の復習間隔を延長(1日→3日→7日→14日→30日…) -
不正解 →
progressRateをリセットし、短い間隔(当日〜翌日)で再出題
エビングハウスの忘却曲線に基づき、「覚えたばかりのカードは頻繁に、定着したカードは間隔を空けて」復習する。これにより、アプリを開くだけで「今日やるべきカード」が自動で出てくる。
実際の効果
AWS SAA の勉強で約2ヶ月使ってみた結果を書く。
| 指標 | Before(手動カード作成) | After(COBO MEMO) |
|---|---|---|
| カード作成時間(100枚) | 約4時間 | 約30分(AI生成+確認・編集) |
| 1日の勉強時間 | 30〜60分(大半がカード作成) | 30分(ほぼ復習に集中) |
| 作成したカード総数 | 約80枚で挫折 | 約350枚 |
| 継続日数 | 最長2週間 | 2ヶ月以上継続中 |
最も大きかった変化は勉強の意思決定コストが下がったこと。「何を覚えるか」「どうカード化するか」を考える負担がなくなり、純粋にインプットと復習に集中できるようになった。
まとめ
資格勉強が続かない最大の理由は「やる気」ではなく「摩擦」だと私は思っている。
暗記カードを作る手間という摩擦を AI で取り除くことで、勉強そのものに集中できるようになる。同じ壁にぶつかっている方がいれば、ぜひ試してみてほしい。
Cobo Memo(iOS / Android / Web 対応・無料で利用可能)
- App Store(iOS)
- Google Play(Android)
- Webコンソール(PCブラウザからのカード作成・管理。まずはiOSまたはAndroidでアカウント作成)
AWS・情報処理試験・TOEIC・プログラミング言語の文法など、暗記が必要な学習全般に使えるように設計している。
技術的な質問や「こういう機能がほしい」というリクエストがあれば、コメントで気軽に聞いてください。
技術スタック: Flutter / AWS Amplify Gen2 / DynamoDB / Lambda (Python) / Google Gemini API




