個人開発の環境構築メモです。前回、ローカルLLMが暴走した話を書きました。同じ日、その裏で「AIが書いた怪しいスクリプトを、遠慮なく実行できる場所」を作っていました。使ったのはColima(コリマ)という道具です。

Dockerは知っていても、Colimaは初耳という方が多いはずなので、初学者向けに整理します。

まず結論

Colimaは、ざっくり言うと「Dockerを動かすための土台を、使うときだけ立ち上げて、終わったら完全に消せる」道具です。メモリの限られたノートPCでローカルLLMと同居させるなら、これが正解でした。

実際、こんな数字が出ました。

土台を起動したまま → AIの応答速度:21
土台を止めた状態  → AIの応答速度:30.9
(1秒あたりの生成量。単位は省略)

裏で寝ているだけの土台が、AIの速度を3割も奪っていたわけです。

発見:入っていたのはDocker Desktopではなかった

そもそもの始まりは、勘違いでした。私は自分のMacに「Docker Desktop(あの有名なクジラのアプリ)」が入っていると思っていたのですが、コマンドを叩いてみたら——入っていたのはColimaで、しかも停止中でした。

過去に自分で入れたことを、すっかり忘れていたのです。ここでも「推測せず、現物を確認する」が効きました。もし思い込みのまま進めていたら、存在しないアプリの設定画面を探し続けるところでした。

Colimaの何が良いのか

調べてみると、私の環境にはむしろColimaのほうが向いていました。理由は3つです。

① 止めればメモリが1バイトも残らない

Docker Desktopは常駐アプリなので、「使っていないのに裏で動いている」状態が起きがちです。Colimaはコマンドで起動・停止するので、止めればゼロ。

これが今回、決定的でした。私のノートPCではローカルLLMがメモリの大半を占めており、余りはごくわずか。そこに数GBの土台が常駐していたら、AIの居場所がなくなります。冒頭の速度差は、まさにそれが数字になったものでした。

② ライセンスの制約がない

Docker Desktopは、一定規模以上の企業での業務利用が有償です。Colimaはオープンソースのライセンスで、この論点自体が発生しません。

私は病院のシステムに関わっているので、将来「職場で使えないか」を相談する場面を想像すると、この違いは効いてきます。技術の話とは別に、組織で通るかどうかの障壁が1つ減るというのは、地味ですが大きな価値です。

③ 設定がコマンドとして残る

Colimaの設定は、起動コマンドの1行がそのまま設定です。GUIでポチポチした設定と違い、記録に残り、そのまま再現できます。「記録が価値になる」というこのブログの型と、きれいに一致しました。

起動する前に、現状を測った

ここが今回いちばん「型が身についたな」と思った部分です。私はすぐ起動せず、まず既存の設定を確認しました。

結果、過去の自分が作った設定が残っていて、土台に割り当てるメモリが「8GB」になっていました。今の環境では明らかに大きすぎます。何も考えず起動していたら、その瞬間にメモリが破綻し、AIが極端に遅くなって「なぜか重い」と悩むところでした。

そこで割り当てを2GBに絞って起動。やることはログの集計程度なので、これで十分すぎるほどです。

ちなみに、ディスクの割り当てが「80GB」と表示されて一瞬ぎょっとしたのですが、これは「最大80GBまで使える」という上限で、実際は使った分しか消費しません。上限と実消費は別物——これも初学者が驚きやすいポイントでした。

本題:AIの暴走スクリプトを「閉じ込める」二重ブレーキ

ここからが、この環境を作った本当の目的です。

ローカルLLMにスクリプトを書かせると、当然ながら怪しいものも出てきます。無限ループでメモリを食い尽くすようなものが混じるかもしれない。実行するのが怖い、でも実行しないと確かめられない——この板挟みが、初学者最大の足かせでした。

解決策は、ブレーキを二重にかけることでした。

  1. 土台そのものに、メモリの上限をかける(例:2GB)
  2. さらに、個々の作業場にも上限をかける(例:512MB)

こうしておくと、AIが書いたスクリプトが暴走しても、その小さな上限で頭打ちになり、Mac本体には影響しません。同じ日にローカルLLMが暴走したばかりだったので、この設計の意味が骨身に染みました。前回の記事で書いた「ブレーキは一番外側に付ける」の、もう一つの実践形です。

そして作業場は使い捨てです。オプションを一つ付けて起動すると、終了した瞬間に環境ごと消えます。作って、使って、壊す。

ただし「壊せないもの」が1つある

ここは絶対に間違えてはいけない線引きです。作業場に「Mac側のフォルダを見せる」設定をすると、そこだけは本物です。中で消せば、本当に消えます。

「コンテナだから安全」ではなく、「見せていない部分が安全」。
壊れて困るものは、見せない場所に置く。中は好きに壊す。

実際、私は検証用に作った専用フォルダだけを見せる形にしました。ホームフォルダ全体を見せてしまうと、AIが書いた削除コマンドが本物になります。ここだけは、慎重すぎるくらいでちょうどいい部分でした。

作った検証環境で、何をしたか

最初の練習として置いたのは、疑似的なシステムログでした。エラーが何種類か混ざったテキストを用意し、それをAIに集計させるのです。

ポイントは、正解を先に自分で数えておくこと。そうすればAIの答えを採点できます。「AIが出した答えが合っているか分からない」という状態を作らないための工夫で、これはこのブログでずっとやってきた「物差しを先に用意する」そのものでした。

そしてこの練習、実は本業の予行演習でもあります。病院のシステムログは外に出せません。だからクラウドのAIには相談できない。手元のAIに読ませて、隔離した環境で検証する——今日組んだ手順は、そのまま将来の相談材料になります。

ただし順番は間違えません。

技術的に可能か → ✅ 今日、自宅で実証した
組織的に許されるか → ❓ これは規程と申請の話

自宅で実績を作り、説明できる形にしてから、相談する。順番を飛ばさない、という当然のことを、ここでも守ります。

おまけ:Dockerの学習が、立体的になった

最後に、Docker学習中の方に一番伝えたいことを。

今回、土台の起動に約40秒かかり、その上で作業場を作るのは一瞬でした。この差を体感して、初めて腑に落ちたことがあります。

土台の起動=建物を建てる(重い・数十秒)
作業場の作成=部屋を作る(軽い・一瞬)

Docker入門で必ず出てくる「仮想マシンとコンテナの違い」の話は、まさにこれでした。教科書で読んだときは分かった気になっていましたが、自分のマシンで40秒と一瞬を体験して、やっと立体になりました

そして「気軽に壊せる」のは部屋のほうです。建物(土台)は数ヶ月に一度しか壊しませんが、部屋は毎回壊すのが前提。失敗のコストがゼロになると、試す回数が増える——「環境を壊すのが怖くて試せない」という足かせが、今日で外れました。

おわりに

使い終わったら、コマンド一つで土台ごと停止。メモリが完全に返ってきて、AIの速度も戻ります。「AIに相談する時間帯」と「検証する時間帯」を、きれいに切り替えられるのが、この構成の一番の心地よさでした。

あとは月に一度、溜まった不要なイメージを掃除するだけ。派手さはありませんが、限られたメモリで欲張るための、静かな工夫です。同じように24GB前後のマシンでローカルLLMを動かしている方の参考になれば。


環境構築 / Colima / Docker / ローカルLLM

このブログでは、ローカルLLM・Aider・個人開発の試行錯誤をそのまま記録しています。