「ITパスポートの勉強、テキストだけだとなかなか続かない…」「スキマ時間にスマホで手軽に問題を解きたい」そんな悩みを解決するために、ITパスポート試験対策アプリをFlutterで個人開発しています。
今回は、1日で一気に実装した4つの主要機能について紹介します。一問一答モード、学習進捗の可視化、本番形式の模擬試験、そして学習ダッシュボードです。合計で約6,000行のコードを書いた開発記録をお届けします。
目次
一問一答モードで効率的に学習できる仕組み

まず最初に実装したのは、一問一答モードです。ITパスポート試験はストラテジ系・マネジメント系・テクノロジ系の3分野に分かれていますが、このモードではランダム出題・苦手分野優先・分野指定の3パターンで学習できます。
特にこだわったのは分野ドリルダウン機能です。大分類から中分類へと絞り込んで出題できるため、「セキュリティだけ集中的に解きたい」「プロジェクトマネジメントの問題だけ復習したい」といった使い方が可能です。
問題画面では4択形式で回答し、正解・不正解の判定後に解説がBottomSheetで表示されます。実際に使ってみると、テンポよく問題を解き進められて、紙のテキストよりも効率的に感じました。
技術的には、Riverpodを使った状態管理でクイズの進行状況や回答履歴を管理しています。QuizProviderが問題取得・回答記録・正答率計算を一手に担う設計にしました。
学習進捗カードで成長を可視化

次に実装したのは、ホーム画面に表示する学習進捗サマリーカードです。アプリを開いた瞬間に「今どれくらい進んでいるか」が一目でわかるようにしました。
表示する情報は以下の通りです。
- 総合正答率:円形プログレスインジケーターで視覚的に表示
- 総回答数・完了問題数:学習量の把握
- 今日の進捗:当日の学習状況
- 学習日数:継続のモチベーション維持に
- 分野別正答率:カラーコード付きプログレスバーで弱点を可視化
私自身、学習アプリを使うときに「全体の進捗が見えないと不安になる」タイプなので、この機能は最初に入れたかった要素です。正答率は「正解数÷総回答数」で計算しており、繰り返し解いた分も反映されるため、実力の推移がリアルに見えます。
データ取得はFuture.wait()で並列処理しているため、複数のカテゴリデータを同時に取得でき、表示速度も快適です。
本番さながらの模擬試験機能

3つ目は、ITパスポート本番と同じ形式で受験できる模擬試験機能です。これが今回最も実装に力を入れた機能です。
主な特徴をまとめると以下の通りです。
- 100問・制限時間付き:本番と同じ条件で受験できる
- リアルタイムカウントダウンタイマー:一時停止・再開にも対応
- 問題マーキング機能:後で見直したい問題にマークを付けられる
- 問題グリッドナビゲーション:100問の回答状況を一覧で確認、未回答問題にジャンプ
- IRT方式風の採点:難易度に応じた重み付けスコアリング
特に面白いのがIRT(項目反応理論)風の採点システムです。問題の難易度に応じて「Easy: 0.8倍」「Normal: 1.0倍」「Hard: 1.3倍」の重み付けをし、シグモイド曲線で調整して200〜1000点のスコアを算出します。実際のITパスポート試験もIRT方式を採用しているため、より本番に近いスコア感覚で学習できます。
結果画面では、合否判定バナーに加えて分野別のレーダーチャートが表示されるため、どの分野が弱いか一目瞭然です。受験履歴画面では過去の成績一覧と合格率も確認できます。
注意点として、GoRouterのPopScopeを使って試験中の誤操作による離脱を防止しています。模擬試験中にうっかり戻るボタンを押してしまう事故を防ぐ重要な配慮です。
学習ダッシュボードで弱点を把握

4つ目は、学習の傾向やパターンを分析できる学習ダッシュボードです。
ダッシュボードに表示される情報は以下の4つです。
- 正答率推移グラフ:日別・週別・月別で正答率の変化を折れ線グラフで表示
- 学習カレンダー:4週間分の学習状況をカレンダーグリッドで可視化し、連続学習日数(ストリーク)も表示
- 苦手サブカテゴリ:正答率が低い中分類をランキング形式で表示
- 期間切り替え:日次(7日間)・週次(12週間)・月次(6ヶ月)で切り替え可能
私がこの機能で特に重視したのは、「苦手分野の特定」です。ITパスポート試験は合格ラインが総合600点以上かつ各分野300点以上なので、苦手分野を放置すると致命的です。サブカテゴリ単位で正答率を表示することで、「どの中分類を重点的に復習すべきか」が明確になります。
グラフ描画にはfl_chartライブラリを使用しています。スムーズな曲線とインタラクティブなツールチップにより、データの把握が直感的にできます。
1日で約6,000行のコードを書いた開発の裏側

今回、4つのPRで合計約5,950行の追加コードを書きました。1日でこれだけの機能を実装できた要因をいくつか紹介します。
- Riverpodによる状態管理の統一:Provider・StateNotifierのパターンを統一し、新機能の追加がスムーズ
- GoRouterによる画面遷移管理:ルーティングの一元管理で画面追加が容易
- SQLiteのDAO層の設計:データアクセスをDAO層に集約し、クエリの再利用性が高い
- Claude Codeの活用:AIペアプログラミングで設計・実装の速度を大幅に向上
メリットだけでなくデメリットも正直に書くと、1日で一気に実装したためテストカバレッジが不十分な部分があります。現状はQuizStateの単体テストのみで、模擬試験やダッシュボードのテストはこれから追加予定です。
IPA高度試験全区分を取得した経験から言えば、試験対策アプリで重要なのは「繰り返し学習のしやすさ」と「弱点の可視化」です。今回実装した4機能は、まさにこの2点を軸に設計しました。
まとめ

この記事では、個人開発中のITパスポート試験対策アプリに1日で実装した4つの主要機能を紹介しました。
要点をまとめると以下の通りです。
- 一問一答モード:ランダム・苦手優先・分野指定の3パターンで学習可能
- 学習進捗カード:正答率・学習日数・分野別進捗を一目で確認
- 模擬試験:100問・タイマー・IRT風採点で本番さながらの受験体験
- 学習ダッシュボード:正答率推移・学習カレンダー・苦手分野を可視化
- 技術スタック:Flutter + Riverpod + GoRouter + SQLite + fl_chartで効率的に開発
アプリのリリースに向けて、引き続き開発を進めていきます。今後はテストの充実やUI/UXの改善に取り組む予定です。ITパスポート受験を考えている方、個人でアプリ開発をしてみたい方の参考になれば嬉しいです。

コメント