tameshita新しいツールを実際に動かした記録

piとは?使い方・無料で動かす方法を実際に使って調べてみた動いた

配布元: https://github.com/earendil-works/pi  / 2026-10-23 時点で確認

この日に実際に動かした結果です。内容の誤りに気づかれた場合はお問い合わせください。確認のうえ訂正します。

使う前に分かること

必要なものNode.js 22.19以上、Ollama(無料で使えるローカルAI実行ソフト)
動かした環境Linux(x86_64)のクラウド環境、Node.js 22.22.0。
日本語画面・文書は英語
確認日2026-10-23(この日に実際に動かした)

Claude CodeやCodexのようなAIコーディングエージェントを試したくても、まず契約やAPIキーの用意が要ることに引っかかる人もいると思います。今回試したPiは、拡張機能やSkillを自分で足して組み立て直せる、オープンソースのコーディングエージェントです。本体が最初に案内する使い方は、サブスクリプションかAPIキーで有料のAIモデルに繋ぐことが前提ですが、無料のOllamaでローカルに動かすAIモデルを繋ぐ入れ方も、公式のドキュメントに用意されています。今回はそちらを使い、日本語で現実的な修正を頼んで、実際にファイルが書き換わるところまでを試しました。拡張機能・Skill・MCP連携・有料のAIプロバイダとの接続は試していません。

Pi本体を入れる

ターミナルを開きます。公式の案内はcurl -fsSL https://pi.dev/install.sh | shですが、同じ案内の中に「npmで直接入れる」という代わりの入れ方も載っています。今回はこちらを使いました。npmはNode.jsに付いてくる道具なので、先にNode.jsのバージョンを確認しておきます(22.19以上が必要です)。

node --version
v22.22.0

バージョンを確認できたら、Piを入れます。

npm install -g --ignore-scripts @earendil-works/pi-coding-agent
added 119 packages in 8s

入ったバージョンを確認します。

pi --version
1.4.0

無料で動かすため、Ollamaでモデルを用意する

Pi起動後の/loginはAnthropicやOpenAIなど契約・APIキーのあるプロバイダに繋ぐのが主線ですが、ドキュメントの「モデルの選び方」のページには、無料のOllamaのような「OpenAI互換」のサーバーを設定ファイルに登録して使う入れ方も載っています。お金をかけずに試すため、今回はこちらを使いました。

まずOllama本体を入れます。

curl -fsSL https://ollama.com/install.sh | sh
>>> Install complete. Run "ollama" from the command line.

Ollamaを起動し、コーディング向けの軽量なモデルを1つ取り込みます。

ollama pull qwen2.5-coder:3b
success

Piの設定は、ホームフォルダの中にある.pi/agentという(頭に.が付いた、ふだんは見えない)フォルダにまとまっています。ここにmodels.jsonというファイルを作り、取り込んだモデルをPiに教えます。ターミナルから、フォルダを作ってファイルの内容を書き込みます。

mkdir -p ~/.pi/agent
cat > ~/.pi/agent/models.json << 'EOF'
{
  "$schema": "https://pi.dev/schemas/models.schema.json",
  "providers": {
    "ollama": {
      "baseUrl": "http://localhost:11434/v1",
      "api": "openai-completions",
      "apiKey": "ollama",
      "models": [
        { "id": "qwen2.5-coder:3b" }
      ]
    }
  }
}
EOF

ちゃんと書き込めたか、内容を表示して確認します。

cat ~/.pi/agent/models.json
{
  "$schema": "https://pi.dev/schemas/models.schema.json",
  "providers": {
    "ollama": {
      "baseUrl": "http://localhost:11434/v1",
      "api": "openai-completions",
      "apiKey": "ollama",
      "models": [
        { "id": "qwen2.5-coder:3b" }
      ]
    }
  }
}

Piのモデル一覧にも出てくるか確認します。

pi --list-models ollama
ollama          qwen2.5-coder:3b                           128K     16.4K    no        no

ollamaの列にqwen2.5-coder:3bが出てきました。Ollamaのモデルが、Piから使える状態になったということです。

日本語でコードの修正を頼んでみる

題材として、名前を1回だけ挨拶する、ごく簡単なPythonのスクリプトを用意しました。

def greet(name):
    print("Hello, " + name)

greet("World")

ターミナルで、このファイルを置いたフォルダにcdで移動します。一度だけ答えて終わる--printと、使うモデルを指定する--model ollama/モデル名を付けて、日本語の指示をそのままコマンドの中に入れて頼みます。

pi --model ollama/qwen2.5-coder:3b --print "greet関数に、挨拶する回数を指定できる引数timesを追加して(デフォルトは1回)。"

返ってきたのはこれだけでした。

{"name": "edit", "arguments": {"path": "/path/to/greet.py", "edits": [{"newText": "def greet(times=1):", "oldText": "def greet():"}]}}

ファイルを編集する道具(edit)を呼んでいるような形のJSON文字列が、そのまま答えの本文として出てきただけでした。実際にファイルが直っているか、catコマンドで確かめます。

cat greet.py
def greet(name):
    print("Hello, " + name)

greet("World")

最初のまま、何も変わっていませんでした。Ollamaに同じ条件で直接ツール呼び出しを頼んでみても、同じようにツールは呼ばれず、JSON文字列が答えの本文に出るだけでした。つまりPi側の問題ではなく、Ollamaがこのモデルで返す答えの形が、Piが期待する形と違っていたということです。

同じ系列の大きいモデル(7b)に替えても、結果は同じでした。モデルを変えるには、コマンドの--modelに続く名前を書き換えるだけです。

pi --model ollama/qwen2.5-coder:7b --print "greet関数に、挨拶する回数を指定できる引数timesを追加して(デフォルトは1回)。"
{"name": "bash", "arguments": {"command": "echo \"function greet(times=1) { echo 'Hello!'; }\""}}

モデルをMeta製のllama3.1(8b)に替えて同じ依頼をすると、今度はツールを呼ばず、ふつうの説明文で返ってきました。

pi --model ollama/llama3.1:8b --print "greet関数に、挨拶する回数を指定できる引数timesを追加して(デフォルトは1回)。"
このコードにはデフォルト引数times = 1が指定されているので、以下の様にtimesを指定しなくても、greet 関数を 1 回呼ぶことができます。

ファイルはまだ書き換わっていません。頼み方を具体的にし、「ファイルを直接書き換えて」と付け足して頼み直しました。

pi --model ollama/llama3.1:8b --print "greet.pyのgreet関数を実際に編集して、挨拶する回数を指定できる引数timesを追加して(デフォルトは1回)。ファイルを直接書き換えて。"
このスクリプトは、`times`引数を指定無指定で1回となり、`greet`関数は挨拶が`times`個複製されるようになります。

もう一度catでファイルの中身を確かめます。

cat greet.py
def greet(name: str, times: int = 1):
    print(f"Hello, {name}!")
    print("Goodbye, {name}!")
    if times > 1:
        for i in range(times - 1):
            print(f"Hello, {name}!")

今度はファイルが実際に書き換わっていました。timesという引数と、その回数だけ挨拶を繰り返す処理は確かに足されています。ただ、元にあったgreet("World")という呼び出し自体が消えていて、print("Goodbye, {name}!")の行はf文字列のfが付いていないため、このままでは{name}という文字がそのまま出力されます。無料のローカルモデルでは、こうした細かい取りこぼしが混ざることがある、という点は覚えておいた方がよさそうです。

まとめ

Pi本体は、契約やAPIキーのある有料のAIモデルに繋ぐのが主線の案内でしたが、無料のOllamaを設定ファイルに登録する入れ方も用意されていて、お金をかけずに日本語でコーディングを頼むところまで試せました。ただ、ツール呼び出しにうまく対応していないモデルもあり(qwen2.5-coder系)、llama3.1に替えてもすぐには動かず、頼み方を一歩具体的にしてようやく実際のファイルが書き換わりました。でき上がったコードにも、f文字列の付け忘れという小さな不具合が混ざっていました。無料で試すだけなら十分に使えますが、任せるコードの精度はモデル選びと頼み方にかなり左右される、という手応えでした。もっと確実な結果が欲しければ、AnthropicやOpenAIなど契約・APIキーのあるプロバイダに/loginで繋ぐ方法も用意されています。

確認した環境

Linux(x86_64)のクラウド環境、Node.js 22.22.0、Ollama 0.40.9(GPUなし、CPU推論)で確認しました。Windows・macOS向けのインストーラも用意されていますが、そちらは試していません。

おすすめのツール・サービス