【備忘録】ローカルでAIを使用してみるための準備(Python/Ollama/Gemma等)
注)未だ理解が浅いのでざっくりです
自由研究はこどもたちの宿題だけではありません。もはやうん十年前に自由研究の呪縛から解き放たれた人間も自発的に自由研究したくなる時があるのです。今回は現代の最先端科学とも思しき人工知能すなわちAI(Artificial Intelligence)の勉強を始めてみました。
参考用のコードを置こうかと思いましたが、素人の独学なので「どうぞコピペして使ってください」という自信と責任が持てないのと、ChatGPTに質問したら爆速で出力してくれるので不要かなと思いました。
AIのきっかけはAI
昨今のAIの進化は目覚ましいものです。こうして自分でAIを動かしてみようと考えるまで気にしていなかったのですがAIにも種類があるとのこと。私が主に使用しているChatGPTを含め会話が可能なタイプのAIは大規模言語モデル(Large Language Model:LLM)というものに分類されるそうです。
ChatGPTがリリースされた当初はちょっとした話し相手としてからかった感じで遊ぶ利用者が多かった印象ですが、5まで進化した今では一発でほぼ完璧なコードを書いてくれるほど。ただ個人的には4の方が意思疎通がうまく取れていたような気がしています。
そうしたなかで「自分だけのAIを作ってみたい(育ててみたい=プロンプトやファインチューニングやディープランニングの意味を勉強したい)」という思いが強くなり、ChatGPTにお願いして『ローカルAI(LLM)』の世界に飛び込むことになりました。
コードを Azure に簡単にデプロイするための統合ツールを備えた、強力で軽量な無料コード エディター
なんとなくChatGPTに「AIと会話できるアプリを作りたい」と質問してみました。そこでまず必要になったのがPythonです。Pythonは「Visual Studio Code(VScode)」でも記述可能とのことだったので既にHTML/CSS/JavaScript/PHPはでいじっていたゆえ引き続きPythonもVScodeで進めることにしました。
Pythonをインストールする
私はAIに言われるがままに(後に割と危険な行動だったと省みる)VScodeの拡張機能からPythonをインストールしました。
Visual Studio での Python Web サポートには、Bottle、Flask、Django フレームワークの Web アプリケーションなど、いくつかのプロジェクト テンプレートが含まれています。 Visual Studio インストーラーを使用して Python をインストールする場合は、[オプション] の下 Python Web サポート 選択して、これらのテンプレートをインストールします。 このチュートリアルでは、空のプロジェクトから始めます。
https://learn.microsoft.com/ja-jp/visualstudio/python/tutorial-working-with-python-in-visual-studio-step-01-create-project?view=vs-2022
VScodeの拡張機能からインストールした結果「Python」「Python Debugger」「Python Environments」が自動的にINSTALLEDとなりました。私はこうしたワンステップを踏まずともVScodeさえあればPythonを使えるものだと思っていましたが違っていたようです。
これで「.py」の拡張子を持ったファイルを作成できるようになりました。いったんひと安心です(この手順が一般的なのか否かは私のなかでは未だに定かではないです)。
Ollama(Gemma)をダウンロード
LLMを提供しているところは各社あるようで、どのモデルを使用するか決めるところから始まりましたが何となくGoogle社のGemma(ジェマ)にしました。ちなみに他に提案されたのがMeta社のLlama(ラマ)でしたが今回はいったんGemmaを採用。
どうやらこれだけでは動かないらしく「Ollama(オラマ)」というサービスが必要になることが判明。言語モデルだけではAIは使えないとのことで公式サイトからダウンロードしましたが、正直なぜこれが必要なのかはもう少し作業を進めるまでよく理解していません。
ローカルにインストール
ダウンロードしたOllamaをローカルにインストールします。インストール自体はzipを開けば自動的に展開するので特に難しいことはないのですが、絶対パスが必要になる時があるのでどこにファイルがあるのかは今でもメモ帳に絶対パスを書き留めています。
インストールは以上で終わりですが、ただし初回の起動だけネット経由でGemmaつまりは言語モデルを「pulling」(ダウンロード)する必要がありコマンドプロンプトからの操作を促されました。後に指摘されましたが記憶にございません状態でした。
理由はOllamaを経由してGemmaを使えるようにするため。私はGemmaも単体で落とすものだと思っていたのですがOllamaが窓口になっているのでコマンドプロンプトで使用したいモデルを「run」させれば使用できるようになるそうです。つまり便利ではあります。途中でGemmaのバージョン変更やMeta社のに変更したいと考えた場合もOllamaから「run」を叩けばOKとのこと。
bash
pulling gemma:7b
bash
ollama run gemma
Tkinterを勧められる
簡易的なUIとしてTkinter(ティーケーインター)を勧められました。もちろん何のことかさっぱりわかりませんでしたが、AIの提案を全て丸呑みしてコピペを繰り返すのも癪に障るというか何か良くないなと思ったのでGoogle検索も併用。どうやらPythonに標準で組み込まれているらしい。
ただこちらは走らせるとパソコン本体から「ウィイイイ」と音がするので常時立ち上げておくのには抵抗がありました。加えて本当にシンプルなWindows95みたいなデザインなのでもう少しHTML等を駆使したチャット欄のようなもので会話できないかと思いました。
🤔🤔🤔#Python #Tkinter #Ollama #Gemma #ChatGPT pic.twitter.com/09ha7fwsnO
— ほちょこ (@e_hocho) August 13, 2025
SQLiteで会話履歴を保存する
せっかくなのでデータベース(.db)も使えるようにしてみようと以前に手を出して挫折したSQLite(MySQLではないです)に挑戦。AIとの会話を保存できれば後々何かに応用できるだろうかという魂胆です。提案されたのはSQLite(エスキューライト)に保存すると同時に確認用のログ出力として指定のフォルダ内にテキストファイル(.txt)でデータを保存していく練習です。
ただしDBに保存されたデータとTXTファイルは同期していないので、TXTファイルを修正削除してもDBには反映されないと知って応用に使用するのはやめました(管理が煩雑になるため)。
| 項目 | SQLite | MySQL |
|---|---|---|
| 仕組み | ファイル型DB | サーバー型DB |
| データ保存方法 | 1つのファイルに全て格納 | サーバー内で複数ファイルに分割管理 |
| 主な拡張子 | `.db`, `.sqlite`, `.sqlite3` | 表向きには無し(内部では `.frm`, `.ibd` など) |
| ユーザーの扱い方 | ファイルをコピーすればそのまま持ち運び可能 | SQLコマンドでサーバー経由操作、ファイル直接操作はしない |
ChatGPTの回答
コマンドプロンプトからの操作
カレントディレクトリ(現在位置)を指定しなければならないことは前々から理解していたつもりでしたが、いざ起動してみようとなるとこれが一筋縄ではいかないもの。また、いちいち指定するのが面倒になってきたので他の方法を質問したところ「環境変数」を設定するとよろしと返答があったので覗いてみることにしました。
環境変数PATHの変更のやり方(Windows 10/11の場合)
ChatGPTの回答
1. Windowsのスタートボタンを押して「環境変数」と入力
2.「システム環境変数を編集」をクリック
3.「環境変数(N)...」ボタンをクリック
4.「システム環境変数」か「ユーザー環境変数」の中からPathを探して選択
5.「編集」ボタンを押し、追加・削除・編集ができる
6. 追加する場合は「新規」でパスを追加
7. OKで全部閉じていく
ユーザー環境変数は間違えたとしても復元は容易ですがシステム環境変数はむやみにいじらない方よさそうです。そもそも管理者権限でログインしていないと編集できないので、管理者以外でログインした方が逆に心臓部をいじることができないのでそれも得策です。
こんなに高度なことをやってみたのに環境変数が機能していないのかコマンドプロンプトからはカレントディレクトリを変更しないと現在位置に新しいDBを作ってしまったり(確認したところそれはありませんでした)ファイルが参照できないというエラーメッセージが頻発(いちばん頭を悩ませたのはコレ)したため環境変数はいったん忘れて絶対パスを入力してCDを変更する方法を取っています。
この段階で環境変数に関しては埒が明かなくなってきたのでOllamaはいちいち絶対パスを指定するのが面倒であればコマンドプロンプト(Windows PowerShell)ではなくPythonから起動させるよう提案されました。
その状況、まさに「Python と ollama の実行ファイルを **どこからでも呼べるようにしたいけど、環境変数設定がうまくいってない」状態」ですね。
小さい頃に父親がMS-DOS??からゲームを起動させているのを見ていたので(自慢するかのように見せつけられていたので)真っ黒な画面に機械的なフォントの文字がずらずらと出てくる画面には慣れているつもりでしたがいざコマンド入力からの起動を始めるとちょっとしたハッカー感を味わいます。
MS-DOS(エムエス-ディーオーエス、エムエスドス[2])は、1981年よりマイクロソフトが開発・販売したパーソナルコンピュータ向けのオペレーティングシステム(OS)である。
「MS-DOS」が製品名で、マイクロソフト ディスク・オペレーティングシステム(英: the Microsoft Disk Operating System)を意味する[3]。
この段階までのAIとのやり取りでやたら目に入ったのが「pip」や「bash」といった専門用語っぽい用語。普段接する機会のない用語を当たり前のように使ってくるのでそういった点ではAIの回答は知見が広がる感はあります。
OllamaのみPythonから起動するコードにしたため起動の際に逐一コマンドプロンプトを叩かなくてもよい便利機能にしたつもりでしたが後にアイコンをクリックすれば一発で起動することがわかり遠回りだったと知りました。
Flaskの場合
Tkinterだとやはり「機械ちっく」な印象が強く全体的な印象として堅苦しいというかデザイン性は欠けてくるのでHTMLを使用してチャット欄を作成することにしました。この手法を採用するとなると今度必要になるのはTkinterではなくFlask(フラスク)と提案されました。Flaskの場合はHTML等の言語と同様にルールがあって以下のようにディレクトリを構成しておくとスムーズに運用できるとのこと。
🫠🫠🫠#Python #Flask #Ollama #Gemma #ChatGPT pic.twitter.com/2F2hU2vIvl
— ほちょこ (@e_hocho) August 13, 2025
せやせや、それがFlaskの王道スタイルや!
ChatGPTの回答
・templates/ → HTMLファイル
・static/ → 画像、動画、CSS、JS など
これに従うと render_template("index.html") で楽に表示できるし、動画や画像も url_for('static', filename='〜') で参照できるで。
途中でですます調が面倒になってネットスラングばりばりで質問していたら回答もそれになってしまったのですが、後から考えるとプログラミングに関するデータの出力と同時に文脈に合わせたネットスラングを使用した文章生成という負荷のかかる処理をさせてしまっていたことが判明したため、そこは切り分けることにしました。
【参考】TkinterとFlaskの違い
あまりChatGPTの出力結果をそのままコピペしたくないのですがそのまま貼り付けます。AIが出した答えが必ず正解とは言い切れないので常に留意しておかなければならないのはもはや新常識。
Tkinter
Pythonに標準で入っているGUIライブラリ
python
import tkinter as tk
Flask
PythonのWebアプリケーションフレームワーク
python
from flask import Flask
| 項目 | Flask | tkinter |
|---|---|---|
| 種類 | Webフレームワーク | GUIライブラリ |
| 用途 | ブラウザで動くWebアプリを作成 | デスクトップアプリのウィンドウやボタンなどを作成 |
| 実行環境 | サーバー + ブラウザ | ローカルPC(Pythonが入っていればOK) |
| UIの見た目 | HTML/CSS/JavaScriptで自由にデザイン | 標準的なウィンドウ部品(デザインはシンプル) |
| 代表的な例 | チャットサイト、ブログ、APIサーバー | 電卓アプリ、ツール系ソフト |
| 学習のしやすさ | Web技術(HTML/CSS/JS)の知識が必要 | Pythonだけで完結、初心者向け |
| 利用シーン | 公開したいWebサービスやサイト | 自分用のツールや簡易アプリ |
ChatGPTの回答
【応用編】プライベートIPアドレスを使用
Flaskで利用可能になったHTMLをスマホでも表示させてみたかったのでAIに質問したところ「プライベートIPアドレス」を使用してスマホから閲覧操作したらよきという回答だったためまずはグローバルとプライベートのIPアドレスの違いからおさらい。会社ではよくある共有フォルダ(社内ネットワーク)の仕組みがまさにこれだと思うのですが(在宅勤務でのVPNなどはまた別の設定)、いざ自分でネットワークを立ててみるとなると頭がこんがらがってきます。
プライベートIPアドレス
プライベートIPアドレス(ローカルIPアドレス)は、プライベートネットワーク(外部から利用できない社内LANなど)のアドレスとして使うことができる。異なるプライベートネットワークを相互接続してルーティングすることも可能である。
プライベートIPアドレスを介することでスマホからも操作が可能になることは確認できました。もちろんパソコンでローカルLLMを起動させていることが前提なので、今のところあまり意味がないなとも思い実験的試みとしていったん置いておいています。
以上により、HTML/CSS/JavaScriptで作成したUIを通してPythonとOllamaによりGemmaとの会話をローカルで行うことができるようになりました。今のままではGemmaの回答がデフォルトなので、Python側でプロンプトを記述してより自然な返答とデータの蓄積にプラスして分析もできるようになればというのが今現在の構想です。
これをネット上にあげるとなるとサーバーを用意しなければならず予算も手間もかかるのでGemmaを移行することはできませんが、APIを取得して制限をかけておけば予算内で類似のジョークサイトのようなものを運営するのは不可能ではないとのこと。ただし利用者がAIとどんな会話をしているのかを管理者側で保存するわけにはいきませんし、仮に不適切な返答をしてしまった場合の責任というものを背負いきれません。そのためAIを活用したサービスはまだ課題が非常に山積みであるということはこの一連の作業を通じて痛感いたしました。
参考引用:
OpenAI(https://openai.com/ja-JP/)2025.8.31
フリー百科事典『ウィキペディア(Wikipedia)』IPアドレス(https://ja.wikipedia.org/wiki/IP%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9)2025.8.31
フリー百科事典『ウィキペディア(Wikipedia)』MS-DOS(https://ja.wikipedia.org/wiki/MS-DOS)2025.8.31
ChatGPT の回答は必ずしも正しいとは限りません。
重要な情報は確認するようにしてください。
\気になったらSHARE!!/
【1泊2日】初の2日連続TDR『東京ディズニーランド/TDL』『東京ディズニーシー/TDS』をしたので攻略日記を書きました:前の記事
