CLIからローカルLLMを使う|OpenClaude+LMStudioで問題解いてみた
ローカル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/openclaudeLMStudioを設定
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-a4bopenclaude実行前に、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が呼び出されているのも確認できます。

途中、ファイルを作成してよいかなどの問い合わせがあるので、Yesを選択して処理を実行します。何度か許可するとサンプルのテストも完了して、solution.pyと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 で範囲和と更新を管理する。
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も使ってみたいと思います。
