0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

個人開発の日記アプリ「Daily Diary」を Claude Fable 5 でレビューしてもらった記録 — 見つかったバグと所感

0
Posted at

はじめに

個人開発で作っている日記アプリ 「Daily Diary」(Flutter 製、Google Play 公開中)を、リリース前にひととおり品質チェックしたくなり、Claude Fable 5 にコードレビューと修正を任せてみました。その記録です。

Fable 5 が公開されたのは 2026 年 6 月 9 日。その 3 日後の 6 月 12 日(米東部時間の夜)、米商務省の輸出管理指令により全世界で利用停止になりました。指令は「Fable 5 と Mythos 5 への、米国内外を問わずあらゆる外国籍ユーザー(外国籍の自社従業員を含む)のアクセスを禁止する」という内容で、Anthropic は米国ユーザーと外国籍ユーザーを即時に切り分けられないため、結果として全ユーザー向けに停止しています。理由は国家安全保障(書簡に具体的内容の明示はなし)とされ、報道では「Fable 5 の安全機構を回避する手法が見つかったこと」が背景と伝えられています。執筆時点(6 月 15 日)でも復旧しておらず、Anthropic は「誤解だ」として早期復旧を目指し、当面は Opus 4.8 へ案内しています。短い期間でしたが、止まる前に自分のアプリで実際にやってもらった内容を、個人開発者としての所感とあわせて残しておきます。

「他モデルが見逃したバグを見つけた」といった一般論ではなく、自分のリポジトリのコミットに残っている 実際の修正 だけを書きます。

アプリ紹介: Daily Diary

シンプルなオフライン日記アプリです。

  • 📱 オフラインファースト: データは端末内のみに保存、クラウド不要

  • 🌐 5 言語対応: 日本語 / 英語 / 中国語 / 韓国語 / スペイン語

  • 🌙 ダークモード(システム設定追従)

  • 📅 カレンダー表示(気分インジケータ付き)/ 📊 統計(連続記録・気分トレンド)

  • 🔍 全文検索 / 🎲 過去エントリのランダム表示 / 💾 JSON でエクスポート・インポート

  • Google Play: https://play.google.com/store/apps/details?id=com.diary.daily

技術スタックは Flutter 3.x / Dart、状態管理 Provider、ローカル保存 Hive(NoSQL)、ローカライズは Flutter intl です。

Fable に頼んだこと

「全部直して」ではなく、「品質的に気になるところを洗い出して直して」 くらいの粒度で投げました。具体的には flutter analyze の警告解消、テスト整備、CI 追加です。

見つかったバグ

1. async の後に BuildContext を mounted チェックなしで使っていた

await をまたいで setStateBuildContext(ローカライズ参照や Navigator)を触る箇所が複数あり、画面が破棄された後に呼ばれるとクラッシュする潜在バグでした。エクスポート/インポート処理などで顕在化しうるものです。

// 修正前(概念): await の後、ウィジェットが破棄されていても触ってしまう
await databaseService.importData(file);
setState(() { /* ... */ });                 // 破棄後だと例外
final l10n = AppLocalizations.of(context)!; // await をまたいで context 参照

// 修正後: await の前に取っておく / ガードを入れる
final l10n = AppLocalizations.of(context)!; // await の前に確定
await databaseService.importData(file);
if (!mounted) return;
setState(() { /* ... */ });

通常操作ではめったに踏まないので、自分でテストしていても気づきにくいタイプでした。

2. テストがそもそも何もテストしていなかった

テンプレートのまま残っていた widget_test.dart が、存在しない MyApp を参照していてコンパイルすら通らない状態でした(=実質テストゼロ)。これをモデルと Hive 永続化の実テスト 12 本に置き換えてもらいました。あわせて push/PR で analyze とテストを回す CI も追加しました。

3. analyzer 警告 47 件をゼロに

withOpacity 非推奨 → withValues への置換 27 箇所、非推奨の ColorScheme API、RadioListTile から RadioGroup への移行など、放置していた警告 47 件を 0 にしました。ついでに主要依存も最新メジャーへ更新しています。

個人開発者としての所感

率直に言うと、Fable が見つけたのは「派手な新機能」ではなく、自分ひとりだと体系的にチェックしない種類のバグ でした。

  • async gap の mounted → タイミング次第でしか落ちない
  • 壊れたテスト → 「テストがある」つもりで実は無い
  • 非推奨 API の山 → 動いてはいるが、いつか壊れる

機能を書くところまでは自分でもできますが、こういう「条件が揃ったときだけ出る」「テストの実効性」「非推奨 API の棚卸し」あたりは、レビュー専任がいないと抜けがちです。そこを一度しっかり通してくれたという意味で、個人開発の品質チェックには十分有用でした。

一方で限界もありました。広告表示やエクスポート/インポート共有のような 実機 UI 依存の挙動 は CI では確認できず、最後は自分で実機チェックが必要です。アプリの企画・設計・実機テスト・ストア申請・最終的なコードレビューは引き続き自分の仕事、という分担感です。

公開 3 日で止まってしまったのは残念ですが、止まる前にこの一回を通せたのは記録として残しておく価値があると思っています。


日記アプリ「Daily Diary」は Google Play で公開中です。よかったら触ってみてください。

📱 https://play.google.com/store/apps/details?id=com.diary.daily

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?