Xcode。Interface Builder。iOSシミュレーター。47ファイルからなる本格的なSwiftプロジェクト。そのすべてを、カフェのiPad Proから動かしました。妥協も、回避策もなしです。その一部始終をお話しします。
「iPadでコーディング」の問題点
毎年、AppleはiPadをより強力にしています。Mシリーズのチップ。Liquid Retina XDRディスプレイ。Magic Keyboard。そして毎年、開発者は同じ疑問を口にします。これで、本当にコードが書けるのか?
その答えは、昔から「まあ、ある程度は」でした。GitHub Codespacesを使えば、ブラウザでVS Codeが使えます。Blink ShellでサーバーにSSH接続もできます。Swift Playgroundsのようなアプリで、基本的な実験もできます。でも、本物のツール、つまりXcode、Android Studio、Visual Studio、自分のドットファイルがそろった本格的なターミナルが必要になった途端、行き詰まります。
これは、恣意的な制限ではありません。AppleはiPadOS上で本格的なIDEを許可していません。XcodeがiPadでネイティブに動くことは、おそらく(少なくともフル機能版では)永久にないでしょう。そしてブラウザベースのエディターは、どれほど優れていても、ブラウザのタブにできることの範囲で根本的に制限されます。
そこで、違うやり方を試しました。IDEをiPadに持ってくるのではなく、iPadをIDEのところへ持っていくのです。
構成:Remio + Mac mini + iPad Pro
私の構成は、恥ずかしいほどシンプルです。
- Mac mini M4:自宅に置いてあり、常時オン。Xcodeとすべての開発ツールが動いています
- iPad Pro 13インチ:Magic KeyboardとApple Pencilをつけて、どこへでも
- Remio:この2台を、設定なしでつなぎます
iPadでRemioを開き、Mac miniに表示されたPINを入力すると、2秒以内にMacのデスクトップが目の前に現れます。フル解像度。フルカラー。開発環境は、置いてきたままの状態です。
設定するVPNも、維持するSSHトンネルも、作るアカウントもありません。PINと接続だけです。
ブラウザベースのコーディングより優れている理由
代替手段は、すべて試しました。本当に、全部です。本物のMacを使うRemioが、これまで試したどのブラウザベースの方法にも勝る理由をお伝えします。
GitHub Codespaces/VS Code Web
Codespacesは、Web開発には本当によくできています。でも、動くのはLinuxコンテナです。Xcodeも、Interface Builderも、iOSシミュレーターも、Core Dataモデルエディターもありません。iOSやmacOSのアプリをつくるなら、そもそも選択肢にはなりません。Web開発でさえ、ブラウザのサンドボックスによる制限があります。ローカルファイルへのアクセスも、ネイティブのターミナルも、任意のバックグラウンドプロセスの実行もできません。
SSH+ターミナルエディター
Vimは大好きです。本当に。でも、47ファイルとxib、アセットカタログ、Core Dataモデルを持つSwiftUIアプリを、ターミナルのエディターで作るのは、生産性ではなく、苦行です。コード補完、リファクタリング、ライブプレビュー、ビジュアルデバッガーといったIDEの機能は、必要だからこそ存在するのです。
クラウドデスクトップ(AWS WorkSpaces、Shadow PC)
クラウド上のMacを、月額約$50〜100で借りることはできます。でも、あなたはすでにMacを持っています。なぜ、劣るものを借りるのにお金を払うのでしょう? Remioなら、自分のファイル、自分のツールチェーン、自分の環境が入った、実際のマシンをそのまま使えます。しかも、Macはバージニア州のデータセンターではなく、自宅のネットワークにあるので、遅延も小さくなります。
実際の仕事の一日
実際の仕事の一日がどんなものか、ご紹介します。ある火曜日、カフェでの一日です。
午前8:30席に着き、接続して、再開
カフェでiPadとMagic Keyboardを広げて席に着きます。Remioを開いて、自宅のMac miniに接続。Xcodeは昨晩のプロジェクトを開いたままです。ブレークポイントも、タブも、未コミットの変更も、置いてきたままの状態でそこにあります。
午前8:35SwiftUIを書く
SwiftUIのコードを書きます。コード補完が完璧に動くのは、本物のSwiftコンパイラを備えた本物のMacで、本物のXcodeが動いているからです。キー入力のたびに即座に反応します。Remioのネイティブな入力処理のおかげで、キーを押してから文字が現れるまでに、体感できる遅れはありません。
ネイティブの入力がそのままホストに届きます。LANで処理は約8 ms(社内測定)で、残りはディスプレイ自身の60 Hzのリフレッシュ周期です。
午前9:15iOSシミュレーターで実行
iOSシミュレーターでテストする必要があります。⌘Rを押すと、Mac上でシミュレーターが起動し、それがiPadの画面に映ります。シミュレートされたiPhoneを、iPadのタッチジェスチャーで操作できるのですが、これが意外なほど自然です。タップ、スワイプ、スクロール。ちゃんと動きます。
午前10:00Interface BuilderでUI作業
UIの作業の時間です。Interface Builderを開き、制約をドラッグし、レイアウトを調整し、さまざまなデバイスサイズでプレビューします。ブラウザベースのエディターでは不可能な、まさにそういう作業です。ビジュアルツールは、代わりがききません。
午前11:30並行処理のデバッグ
厄介な並行処理の問題をデバッグします。ブレークポイントを設定し、コードをステップ実行し、デバッガーで変数を調べます。LLDBは完璧に動きます。Webベースの代用品ではなく、本物を使っているからです。
午後1:00Androidに切り替え
昼食のあとは、Androidのプロジェクトに切り替えます。Xcodeを閉じて、Android Studioを開きます。接続も構成も同じです。Remioは、どのアプリを動かしているかを気にしません。デスクトップ全体をストリーミングするからです。
午後7:00一日の成果
一日の終わりには、Swiftのコードを約400行書き、バグを3つ直し、TestFlightにビルドを提出し、プルリクエストを2つレビューしました。すべて、カフェのiPadからです。特別な設定も、妥協も必要ありませんでした。
うまく動かすためのディテール
キーボードショートカット
多くのリモートデスクトップアプリが破綻するのが、ここです。Remioは、すべてのキーボードショートカットを正しく転送します。ビルドは⌘B、実行は⌘R、クイックオープンは⌘⇧O、絵文字は⌃⌘Space(そう、これも)。Magic Keyboardの修飾キーは、Macの修飾キーと1対1で対応します。変換レイヤーも、キー割り当ての混乱もありません。
文字のレンダリング
コードは、小さな文字です。それも大量の。文字をぼかしたり、ノイズを入れたりするリモートデスクトップアプリは、開発にはまったく使えません。Remioの文字に最適化された設定のH.265エンコードは、コードをくっきり鮮明に保ちます。シンタックスハイライトの色は正確で、フォントの太さも正しい。iPad Proの解像度なら、本当にXcodeがローカルで動いているように見えます。
画面の切り替え
Mac miniには、仮想のセカンドディスプレイがあります。Remioなら、見ている画面をタップひとつで切り替えられます。片方にコード、もう片方にシミュレーターです。iPadでは、スワイプで行き来したり、ステージマネージャでワークスペースを配置したりします。
クリップボードとファイル転送
あとで検索するために、コンソールのエラーメッセージを取っておきたいときは? Remioのクリップボード同期ならシームレスです。片方のデバイスでテキストをコピーして、もう片方でペーストします。プロジェクトフォルダに参考ファイルを入れたいときは、iPadからMacへ直接送ります。
私のワークフローのコツ
この方法で半年コーディングして、体験をさらに良くする習慣が身につきました。
- Macは有線接続にしておく。私のMac miniは、イーサネットでルーターにつないであります。これで、ストリーミング品質を左右する最大の変動要因がなくなります。
- iPadは安定したWi-Fiにつなぐ。カフェの5GHz Wi-Fiなら、たいてい問題ありません。接続が不安定でも、Remioの適応型品質が自動で調整しますが、接続が安定していれば、文字は常にくっきり鮮明です。
- Xcodeのフォントサイズを13〜14ptにする。これなら、Remio経由でもiPad Proのディスプレイで、ズームなしで快適に読めます。
- 何でもキーボードショートカットで。IDEの操作でタッチやマウスを使わないほど、作業は速くなります。これは、ローカルでの開発にも通じるアドバイスです。
- iPadOSの設定で「視差効果を減らす」をオンにする。iPad側のアニメーションの負荷がわずかに減り、Remioにほんの少し余裕が生まれます。
できないこと(正直に)
完全に正直であるために、制限もお伝えします。
- インターネットが必要です。Wi-Fiのない飛行機の中では使えません。ただ、機内Wi-Fiで使えたことはあります。遅かったものの、動きました。
- Macは電源を入れておく必要があります。これはクラウドサービスではありません。誰かがMacのプラグを抜いたり、アップデートで再起動したりすると、復旧するまで接続が切れます。
- 極端に遅延に敏感な作業、たとえばゲームやリアルタイムの音声制作では、わずかですが、気づく程度の遅れがあります。コーディングなら、遅延は感じられません。
これらのトレードオフは現実のものです。それでも、開発環境のすべてを700グラムのタブレットで持ち歩ける利点が、それをはるかに上回ります。
iPad開発者の夢、実現
長年、AppleがXcodeをiPadに持ってきてくれるのを待っていました。そのうち、それは実現しないかもしれない、少なくとも完全なプロ向けのバージョンは出ないかもしれないと気づきました。そこで待つのをやめて、もっと良い答えを見つけたのです。
Remioは、XcodeをiPadに入れるのではありません。Mac全体をiPadに映します。すべてのアプリ、すべてのツール、すべてのファイルを。まるでMacが目の前にあるように感じられる画質と入力の応答性で。大事な点では、実際にそうだからです。
最高の開発環境とは、最も馬力のあるものではありません。実際に手元にあるものです。
RemioをつないだiPad Proは、私がこれまでに持った最高の開発マシンです。スペックのおかげではなく、どこへ行くにも一緒で、開発環境のすべてがそこにあるからです。
MacとiPadを持っている開発者なら、Remioを試してみてください。セットアップは2分です。アカウントは不要です。ゲームの側面にも興味があるなら、iPadでPCゲームを遊ぶガイドもどうぞ。コーディングを成り立たせる同じ低遅延の技術が、ゲームも素晴らしいものにします。