AIで知識ゼロからアプリ開発1000時間 #13

#13:一見シンプルな機能に、沼る。〜フラグ保存地獄と10時間の死闘〜

【ざっくり要約】

「朝礼ボタン押したら、その日いっぺん“朝活”タスクが使えるようになる」──ただそれだけだと思ってだ。でも、やってみだら想像以上のドロ沼。localStorage への保存、useEffect の無限ループ、非同期の罠…。10時間の戦いの末に、ようやく見えた真実。ChatGPTとの果てしないやりとりを経て、自分で原因掘り出す力を手に入れた記録。

…と、その前によ、これが1000時間かげでようやぐ完成させだアプリの画面だ。知識ゼロのおらが、どんげしてここまで作れるようになったが、みんなさ共有したぐてぇな!

ウェブアプリ版

アンドロイド版

「保存すれば終わり」って思ってだ

やりたがったのは、朝3時〜5時だけ押せる「朝礼ボタン」用意して、押したら isMorningMeetingDone = truelocalStorage に保存するってだけ。

そして、それ読んで朝活タスクのチェックボックスのロック外す、ほんのちょっとの仕組みだはんで。

{
"onMorningMeeting": {
"flag": "true",
"date": "2024-11-22"
}
}

こったら保存して、日付変わったらリセットすればいいべや、って。毎回 localStorage 見ればいいだけの話さ。

……なしてそれで10時間もかかるんず?


useEffect地獄。止まらね無限発火

最初に出てきた敵は、useEffect の止まらね無限トリガー。

「Cleaning up useEffect」「Resetting morning meeting state」「Triggered by morningMeetingDate: Fri Nov 22 2024」──ずーっと続ぐログ。

しかも savedIsMorningMeetingDone がずっと null。保存してないわげでもね。確認すると、ちゃんと保存されでら。

でも、読み込んだ値は null。原因は useEffect の順番とか依存配列とか、非同期の扱いの問題とか、いろいろ複雑に絡んでだ。


次に出で来た、謎のエラー

Uncaught (in promise) Error: A listener indicated an asynchronous response by returning true, but the message channel closed before a response was received

調べでもよぐわがんね。Chrome拡張のせいが?と思ったけど、何止めでもエラー消えね。しかも、処理そのものには支障ないっぽい。もどかしさ全開。


ロジック削って原因を探す日々

もう、一個ずつ潰すしかね。useEffect 減らして、依存配列いじって、try-catch 入れて……それでも null

朝礼ボタン自体はちゃんと動いでるのに、リロードすると何もかもパァ。

でも、何回も繰り返して、ようやぐ気づいた。

保存のとこ、フックの中で非同期に競合してだ。localStorage.setItem() の呼ばさるタイミングが useEffect の複数で競り合ってたんず。


解決した時の気づきと、あなたへ

原因わがってしまえば「なぁんだ」って思う。でも、見えねエラーって「できるはずなのに動がね」っていう、一番しんどいタイプだびょん。

今回学んだのは、こったらこと:

「機能が単純でも、データの流れが複雑なら、それは立派な沼だ」


10時間の価値は、あった

ChatGPTと何十回も往復した。「null になるのはこれかも」「依存配列見直してみて」「保存は即時でも、読み込みタイミングが問題だね」──試して戻してまた試して。

ChatGPTの助けがなかったら、きっと途中で心折れてた。

でも10時間かけて得たのは、ただの機能じゃね。「自分で泥まみれになってでも、原因突き止める力」だった。


だから、あんたへ

「自分でもやれるがも」「ちょっと挑戦してみてぇがも」──もし思ったなら、このチャットボックスから始めてみれ。

答えは、あきらめねで粘った先に、必ずあるはんで。

●次の記事
AIで知識ゼロからアプリ開発1000時間 #14
(👉#1)

●ホームページ
アプリ制作1000時間、そのあと追加800時間かけて作ったHPも見てほしいべさ

ゲームに見えるかもしんねぇけんども、これ、ホームページなんだべ。アプリ制作1000時間、そのあと追加で800時間、めっちゃしんどがったけんども、そのおかげで色んなことできるようになったべさ。これからもどんどん更新していぐがら、応援よろしく頼むべ!

ちなみに、このHPのコンセプトは「日本人の勤勉さを取り入れで、世界中の人たぢの夢の設定がら到達までを総合サポートすること」なんだべさ。学習×運動×睡眠×栄養×時間、この5つの軸を使っていぐど。おらも今、これを実践中だべ!

んでもってな、このHPを通じて夢を叶えだ人たぢと一緒に、いずれ世界をひっくり返すような仕事をしたいと思ってんだべ!ただの応援で終わりじゃねぇ。ここで鍛えた力で、みんなと一緒にとんでもねぇことを仕掛けていぐ。

一緒にでっかい夢、つかまねぇが?

コメント