第一開発事業部の德永です!
突然ですが、皆さんはタスクの管理をどのように行なっていますか?
私はタスクが増えるごとに結局どれから手をつけたらいいか分からなくなってしまうという悩みがありました。
そこで「それなら、AIに全部任せて自動で整理してくれる仕組みを作ればいいじゃん!」と思い立ち、AIがタスクを自動で整理してくれるToDo管理アプリを個人開発しました。
今回の記事では作成したアプリの概要や工夫した点などを紹介していきます。

目次

  1. 開発したアプリの概要:AIが考えるToDo管理とは?
  2. システム構成:FastAPI × Gemini APIの連携
  3. Gemini APIを使いこなす:構造化出力とモデル選定について
  4. こだわったポイント:開発効率と実用性の追求
  5. 動作デモ:ToDoアプリを動かしてみよう!
  6. まとめと今後の展望:リマインダー機能への挑戦

1. 開発したアプリの概要:AIが考えるToDo管理とは?

今回作ったアプリのコンセプトは「自分で考えないToDo管理」です。

開発のきっかけ

  • やることが増えてきた際に整理する時間がなく、手当たり次第目の前のタスクから取り組んでしまっていました。期限やかかる時間を考慮して優先度を整理できる仕組みが欲しいと感じていました。
  • 一般的なToDoアプリは「タスク名」「期限」などを手入力する必要があり、その入力作業自体が手間で結局メモが散乱してしまっていました

アプリができること
ユーザーは「ただメモを投げるだけ」でOK!

  • 直感的な入力:「明日までにプレゼン資料を仕上げなきゃ!」のような話し言葉でまとまっていないメモでもOK
  • AIによる自動解析:入力された内容をAIが読み取り、「何をするか」「いつまでか」「どのくらい重要か」を瞬時に判断
  • スマートなタスク登録:AIが抽出した「タスク名」「期限」「優先度(高・中・低)」が自動で整理されてデータベースに登録

この仕組みによって頭の中にあることをとりあえず書き出すだけであとはAIが整理されたToDoリストに変えてくれます。

2. システム構成:FastAPI × Gemini API の連携

次にアプリを構成する技術スタックを紹介します。

  • フロントエンド:HTML/Streamlit — ユーザーがメモを入力し、整理されたタスクを確認するためのインターフェース。
  • バックエンド:FastAPI (Python) — 高速にAPIが構築できるWebフレームワーク。
  • AI (LLM):Gemini 2.5 Flash — アプリの「脳」となる部分。入力されたメモから「タスク名」「期限」「優先度」を抽出し、構造化データ(JSON)に変換する。
  • Database:SQLite3 — 解析されたタスクを保存するためのデータベース。

データの流れは下記のようになります。

これらが連携することでメモを投げるだけで自動的にデータベースが更新される仕組みができます。

3. Gemini APIを使いこなす:構造化出力とモデル選定について

ここではAIをシステムに組み込む上で工夫したところやモデル選定について紹介していきます。
今回AIの脳になる部分としてGemini APIのモデルGemini 2.5 Flashを選定しました。

Gemini APIとは?
Gemini API は、Googleが提供する最新のマルチモーダル生成AIモデルを利用するためのインターフェースです。
テキストだけでなく、画像や動画、音声などを理解し、高度な推論や情報の抽出を行うことができます。
今回は、このAIを「入力されたメモから特定の情報を抜き出す」というタスクに活用してみました!

モデル選定:なぜ Gemini 2.5 Flash なのか?
Gemini APIにはいくつかのモデルがありますが、今回はGemini 2.5 Flashを採用しました。

  • 理由1:レスポンスの速さ
    ToDo管理は思いついた時にサッと登録できることが重要です。Flash モデルはその名の通り軽量で高速なため、ユーザーを待たせない体験を提供できます。リクエストするデータ量も個人用のものだったのでProレベルのモデルを使わなくても実現可能な範囲でした。
  • 理由2:コストパフォーマンス
    今回のようなテキストからの情報抽出というタスクに対して、非常に高い精度を持ちながら低コストで運用できるバランスの良さが決め手となりました。料金枠も種類がありますが、無料版のプロジェクトを作成して対応しています。


※出典: Google AI Studio料金ページより

構造化出力 (Response Schema) でシステムと繋ぐ
AIに自由に文章を書かせてしまうとシステム側で日付や優先度などが正しく読み取れないことがあります。
そこで、AIの出力をJSON形式(task_name, due_date, priority)に固定するResponse schema機能を活用しました。
これによりAIの解析結果をそのままプログラムで扱えるデータとしてデータベースへ保存することが可能になり、システムの安定性が向上しました。

4. こだわったポイント:開発効率と実用性の追求

ここでは開発をスムーズに進めるための工夫や直面した課題をどう乗り越えたかについて紹介します。

躓いた点
開発当初、APIの設定が正しく認識されずにエラーになる場面がありました。
脳の部分であるAIのモデルを指定するのですが、初めに指定していたモデルではGemini APIからの返答を得ることができないという問題でした。そこで、SDKの機能である client.models.list() を直接実行することで、自分の環境で今使用できるAIモデルは何かという一次情報を確認しました。このステップのおかげで環境と相性の良いモデルを指定しGemini APIとの疎通確認を行うことができました。

Swagger UIによる迅速な動作検証
もう一つの工夫ポイントはFastAPI標準のSwagger UIをフル活用したというところです。
Swagger UIとは?

Swagger UI allows anyone — be it your development team or your end consumers — to visualize and interact with the API’s resources without having any of the implementation logic in place. It’s automatically generated from your OpenAPI (formerly known as Swagger) Specification, with the visual documentation making it easy for back end implementation and client side consumption.
Swagger UI を使うと、開発チームや利用者が実装の細かい中身を知らなくても API のリソースを視覚的に確認し、直接操作(テスト)することができます。OpenAPI仕様から自動生成されるため、バックエンドの実装やフロントエンドでの利用が非常にスムーズになります。

引用: Swagger UI 公式サイト

実際の画面はこちら
POSTの {"memo": "string"}string部分にメモを書きます。


見た目は非常にシンプルで開発者向けですが、この画面のおかげでフロントエンドが未完成の状態でも、「メモを投げたら、Geminiが正しく解析して、データベースに保存されるか」というバックエンドの動きをすぐに確認することができます。

メモを書いて送信すると、優先度や「明日」という言葉を実際の日付に変換してDBに保存してくれました✨

フロントエンドの画面をまだ実装していませんでしたが、API単体でメモが正しく送信できるか、またデータベースに登録されるかというのを確認できたため、開発サイクルを非常に早く回すことができました。

5. 動作デモ:ToDoアプリを動かしてみよう!

これまでの内容を踏まえて実際に作成したアプリがどのように動作するのかを紹介したいと思います!

① メモを入力する
ユーザーがメモ入力欄に「明日までに〇〇やらなきゃ!△△は来週でもいいかな」といった内容を入力して送信します。まずは、頭の中にある「やらなきゃいけないこと」をそのまま入力します。

ここでは、「金曜日は資格試験を受けなきゃ」「来週までにプレゼンの資料作りたいけど発表は木曜日だから…」といった、日常会話で使うような相対的な日付を含んだメモを入力してみました。

② AI が文脈を読み取り自動でリスト化
「ToDoを抽出」ボタンを押すとGemini APIが瞬時に内容を解析し、構造化データとして保存します。
Swagger UIで動作確認をした時のデータ(会議室予約)も勝手に削除されずに残っていることがわかりますね!

ここが Gemini API の凄いポイント!

  • 相対日付の解釈:
    「金曜日」や「来週」「木曜日」といった言葉から、AIが「実行日の翌日の金曜日」や「翌週の木曜日」の日付を自動で推測し、システムが扱いやすい形式で抽出できています。
  • 文脈による優先度判定:
    「発表は木曜日だからまだ大丈夫かも」というニュアンスから、優先度を「中」と判定しています。
  • ダッシュボード:
    画面上部には「今日」「今週」などの期限が近いタスク数がカウントされ、一目で状況がわかります。

③ 不要になったタスクの削除
タスクが完了したり、予定が変わったりした際のために削除機能もシンプルに実装しました。
削除したいタスクのIDを入力して「削除実行」ボタンを押すだけの操作で削除が可能です。

④ 削除実行とリストの更新
ボタンを押すと、バックエンド(FastAPI)がデータベース(SQLite)から該当データを削除してくれます。

実行後、すぐに一覧からタスクが消去され、「今本当にやるべきこと」だけが残ったクリーンなリストに更新されました。

6. まとめと今後の展望:リマインダー機能への挑戦

今回の開発を通じて、改めてGemini API の強力さと、個人開発のハードルが下がっていることを実感しました。

Gemini APIの推論力!
今回最も興味深かったのはAIが単なるキーワード抽出ではなく文脈と時間の流れを理解しているという点です。

  • 相対日付の完璧な解釈:
    「金曜日」や「来週」「木曜日」といった曖昧な言葉から実行日を基準にした「正しい日付」を推測し、システムが扱いやすいデータに変換してくれました。
  • 「行間」を読む判定:
    「発表は木曜日だからまだ大丈夫」という人間の独り言のようなニュアンスから、優先度を適切に判断する能力に感動しました笑

「AI × 軽量フレームワーク」で広がる個人開発の可能性
このような高度な機能をFastAPI というシンプルなフレームワークと組み合わせるだけで、わずか数日で形にすることができました。
「こんなアプリがあったらいいな」というアイデアを膨大なコードを書かずにAIの脳を借りて実装できる今の時代は、個人開発のハードルを下げてくれたと感じています。

今後の展望:Gemini × Slackへの通知で「忘れない」を仕組み化する
今回AIが「いつまでに」という情報を正確に抽出できることが分かったので、次のステップとしてSlackとの自動連携に挑戦したいと考えています。
メモを入力した瞬間に、AIが解析した期限をもとに通知を送れるようになれば利便性も上がりそうですね!
その様子も第二弾としてブログ掲載予定なので是非見に来ていただけると嬉しいです!(成功しますように🙏)
ここまでご覧いただきありがとうございました!