« アプリ一覧に戻る

PPC Claude Agent

PowerPC Mac (Tiger) 向け

20年前のPowerPC Macを、実用的なAIコーディングアシスタントとして活かすための自作プロジェクトです。公式のClaude Code CLIはNode.js 18+が前提で、Tiger時代の古いPowerPC環境では動かせません。そこで、 curl経由でAI APIを直接叩く自己完結型の軽量エージェントをPerlで実装しています。使うAPIはClaude(Anthropic)かGemini(Google、クレジットカード不要の無料枠あり)から選べます。Node.jsも、利用者側でのコンパイルも不要です。

なぜ作ったか

「昔のMacでもちゃんと動くアプリを作ってもう少し楽しもうぜ!だって壊れにくいしかっこいいだろ?」— このサイトのアプリは大体そんな気持ちで作ってるんですが、これだけは少し違います。

学生の頃、無理して買ったiBookがあります。父は大手企業の支店長で、ゴルフ三昧の合間にトヨタでもレクサスでもなくBMWの新車に乗っていて、そのあとはもっと贅沢なNISSAN GT-Rに乗り換えました。それなのに、私には一円も使ってくれませんでした。私は理系の大学を中退して、写真スタジオのアシスタントの仕事を掛け持ちしていました。撮影のメモとか、照明の特性のメモとか、そういうのを全部あのiBookに書いていたんです。

だから、あの古いiBookを、良き相談役にしようと思いました。物腰柔らかな教授に相談するみたいに。あの頃書いていた古びたノートに、そっと追記してもらう感じで。Photoshopみたいな重い処理はできないマシンだから、それでいいんです。むしろ、それがいいんです。

PPC Claude AgentがClaude(Anthropic)を使っているのは、単純にコーディングエージェントとして優秀だったからです。コンセプトさえちゃんと伝えれば、自分でコードを書けなくてもしっかり形にしてくれる。そして昔話や相談にものってくれる。あの頃のiBookに相談役の役職を与えました。

ppc-claude-agent.zip をダウンロード
これまでのダウンロード数: 69
最終更新日: 2026-08-28(v1.2.1)
※ Tiger標準のSafari/curlは現代のHTTPS証明書を検証できないため、ここから直接ダウンロードできない場合があります。当サイトでは Aquafox(当サイトが日本語化パックを配布しているPowerPC向けブラウザ)をおすすめします。現代のHTTPSも普通に扱えます。難しい場合は、現代のMacで取得してからコピーするか、Tigerbrew/MacPorts経由の新しいcurlをご利用ください。

更新履歴

  • 2026-08-28 — Anthropic (Claude) に加えて、クレジットカード不要の無料枠があるGemini (Google) にも対応。セットアップ時にどちらを使うか選べる
  • 2026-08-28 — 起動コマンドを claude から advisor に変更(特定のAIブランドに縛られない名前に)。会話中に /claude・/gemini でその場でAIを切り替え可能に(会話は引き継がれる)
  • 2026-08-28 — Geminiへの応答が実機で約30秒かかっていた問題を修正、体感3秒程度に短縮(個体差あり)。Gemini 3系は指定しないと内部思考レベルが最大(HIGH)になる仕様で、軽い質問向けにLOWをデフォルトにした(CLAUDE_GEMINI_THINKING=highで元に戻せる)
  • 2026-08-28 — 配布用インストーラー(Install.command)がAnthropicのみ対応のままだったのを、Gemini選択・advisorコマンドに対応させ、setup.shと同じ内容に揃えた
  • 2026-08-28 — Geminiのデフォルトモデルを gemini-3.6-flash から gemini-3.5-flash-lite に変更。実機で試した結果、gemini-3.6-flashの無料枠は1日20回しか無いことが判明したため(flash-liteはもっと大きな無料枠がある)
  • 2026-08-22 — IME経由の日本語入力に0x16のゴミバイトが混入し文字化けする不具合を修正
  • 2026-08-22 — Install.commandの「Enterキーで閉じます」という実態と異なる表示を修正
  • 2026-08-22 — 特定の入力の直後にEnterキーが認識されないことがある不具合を修正
  • 2026-08-22 — 日本語などの入力時、1文字ごとに改行され行編集ができない不具合を修正
  • 2026-08-22 — 日本語入力時に画面が「◆」で埋まる文字化けを修正
  • 2026-08-22 — インストーラー再実行時にAnthropic APIキーの再入力を求められる不具合を修正
  • 2026-08-22 — 矢印キー入力でカーソル移動の代わりに文字が挿入されてしまう不具合を修正

同梱内容

  • curl — PowerPC/Tiger向けにビルド済みの、TLS 1.2/1.3対応curl(Tiger標準のcurlは現在のHTTPSサーバーに接続できません)
  • cacert.pem — 最新のCA証明書バンドル
  • claude-agent.pl — エージェント本体。単一のPerlファイルで、外部CPANモジュール依存はゼロ
  • Install.command — ダブルクリックするインストーラー

主な機能

  • Tiger標準のPerl 5.8.6だけで動作。対象のMac側でビルドツールは一切不要
  • 4つのツールを実装: read_file / write_file / list_dir / run_shell
  • ファイル書き込みとシェル実行は、誤操作防止のため実行前に確認プロンプトを表示
  • HTTP通信は同梱のcurlをサブプロセスとして呼び出す方式で、TLS実装をPerl側に持たせない設計
  • 入力した言語(日本語・英語など)に合わせて自動的に返答言語が切り替わる。クライアント側での言語設定は不要

インストール手順

  1. ppc-claude-agent.zip を解凍し、フォルダごと対象のPowerPC Macにコピー(USBメモリやファイル共有などで)
  2. Install.command をダブルクリック。ターミナルが開きます
  3. 最初にどちらのAIを使うか聞かれます: Claude(Anthropic、一番賢いが有料のAPIキーが必要)かGemini(Google、無料枠あり・クレジットカード不要)。案内に沿って進めてください。キーの取得方法もインストーラーが説明します
  4. 「セットアップ完了!」と表示されたら、新しいターミナルウィンドウを開いて advisor と入力してください

コンパイルもMacPortsもXcodeも不要です。コマンド名は特定のAIの名前ではなくadvisorです。セットアップ時に両方のキーを追加すれば、会話中に/claude/geminiといつでも打って切り替えられます(会話はそのまま引き継がれます)。

APIキーについて(課金)

このプロジェクト(エージェント本体とインストーラー)自体は自由に使えますが、実際にAIと会話するには、選んだプロバイダのAPIキーを利用者ひとりひとりが発行する必要があります。Claudeのキーは console.anthropic.com での従量課金制で、claude.aiのサブスクリプションとは別のサイト・別の課金体系です。Geminiのキーは aistudio.google.com で無料発行でき、クレジットカードの登録も不要です。コードにAPIキーは一切含まれておらず、claude-agent.plは環境変数からキーを読むだけなので、配布者のキーや請求先が他人に渡ることはありません。インストーラーが選んだ方のキーの発行まで案内します。

対応環境

動作環境PowerPC Mac / Mac OS X 10.4 (Tiger)
動作確認機種iBook G4 (PowerBook6,5)
備考同梱のcurlはCPU固有の最適化なしでビルドされているため、他のPowerPC Tiger機でも動く可能性が高いですが、全機種での検証は行っていません。

個人の趣味プロジェクトにつき無保証です。お使いの機種でcurlが動作しない場合は、プロジェクト本体に含まれるビルドスクリプトを使ってソースからTLSツールチェーンをビルドする手順もあります。

PPC Claude Agentの中身は、curl経由でAI API(AnthropicかGemini)を直接叩くだけの、単一ファイルのPerlスクリプトです。公式のClaude Code CLIはNode.js 18+が前提で、PowerPCを切り捨てたV8の上では動かないので、 Node.jsを使わない別ルートを一から作った形です。ここでは実際にぶつかった壁と、その乗り越え方を紹介します。

本当の壁はTLS 1.2だった

AnthropicのAPIはTLS 1.2以上が必須ですが、Tiger標準のOpenSSLは0.9.7l系でTLS 1.0にも届きません。 Pythonのバージョンをどうこうしても解決せず、OpenSSLとcurl自体をソースからビルドし直す必要がありました。しかもTigerbrewやMacPorts経由でパッケージを取ろうとしても、その取得自体がTLS 1.2 必須のHTTPS接続を要求するので、「新しいcurlを入れるために新しいcurlが要る」という鶏卵問題にぶつかります。これを避けるため、ソースのtarballは別のモダンな端末でダウンロードしてscpでiBookに転送し、実際のビルドはiBook本体(PowerPC/G4)でやる、という形にしました。一番重い処理はちゃんと G4がやっているので、「G4単体で動かす」という目標は保てています。

リンカが勝手に古いライブラリを掴む

curlをビルドする段になって、EVP_sha256のような比較的新しいシンボルが軒並み「未定義」になり、実行時にdyld: Symbol not foundで落ちる、という紛らわしい不具合に当たりました。原因はTLSではなく、 DarwinのldがLでの指定より先にシステム標準の/usr/lib/libssl.dylib(Tiger添付のOpenSSL 0.9.7l)を掴んでしまっていたこと。LDFLAGSに-Wl,-search_paths_firstを足して、指定したパスをシステムパスより先に探すよう強制して解決しました。

外部依存ゼロのPerlエージェント

claude-agent.plはTiger標準のPerl 5.8.6だけで動く単一ファイルで、外部CPANモジュールへの依存はゼロです。JSON encode/decodeも、ClaudeとGemini両APIのメッセージ構造に必要な分だけの再帰下降パーサーを自前で書いています。HTTP通信はPerl側に持たせず、ビルドしたcurlをサブプロセスとして呼び出す形にしていて、これでビルドが必要な部分をOpenSSLとcurlの2つだけに閉じ込めています。

ファイルの大部分を触らずにGeminiを追加する

会話履歴は、どちらのプロバイダを使っていてもAnthropicのMessages API形式で内部保持していて、Geminiと話す時だけ、API呼び出しの瞬間にGeminiのcontents/parts/functionCall形式に変換し、応答が返ってきたらすぐ元の形式に戻します。URLとヘッダーを外から渡す形に変えたことで、call_api自体は「このJSONをPOSTしてJSONを受け取るだけ」の完全に汎用的な関数になりました。結果、このファイルの大部分を占めるターミナル入力処理とツール実行(read_file/write_file/list_dir/run_shell)のコードは、2つ目のプロバイダに対応するために一切変更せずに済みました。

Gemini 3は、ツール呼び出しのthoughtSignatureを送り返さないと400エラーになる。 Geminiがfunction Callを返す時、そこには不透明なthoughtSignatureという署名が付いてきます。次のターンで同じパーツに同じ署名を付け直さずに送り返すと400エラーになります — Gemini 2.5までは任意でしたが、3系では特に告知もなく必須の検証に変わっていました。実際のiBookで、複数回のツール呼び出し(list_dir → run_shell → run_shell → list_dir)が途中で失敗するのを見て発覚しました。今は内部のtool_useブロックにこの署名を乗せておいて、Geminiの形式に再変換する時に付け直すようにしています。
APIレスポンス自体が日本語を化けさせることがあった。 下の方のSTDINのバグと全く同じ原因で、Perl 5.8.6のPerlIO :encoding(UTF-8)層は、バッファの境目でマルチバイト文字が分割されるとutf8 "\xXX" does not map to Unicodeという警告と文字化けを起こします。今回はレスポンス読み込み側で、run_shellの結果に「ダウンロード」というフォルダ名が含まれていた時に発覚しました。直し方も同じで、生バイトで読んでから、まとめてデコードするようにしています。

端末入力まわりで踏んだバグの数々

実機で実際に使ってもらいながら、ターミナル入力周りのバグを何度も踏みました。

矢印キーが文字として入力される。 最初はSTDINでそのまま読んでいたため、カーソル移動の概念がなく、矢印キーの生エスケープシーケンス(ESC [ C など)がそのまま文字として入力されてしまっていました。stty rawモードの簡易行編集を自前で実装して解決。
日本語入力で画面が「◆」だらけになる。 行編集機能が入力を1バイトずつ読んで毎回再描画していたため、日本語(1文字3バイト)の途中の不完全なバイト列を「◆」に変換してしまっていました。1文字分のバイトが揃ってからバッファに追加するように直しました。
1文字打つごとに改行されて行編集にならない。 再描画のたびにプロンプト文字列をまるごと再出力していたのですが、そのプロンプト文字列自体が先頭に改行を含んでいたため、打つたびに本物の改行が送られ続けていました。プロンプトの先頭改行を、最初の1回だけ出すように直しました。
Enterが時々無視される。 マルチバイト文字の続きバイトを検証せずに決め打ちで読み進めていたため、実際の入力に想定外のバイトが混ざっていると、直後に来たEnterごと「続きバイト」として飲み込んでしまうことがありました。続きバイトが本当にその形式かどうか検証し、違えば読み戻して単独のキー入力として扱うように修正。
Terminal.appが日本語の各バイトの前に0x16を付けてくる。 ここまでの修正を経てもなお日本語が化けていた根本原因で、実機のTerminal.appがIME確定テキストを送るとき、各バイトの前に LNEXT(0x16)を付与してくることが分かりました。デバッグログを一時的に仕込んで実際のバイト列を確認し、0x16を読み飛ばして次のバイトを本来のデータとして扱うよう修正しています。

今後 / 配布にあたって

このエージェント自体は自由に配布できますが、実際に動かすには利用者ごとに、選んだプロバイダのAPIキーが必要です。Geminiの無料枠を使えば、本当に一切お金をかけずに始められます(クレジットカード登録も不要)。コードにAPIキーは埋め込まれていないので、配布者の請求先が他人に渡ることはありません。

ソースコードはGitHubにあります。