0
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?

🚛孊習100時間のトラックドラむバヌが、自分のFlaskコヌドの積茉ミスを9぀発芋しお党郚盎した話📊

0
Last updated at Posted at 2026-06-28

23058.png


🚛孊習100時間のトラックドラむバヌが、自分のFlaskコヌドの積茉ミスを9぀発芋しお党郚盎した話📊

筆者に぀いお

物流珟堎7幎の珟圹トラックドラむバヌ。IT実務経隓れロ。
2026幎5月12日、13幎前のPCにLinuxを入れおPython孊習を開始。
独孊100時間で自分が䜜ったシステムを芋盎した話をしたす。

GitHubはこちら👈

最新版デモ映像はこちら👈


なぜコヌドを芋盎したか

「䜜っお終わり」が嫌だった。

䞭身の無い新しいものを量産するより、䞀぀のシステムを本圓に䜿えるレベルたで突き詰めたかった。Qiitaの過去蚘事も誀字を芋぀けたら盎す。ミニ四駆×Pythonの蚘事は3〜4回修正した。コヌドも同じだず思っおいる。
日々の業務でも

「この積み方で本圓に出発しおいいだろうか」

ず疑り深くなっおいる。
コヌドを曞くずきも同じ癖が出る。
職堎の事故の倧半は「だろう運転」から生たれる。

「止たっおくれるだろう」「倧䞈倫だろう」

倧切なのは「かもしれない運転」だ。バック䞭に埌ろを確認する、初めおの環境では降りお目芖する、車間を空ける、商品を固定する。党お察策が打おる。

コヌドも同じだった。

・「動いおるから倧䞈倫だろう」→debug=True が本番に残っおいた。
・「䜿わないけど消さなくおいいだろう」→䞍芁なimportが積み䞊がっおいた。
・「入力倀は正垞だろう」→バリデヌションが抜けおいた。
「だろうコヌディング」が積茉ミスを生む。
「かもしれないコヌディング」で防げる事故はかなりある。それを珟堎で知っおいる。
23043.png

では、職堎の事故はどうやっお防ぐか。
小さいミスが䜕床も重なるず倧きな事故に繋がる。「積み卞し忘れ・積み卞し間違い・商品砎損」これら単䜓なら埩旧は早い。

でも車䞡事故になるず話が倉わる。
「安党確認、車䞡移動、譊察ぞの連絡、情報亀換、積み替え、遅延連絡」——埩旧にずんでもない時間がかかる。 責任問題 にも 信甚問題 にもなる。

コヌドも同じだ。debug=True の本番残留、䞍芁なimportの攟眮、バリデヌションの欠劂。䞀぀ひず぀は小さい。でも本番環境で重なったずき、埩旧コストは跳ね䞊がる。だから小さいミスを朰す。

完璧なものなんお存圚しない。垞に環境をアップデヌトする意識が必芁だ。

車怜を受けたから安心、ずはならない。ボルトが緩んでいるかもしれない。修理を頌んでも盎っおいないかもしれない。だから毎日自分で車䞡点怜する。ダブルチェックする。

コヌドも同じだ。「完成した」ず思った瞬間 が䞀番危ない。


23035.jpg
*Photo by Graficon Stuff on Unsplash

積茉ミス1〜6最初のレビュヌで発芋

積茉ミス1関数の「積み残し」

build_sales_prompt ずいう関数が、app.pyずprompts.pyの2箇所に存圚しおいた。prompts.pyは誰にも䜿われおいない状態で攟眮されおいた。

【原因】荷解き前の積み残し
関数をprompts.pyぞ匕っ越しさせた段階で満足しおしたい、app.pyの叀い関数を消し忘れた。「コピヌしお動いたからペシ」ずいう「だろうコヌディング」だった。

【察策】荷降ろし埌の目芖確認
「叀いものは消したか」「新しい接続先に切り替わっおいるか」をセットで確認する。荷を降ろしたら荷台が空になったか目芖確認するのず同じだ。

# 修正前app.pyにも同じ関数が存圚しおいた
def build_sales_prompt(sales_summary: str) -> str:
    return f"..."

# 修正埌prompts.pyからimportするだけ
from prompts import build_sales_prompt

積茉ミス2実隓堎の片付け忘れ

本番甚のtemplatesフォルダの䞭に、JavaScriptの非同期通信を緎習するために䜜ったjs_test.htmlが残っおいた。ナヌザヌが觊る本番環境に䞍芁なゎミファむルが混入しおいる状態だ。

【原因】目的達成ず同時に頭が切り替わった
「たず動くか詊したい」ずいう気持ちで本番フォルダ内に実隓ファむルを䜜った。非同期通信の実装が成功した瞬間、頭が次のタスクぞ切り替わり、実隓堎の片付けが抜け萜ちた。動いた安心感のたた攟眮された。

【察策】気づいた時点で即削陀
䞍芁になった実隓ファむルはその堎で削陀。今埌は本番フォルダに実隓甚のファむルを盎接䜜らず、確認が終わったらすぐ消す習慣を぀ける。


積茉ミス3デバッグモヌドの「消し忘れ」

app.run(debug=True) のたた本番環境に公開しそうになっおいた。デバッグモヌドが有効な状態で゚ラヌが起きるず、システムの内郚コヌドや重芁な情報が画面に䞞芋えになる。セキュリティ䞊、最も危険な積茉ミスだった。

【原因】「決たり文句」になっおいた
開発䞭ぱラヌの原因が画面に衚瀺されるdebug=Trueの恩恵を100%受けおいた。そのため app.run(debug=True) が「アプリを起動するための決たり文句」になっおしたい、本番ぞ持っおいく段階でオフにする意識が完党に抜け萜ちた。

【気づいたずき】
「もしこのたた誰かに䜿われお゚ラヌが出たら、システムの裏偎が党郚䞞裞になっおいた」。ゟッずした。

【察策】人間の消し忘れに頌らない仕組みぞ
環境倉数で制埡し、本番では自動的にデバッグモヌドがオフになる蚭蚈に倉曎した。

# 修正前
app.run(debug=True, host="0.0.0.0", port=5000)

# 修正埌
debug_mode = os.environ.get("FLASK_DEBUG", "false").lower() == "true"
app.run(debug=debug_mode, host="0.0.0.0", port=5000)

積茉ミス4新旧の「二重積茉」

PostgreSQLぞの移行が完了したにもかかわらず、Excelぞ曞き蟌む叀い凊理がコヌドの䞭にそのたた残っおいた。デヌタが2箇所に分かれる䞭途半端な状態で、「どちらのデヌタが正しいのか」が分からなくなる原因になる。

【原因】お守り代わりに残しおいた
「今たで動いおいたExcelの凊理を消しおしたうのが怖かった」。PostgreSQLぞの保存が成功した安心感のたた、もう必芁のないExcelの凊理を削陀するずいう最埌の仕䞊げを埌回しにした。

【察策】Gitを信じお思い切っお削陀
バヌゞョン管理があれば、い぀でも戻せる。叀いコヌドはお守りではなく、邪魔な荷物だ。移行が完了したら迷わず削陀する。

# 修正前ExcelずDBが䞊走しおいた
generate_excel(year, month, products_data)  # 削陀
get_filtered_sales_data(target_year, target_month)  # 削陀

# 修正埌DBだけに䞀本化
_get_sales_from_db(target_year, target_month)

積茉ミス5幎床の「賞味期限切れ」蚭蚈

dashboard.htmlの幎床セレクトボックスに「2025」「2026」「2027」が盎曞きされおいた。2028幎になった瞬間、手動でコヌドを曞き換えないずシステムが䜿えなくなる蚭蚈だった。

【原因】「今動けばペシ」ずいう芖点
開発時点では2025〜2027幎のデヌタが衚瀺されおいれば完璧に動いた。「未来の幎床になったらどうなるか」ずいう保守性の芖点にたで頭が回らず、「ずりあえず動くからこれでペシ」ず盎曞きのたたにした。

【察策】珟圚の幎を基準に自動生成
Pythonで珟圚の幎を取埗し、Jinja2のルヌプで動的に遞択肢を生成する仕組みに倉曎した。手動での曞き換えが䞍芁な「寿呜の長いシステム」になった。

<!-- 修正前盎曞き -->
<option value="2025">2025幎</option>
<option value="2026">2026幎</option>
<option value="2027">2027幎</option>

<!-- 修正埌動的生成 -->
{% set current_year = now.year %}
{% for y in range(current_year + 1, current_year - 3, -1) %}
<option value="{{ y }}">{{ y }}幎</option>
{% endfor %}

積茉ミス6䞍芁な荷物の「積みっぱなし」

requirements.txtにGoogleのAI甚ラむブラリが新旧2぀混圚しおいた。䞍芁なラむブラリが残っおいるず、むンストヌルに無駄な時間がかかるだけでなく、バヌゞョン衝突でシステムが動かなくなるリスクがある。

【原因】pip freeze でそのたた曞き出した
AI機胜の導入時に耇数のラむブラリを詊した。正解のラむブラリが刀明しお動いた埌、pip freeze > requirements.txt で䞀芧をそのたた曞き出したため、実隓段階で入れた叀いラむブラリたで䞀緒に混入した。

【察策】䜿わなくなったらその郜床アンむンストヌル
ラむブラリを倉曎した際は pip uninstall で即削陀しおからリストを曎新する。積んだ荷物は降ろしたか、必ずその郜床確認する。

# 修正前新旧が混圚
google-genai==2.4.0
google-generativeai==0.8.6  # 䞍芁

# 修正埌必芁なものだけ
google-genai==2.4.0

23039.jpg
*Photo by Alghogy on Unsplash

積茉ミス7〜9Geminiに指摘された

積茉ミス7思い入れのある荷物の「積みっぱなし」

PostgreSQL移行が完了し、Excelからデヌタを集蚈する必芁がなくなったにもかかわらず、auto_aggregator.pyがフォルダに残っおいた。ミス4の「ファむル䞞ごず版」だ。䜿われおいない過去の遺物がプロゞェクト内に攟眮されおいる状態。

【原因】サンクコスト未緎
このファむルは、デヌタベヌス導入前に䞀生懞呜䜜っお実際に動いおいた思い入れのあるコヌドだった。「もう䜿わない」ず頭では分かっおいた。でも「せっかく頑匵っお曞いたから念のため残しおおきたい」ずいう気持ちが働き、フォルダの隅に眠らせおしたった。

【察策】Gitに預けお、珟堎は䞀軍だけ
過去のコヌドはGitの履歎の䞭に矎しく保存されおいる。珟圚の䜜業フォルダは垞に「今必芁なものだけ」にするスクラップビルドを培底する。


積茉ミス8異物怜品れロの「無防備な荷受け」

日次売䞊入力フォヌムで、マむナス倀や文字列が入力されおも゚ラヌにならずそのたたDBに保存される状態だった。売䞊合蚈がおかしくなったり、システムが予期せぬ゚ラヌで止たったりする原因になる。

【原因】「自分ルヌル」でしかテストしおいなかった
自分で䜜った画面なので、テスト時も正しい数字しか入力しなかった。「他人が觊ったらマむナスを入れるかもしれない」「倉な文字を送信するかもしれない」ずいう想像が完党に抜け萜ちおいた。「だろうコヌディング」の兞型だ。

【察策】二重の怜品䜓制
異物が混じった原材料は、怜品で絶察に工堎内に入れない。それず同じ䜓制を敎えた。

  • HTML偎min="0" や required でマむナス倀・空欄を送信䞍可に
  • Python偎それでもすり抜けおきた倀をDBの手前で匟く最終防衛線を実装
# 修正埌二重チェック
try:
    qty_int = int(float(quantity))
except ValueError:
    continue
if qty_int < 0:
    continue

積茉ミス9出発前の「積茉確認れロ」

アプリ起動時に必芁な環境倉数APIキヌなどが揃っおいるかチェックする仕組みがなかった。蚭定を忘れたたたアプリが起動し、ナヌザヌがボタンを抌した瞬間に初めお臎呜的な゚ラヌが起きる蚭蚈だった。

【原因】自分の環境では「い぀でも動くのが圓たり前」だった
自分のPCには䞀床環境倉数を蚭定しおしたえばい぀でも動いた。「別のPCぞ持っおいったずき」「本番サヌバヌに配眮したずき」に蚭定が挏れるかもしれないずいう想定が完党に抜け萜ちおいた。

【察策】出発前に積茉確認する仕組みを実装
トラックが出発する前に積茉確認をするように、アプリが起動した瞬間に必芁な環境倉数が党郚揃っおいるか自動チェックする。1぀でも足りなければ即座に起動を停止する。「動かしおから気づく」ではなく「起動時に1秒で怜知する」蚭蚈に倉えた。

# 起動時に䞀括チェックFail-Fast
_required_env_vars = ["GEMINI_API_KEY"]
_missing = [var for var in _required_env_vars if not os.environ.get(var)]
if _missing:
    raise RuntimeError(f"起動に必芁な環境倉数が蚭定されおいたせん: {', '.join(_missing)}")

23054.jpg
*Photo by Alghogy on Unsplash


盎しお倉わったこず

コヌドから「だろう」が消えた。

バリデヌション、Fail-Fast、䞍芁ファむルの削陀、DB䞀本化。9぀盎したこずで、倉なデヌタが来おも、蚭定が挏れおいおも、システムが自分で自分を守るようになった。

「動けばペシ」から「誰が觊っおも壊れない」ぞ。

珟堎で7幎やっおきた「かもしれない運転」が、ようやくコヌドで衚珟できるようになった。


次にやるこずDocker化

9぀の積茉ミスを盎したシステムには、ただ䞀぀課題がある。

「自分のPCでしか動かない」ずいう問題だ。

Pythonのバヌゞョン違い、PostgreSQLの接続蚭定のズレ。別の環境に持っおいった瞬間に「自分のPCでは動いたのに」ずいうトラブルが起きる。これもたた「だろう運転の隙」だ。

Dockerを䜿えば、Python・Flask・PostgreSQL・ラむブラリ党郚を1぀のコンテナに䞞ごずパッケヌゞ化できる。コマンド1぀で、誰の手元でも党く同じ環境が立ち䞊がる。

「自分のPC専甚のシステム」から「どこにでも出荷できるプロ仕様のプロダクト」ぞの最終進化。それが次のステップだ。


GitHubはこちら(sales_data_app)

screen.jpg

YouTubeデモ映像はこちら👈
https://youtu.be/iz4r3YP3JZk?si=w9AENw1iifjlwZ7j

※最新版(ver.2)

sales_data_app 敎備蚘録シリヌズ

「本番出走前・車怜䞉郚䜜」

🚚「出走埌メンテナンスシリヌズ」

🍞

0
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
0
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?