1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【英語力0 × Flutter未経験】元バリバリの開発者(47歳)が、AIとペアプロして4ヶ月泥臭く戦い、世界向けアプリを個人開発した全記録

Posted at

はじめに:20年選手でも、名前は忘れる

はじめまして。1999年に都内のソフトハウスに入社し、約20年間、業務系システムの受託開発(要件定義からプログラミング、PMまで)にどっぷりと浸かってきました。
PowerBuilderやVB.NET、Oracle DBと格闘する日々を経て、2020年に現在の会社へ転職。現在は社内SEとして、少し落ち着いた視点でITと関わっている47歳です。

NameMemory Home Screen

そんなベテランの私ですが、40代半ばからある能力が急激に衰えました。
「人の名前が、思い出せない」

廊下ですれ違った役員、久々に会った他部署のキーマン、趣味のサークルで一緒になった人……。「顔はわかるのに名前が出てこない」という冷や汗をかく瞬間が、劇的に増えたのです。

「自分用の対策アプリが欲しい」
2025年8月、ふとそう思い立ちました。しかし、私は長年業務システム(Windows系)を作ってきましたが、流行りのモバイルアプリ(Flutter)は未経験。さらに言えば、英語は全く喋れません。

手元にある武器は2つだけ。

  1. 20年間の受託開発で培った「設計力(DB設計・要件定義)」
  2. 最強の相棒「Cursor(AI)」

この記事は、開発の現場を離れて久しい47歳のオジサンSEが、「往年の経験」と「AI」を掛け合わせ、OSの差異や通知機能の不具合に4ヶ月間七転八倒しながら、たった一人でiOS/Androidアプリを開発し、無謀にも海外のProduct Huntにローンチした挑戦と技術の全記録です。


1. Why:なぜ作ったのか(既存への違和感)

世の中には「名刺管理アプリ」や「連絡先アプリ」が溢れていますが、SE視点で見ると、どうしても自分のニーズに合いませんでした。

  1. 高機能すぎる(UXへの不満):
    これが最大の理由です。既存アプリはOCRで文字を読み取ったり、スキャンしたりと機能が多すぎます。「顔写真」と「名前」、そして「ちょっとしたメモ」がサッと見られればいい。多機能さは、とっさの時のノイズでした。
  2. ビジネスすぎる(ターゲットの乖離):
    覚えたいのは、営業先の「顧客」だけではありません。ご近所の「田中さん」や、親戚の子供、趣味のサークルの仲間も覚えたい。「CRM(顧客管理)ツール」は大げさすぎて、日常使いには馴染みませんでした。
  3. クラウドに上げたくない(セキュリティ):
    「この人はお酒が苦手」「来月お子さんが生まれる」といった、**人間関係の機微(オフレコ情報)**こそメモしたい。でも、それをクラウド(他社のサーバー)に置くのは、セキュリティ的にも心理的にも抵抗がありました。

「完全オフラインで、自分だけの秘密のメモ帳」
このコンセプト(要件定義)をメモ書きしたのがスタート地点でした。

Registration Screen

2. How:ベテラン流「AI駆動開発」の極意

使用技術は Flutter (Dart) です。クロスプラットフォームでiOS/Android両対応させるためです。
しかし、私はDartを一行も書けません。

ここで採用したのは、**「AIに丸投げする」のではなく、「AIとペアプログラミングをする」**というスタイルです。

「上流工程(人間)× 下流工程(AI)」の役割分担

私がAI(Cursor)に投げた指示は、コードの書き方ではなく、かつて得意としていた**「仕様と設計」**です。

  • × 悪い指示: 「いい感じの一覧画面を作って」
  • ○ 実際の指示: 「SQLiteを使用して、Userテーブル(id, name, photo_path, note)からデータを取得し、ListViewで表示したい。画像がない場合はデフォルトのアイコンを表示すること。コードはMVVMアーキテクチャを意識して分割して。」

ここでの気づきは、「枯れた技術知識(正規化、トランザクション、アーキテクチャ)」は、AI時代でも最強の武器になるということでした。
構文(Syntax)はAIの方が詳しいですが、**「何を作るべきか(Context)」**を知っているのは、現場で揉まれてきた私だけです。

技術スタック

AIと共に選定した、堅牢性を重視した構成です。バージョン依存の問題を避けるため、安定版を使用しています。

  • FW: Flutter (Dart)
  • Architecture: MVC + Provider
  • Database: sqflite + sqflite_sqlcipher (暗号化必須)
  • Notification: flutter_local_notifications
  • Security: flutter_secure_storage, local_auth
  • ML: google_mlkit_face_detection (オンデバイス顔検出)

3. Struggle:ド素人が直面した「4ヶ月の泥沼」

「AIがあれば、未経験でも2〜3ヶ月くらいで終わるかな」
そんな想定でスタートしましたが、実際にはリリースまで約4ヶ月かかりました。
業務アプリ畑の私が特に苦しんだのは、スマホ特有の**「OS間の仕様差異」「バックグラウンド処理」**という鬼門でした。

① 通知機能(リマインダー)の地獄

「毎日決まった時間に復習の通知を送る」。
Windowsアプリならタスクスケジューラで一発ですが、スマホでは最大の難関でした。

  • Androidの壁:
    Android 12以降、正確な時間に通知を出すには SCHEDULE_EXACT_ALARM 権限が必要です。さらにAndroid 13からは POST_NOTIFICATIONS 権限も必要。これらが端末の設定やバッテリー最適化機能によって容赦なくブロックされます。
  • タイムゾーンの壁:
    海外に行っても現地時間で通知したい。flutter_timezonetimezone パッケージを組み合わせ、ローカル通知のスケジュール計算ロジックを組むのに数週間を費やしました。
Quiz Screen

AIは「一般的なコード」は書けますが、「Androidの特定機種で通知が来ない」といった環境依存のデバッグには弱いです。
AIは実機を持っていません。「このコードなら動くはず」という提案はくれますが、実際に実機で動かして、ログを見て、「AQUOSだと動かない」「Pixelだと動く」という事実を突き止め、仮説を立て直す。この泥臭いラリーだけは、人間が汗をかくしかありませんでした。

② アプリロック機能とライフサイクル

「プライバシー重視」なので、アプリ起動時に生体認証(Face ID/指紋)を求めたかったのですが、ここでもハマりました。

  • 課題: アプリをバックグラウンドにして戻ってきた時、即座にロック画面を出したい。
  • 問題: iOSとAndroidでライフサイクルの挙動が微妙に違う。さらに、生体認証ダイアログが出ている最中にバックグラウンドに行くと、復帰時に認証が二重に走る(Race Condition)。

これを解決するために、LockServiceLockGate という専用のクラスを設計し、状態遷移を厳密に管理する必要がありました。ここでも、かつての「状態遷移設計」の経験が試されました。


4. Re-Discovery:システム開発は、面白い。

想定以上の苦労の連続でしたが、不思議と辛くはありませんでした。むしろ、**「改めて、システム開発は面白い」**と痛感した4ヶ月でした。

日常のテレビもほとんど見なくなり、好きだったゲームも一切やりませんでした。
本業の仕事が終わって帰宅し、PCに向かう。エラーが出る。AIと相談する。解決して動く。
そのサイクルが楽しくて、寝不足気味でも全く苦になりませんでした。「とにかく早く先に進めたい」「動くものを見たい」という一心でした。

あまりに毎晩PCにかじりついてブツブツ言っているので、妻には若干嫌な顔をされましたが……(苦笑)。
それでも、20年前、新人の頃に感じていた**「モノづくりの没入感」**を、47歳になった今、AIという新しい相棒と共に再体験できた喜びは何にも代えがたいものでした。


5. Launch:英語力0で世界へ挑む(Product Hunt)

4ヶ月の熱狂の末、2025年12月18日、ついにアプリ『NameMemory』が完成しました。
せっかくなら世界中に公開しようと、Product Hunt(世界中のプロダクトが集まる投稿サイト)へのローンチを決意しました。

言語の壁を超えるハック(16言語対応)

英語力はゼロなので、ここでも徹底的にAIを使いました。
アプリ内の文言、ストアの掲載情報、Product Huntへの投稿文。
日本語で書いた熱い思いを、AIに**16言語(ドイツ語、ヒンディー語、中国語など)**へ翻訳させ、ひたすらGoogle Play ConsoleとApp Store Connectにコピペしました。

ターゲットを**「ビジネスマン」だけでなく「物忘れに悩む世界中の中高年」**に設定し、ASO(アプリストア最適化)も泥臭くやり切りました。

結果:世界の壁と、小さな爪痕

Product Hunt Result

リリース当日の結果は、92位
現実は甘くありませんでした。世界の猛者たちが集まるProduct Huntでは、無名の個人開発アプリは一瞬で埋もれます。大量の英語スパムメールの洗礼も受けました。

しかし、「0」ではありませんでした。
数人の海外ユーザーがUpvoteしてくれ、ダウンロードも少しずつ発生し始めました。
「日本のオジサンが作ったツールが、地球の裏側で動いている」
その事実だけで、4ヶ月の没入の日々が報われる思いでした。


6. 結論:40代エンジニアこそ、今すぐAIと走れ

今回の開発を通じて得た最大の収穫は、アプリそのものよりも**「自信」**です。

私たちベテランは、「最新の技術スタック(Flutterなど)」や「英語」に恐怖心を抱きがちです。
しかし、**AIという「通訳」兼「凄腕プログラマー」を味方につければ、私たちが20年かけて培ってきた「業務知識」「設計力」「忍耐力」**は、最強の武器に変わります。

「英語ができないから」「技術がわからないから」
そんな言い訳は、もう通用しなくなりました。いや、そんな言い訳をしなくて済む自由を、私たちは手に入れたのです。

最後に

私が作ったアプリ『NameMemory』は、まだ産声を上げたばかりの小さなツールです。
しかし、私と同じように「最近、人の名前が出てこなくて焦る……」という同世代の方には、きっと刺さるはずです。

完全オフラインで、誰にもデータを見られない安心感。
もしよかったら、私の「47歳の挑戦」の結晶を触ってみてください。

👇 ダウンロードはこちら

そして、もしこのアプリが少しでも役に立ったら、ストアで星をつけてくれると、日本のオジサン開発者がPCの前で小躍りして喜びます。(妻の機嫌も直るかもしれません)

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?