そんな今日この頃でして、、、

コード書いたり映画みたり。努力は苦手だから「楽しいこと」を探していきたい。

EVO-X2でVibe Coding試してみてる雑感

EVO-X2でのローカルLLM運用の延長でコード生成を試してみてる。

blue1st.hateblo.jp

Clineでの開発画面

コード生成では素のチャットと違って長いコンテキストのやり取りをすることになる上に表面的な操作の裏で何往復もするので、流石にEVO-X2の性能では「結果」が現れるまでに結構時間がかかる。

与えられるタスクや使いたい言語・ライブラリなんかで出力のクオリティはだいぶ変わる感じがあるし、そもそもLLM自体が応答にランダム性があって同じ条件を与えてもいつでも同じ結果が返ってくるわけじゃないので定量的に評価して「ベストな状態」を見つけるのは難しい。

最近ではLLMモデルは多数リリースされているし、Ollama側にしろコーディングエージェント側にしろ膨大な設定パラメータがあって試行錯誤できる余地はいくらでもあるんだけど、他にもEVO-X2使ってやってみたいことも色々あるので自分自身が一区切りつけるために現時点での感触・知見をまとめてみたいと思う。


Cline vs RooCode

とりあえず手軽に試せるどころとしてVS Code拡張として導入できるClineとRooCodeを使ってみた。

cline.bot

roocode.com

実験的な機能が色々あったり細かい設定できたりと説明を読む分にはRooCodeの方が良さそうなんだけど、(おま環的な部分が多分にあるとは思うが)手元で動かしてみた感じではClineの方が安定して動作してくれている。

前の記事でもちょっと触れたけど、タイムアウトは長めに設定した方が安定しそう。


モデル

大きめなモデルだと柔軟性があるのか適当に指定してもそこそこ動作してくれたりもするんだけど、やっぱりちゃんと入出力のフォーマットだったりパラメータだったりがチューニングされてる方が安定感はある。

OllamaのリポジトリでClineとかRooCodeとかキーワードを入れて検索すると、ありがたいことにいくつか明示的に対応しているモデルがアップされているのでそれを利用させてもらうのが無難そう。

ollama.com

自分が試した範囲では、比較的動作が安定していそうで日本語での応答も流暢、MCPツールもそこそこちゃんと使ってくれそうでおすすめなのはmychen76/openhands_32b-cline-roocode:Q6

これより小さいモデルだと推論は自体は早くなるかもしれないけれど、今度は通常の応答が怪しかったりMCPが利用できなかったりというのがあるので、この辺がコード生成としては実用に足る下限なんじゃないかって気がする。

取り急ぎ追記: Qwen3-Coderだいぶ良さそう

直近リリースされたQwen3-Coderを試してみてる。

ollama.com

Qwenはスコアを盛ってるとかのネガティブ情報はちらほらあるんけど、それでも実際にコーディングまわりでの評判は良さそうだし、先のOpenhandsだってQwen2.5-Coderベースだし、拘るよりも実利を取ろうということで試してみた。

qwen3-coder試してる

出力したコードの質的な話はまだ評価できるほど場数は踏んでないけど、少なくとも動作は軽快だしそもそもこれまでのモデルより格段に操作がエラーで止まる率が低い!

それだけで十分に実用度は向上しているといえるし、今のところローカルLLMでClineでの動作を試した中では一番「ちゃんと使っていけそう」感がある。

この記事を書いてた段階の後述する使用感よりも数段印象は良いので、ある程度使い込んだら別記事にまとめたい。


Ollamaの設定

ググった感じでは環境変数として

  1. 高速化のためにOLLAMA_FLASH_ATTENTION=1
  2. モデルが毎度ロードされるのを短縮するためにOLLAMA_KEEP_ALIVE=-1

あたりは指定した方が良さそうな感じはする・・・が、正直なところ恩恵を実感できてはいなんだよなあ。

Flash Attentionと普通のチャットの方でメインで使ってるGemmaとは相性が悪いらしいというのと、単純に並列利用の意味でもWebUI系とは別にポート違いでコード生成用のOllamaコンテナを建てて動かしてみている。


で、実際のとこどうなのよ?

内容の複雑度にもよるけど命令を与えてから結果が返ってくるまでのテンポ感は、ちょうどダイヤルアップ時代の"ネットサーフィン"を彷彿させられる。

リンクをクリックしたら台所へ行って麦茶を飲み、ついでにトイレに行って帰ってきたらやっとページが表示されているかな・・・みたいな世界観だ。

おまけにしばしば特に理由のないエラーも起こるわけで、根気よくリトライボタンを押す作業も求められる。

仕事で使わせてもらってるCursorや別で触ってみているGemini Cliなんかの軽快な動きと比べちゃうとお世辞にも快適とは言い難い。

これは別にローカルLLMに限らずコード生成では多かれ少なかれ遭遇することだが、どこにも定義のない謎の定数を参照するコードを書いちゃうとかそういうお茶目さはあるし、特に最新だったりニッチだったりで用例の少ないライブラリを使うとか複雑な構成要件があるとかだと厳しい。


でも、じゃあ全く実用的でないかといえばそうでもなくて、一般的な範囲の簡単なアプリケーションであれば根気よく動かしていけばなんとか仕上げてはくれそうだ。

最低限文化的なポモドーロタイマーをElectronで作ってみた

最低限の機能は満たしてちゃんと動いてくれる

人間側が全く勘所のないようなものだとキツいが、ある程度全体の構成や実装方法を頭に浮かべられる状態で使えば、人手の作業をかなり代替してくれはする。

ゲームをしたり動画を観たりしながら片手間に大雑把なところまで作ってもらい、細部は手作業で進めるような使い方はできるかもしれない。

いわば食洗機みたいなもので、人手でやるよりも時間はかかるしクオリティが落ちる部分もあるかもしれないが、「放っておける=人間は別のことに意識を向けられる」というのは十分価値になり得る。

システム面の最適化やらVibe Codingに適した粒度感の命令の与え方への慣れやら深める余地はあるなと思うので、このへんは引き続き研究していきたい。(が、一旦コード生成は一休みして別ジャンルのものを試してみようかな・・・)


追記: Qwen3-Coderで自分の中での印象が更新されたので書いてみた。

blue1st.hateblo.jp