🫠

iPhone"だけ"でClaude Codeを実行する

に公開

はじめに

不正確な箇所or不足項目がありましたらコメント欄でご指摘、アドバイスいただければ適宜反映させていただきます。よろしくお願いします。

書いた理由

https://x.com/_fbbp/status/1935280412592685424

https://zenn.dev/kazuph/articles/abb81cf4c844d6

機種変してください。iOSで同じ方法ができるかはわかりません。誰か記事書いて。

機種変したくなかったので書きました🤗

結論

  • 最初にMacとペアリングしてMac側iPhone側でゴニョゴニョすれば最終的にiPhoneにサイドロードしたUTM上に載せたDebianでClaudeCodeが実行できるようになるよ!
  • わからなかったら(特に軽量Debian12の作成部分)沼る前に都度スクショを添付してClaudeCodeに聞こうね!
  • UTMだけだと使いづらいからsshクライアント越しに操作するといいよ!
    \詰まったらClaude Codeにスクショを送りつけて都度最適な選択肢を聞こう!//

用語解説

  • Termius: サーバー管理者、開発者、ネットワークエンジニア向けの最新のSSHクライアントアプリ
  • サイドローディング: App StoreやGoogle Playといった公式のアプリストアを経由せずに、アプリをデバイスにインストールする行為全般を指す。サイドローディングでは開発者向けのツールや仕組みを利用して、アプリ(.ipaファイル)を直接iPhoneに転送・インストールする。脱獄せずに非公式アプリをインストールできるため比較的安全とされている。が、Appleの審査を経ていないためアプリにマルウェアが仕込まれている危険性がある為、よく検討した上でインストールする必要がある。
    AltStore: サイドローディングを簡単に行うための「非公式アプリストア」。AltStoreは、Appleが開発者向けに提供している「自分のアプリをテスト用に実機へインストールする」という正規の仕組みを利用。
    1. ユーザー自身のApple
      IDを使って、インストールしたいアプリに「これは私が開発し
      たテスト用アプリです」という署名(サイン)を行う。
    2. 署名されたアプリは、Appleのシステムから正規のテスト用ア
      プリとして認識されるため、iPhoneへのインストールが許可さ
      れる。
      この仕組みにより、脱獄(Jailbreak)なしで非公式アプリのインストールを実現している。
  • AltServer: AltStoreをiPhoneにインストールし、その機能を維持するために不可欠なPC用ソフトウェア。AltServerによりAltStoreのインストールやAltStore経由でのアプリの署名更新が可能となる。
  • JIT: 実行中にリアルタイムでコードをコンパイルする技術のこと。これによりより高速な実行が可能になり、動的なコード生成ができ、エミュレーターなどの複雑なアプリが効率的に動作するようになる。Appleはセキュリティ上の理由で、iOSアプリでのJIT使用を厳しく制限している。
  • StikDebug: デバイス単体でJITを簡単に有効化できる。今年5月にApp Storeから普通にダウンロード可能になった。
  • UTM iPhoneやiPadやMac上で、WindowsやLinuxといったPC用のOSを高速に実行できる仮想マシン(エミュレーター)アプリ。
  • UTM(Mac版): UMac上でLinuxを起動してiPhone/iPad版と違い脱獄なしで最新の仮想化技術を使用できるため超高速で動作可能
  • UTM(iPhone/iPad版): JIT有効にできたり非常に高速な動作が可能。最近のLinuxディストリビューションを実用的な速度で動かすことが可能。
  • UTM SE(iPhone/iPad版): SEは「Slow Edition(スローエディション)」の略。JITの代わりにインタプリタという仕組みで動作するJITに比べてパフォーマンスが大幅に劣る。こちらを導入すれば本稿の大部分の手順が不要になります。

必要な環境

  • AltStoreとStikDebugとUTMがインストール可能なiPhone/iPad(iOSバージョンによって導入手順が異なります。詳細は公式サイトのインストールページ https://docs.getutm.app/installation/ios/ まで。本稿ではiOS18.5が導入されたiPhone13ProMaxを使用しています。)
  • UTMとJitterbugが入れられるMac(本稿ではMacOS Sequoia 15.4が導入されたM2Mac book Air メモリ 16gbを使用しています)
  • Wifiが接続できる環境(理由は後述)

手順

iPhone開発者モードを有効化

おそらく参考になるであろう動画(筆者は大分前に有効化したため内容が正確かどうかは不明なため注意)
https://www.youtube.com/watch?v=hJq8apie6B4

MacとiPhoneをJitterbugでペアリングファイルを生成してiPhoneにAirDrop

  1. iOSデバイスにパスコードを設定(していたらスキップ)
  2. Jitterbugのリリースページからダウンロード https://github.com/osy/Jitterbug/releases
  3. 起動後iPhoneをMacに接続
  4. Macでコンピューターを信頼する選択肢を選び、パスコードを入力
  5. iPhoneのホーム画面でデバイスがロック解除されている状態になった状態でMacでJitterbugを起動
  6. Jitterbugアプリ右上の共有ボタンをタップしYOUR-UDID.mobiledevicepairingをエクスポート
  7. エクスポートしたファイルをiPhoneにAirDrop経由で送信

StikDebug(App Store版)をインストール&初期設定

  1. App StoreからStikDebugをダウンロード
  2. 内蔵VPNを有効化
  3. ペアリングファイルをStikDebugに渡す

AltServerとAltStoreのセットアップ

  1. AltStore公式サイトからAltServerをダウンロードする
  2. AltServerを起動するとメニューバーにアイコンが表示
  3. USBケーブルでiOSデバイスをMacに接続し、デバイスのロックを解除とその後デバイスの信頼する設定を行う(すでに行なっている場合はスキップ)
  4. AltServerアイコンをクリック → 「Install AltStore」 → デバイスを選択
  5. Apple IDとパスワードを入力。普段使いではなく、専用のApple IDの作成を推奨。入力内容はAppleのみに送信されます。第三者には送信されません。
  6. AltStoreがiOSにインストールされる

iPhone版UTM(SEではない方) IPAのダウンロードとAltStoreでのインストール

  1. https://github.com/utmapp/UTM/releases からUTM.ipaをダウンロード(公式URLをソースに追加してダウンロードする方法もあるらしいので詳しくはAltStoreとAltServerのドキュメントを参照すること)
  2. AltStore起動→+ボタンを押す、ipaファイルをインストール。Apple IDでサインインを求められた場合は5と同様のアカウント情報を入力。
  3. サイドロードには7日間の署名期限という概念がある。無料Apple IDの場合、アプリは7日で期限切れとなり、都度有効かの必要があるので注意。有料のApple Developerアカウントを所持している場合は1度の署名で1年間有効となる。
  4. MacとiPhoneが同じWi-Fiに接続されている状態で定期的に起動していると、再署名してくれる。
  5. AltStoreの「My Apps」から「Refresh All」で一括更新可能

MacのUTMで軽量Debianを作成

当方LinuxOSの使用経験が今回がほぼなかった為、本項目は記憶している範囲で設定した部分を列挙する形をとっています。不正確な箇所or不足項目も多々あると思われます。今後本項目に関しては再更新(予定)の上、コメント欄でご指摘、アドバイスいただければそちらも適宜反映させていただきます。

  1. https://cdimage.debian.org/debian-cd/current/arm64/iso-cd/ から最新のisoファイルをダウンロード

  2. UTMアプリでLinux側の設定。Mac版は比較的高速に動くのでUTM起動前の設定の写真リンク先よりはハイスペ構成にしても良いと思われる

  3. Debianを起動
    インストール時の選択:

  • 言語: English
  • 地域: Other → Asia → Japan
  • キーボード: Japanese
  • ホスト名: debian
  • ユーザー: debian
  • パスワード: debian
  • パーティション: Guided - use entire disk
  • ソフトウェア選択:
    • Debian desktop environment(外す)
    • SSH server
    • standard system utilities
  1. ログイン画面表示後
上記で選択したユーザー名とパスワードを選ぶ

# システム更新
apt update && apt upgrade -y

# 不要サービス無効化
systemctl disable --now bluetooth
systemctl disable --now cups
systemctl disable --now avahi-daemon
systemctl disable --now ModemManager

# 開発環境インストール
curl -fsSL https://deb.nodesource.com/setup_22.x | bash -

apt install -y nodejs git curl wget vim build-essential

npm install -g @anthropic-ai/claude-code

\詰まったらClaude Codeにスクショを送りつけて都度最適な選択肢を聞こう!//

作成した軽量DebianをAirDropでiPhoneに転送しUTMを起動

  1. 起動前画面で共有ボタンを押下し、utm拡張子ファイルを保存する。
  2. 作成した軽量Debian12をAirDropでiPhoneに転送
  3. StikDebugを再起動し、Connectボタンを押す。
  4. AltStoreでインストールしたJITを有効にしたいアプリ(UTM)を選択。選択したアプリに移動し、JITありで起動される。
  5. このモーダルが出なかったらJITモードで起動できている(はず)。
    モーダル画像
  6. 以後UTMを起動する際はStikDebug経由で起動することとなる。

UTM起動前の設定

  1. アプリホームの設定ボタンを押下後、以下の設定画面を参考にしてみてください
    設定画面
    Linux側システム設定
    Linux側ディスプレイ設定
    Linux側ネットワーク設定

UTMでdebianを起動後iPhoneのTermiusでssh接続してClaude Codeを実行

  1. UTMで軽量Debian12を起動する
  2. ログイン画面が出現するまで待つ
  3. UTMのままだと使いづらいのでTermiusをAppleStoreからインストールし起動。
  4. Termiusで新規ホストを作成(以下設定例)
    • Labelはdebian
    • IP or Hostname は 127.0.0.1
    • Portは2222
    • Usernameはdebian
    • Passwordはdebian
  5. 接続!claudeコマンドで実行+ログインしましょう!
  6. 簡単なにパフォーマンステストを行い、JITありとなしの起動で差が出るか確認してみてください。
    time seq 1 100000 > /dev/null
    time for i in {1..10000}; do echo $i > /dev/null; done
    iPhone13ProMax+iOS18.5での実行結果)

諸注意

Wifi環境が必須

SkitDebugの仕様上起動時はWifi+SkitDebugに添付された接続が必須となる。
なので近くにWifiがなくセルラーでの接続しかできない場合はセルラー接続できるiPhone / iPadをインターネット共有して、別のiPhone / iPadから前述の端末へWifi接続する必要がある。

iOS26の場合

iOSではJITが削除されているため本稿でお伝えしている手順での高速動作ができないので注意。LiveContainerのJitレスモードでやれるという風の噂をどこかで聞いたので気になる方は調べてみてください
(最初はLiveContainerを採用していましたがPortの壁を越えることができず動作確認可能な環境としては使えなかったのでLiveContainerをかまさない方式に変更しました。もしできたよという方がいらっしゃいましたらメッセージください。)

終わりに

以上がClaude Codeを実行するまでの手順となります。実行時の快適さは「sshでMac接続しての実行」までは及びませんが、カジュアルな開発を行うにおいて支障のない駆動は担保できたのではないかと思います。ぜひ参考にしてみてくださいね。
https://x.com/_fbbp/status/1938545971493052692
\詰まったらClaude Codeにスクショを送りつけて都度最適な選択肢を聞こう!//

余談

メモ書き

  • JIT有効になっていない表示がされているのに失敗した(誤解かもしれない)
  • iSH Shell等複数のターミナルアプリを試したが、結局Claude Codeの実行が実現できるのはUTM or UTM SEのみだった。iSH Shellのデフォ環境はx86系のalpine linuxがインストールされている為、sharpインストール時に必ずこけるようになっていた。

Discussion