Kon's DX Lab - Case Study

Day 36|「共有したいだけなのに」──EXE化の深すぎる沼にハマった一日

Published on 2025-05-07

🔬 Case Study Summary
Problem

(ここに課題を記述)

Result

(ここに具体的な成果を記述)


Tech & Process

(ここに採用技術とプロセスを記述) コードを詳しく見る »

こんにちは、こんです🦊

今日は、「Streamlitで作った社内ツールを、誰でもすぐ使えるようにEXE化しよう!」と意気込んで PyInstaller に挑みました。

しかし結論から言うと、まさかの大苦戦。
思ったより遥かに「共有」は難しく、アプリそのものではなく“実行環境”の壁に、何度も叩き落とされることになりました。


🧪 今日の実験:Streamlitアプリの EXE 化(PyInstaller)

やりたかったことは、これだけ。

Pythonをインストールしていない社内メンバーでも
ダブルクリック1つでStreamlitアプリを使えるようにする

しかし、そのためにやったことは以下の通り:

  • pyinstaller で EXE化(--onedir、--windowed)

  • pdfkit, wkhtmltopdf を含めたビルド設定

  • hscode_master.csv や streamlit_app.py のデータ同梱

  • jaraco/text/Lorem ipsum.txt の手動追加

  • importlib.metadata 依存のエラー回避

  • subprocess + streamlit run 起動方式の見直し

❌ 出たエラーの例(一部)

  • ModuleNotFoundError: No module named 'pdfkit'

  • PackageNotFoundError: No package metadata was found for streamlit

  • FileNotFoundError: Lorem ipsum.txt

  • WinError 2: 指定されたファイルが見つかりません


🌀 ぶつかった壁:「使う人のPC」には何もない

EXE化とは「Pythonを知らない人でも使えるようにする魔法」…のはずが、実際には以下の現実に直面しました:

問題点解決の難しさ.exe から streamlit run を呼ぶと Streamlit が見つからない→ Pythonごと内包する必要ありPDF出力には外部 .exe 依存(wkhtmltopdf)→ 配置とパス解決が面倒importlib.metadata にパッケージ情報がない→ pyproject.toml などの工夫が必要PyInstaller後の構成はブラックボックス化→ 1つずつ手作業で解決が必要


💡 今日の学び

「作る」より「使える状態にする」方が100倍大変。

どれだけ良いコードでも、社内で簡単に使ってもらえないなら意味がない。
今回の経験で、そう痛感しました。

そしてもう一つ。

ノンコーダーがツールを使えるようにするには、「仕組みを整える人」が必要。


✅ 現時点の結論:Streamlit Cloudを併用する

あくまで社内利用であれば、以下のようにすみ分けるのが最適かもしれません:

手段メリットデメリットEXE配布ネット環境がなくても使える作成・維持コストが非常に高いStreamlit Cloud常に最新を共有できるPDF出力など一部機能に制限あり

今後は 「最低限の外出しファイルでCloudで動くMVP」 を軸に構成を見直し、
PDF出力など一部機能はローカル or 別ツールで補完する形を検討していきます。


🧠 まとめ

今日は、「アプリを作ったあとに必要な、ほんとうの苦労」にぶつかった一日でした。

誰でも使えるようにするって、こんなに難しいのか。
でもそのハードルを超えたとき、「これ、すごく便利!」と言ってもらえる。
その未来を信じて、明日も進みます。


#100日チャレンジ #Day36 #Streamlit #PyInstaller地獄 #EXE化 #業務改善の落とし穴 #DXの裏側 #社内展開のリアル