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?

.envを保存し忘れてログインできなかった話 — Cursor初心者の「keep」恐怖と数週間の空白

1
Last updated at Posted at 2026-07-12

はじめに

2025年の冬、初めてエディターを入れて Cursor を使い始めたときの話です(笑)

ポートフォリオ用の Flask アプリを Cursor の AI エージェントと一緒に作っていたのですが、ログイン/セッションまわりがいつまでも通らない。
見た目は「DB や認証が壊れている」に近く、タイトルどおりログイン周りでハマっていました。
使っていたのは Supabase(DB・Auth)+ Google 認証 + Render(デプロイ)の3つ組み。キーやリダイレクト URL を相互に合わせる必要があり、どれか一つでもズレるとログインできない構成でした。
ぶっちゃけ、年末年始をこれで潰しました。お正月の雑煮より .env の方が頭に残っているレベルです U・ェ・U

原因をあれこれ調べた末に判明したのは、コードのバグでもダッシュボードの設定ミスでもなく……

.env のうち、Flask/Cookie/テスト用 UUID 側だけ保存していなかった という、地味すぎるやつでした 。。。(lll __ __)バタッ

同じ轍を踏みそうな人の参考になれば幸いです。

想定読者

  • Cursor や AI コーディングを始めたばかりで、.env の扱いがまだ曖昧な方
  • 「keep」を押すのが怖くて、変更を確定できずに迷子になった経験がある方
  • 接続はできそうなのに、ログイン/セッション/JWT/Cookie でハマっている方
  • ローカルと本番(Render など)で症状がズレて、犯人探しが止まらない方
  • 非エンジニアから開発を始めたばかりで、保存のタイミングがまだ感覚として身についていない方

私の属性

  • 30代女性・事務職
  • 2025年冬に Cursor を入れて、ポートフォリオ用アプリの開発を開始
  • 構成は Flask(JWT・Cookie)+ Supabase + Google 認証 + Render。コードは Cursor、.env の値は 自分で手動コピペ
  • 当時は Git も .env も「なんとなく知ってる」レベル

何が起きたか

流れはシンプルです。ただし、気づくまでが地獄でした。

  1. Cursor のエージェントに Supabase 連携と Google ログインの実装をお願いする
  2. Supabase・Google Cloud・Render のダッシュボードからキーをコピーし、自分で .env に貼り付ける
  3. その前から DB をいろいろ弄っていたので、「また DB 側かな?」という先入観があった
  4. ローカルや Render 上で接続・ログインを試す
  5. 認証エラー(´・ω・`)— ただし「DB に全く繋がらない」というより、ログイン/セッションが通らない感じ
  6. 「Supabase のキーが間違ってる?」「Google の Client ID?」「Render の環境変数?」とあちこちを延々と疑う
  7. ローカルでは通るのに Render ではダメ、など 環境ごとに症状がズレて、余計に分からなくなる
  8. 何度やってもダメ — 年末年始もこの繰り返し
  9. たまたま別の場所で Web 版 Copilot に相談したら、「.env 保存した?」と言われる
  10. エディターのタブを見る — .env の横に ●(未保存マーク)
  11. 震える手で Ctrl+S
  12. 再テスト — 一発で認証成功 ((_๑òωó)_バァン

接続できそうなのにログインだけ落ちるときは、コードや3サービスより先に タブの ● を疑うと早いです。特に SECRET_KEY や COOKIE_* のような Flask 側の行です。

オチを正確に書くと、こうです。

  • ディスク上には、すでに Supabase 系・DATABASE_URL・APP_BASE_URL が入っていた
  • 未保存バッファに残っていたのは、SECRET_KEY / AUTH_DEBUG / COOKIE_SECURE / COOKIE_SAMESITE / テスト用 UUID あたりだけ
  • アプリはディスク上の(不完全な).env を読んでいたので、見た目は「認証全体が壊れている」に見えた

数週間ハマっていたのに、保存した瞬間に通った。
あのときの衝撃は今でも忘れられません。今まで AI とアチコチコード修正に画面確認と動いて来たのに .env タブを開いて、保存ボタン一発だったんですよ。*゚Д゚)ドキドキ から ((_๑òωó)_バァン への落差、でかすぎました。

いつからコードや設定が正しかったかは分かりませんが、とにかく 保存 が正解でした m(_ _)m

認証は犯人探しが難しい

これが問題が長引いたもう一つの大きな理由です。

今回の構成は、Flask アプリが .env を読み、そのうえで Supabase・Google・Render がダッシュボード同士でキーや URL を相互に合わせる形です。
コードは Cursor が書いてくれても、各サービスの設定を揃えるのは自分の仕事です。

見た目は「3サービス連携のどこかがズレている」。実体は、図の点線側(Flask/Cookie まわり)だけでした。

疑ってた場所 心の声
Supabase の API キー / URL コピペミスしてない? anon key と service role を間違えてない?
Supabase Auth の設定 リダイレクト URL は合ってる? RLS が厳しすぎ?
Google 認証(OAuth) Client ID / Secret は本番用? 承認済みドメインに Render の URL 入れた?
Render の環境変数 ダッシュボード側の値とローカルの .env は揃ってる?
DB そのもの さっきまで弄っていたし、また壊した?
Cursor のコード さっき keep したやつ、コールバック URL 壊してない?
.env の中身 手動で貼ったつもりなのに、どこか1文字違う?

3つのサービス × ローカルと Render の2環境で、「どこが壊れてるか」が一発では分からない。
しかもローカルと Render で 可能な範囲が違うので、「こっちでは通るのに、あっちではダメ」が重なると、初心者には本当に区別がつきません。

実際には .env の一部未保存という エディター運用の問題 だったのに、見た目は 3サービス連携全体の不具合 に見えていたんです。
だから年末年始、家族がゆっくりしている横で、私だけ Supabase・Google Cloud Console・Render の3タブを行ったり来たりしていました ((( _( 'ω') コソコソ

ローカルと Render で症状がズレるのは珍しくありません。Cookie の Secure / SameSite や、本番だけ入っている環境変数の差が効くことがあります。切り分けの途中で「片方だけ通る」が出ても、すぐ「片方の設定が正解」と決めつけない方が安全です。

なぜ .env を保存しなかったのか

ここが本題です。理由は4つ重なっていました。

1. 「うまくいくまで keep しないで」と言われていた

AI エージェントでの実装は、最初の頃 失敗の連続 でした。
そのとき周りから、こんなアドバイスがありました。

  • 動くまで変更を確定しない
  • うまくいかない diff は keep しない
  • いったん様子を見てから採用する

正しい話なんですよね。でも私の頭の中では、こう変換されていました。

keep = 変更を確定する = もう戻せないかも

だから「認証が通るまで keep しない」=「.env も含めて、全部確定しない」になっていたんです ((( _( 'ω') コソコソ

keep はエージェントの diff を採用する操作、Ctrl+S はディスクへ書き込む操作です。別物なのに、当時の私はひとまとめにしていました。

2. 認証が通らないから、いつまでも keep も保存もしなかった

悪循環が発生しました。

失敗が続くほど keep できない。keep しないから失敗が続く。

ループの入口と出口が同じ場所にあって、数週間ひねり出せませんでした U・ェ・U

3. keep 連打で壊滅した前科があった

その前に、別のお試しで keep を押しまくって大惨事 を起こした経験があります。

  • エージェントの提案を次々 keep
  • 気づいたらプロジェクト全体が想定と別物
  • 当時は Git もマメにしていなかった⇒欲しい位置に戻せない
  • 元に戻す手段がなく、お蔵入り

このトラウマが強くて、「keep は最後の一押し」というより 「封印ボタン」 扱いになっていたのも大きいです(笑)

ヾノ。ÒдÓ)ノシ バンバン!! と keep して、プロジェクトがヾノ。ÒдÓ)ノシ バンバン!! と崩壊していく感じです。

4. .env だけ保存が必須だと、知らなかった

.env の存在自体は、Cursor に 推奨フォルダ構成を提案させたとき にファイルごと作ってもらった、という程度の認識でした。
「機密情報はここに書くやつだな」くらいは分かっていたけど、それ以上は曖昧だったんです(笑)

でも 「他のファイルと違って、明示的に保存しないと反映されない」 という感覚が、当時の私にはありませんでした。

  • コードファイルは Cursor で keep したあと保存した記憶がある
  • .env は 自分で貼り付けた から「もう書いてあるはず」
  • タブの ● マークの意味を、.env に対して正しく解釈できていなかった
  • 接続系(Supabase など)は保存済みに見えたので、残りも大丈夫だと思い込んでいた

「なんとなく必要なファイル」は分かっていたのに、運用としての保存までは届いていなかった、というのが正直なところです |ω・*)

ハマり続けたあとでネットを漁り、ようやく「ああ、こういうものか」と腑に落ちた記事がいくつかあります(次の 参考リンク 参照)。知っていれば年末年始は救えたかも、と思うとちょっと切ないです(笑)

参考リンク(.env って何?)

当時の私みたいに「ファイルはあるけど、中身の意味がぼんやり」な人向けに、説明がわかりやすかった記事をまとめました。全部読む必要はなく、困ったときの辞書代わりでどうぞ。

記事 おすすめポイント
【ぼうけんのしょ】.envファイルってなに?調べてみた! #初心者 初心者目線。「設定メモ」「配達アプリの届け先」のたとえが分かりやすい
APIキーを安全に管理しよう!.envファイル入門 | ふわふわコード KEY=VALUE の書き方、.gitignore、.env.example まで一通り。AI にコード書かせるときの伝え方もある
.env | PC・IT用語集(のべろぐ) 用語辞典形式。環境変数との違いや「なぜコードに直書きしないか」が整理されている

個人的には、Qiita の「ぼうけんのしょ」記事の 「アプリに渡す設定メモ」 というたとえが、いちばんしっくりきました。
「保存したのに通らない」ときは、まずそのメモが ちゃんと届いているか(=ファイルを保存したか)を疑う、と理解すると腹落ちします ψ(`∇´)ψ

気づいてからやっていること

今は次の3つだけ、意識するようにしています。

やること 理由
.env を触ったら すぐ Ctrl+S 未保存のままログインテストしない
Git を先に使用 する keep 失敗しても戻れる道を作る
keep と保存を分けて考える keep は diff の採用、保存はディスクへの書き込み。別操作

まとめ

  • .env は書いたつもりと保存済みは別物。ログインが通らないときは、まずタブの ● を見る
  • 接続系だけ揃っていても、SECRET_KEY や COOKIE_* が未保存だと認証は落ちる
  • Supabase + Google 認証 + Render のようにサービスが重なると、犯人探しが難しい。地味な原因ほど見落としやすい
  • ローカルと Render で症状がズレると、なお迷う。片方だけ通っても決めつけない
  • 認証失敗 → keep しない → 保存しない のループに入りやすい。特に AI 実装の初心者期は注意
  • keep 恐怖は Git が効く。壊しても戻れると、だいぶ楽になる
  • .env の存在を知っていることと、毎回保存する習慣は別スキル
  • 意味がぼんやりなら、上の 参考リンク で .env の役割から復習する

同じ轍を踏んでいる人がいたら、タブを見てください。
コードを疑う前に、保存ボタンを疑ってください (ノ´∀`*)

年末年始を .env に捧げた私より。

m(_ _)m 読んでくれてありがとうございました (*´▽`*)

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?