PRODUCT NOTE / PRD

certly

Claude 認定資格の対策アプリ。
この文書は「何ができるか」ではなく、なぜ・誰のために・どんな判断で作っているかを記録した開発ノートです。

ステータス2026-08-11 に Web 版を公開(全機能を無料で開放)。iOS / Android は審査待ち
現行バージョンv1.0.0(Web 版 公開中 / ストアは審査待ち)
プラットフォームiOS / Android / Web(AI ワークスペースのタブ)
対象ユーザーClaude 認定資格(CCAR-F / CCAR-P ほか)の受験者。第一の想定ユーザーは著者本人
マネタイズ資格ごとの買い切り(サブスクを採らない。理由は意思決定ログを参照)
最終更新2026-08-11
関連リンク プロダクトページ対策本(同じデータから生成)開発ノート一覧
TL;DR

ひとことで

certly は、Claude 認定資格の問題を間隔反復(FSRS-5)と適応出題で解き続けるアプリです。特徴は解説の粒度で、正解の理由だけでなく選ばなかった選択肢がなぜ誤りかを全部出し、出典 URL を付けます。さらに「なぜ今この問題が出たか」を重みの内訳ごと画面に表示します。

通信は使いません。学習データは端末内(drift)だけに置いています。書籍『Claude 認定アーキテクト Foundations 完全対策』は、このアプリと同じデータから生成しています。

Problem

解こうとしている問題

資格対策アプリの失敗はだいたい 2 つに集約される。

certly はこの 2 つに、誤答選択肢の解説推定に基づく出題順で答えている。

Decision Log

主要な意思決定ログ

web Web 版は課金を積まず、AI ワークスペースのタブとして出す
DECISION
同じ Flutter のコードから Web 版を作り、AI ワークスペースに単語帳・DayGrid と並べた。この版には課金を積まない——全機能が最初から開き、購入の導線ごと画面に出ない。「課金を積まない配布形態」を kFreeEdition という 1 つのフラグで表し、Web と --dart-define=FREE_EDITION=true のビルドが同じ扱いになる。
WHY / 仮説
ブラウザに App Store も Play も無いので、購入ボタンを置いても押せない行が並ぶだけになる。動作確認用の解放(TestFlight 向けの PREVIEW_BUILD)とは別のフラグにしたのは、出荷したビルドを見たときに「確認用の解放が残っているのか、無料版として出したのか」を区別できなくなるため。判定の差し替えは entitlementsProvider 1 か所だけにしてある。ゲートは 30 か所近くあり、画面ごとにフラグを見に行かせると必ずどこかが閉じたまま残る。
RESULT
ブラウザでも端末内 SQLite(drift の WASM 版)で動く。取り込みの作りに 2 つ穴が見つかって直した——毎起動で 3 試験ぶん 5 MB の問題バンクを読んで捨てていた(内容ハッシュだけを載せた索引を先に読むようにした)のと、1 行ずつ書いていた(Web ではステートメント 1 本ごとにワーカーとの往復が入るので、まとめて 1 回にした)。どちらもネイティブでは見えていなかった無駄で、Web に出したことで表に出た。
pricing 月額サブスクを採らず、資格ごとの買い切りにする
DECISION
無料で試せる枠+資格ごとの買い切りという構成にした。月額課金は採らない。価格と無料枠の範囲は未定で、ストア公開時に確定する。
WHY / 仮説
月額課金は「使い続けさせる」ことが収益になる。これは zerohalf の方針——答えを渡さず、ユーザー自身の力を育てる——と正面から衝突する。資格対策アプリのゴールは「受かって、二度と開かなくていい状態」にすることなので、受かったら払わなくていい形しか整合しない。
RESULT
売上は読みにくくなるが、訴求としてはむしろ強い。原価が発生する AI 機能(類題生成・追質問)だけは消耗型クレジットに分離し、失敗時は返還する。
naming アプリ名に「Claude」を冠さない
DECISION
中立名 certly+サブタイトルで運用する。アプリ内・ストア説明・書籍の 3 箇所に「Anthropic 非公式」を明示する。
WHY / 仮説
「Claude」を冠した名前は商標上のリスクがあり、App Store の審査でも引っかかりやすい。対策教材としての記述的な使用は通常問題ないが、公式だと誤認させないことが前提になる。
RESULT
アプリのホーム画面下部に免責を常時表示している。「問題はすべて公開されている試験ガイドと公式ドキュメントをもとに作成したオリジナルであり、実際の試験問題ではありません」まで書く。
transparency 「なぜ今この問題が出たか」を毎回見せる
DECISION
出題選択の重み(切迫度・苦手さ・放置期間・優先度など)の内訳を、そのまま画面に表示する。
WHY / 仮説
適応出題はブラックボックスになりやすく、「なんか同じ問題ばかり出る」と感じた瞬間に信用を失う。理由が見えれば、出題順に納得して従える。
RESULT
副次的に、自分の弱点がどこかを説明なしで理解できるようになった。分析画面を開かなくても弱点が伝わる。
pipeline アプリを正とし、書籍はそこから生成する(一方通行)
DECISION
問題・教科書・用語集の原本は YAML で持ち、検証して assets/*.json を作る。書籍側はこの JSON から原稿を生成する。依存の向きはアプリ → 書籍の一方通行に固定した。
WHY / 仮説
同じ内容を 2 箇所で手管理すると必ずズレる。どちらかを正にするしかない。日々直すのはアプリ側なので、アプリを正にした。
RESULT
本とアプリの内容が構造的に一致する。「本は地図、アプリは反復」という売り方が、実態を伴った主張になった。
architecture SRS のコアは純 Dart に隔離する
DECISION
lib/domain/srs/ は drift も Flutter も import しない。永続化先は drift のみに一本化する。
WHY / 仮説
間隔反復と能力推定は間違えても気づきにくい部分なので、UI や DB なしでテストできる形に隔離しておきたかった。
RESULT
テスト 23 ファイル・271 件。出題選択とスコア推定を単体で回せている。
Contents

収録範囲

CCAR-F(Foundations)347 問/5 ドメイン。公式ブループリントの比重に合わせて配分
CCAR-P(Professional)210 問/7 ドメイン
エンジニアリング基礎380 問/17 ドメイン。試験範囲外なので別 exam として分離した
追加予定CCDV-F / CCAO-F を同スキーマで追加
Milestones

これまでの歩み

v1.0.02026-08-11

Web 版を公開し AI ワークスペースに載せる(課金なしの全機能版)/バンク取り込みを索引+一括書き込みに/起動時の無駄読み 5 MB を削除/App Store へ提出

v0.10.12026-08

最上位資格 CCAR-P を追加/模擬試験モードと学習計画を実装

MVP2026-08

Flutter+drift+FSRS-5+適応出題/演習・解説・分析/完全オフライン

plan2026-07

企画。「まず自分が合格する。合格した後に有料アプリとして出す」を前提に据える

Roadmap / Open Questions

未解決のこと