0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

コーディングエージェントをいくつか試してみました

0
Posted at

色々なコーディングエージェントが出ています

自宅のパソコンで使えそうなコーディングエージェントを試してみました。

ローカルLLMについて

自宅のPCは非力ですが、なんとかローカルLLMが動きます。

項目 内容
CPU Corei9 13900
RAM 32GB
GPU GeForce RTX 4060
VRAM 8GB
OS Windows11
CUDA ver.13.3
LLMサーバー llama.cpp-server
LLMモデル Qwen3-Coder-30B-A3B-Instruct-Q4_K_M.gguf

ローカルLLMサーバーとしては、簡単に動く、LM StudioやOllamaがありますが、llama.cpp-serverは

  • huggingfaceからダウンロードしたGGUFモデルをそのままで動かせる
  • パラメータを細かく指定できる

ので利用しています。

llama.cpp-serverの起動バッチファイルです。
Qwen3-Coder-30B-A3B.bat
e:\llama\llama-server ^
  -m "E:\llama\models\Qwen3-Coder-30B-A3B-Instruct-Q4_K_M.gguf" ^
  --port 9000 ^
  -c 60000 ^
  --temp 0.1 ^
  --top-p 0.9 ^
  -ngl 99 --cpu-moe  ^
  --repeat-penalty 1.1 
パラメータを最適化すれば、もっとうまく動くかもしれません。

エージェントに実行させる課題

QRコード生成ソフトをpythonで作ってもらいます。

エージェントに入力するプロンプト
Python で、QRコード画像を作成するデスクトップGUIアプリケーションを作成してください。

【機能要件】
1. 入力
   - テキストボックスに任意の文字列(URL、テキストなど)を入力できる
   - 「生成」ボタンでQRコードを生成し、プレビュー表示する
   - 「消去」ボタンで、テキストボックスを消去する

2. 出力
   - PNG形式で画像ファイルを保存できる(保存ダイアログでファイル名・保存先を選択)

3. パラメータ設定(GUI上で変更可能、デフォルト値あり)
   - 余白セル数(quiet zone / border): デフォルト 4(セル単位)
   - 出力画像サイズ: 幅・高さを指定可能、デフォルト 100 x 100 ピクセル
   - 誤り訂正レベル: L / M / Q / H から選択可能、デフォルト M
   - QRコードバージョン: 1〜40の範囲で指定可能。未指定(自動)の場合は内容に応じて自動選択する
     (※バージョンを固定指定した場合、入力文字列がそのバージョンの許容データ量を超えたらエラーメッセージを表示する)

4. exe化
   - cx_Freeseでのビルドスクリプトを作る

【技術要件】
- 使用言語: Python 3
- GUIフレームワーク: tkinter を使用(標準ライブラリのため追加インストール不要)
- QRコード生成には `qrcode` ライブラリを使用(画像処理には Pillow も必要)
- 生成後の画像は指定サイズにリサイズしてから保存・プレビューする
- 入力値のバリデーションを行う(数値項目に不正な値が入った場合はエラーダイアログを表示)
- コードは、GUIを管理するmain.pyとQRコードを作成するqr.pyに分けてください。
- 可読性のためコメントを日本語で付与する

【コード品質】
- 定数化できる値は定数化
- 関数を適切に分割
- 可読性を重視
- コードの理解を深めるための日本語コメント
- グローバル変数は定数のみ

【成果物】
- スクリプト(main.py、qr.py)
- requirements.txt(qrcode, Pillow など必要なパッケージとバージョンを明記)
- 簡単な使い方を説明する README.md
- 制作したソフトウエアを、cx_Freeseで1つのファイルにまとめるスクリプト(setip.py)。

プロンプトは、生成AIで作ってもらいました。 自分で作るプロンプトよりも具体的でわかりやすいのですが、プログラミングにおける「自分の役割」とは何?と、考えてしまいます。

試したコーディングエージェント

色々なコーディングエージェントが出てきています。今回は以下の4つを試してみました。
PCの中を「汚したくない」、試行錯誤してみたいので、すべて、dockerで動かしています。
dockerはpython3.14-slimイメージをベースに、Node.jsをインストールしたうえで、npmを利用してエージェントをインストールしています。
Node.jsイメージを利用すれば良いかもしれませんが、pythonのプログラムを作るので、なんとなくpythonのイメージを元にしました。

OpenCode CLI

OpenCode CLIについて

  • Dockerfile
    Dockerfile
    FROM python:3.14-slim
    
    # タイムゾーン
    ENV TZ=Asia/Tokyo
    ENV DEBIAN_FRONTEND=noninteractive
    
    # Node.js をインストール(例: Node 20)
    RUN apt-get update && apt-get install -y curl gnupg \
        && curl -fsSL https://deb.nodesource.com/setup_lts.x | bash - \
        && apt-get install -y nodejs \
        && apt-get clean \
        && rm -rf /var/lib/apt/lists/*
    
    # よく使うPythonライブラリ
    RUN pip3 install --no-cache-dir numpy matplotlib tqdm pillow openpyxl 
    
    # OpenCode CLI
    RUN npm install -g opencode-ai
    
    WORKDIR /workspace
    
    CMD ["bash"]
    
  • comose.yml
    compose.yml
    services:
      # OpenCode 環境
      opencode:
        build: .
        container_name: opencode-container
        volumes:
          - ./workspace:/workspace
        working_dir: /workspace
        stdin_open: true # ターミナルを対話モードにするため
        tty: true
        # ログサイズ制限
        logging:
          driver: "json-file"
          options:
            max-size: "10m"    # 1ファイルあたり100MB
            max-file: "3"      # 最大5ファイル(合計500MB程度) 
    
  • opencode.json
    opencode.json
    {
      "$schema": "https://opencode.ai/config.json",
      "provider": {
        "lmstudio": {
          "npm": "@ai-sdk/openai-compatible",
          "name": "llama.cpp (Server)",
          "options": {
            "baseURL": "http://host.docker.internal:9000/v1",
            "apiKey": "dummy-key"
          },
          "models": {
            "Qwen3-Coder": {
              "name": "Qwen3-Coder"
            }
          }
        }
      },
      "permission": {
        "read": "allow",
        "write": "allow",
        "edit": "allow",
        "glob": "allow",
        "grep": "allow",
        "lsp": "allow",
        "bash": "allow",
        "webfetch": "allow",
        "websearch": "allow",
        "external_directory": "deny",
        "doom_loop": "ask"
      },
    
      "instructions": [
        "回答やコードコメント、説明は基本的に日本語で行ってください。",
        "Python 3.10以上を使用してください。",
        "関数にはdocstringを書いてください。",
        "可読性を優先してください。",
        "標準ライブラリを優先し、新しい依存ライブラリは必要な場合のみ追加する。",
        "ソースコードの理解を深めるためのコメントを日本語で付けて下さい。"
      ]
    }
    
    opencode.jsonは workspace ディレクトリに置きます。
Qwen Code CLI

QwenCodeについて、公式ホームページにはcurlを利用したインストールが紹介されていますが、Github QwenLM /qwen-code に書いてある npmを利用する方法でインストールします。

  • Dokerfile
    Dockerfile
    FROM python:3.14-slim
    
    # タイムゾーン
    ENV TZ=Asia/Tokyo
    
    ENV DEBIAN_FRONTEND=noninteractive
    
    # Node.js をインストール(例: Node 20)
    RUN apt-get update && apt-get install -y curl gnupg \
        && curl -fsSL https://deb.nodesource.com/setup_lts.x | bash - \
        && apt-get install -y nodejs \
        && apt-get clean \
        && rm -rf /var/lib/apt/lists/*
    
    # よく使うPythonライブラリ
    RUN pip3 install --no-cache-dir numpy matplotlib tqdm pillow openpyxl 
    
    # Qwen Coder CLI
    RUN npm install -g @qwen-code/qwen-code
    
    WORKDIR /workspace
    
    CMD ["bash"]
    
  • compose.yml
    compose.yml
    services:
      qwen-code:
        build: .
        container_name: qwen-code
        stdin_open: true
        tty: true
        working_dir: /workspace
        volumes:
          - ./workspace:/workspace
        environment:
          # OpenAI Compatible API
          OPENAI_BASE_URL: http://host.docker.internal:9000/v1
          OPENAI_API_KEY: "no-key-required"
          OPENAI_MODEL: Qwen3-Coder-30B-A3B-Instruct-Q4_K_M.gguf
    
    環境変数で、ローカルLLMを指定します。
GitHub Copilot CLI

GitHub Copilot、公式ホームページにある npmを利用する方法でインストールします。

  • Dockerfile
    Dockerfile
    FROM python:3.14-slim
    
    ENV DEBIAN_FRONTEND=noninteractive
    
    # よく使うPythonライブラリ
    RUN pip3 install --no-cache-dir numpy matplotlib tqdm pillow openpyxl 
    
    RUN apt-get update && \
        apt-get install -y --no-install-recommends \
            curl \
            ca-certificates \
            git \
            build-essential && \
        curl -fsSL https://deb.nodesource.com/setup_22.x | bash - && \
        apt-get install -y nodejs && \
        rm -rf /var/lib/apt/lists/*
    
    # Github Copilot CLI
    RUN npm install -g @github/copilot
    
    WORKDIR /workspace
    
    CMD ["bash"]
    
  • compose.yml
    compose.yml
    services:
      copilot:
        build: .
        container_name: copilot
        stdin_open: true
        tty: true
        working_dir: /workspace
        volumes:
          - ./workspace:/workspace
        environment:
          # 接続先URL。注意点として、 /v1まで指定する必要あり
          COPILOT_PROVIDER_BASE_URL: http://host.docker.internal:9000/v1
          # API種別
          COPILOT_PROVIDER_TYPE: openai
          # 使用モデル
          COPILOT_MODEL: Qwen3-Coder-30B-A3B-Instruct-Q4_K_M
          COPILOT_OFFLINE: true
          # ダミーの API キー(OpenAI互換エンドポイントで要求される場合の対策)
          OPENAI_API_KEY: "lm-studio"
          GH_COPILOT_TOKEN: "dummy-token"
    
Claude Code CLI

Claude Codeのインストールも、npmで行います

  • Dockerfile
    Dockerfile
    FROM python:3.14-slim
    
    ENV DEBIAN_FRONTEND=noninteractive
    
    # よく使うPythonライブラリ
    RUN pip3 install --no-cache-dir numpy matplotlib tqdm pillow openpyxl 
    
    # 必要なパッケージ
    RUN apt-get update && apt-get install -y \
        curl \
        git \
        ca-certificates \
        && rm -rf /var/lib/apt/lists/*
    
    # Node.js 22 LTS をインストール
    RUN curl -fsSL https://deb.nodesource.com/setup_22.x | bash - \
        && apt-get update \
        && apt-get install -y nodejs \
        && rm -rf /var/lib/apt/lists/*
    
    # Claude Code CLI
    RUN npm install -g @anthropic-ai/claude-code
    
    WORKDIR /workspace
    
    CMD ["bash"]
    
  • compose.yml
    compose.yml
    services:
      claude:
        build: .
        container_name: claude
        stdin_open: true
        tty: true
        working_dir: /workspace
        volumes:
          - ./workspace:/workspace
        environment:
          ANTHROPIC_BASE_URL: http://host.docker.internal:9000
          ANTHROPIC_API_KEY: "sk-no-key-required"
          #ANTHROPIC_MODEL: "local-model"
          #ANTHROPIC_SMALL_FAST_MODEL: "local-model"
          #CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC: "1"
    

結果

エージェント 結果 時間(*1) コメント
OpenCode CLI 1.18.15 ◯1回修正 6'15"
Qwen Code CLI 0.21.7 7'08" 動作中に、イースターエッグ的なメッセージが出ます。
GitHub Copilot CLI 1.0.78 ◯1回修正 4'45"
Claude Code CLI 2.1.226 (*2) - - 25分経っても終わらなかった
何らかのループに陥った?
ブラウザからアクセス(*3) 1'50" ファイルは保存してくれない

(*1)「時間」は、1回めのコーディングが終わるまでの時間です。
(*2)実行時に、「local-model」は、このバージョンのClaude Codeが認識するモデルではないため……という警告が出ましたが、掘り下げてはいません。
(*3)llama.cpp-serverにブラウザでアクセスし、プロンプトを入れました。

  • 操作感はどのCLIも大差ありませんでした。
  • ソースコードも大差ありませんでした。すべてのエージェントが、qrcodeとPillowを使った影響でしょう。
  • OpenCodeだけ、英語のコメント、英語のREADME.mdでした。他は日本語
  • Claude Code CLIは、@minato1198さんのバッチファイルでllama.cpp-serverを起動すれば、動くコードを出力してくれました。ただし、20分以上かかりました。
  • ボタンなどのレイアウトを指定しなかったので、見た目は違いました。
  • 試行回ごとに、コードが若干違いました。--確率で単語をつないでいるのだな~
  • この程度のソフトウエアであれば、ブラウザからの対話で十分でした。
  • エージェントはもっと規模の大きなソフトを作るときに使うのでしょう。

2026/08/12の結果です。各エージェントのバージョンも低いことですので、どんどん変わってゆくと思います。

まとめ

コードを1行も書かずにプログラムができてしまいました。コードどころか、プロンプト(指示書、仕様書)もLLMに作ってもらいました。
バイブコーディングはすごいと思います。
すごいのですが……
プログラムが動けば、ソースコードを見る(理解する)気が起きません。

バイブコーディング……

  1. 電卓を使うようになって、暗算ができなくなりました。
  2. ワープロを使うようになって、漢字が書けなくなりました。
  3. 生成AIを使うようになって、コードが書けなくなりました??

スマートフォンを使う人は、スマートフォンの内部がどうなっているかを知る必要はありませんが、スマートフォンを作る人は、内部を詳しく知っておく必要があると思います。
同様に、プログラムを作る人は、LLMやコーディングエージェントの中身を知る必要はないかもしれませんが、できたソフトの中身を知っておく必要があるのではないでしょうか。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?