機械学習
記事内に商品プロモーションを含む場合があります

CLIからローカルLLMを使う|OpenClaude+LMStudioで問題解いてみた

Aru

ローカルLLMが呼び出せるコマンドライン形式のツール”OpenClaude”をLMStudioと組み合わせて使ってみたので紹介します。

OpenClaudeとは

OpenClaudeは、GPT-4o, DeepSeek, Gemini, Llama, …などの任意のモデルをプラグインできるClaude CodeやGemini CLIのようなCLIのツールです。

https://github.com/Gitlawb/openclaude

私が使っているLMStudioをプロバイダーとして使う方法も解説されていましたので、早速動作検証してみました。

インストール

npmを使うのであればインストールは非常に簡単です。以下のコマンドを実行するだけです。

npm install -g @gitlawb/openclaude

LMStudioを設定

LMStudioを設定する場合は以下のようにします。

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_BASE_URL=http://localhost:1234/v1
export OPENAI_MODEL=your-model-name

今回は、Qwen3.5 35B-A3Bをモデルとして使いたいので以下のように設定します。

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_BASE_URL=http://localhost:1234/v1
export OPENAI_MODEL=qwen/qwen3.5-35b-a3b

上記を.bashrcや、.zprofile等に書き込めばOKです。私は試しに動かしてみるだけなので、コマンドラインに書き込み、設定しました。

実行してみる

以下のコマンドで実行できます。

openclaude

あとは、Claude CodeやGemini CLIと同じように使えます。

起動画面

AtCoderの問題を解いてみる

OpenClaudoを起動して、AtCoderの問題を解いてみました。

フォルダには、以下のようなファイルを用意しています。

.
├── awc0006_e.md
├── export.sh
├── t1
├── t1_out.txt
├── t2
├── t2_out.txt
├── t3
└── t3_out.txt

awc0006_e.mdは、AtCoder AWC0006のE問題(リンク)をMarkdown形式に変換したテキストで、t?, t?_out.txtは、サンプルの入力と出力です。

export.shは、OpenClaudeでLMStudioのモデルを使う設定で、以下のような内容です(githubの公式に書かれています)

export CLAUDE_CODE_USE_OPENAI=1
export OPENAI_BASE_URL=http://localhost:1234/v1
export OPENAI_MODEL=google/gemma-4-26b-a4b

openclaude実行前に、source ./export.shと実行することで、これらを設定しておきます。

あとは、以下のようなプロンプトで問題を解かせました。


## 実行フロー
### 1. 問題の理解と解法立案
awc0006_e.mdファイルを読み込み、以下の手順を日本語で出力してください。
   
1. フォルダにあるMarkdownファイルを読み込み、以下の手順を実行する
2. **問題の理解**: 要約
3. **方針の整理**: 計算量とアルゴリズムの選定。
4. 2の要約と、3のアルゴリズム選定について`solution.md`に書き込む
5. **実装**: 以下の制約を守り `solution.py` を作成する。
   - 言語: Python (入力は `input()` を使用、`sys.stdin` 禁止)
   - 出力・解説: すべて日本語

### 2. テストの自動実行
`solution.py` 作成後、カレントディレクトリ(または指定フォルダ)にあるテストケース `t1, t2, ...` を入力とし、その結果を `t1_out.txt, t2_out.txt, ...` と比較して検証してください。

### 3. 検証スクリプトの実行例
以下のシェル操作を順次実行して結果を報告すること:
1. `python3 solution.py < t1 > result_t1.txt`
2. `diff -u result_t1.txt t1_out.txt`
3. すべてのテストケース(t1, t2...)に対して繰り返し、不一致があれば修正案を提示して再試行すること。

## 特記事項
- 問題の特徴(A-F難易度、演算量1e7、DP/二分探索等)を考慮すること。
- テストケースが1つでも失敗した場合は、原因を分析し、コードを修正して再度テストを実行すること。

処理中にLMStudioが呼び出されているのも確認できます。

LMStudioの画面

途中、ファイルを作成してよいかなどの問い合わせがあるので、Yesを選択して処理を実行します。何度か許可するとサンプルのテストも完了して、solution.pysolution.mdが作成されます。

solution.md

# 問題の理解

$N$ 個の店舗があり、各店舗に初期売上 $S_i$ がある。以下の2種類のクエリを $Q$ 回処理する。

– タイプ 1: 指定範囲 $[L, R]$ の売上の合計を出力。

– タイプ 2: 店舗 $X$ の売上を $V$ に更新。

# 方針の整理

**アルゴリズム**: 範囲和の取得と単一要素の更新が必要なため、**Binary Indexed Tree (BIT / フェニック木)** を使用する。

**計算量**:

– 初期構築: $O(N \log N)$

– クエリ処理: $Q$ 回のクエリに対し、各 $O(\log N)$

– 全体: $O((N + Q) \log N)$

– 制約 $N, Q \leq 2 \times 10^5$ に対して、$O((N+Q) \log N)$ は十分高速(演算量 $10^7$ 程度に収まる)。

# 実装の詳細

Python の `input()` を使用し、BIT で範囲和と更新を管理する。

solution.py

import sys

def solve():
    # 入力取得
    line1 = input().split()
    if not line1: return
    n, q = map(int, line1)
    s = list(map(int, input().split()))

    # BIT (フェニック木) の準備
    # bit[i] は 1-indexed で管理
    bit = [0] * (n + 1)

    def add(i, v):
        while i <= n:
            bit[i] += v
            i += i & (-i)

    def get(i):
        res = 0
        while i > 0:
            res += bit[i]
            i -= i & (-i)
        return res

    # 初期状態の構築
    for i in range(n):
        add(i + 1, s[i])

    # 現在の値管理用 (更新時の差分計算のため)
    cur = [0] * (n + 1)
    for i in range(n):
        cur[i+1] = s[i]

    # クエリ処理
    for _ in range(q):
        query = list(map(int, input().split()))
        if query[0] == 1:
            # タイプ 1: L R の和
            l, r = query[1], query[2]
            print(get(r) - get(l - 1))
        else:
            # タイプ 2: X を V に更新
            x, v = query[1], query[2]
            diff = v - cur[x]
            add(x, diff)
            cur[x] = v

if __name__ == "__main__":
    solve()

コードを見るとおそらく問題なさそうです。

まとめ

今回は、CLIツールのOpenClaudeを試してみました。CLIツールからLMStudioなどのローカルLLMを呼び出せるのは便利です。OpenCodeの方がコーディングエージェントとしては有名なので、次はOpenCodeも使ってみたいと思います。

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

ABOUT ME
ある/Aru
ある/Aru
IT&機械学習エンジニア/ファイナンシャルプランナー(CFP®)
専門分野は並列処理・画像処理・機械学習・ディープラーニング。プログラミング言語はC, C++, Go, Pythonを中心として色々利用。現在は、Kaggle, 競プロなどをしながら悠々自適に活動中 保有資格:CFP, マンション管理士、管理業務主任、宅建士など
記事URLをコピーしました