OpenHandsをローカルLLMで動かす ~無料/無制限のAI駆動開発環境! スマホからも!?~
こんにちはRcatです。
今回はローカルLLM開発の幅を広げようと思いまして、OpenHandsを導入してみました。
概要からセットアップ、そして使用感をまとめます。

次回 Hookを使う
はじめに
利用規約
情報や作品の活用時は事前に利用規約をご確認ください。
コメントについて
利用規約のガイドラインを確認の上コメントしてください。
則っていないコメントは削除します。
概要
OpenHandsの特徴
OpenHandsは自分でコードはいじらずに、AIに丸投げするのが基本的な使い方になるエージェント駆動の開発環境です。
Hermesのようなエージェントに似ていますが、こちらは開発に特化しており、そのためのWEB UIを搭載しています。
軽く使った感じで特徴を挙げると
作業空間をワークスペースとして定義して使用する
gitリポジトリなら差分やコミット履歴がみられる
放置可能
ホスト環境のPCを落とさない限り24Hいつでも連続で開発可能ユーザーは書き換え不能
基本的にエージェントが指示に則り開発を行うブラウザ標準搭載
Docker対応
本体自体をDockerでホストも可能でマシンへの影響範囲が小さい
→今回はこの方法
前提
私のいつものです。他記事参照。
ローカルLLMを生かしたくて導入するので、ローカルサーバーです。
推論
llama-serverによるローカルLLMモデル
本体
Qwen3.6-35B-A3
Laguna S2.1 (118B-A8)
要約
Gemma4 E4B
ホスト
Docker
WindowsでもLinuxでもホスト可能
サンドボックスなので仮に`rm -Rf /`とか実行されても大丈夫。
環境構築
Dockerによる構築
さて、もうDocker以外で環境構築する気がないRcatです。
対応してるなら最初からDockerで行きます!
参考にするのはここです。
公式のコマンドをコピペするとこれなんですが、このままでは使いにくく、一回で終わりになってしまい、システム起動時に自動で立ち上がりません。コマンドも長く面倒です。
なので、dockerコマンドをcompose化して使います。
mkdir -p ~/projects ~/.openhands
docker run -it --rm \
-p 8000:8000 \
-v ~/.openhands:/home/openhands/.openhands \
-v ~/projects:/projects \
ghcr.io/openhands/agent-canvas:latestDocker compose化する
composeの設定ファイルにしておけば、コマンド一つで環境構築して実行できるようになります。
さらにこの設定ならシステム起動時に自動で立ち上がります。

ポート番号はご自由に。
バージョンはlatestだと勝手に最新版になり、別環境に持ってった時にいきなりアプデされて環境再現性がなくなることになるため、指定しています。
最新版は下記のリリースを確認します。
起動する
上記をdocker-compose.yamlで保存したら、そのフォルダの中で起動するだけ
docker compose up -d初回はイメージのプルがあるので時間がかかりますが、このコマンドだけで立ち上がります。楽ですね。
起動後はこんな感じになります。
あえてフォルダのマウントは設定ファイルのある所に変えてあるので管理が楽です。

フォルダは、上が設定で下がこれからいろいろAIに任せて作業をさせるためのフォルダです。ここに色々入れていきます。
設定のフォルダは初期設定した後コピーしておけば、いろんな環境で使いまわせます。
初期設定
というわけでさっそく起動して設定していきます。
初回アクセス
初回アクセスはこんな画面でした。一番下の"後で"をクリックしてスキップ。

スキップ後はトップへ行きます。左下の設定ボタンを押して設定へ

日本語化
アプリケーションの中に言語設定があるので、日本語にするだけ。
新設設計。

LLMプロバイダ
LLMタブからLLMプロファイルを追加します
今回はローカルのllama-server(OpenAI互換API)なので下記設定です。

詳細設定の方に移動して、モデル名を`openai/<エイリアス>`に設定。
ここでopenaiと入れることで「openAI互換APIですよ」って伝えるっぽい。
私はモデル置換後に設定を変えるのが面倒なので、いつもモデル名を"MAIN"で参照できるようにしています。
LLM詳細
次にすべての設定のほうを見ていきます。
大項目で別れてないのでごちゃごちゃしていますが、自分に必要な設定を入れていきましょう。




タイムアウト
ローカルなので1H最大出力ト-クン
10kくらいにしないと繰り返したとき痛い。5kでもいいかも推論バジェットも同様
ストリーム有効
ローカルなので応答開始までの時間を少しでも短くするためにストリームは有効のほうがいいキャッシュ無効
llama.cppの場合は勝手にやってくれるので、こちらから制御はしない。
ただしちゃんとcram設定していればの話。
コンデンサー(コンテキスト圧縮)
圧縮のことコンデンサーっていうんですかね? 円柱の黒いアイツでなく?
Max tokensを設定しておきます。

初回はトークン数は無限で、会話ターンだけなので確実にローカルでは溢れてしまいます。
なのでMax tokensの方を設定しておきましょう。今回は128kの前提で約8割の100kにした。
※画像が10kになってるの気づかなくて、タスクが全く進まないのに1日悩んでたのはナイショ
※↓円柱の黒いアイツ(関係ない)

使ってみる
初期設定が済んだら実際に使ってみます。
プロジェクトの作成
まず最初に作業させるための場所が要ります。
projectsの中にサブフォルダを作り、その中に入れましょう。
今回は適当にgit initして、test.txtをコミットしておきました。

※gitは履歴管理ツールです。ソースコードを変更した場合、どこがどう変わったのかの追跡やバージョンアップしたときの単位を保持したりできます。
※特にAIが何したのかわかるようにこまめにコミットするように指示しましょう。
ワークスペースの選択
トップ画面の左下のボタンからワークスペースを開きます。

今回は初めてなので、ワークスペースを追加。
先ほどのtestフォルダを選びます。

選択されました。

この状態でタスクを依頼します。

一分ほどで回答が来ました。
なんか遅いと思ったら回答が来るまでに3,4回くらい何かリクエストしてるっぽい?
ということは回答来るのが遅いのは仕様か。まぁ放置で使うことになるから別にいいけど。

このような感じで使用していきます。
使用感(Qwen3.6 35B-A3 Q8)
ここからは実際に何かしらの課題を投げてやった場合です。
しばらく放置で動いたんですが…

なんか途中で止まってしまいました。読み取りや編集ではなく、タスク完了になってしまうようなツールを間違って呼び出してユーザーに発言をしてしまったためだと思われます。

問題はこの後、執拗に完了ツールを介してやり取りしてこようとするため、すぐまた止まること。どうやら一度でも停止してしまうと復帰が厳しい模様。
直前の自分の行動(発言)に強く影響を受けるローカルLLMらしいっちゃらしいですが…。
きりがないので、ツール名を調べたところ多分FinishToolだと思われます。
なので、これを使うなと指示を上書きします。

以降止まることなく終わりを迎えることができました。

ちなみに、APIのテストはしたみたいですが、フロントエンドのテストが抜けてました。
なのでこれは完成したので別でテストだけやらせます。

この後、内蔵ブラウザを使ってテストをしてくれました。
なお、日本語はダメみたいでプレビューでは化けてますw
※会話履歴をDLすることで、ブラウザのスナップショットを見ることができます。

不具合が見つかったので修正をしたうえで、通ったみたいです。
ちなみに差分は右側のエリアを開くとみることができます。
コードは編集できませんが、ちゃんと差分がみられるので簡易的にレビューも可能です。

使用感(Laguna S2.1 IQ4)
先ほどはなんか残念な感じの動きだったので、もっと上位のモデルを使ってみます。
Laguna S2.1は118B-A8です。
詳細は別の記事の方で解説していますが、こちらのモデルに入れ替えると非常に安定して動作します。
止めないといけないときは止まる、止まっちゃいけないときは止めないをきちんと理解して進むため、OpenHandsを最大限生かせています。
やり方を工夫しているというのもありますが、30B級ではどこかしらでミスが出てしまう丸投げタスクを完璧に遂行することができました。
ちなみに、あとからちょっと使いにくいところがあったので3回に分けて改修を依頼したのですが、こちらも問題なくOK。
LLMにとっては改修が結構難しいのですが、Lagunaなら大丈夫そう。
スマホ対応!
サーバーで建てているのでスマホからもアクセスしたところ、モバイル向けの表示がきちんと用意されており、スマホからでもアクセスできることがわかりました。

VPNと併用することで外出先からスマホで確認や指示が可能ですね。
最も、データの確認はさすがに見づらいですし、動作確認もAIがやった結果しかないのでそれは無理ですが、そもそもちゃんと回っているかや、完了報告見て抜けてそうだったら追加指示出すとかそういったことができるので、仕事中とかでも軽い休憩時に見て指示だしなどすれば24H環境を余すことなく使えます。
HooksでDiscordに完了通知を出す
次回の記事ではDiscordのWEB HookとHooksを組み合わせて完了通知を出せるようにします。
まとめ
まとめ
今回はオープンソースのAI駆動開発環境のOpenHandsを導入して使ってみました。
今まではZooCodeでVSCodeを開きながらペアプログラミングしていたため、応答性が重要でA3Bモデル程度が限度でした。
しかし、完全に放置のお任せ環境を導入することで応答速度を無視することができるようになり、100B級のモデルをローカル運用することができるようになりました。
現時点では30Bクラスはペアプログラミングなら使えるが、丸投げだとまだ不安というのが現状です。OpenHandsは100Bクラスを動かしてもノンストレスなので、文字通り次元の違う開発を可能にしてくれます。
各プラットフォームにはそれぞれの良さがあるため、ローカルLLMとしては3本柱で運用していくことになりそうです。
それではまたお会いしましょう
ローカルLLM三本柱
OpenHands
開発を丸投げするための環境
重いモデルでも放置なので使えるZooCode
VSCodeでペアプログラミングする環境
応答性が大事なので30BのMoE程度までが限度Hermes
汎用エージェント
調査やAPIコール自動化など様々なタスクを汎用的に自動化
リンク集
感想投稿フォーム
コメントは公開で恥ずかしい!! Rcatだけに送りたい人向け
メンバーシップの説明
Docker-Composeマネージャー
【ローカルLLM】バイブコーディング完全ガイド
【ローカルLLM】仕様駆動開発で、下流を丸投げ!
【ローカルLLM】自己成長AIエージェントHermesをホスト
【ローカルLLM】ROCmでLLMが劣化する!?
ミニPCにLinuxをインストール
メンバーシップ特典
情報が役に立ったと思えば、僅かでも投げ銭していただけるとありがたいです。
