PowerPC MacからApple Siliconまで、クラシックなMac体験を届けるアプリを配布しています。 なぜまだ使えるMacを捨てるのか。究極のエコは使い続けること。
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に相談役の役職を与えました。
curl — PowerPC/Tiger向けにビルド済みの、TLS 1.2/1.3対応curl(Tiger標準のcurlは現在のHTTPSサーバーに接続できません)cacert.pem — 最新のCA証明書バンドルclaude-agent.pl — エージェント本体。単一のPerlファイルで、外部CPANモジュール依存はゼロInstall.command — ダブルクリックするインストーラーread_file / write_file / list_dir / run_shellppc-claude-agent.zip を解凍し、フォルダごと対象のPowerPC Macにコピー(USBメモリやファイル共有などで)Install.command をダブルクリック。ターミナルが開きますadvisor と入力してくださいコンパイルもMacPortsもXcodeも不要です。コマンド名は特定のAIの名前ではなくadvisorです。セットアップ時に両方のキーを追加すれば、会話中に/claudeや/geminiといつでも打って切り替えられます(会話はそのまま引き継がれます)。
このプロジェクト(エージェント本体とインストーラー)自体は自由に使えますが、実際に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を使わない別ルートを一から作った形です。ここでは実際にぶつかった壁と、その乗り越え方を紹介します。
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を足して、指定したパスをシステムパスより先に探すよう強制して解決しました。
claude-agent.plはTiger標準のPerl 5.8.6だけで動く単一ファイルで、外部CPANモジュールへの依存はゼロです。JSON encode/decodeも、ClaudeとGemini両APIのメッセージ構造に必要な分だけの再帰下降パーサーを自前で書いています。HTTP通信はPerl側に持たせず、ビルドしたcurlをサブプロセスとして呼び出す形にしていて、これでビルドが必要な部分をOpenSSLとcurlの2つだけに閉じ込めています。
会話履歴は、どちらのプロバイダを使っていてもAnthropicのMessages API形式で内部保持していて、Geminiと話す時だけ、API呼び出しの瞬間にGeminiのcontents/parts/functionCall形式に変換し、応答が返ってきたらすぐ元の形式に戻します。URLとヘッダーを外から渡す形に変えたことで、call_api自体は「このJSONをPOSTしてJSONを受け取るだけ」の完全に汎用的な関数になりました。結果、このファイルの大部分を占めるターミナル入力処理とツール実行(read_file/write_file/list_dir/run_shell)のコードは、2つ目のプロバイダに対応するために一切変更せずに済みました。
:encoding(UTF-8)層は、バッファの境目でマルチバイト文字が分割されるとutf8 "\xXX" does not map to Unicodeという警告と文字化けを起こします。今回はレスポンス読み込み側で、run_shellの結果に「ダウンロード」というフォルダ名が含まれていた時に発覚しました。直し方も同じで、生バイトで読んでから、まとめてデコードするようにしています。
実機で実際に使ってもらいながら、ターミナル入力周りのバグを何度も踏みました。
このエージェント自体は自由に配布できますが、実際に動かすには利用者ごとに、選んだプロバイダのAPIキーが必要です。Geminiの無料枠を使えば、本当に一切お金をかけずに始められます(クレジットカード登録も不要)。コードにAPIキーは埋め込まれていないので、配布者の請求先が他人に渡ることはありません。
ソースコードはGitHubにあります。