クラウドAIに業務データを送りたくない。でも、ローカルで動くAIに本格的なデータ分析をさせるには物足りない。LMスタジオのモデルだけでは不足しています。とくに計算をさせるにはPythonとの連動が必要なので、ちょっとした工夫が必要でした。
本記事は、ローカルAI環境を一から構築し、4万行のCSV分析まで回せるようになるまでの試行錯誤を備忘録としてまとめたものです。これからローカルAIを始めたい方の参考になれば幸いです。
なぜ「ローカルAI」を自分で作ったのか

業務でAIを使ううえで、どうしても気になるのが 機密データの取り扱い です。顧客リスト、財務データ、未公開の戦略文書――こうした情報をクラウドAIに送ることに抵抗がある方は多いはずです。
そこで、自分のPC内だけで完結する「ローカルAI環境」を組むことにしました。要件はシンプルです。
- 外部ネットワークへ業務データを送らない
- ブラウザでChatGPTのように使える
- CSV・Excel・PDFを添付して質問できる
- 必要に応じてAIが自動でPythonを呼び出して計算する
結論から言うと、これらは すべて実現できました。完成までに踏んだ工程と、ハマりどころを順に紹介します。
完成したシステム構成図
まずは全体像から。最終的なシステム構成は次の通りです。

シンプルな三層構造です。ブラウザ → Flask → (LM Studio + Python)。会話履歴と添付ファイルは data/ フォルダに自動保存されます。
必要なものリスト
ハードウェア
| 項目 | 推奨スペック | 備考 |
|---|---|---|
| RAM | 32GB 以上 | 16GBでも動くが、大規模CSVを扱うなら32GB欲しい |
| VRAM (GPU) | 12〜16GB 以上 | 7B〜13B規模のローカルLLMを快適に動かすなら必須 |
| ストレージ空き | 30GB 以上 | モデルファイル1つで5〜15GB程度 |

実際に私が利用しているPCについてマシンスペックなどの情報は上記の記事にて紹介しています。
ソフトウェア
- LM Studio ― ローカルでLLMを動かすGUIアプリ。OpenAI互換APIを公開できる
- Python 3.x ― Flaskサーバーとデータ処理に使用
- pip パッケージ ―
flask,requests,pymupdf,pandas,openpyxl,numpy
ローカルAI:4つの主要コンポーネント
① LM Studio(推論エンジン)
ローカルLLMを動かすための土台。HuggingFaceから好みのモデルをダウンロードして、ボタンひとつで「OpenAI互換APIサーバー」として起動できます。port 1234 で待ち受けるのが一般的です。
今回使ったのは google/gemma-4-e4b 系のモデル。日本語が自然で、Tool Use(関数呼び出し)にも対応していたのが選定理由です。

② Flask Server(app.py)― 中央ハブ
本システムの心臓部はFlask(フラスク)です。ファイル名はapp.pyでPythonで書かれています。この内容はすべて生成AIとの対話で作成しました。
Flaskの役割は主に4つ。
- ブラウザからのチャットリクエストを受け取る
- 添付ファイル(PDF/CSV/Excel/画像)を解析・前処理する
- LM Studioへ問い合わせ、必要に応じてAIが要求するPython実行を代行する
- 会話履歴をMarkdown形式で自動保存する
Pythonツール実行部分の概要はこんな感じです(要点のみ)。
def safe_calc(code_str):
"""AIが生成したPythonコードを安全に実行する"""
# pandas/numpy/json/csv/datetime を事前注入
exec_globals = {
'pd': pandas, 'np': numpy, 'json': json,
'OUTPUT_DIR': OUTPUT_DIR,
...
}
# exit() / sys.exit() を無害化(サーバー停止防止)
safe_builtins['exit'] = _BlockedExit()
# 標準出力をキャプチャしながら実行
sys.stdout = io.StringIO()
try:
exec(code_str, exec_globals)
return sys.stdout.getvalue()
except SystemExit as e:
return f"exit()がブロックされました(コード: {e.code})"
except Exception as e:
return f"エラー: {e}\n{traceback.format_exc()}"
Flask(フラスク)とは、Pythonで利用できる軽量なWebアプリケーションフレームワークです。2010年にArmin Ronacher氏によって開発され、シンプルで学習コストが低いため、初心者にも適したフレームワークとして知られています。
Flaskは「マイクロフレームワーク」と呼ばれ、必要最低限の機能のみを提供します。そのため、開発者は必要に応じて機能を自由に追加でき、柔軟性が高いのが特徴です。
私は今回、初めてFlaskという概念を知りましたが、実はそんな詳細は知らなくても生成AIが書いてくれたコードをapp.pyとして記録しただけで動きました。
③ index.html ― ブラウザUI
ChatGPTのような単一ページアプリ。Vanilla JavaScript + CSSのみで、ビルド不要。
- 📎 ボタンとドラッグ&ドロップでファイル添付
- テキストエリアは入力に応じて自動で高さが伸びる(最大画面の50%)
- 会話履歴のサイドバーから過去のチャットを呼び出し可能
- 「推論モード」で内部思考の表示/非表示を切替
- PDF出力ボタンで会話まるごとPDF化
④ start.bat ― 起動メニュー(Windows用)
毎回コマンドプロンプトを叩くのは面倒なので、ダブルクリックで起動メニューが出るバッチファイルを用意。番号を選ぶだけでサーバーが立ち上がり、ブラウザも自動で開きます。
PCを立ち上げたらこの「start.bat」を実行しておきます。これで準備完了です。いつでもローカルAIが通常のブラウザで使えます。
実際のブラウザ画面
実際の運用は通常使うブラウザなので違和感なく楽々で使えます。
アドレスバーに「http://192.168.11.61:5000/」を叩けば動きます。このURLはブックマークしてありますので瞬時に起動できます。

ちなみにこの環境構築は、ほぼ生成AIとの対話で実現できました。ややこしそうなコードが並んでいますが、私自身は一行も書いていません。(苦笑)
つまずきポイント4選 ― ハマって学んだこと
「動くものを作る」ところまではすぐ行けますが、業務で使えるレベルにするには、いくつかの落とし穴を踏み抜く必要がありました。
実際にハマった4つの問題を共有します。
問題1:4万行のCSVを読み込むと処理が止まる
テキストファイルの全文をプロンプトに突っ込む実装だと、長文CSVは途中で切られ、AIは「最初と最後の数十行」しか見えない状態に。結果、AIはコード内にデータをハードコードしようとして失敗します。
解決策:「メタ情報+ファイルパス」だけ渡す
ファイルサイズが閾値(50KB)を超えたら、中身ではなく 列名・データ型・先頭5行・末尾5行・行数・推奨エンコーディング だけをAIに渡します。本処理はAIが pd.read_csv() をPythonツールで実行する形にしました。
これでメモリも文脈も節約でき、4万行どころか100万行クラスでも動くようになります。
問題2:AIが exit() を呼んでサーバー本体が落ちる
AIがエラー処理用に exit() を生成 → Pythonの SystemExit 例外が発生 → 通常の except Exception ではキャッチできず、Flaskサーバーごとプロセスが終了してしまう、という事故。
解決策:builtinsの exit/quit を無害化
カスタム builtins を作って exit / quit / sys.exit を呼ばれた瞬間に普通の RuntimeError に変換します。SystemExit も明示的に except 節を追加。これでAIが何をやってもサーバーは生き続けます。
問題3:「分析→CSV出力」のような多段階処理が途中で終わる
初期実装ではAIのツール呼び出しは1往復だけ。「列を確認 → エラー修正 → 集計 → ファイル保存」のように複数ステップが必要な依頼で、最後まで走らずに止まっていました。
解決策:Tool Use のループ化(最大5回)
「ツール呼び出しがあれば実行 → 結果を返して再度AIに問い合わせ → またツール呼び出しがあれば実行…」を最大5周まで繰り返すループに改造。これで自己修正もファイル出力も連続で動くように。
問題4:AIが「集計」せず、明細データをそのまま並べる
同じ顧客番号が何度も登場する明細データに対して、「顧客ごとに集計してください」と頼んでも、AIは groupby を使わずに重複行をそのまま表示。
解決策:メタプレビューで「明細データ」を自動検知して警告
先頭列のユニーク値が全体行数の半分未満なら、メタ情報に「これは同じ識別子が複数登場する明細データです。集計指示があれば必ず df.groupby() を使ってください」と自動で注意書きを追加。さらにシステムプロンプトに「『集計』『累計』『ごと』のキーワードがあれば必ず集約せよ」というルールを明記しました。
💡 教訓:ローカルAIに業務処理を任せるなら、「AIがミスしても破綻しない仕組み」を先に作ることが重要。大きなファイルはメタ情報だけ渡す、危険な関数はサンドボックス側でブロック、ツールは複数回ループ可能にする、プロンプトでデータ構造のヒントを明示する。この4点を押さえれば、7B〜10B規模のローカルモデルでも実用的に動きます。
実際に動かしてみた感想
40,000行・93列(うち79列はExcelの保存ノイズで空列)のCSVから、顧客マスタ7,678人分への集約と、CSVファイル出力までを 1回の指示で完結 できるようになりました。
処理内容としては以下のような分析が問題なく回ります。
- 年度別の売上集計と推移グラフ
- 顧客ごとのリピート回数・累計購入金額の算出
- RFM分析(Recency / Frequency / Monetary)の元データ準備
- パレート分析(売上の8:2構造の可視化)
従来は中小企業診断士の現場で「Excel関数とピボットテーブル」で頑張っていたような分析が、自然言語で「これ集計して」「年度ごとの推移を出して」と頼むだけで終わるのは、想像以上に体験が変わります。クラウドAIにデータを送らないので、顧客情報を扱う案件でも気兼ねなく使えるのが何より大きい。
これからローカルAIを始める方へ
「いきなり本格的なシステムは難しそう」と感じた方へ、現実的なロードマップを提案します。
- ステップ1:LM Studioを単体で触る
まずはLM Studio をインストールして、内蔵チャットでローカルLLMの感触を確かめる。これだけでも「ChatGPTもどき」をオフラインで使える。 - ステップ2:APIサーバー化
LM Studioの「Local Server」機能をONにして、curlやPostmanでAPIを叩いてみる。中身がわかってくる。 - ステップ3:シンプルなFlask UIを作る
最初はテキストやり取りだけのチャットUIで十分。ファイル添付やTool Useは後から段階的に追加していけばOK。 - ステップ4:ファイル添付とPython Tool Useを足す
本記事で紹介した「メタプレビュー」と「safe_calc」のパターンを参考にすれば、業務で使えるレベルへ到達できる。
まとめ:ローカルAI環境を作るうえでの要点

- ハードウェアは RAM 32GB / VRAM 12〜16GB あれば実用域
- LM Studio + Flask + Python の組み合わせで、コア機能は 1ファイル数百行 で実現可能
- 大容量データは「メタ情報だけ渡してパスを伝える」のが鉄則
- AIが暴走してもサーバーが死なないよう サンドボックス側で防御 する
- 多段階処理を回すなら Tool Useをループ化 する(最大5周程度)
- プロンプトには「データ構造のヒント」と「集計の必要性」を 機械的に挿入 する
ローカルAIは「クラウドAIの劣化版」ではなく、業務データを安全に扱える別の選択肢です。一度組んでしまえばランニングコストは電気代だけ。中小企業診断や財務分析のように機密性の高い業務に取り組む方ほど、検討する価値があると思います。
同じような環境を作りたい方の参考になれば嬉しいです。質問や改善提案があればフォームからお問い合わせいただくか、SNS(XかFacebook)で交流しましょう。

この記事を書いた遠田幹雄は中小企業診断士です
遠田幹雄は経営コンサルティング企業の株式会社ドモドモコーポレーション代表取締役。石川県かほく市に本社があり金沢市を中心とした北陸三県を主な活動エリアとする経営コンサルタントです。
小規模事業者や中小企業を対象として、経営戦略立案とその後の実行支援、商品開発、販路拡大、マーケティング、ブランド構築等に係る総合的なコンサルティング活動を展開しています。実際にはWEBマーケティングやIT系のご依頼が多いです。
民民での直接契約を中心としていますが、商工三団体などの支援機関が主催するセミナー講師を年間数十回担当したり、支援機関の専門家派遣や中小企業基盤整備機構の経営窓口相談に対応したりもしています。
保有資格:中小企業診断士、情報処理技術者など
会社概要およびプロフィールは株式会社ドモドモコーポレーションの会社案内にて紹介していますので興味ある方はご覧ください。
お問い合わせは電話ではなくお問い合わせフォームからメールにておねがいします。新規の電話番号からの電話は受信しないことにしていますのでご了承ください。

【反応していただけると喜びます(笑)】
記事内容が役にたったとか共感したとかで、なにか反応をしたいという場合はTwitterやフェイスブックなどのSNSで反応いただけるとうれしいです。
本日の段階で当サイトのブログ記事数は 7,014 件になりました。できるだけ毎日更新しようとしています。
遠田幹雄が利用しているSNSは以下のとおりです。
facebook https://www.facebook.com/tohdamikio
ツイッター https://twitter.com/tohdamikio
LINE https://lin.ee/igN7saM
チャットワーク https://www.chatwork.com/tohda
また、投げ銭システムも用意しましたのでお気持ちがあればクレジット決済などでもお支払いいただけます。
※投げ銭はスクエアの「寄付」というシステムに変更しています(2025年1月6日)
※投げ銭は100円からOKです。シャレですので笑ってご支援いただけるとうれしいです(笑)
株式会社ドモドモコーポレーション
石川県かほく市木津ロ64-1 〒929-1171
電話 076-285-8058(通常はFAXになっています)
IP電話:050-3578-5060(留守録あり)
問合→メールフォームからお願いします
法人番号 9220001017731
適格請求書(インボイス)番号 T9220001017731

