iPadでもバリバリプログラミングできる。そう、VSCodeならね。

:::note info
この記事は、[SmartHR Advent Calendar 2024 (シリーズ1)](https://qiita.com/advent-calendar/2024/smarthr)の7日目の記事です。
:::

## はじめに

こんにちは！SmartHRで働いている@pyayyです。

先日、何とは無しにiPad用のMagic Keyboardを買いました。

https://www.apple.com/jp/shop/product/MJQJ3J/A/

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/370039/569eb1f8-5955-93c1-6551-07b64d48306b.jpeg" width=70%>

[SmartHRが提供するタイピングゲーム人労打](https://jinrouda.smarthr.co.jp/)もプレイできちゃいます。

キーの打鍵感やトラックパッドの使用感等、MacBookのそれに近く気に入ってはいます。
が、特に物書きではないので長文を書く機会が少なく、このままではせっかくのキーボードを活用できず勿体なさを感じてしまいますね。

## iPadをプログラミングに使いたい

物書きではありませんが、一応職業プログラマなのでiPadをプログラミングに使うことができればキーボードを活用できる気がします。
ざっと調べた感じでは、Appleが提供している[Swift Playgrounds](https://www.apple.com/jp/swift/playgrounds/)以外にiPad単体でプログラミングをすることは難しそうでした。

Swiftも楽しそうなので別途楽しんでみようとは思いますが、私はWebエンジニアのような存在です。
もっとこう...普段の業務で扱うような、そんなプログラミングをiPad上でしてみたい気持ちがどうしてもあるのです。
なにかいい方法はないでしょうか。

## vscode.dev + Remote Tunnelsを使ってみる

実は**iPadや自前のデバイスでVSCodeを動かす**ことによって実現できます。

### vscode.dev とは

https://vscode.dev/

↑のURLにアクセスすると分かる通り、Visual Studio Code for the Web、つまりはお馴染みのVSCodeをブラウザ上で動くようにしたものです。
ブラウザ上で動くため、SafariやChrome等のアプリで開くことで、iPadでもVSCodeが動かせるというわけです。

### Remote Tunnels とは

https://code.visualstudio.com/docs/remote/tunnels

Remote Tunnels拡張機能を利用することで、リモートマシン上で実行しているVSCode Serverにアクセスすることができます。
これにより、自宅PCの環境をほぼそのままiPadで利用できるというわけです｡

## 試してみた

### 自宅PC側の設定

アプリケーションとしてVSCodeが使える場合、GUIで設定できます。

1. アカウントメニューを開く
1. 「リモートトンネルアクセスを有効にします」を選択
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/370039/d2558276-9c68-81f0-eb3a-62213cb769f1.png" width=70%>
1. 「このセッションに対してオンにする」or「サービスとしてインストールする」を選択
1. GitHub or Microsoftアカウントでログインする

GUIが利用できない場合などはCLI経由でのインストールも可能です。
詳細は[公式ドキュメント](https://code.visualstudio.com/docs/remote/tunnels#_using-the-code-cli)を参照されたし。

### iPad側の設定

1. [vscode.dev](https://vscode.dev/)を開く
    - vscode.devはデフォルトでRemote Tunnelsプラグインが使える状態になっているので特に設定は必要ありません
1. コマンドパレット > `Remote-Tunnels`で「トンネルに接続」を選択
    ![image.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/370039/26615588-3ca5-2a5e-4ca6-4bdf9f9b7198.jpeg)
1. GitHub or Microsoftアカウントでログインすると接続可能なデバイスが表示されるので、接続したいデバイスを選択する
    ![image.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/370039/33c52674-a083-df95-de43-1d2c2c0391df.jpeg)

これだけです。あとは好きなフォルダーを開いたりして開発に勤しむだけです！

- 最もフィジカル（自宅のPCをサーバーとして使う）で
- 最もプリミティブ（複雑な設定なし、ほぼログインするだけ）で
- そして最もフェティッシュ（？）な

方法ですね。そうでもないか。

ホスト（今回でいうと自宅PC）とゲスト（同iPad）がログインしているGitHub or Microsoftアカウントが同じ場合のみ接続可能です。
これらのアカウントがセキュリティの要となるため、アカウント管理には気をつけましょう。

## 実際に使ってみた感想

設定さえできれば後は自由に開発できるのですが、実際の使用感もお伝えできればなと思います。

### Q. テザリングでも使える？

#### A. 使える！

iPad側の設定および実際の使用時にはテザリングを使用しました。
セルラーモデルは高いので、Wi-Fiモデルにテザリングを使います。Wi-Fiモデルは安いので。

データ使用量的には1時間あたり5~60MBくらいでしょうか。調べ物（X）だったりブラウジングしながらなので、実際の使用量はもっと少ないかもしれません。

動作的には全く問題なく、出先の作業も可能です。
VSCode Serverが起動しているPCがスリープすると接続できないので、
[いくつかの対応策](https://code.visualstudio.com/docs/remote/tunnels#_how-can-i-ensure-i-keep-my-tunnel-running)を実施する必要があります。

### Q. 開発中のlocalhostにアクセスできる？

#### A. アクセスできる！

VSCodeにはPort Forwarding機能が備わっています。

https://code.visualstudio.com/docs/editor/port-forwarding

Remote Tunnelsで接続中にlocalhostでサーバを立ち上げると、自動的にポート転送が実行されます。
自宅PCでNext.jsのdevサーバを立ち上げ、そこにアクセスすることもできます。

![image.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/370039/34c9b9cc-16ce-b953-bf50-6345a59b9ecf.jpeg)

ホットリロードもちゃんと効きます。

これもRemote Tunnelsと同様、接続元と接続先でログインしているGitHub or Microsoftアカウントが同じ場合のみ接続可能です。

### Q. デベロッパーツールは使える？

#### A. 使えない...こともない？かも。

Safariであれば拡張機能をインストールして使うこともできます。
[Web Inspector](https://apps.apple.com/jp/app/web-inspector/id1584825745) のようなアプリをインストールすることで、MacのSafariに搭載されているようなウェブインスペクタを利用できます。

![image.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/370039/45c21442-317b-f5a0-52d0-ccaa264db96d.jpeg)

あと、Chromeであれば`chrome://inspect`をアドレスバーに入力してアクセスすることで、
JavaScript Consoleを開くことができます。

![image.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/370039/d50b9cbc-c1bf-241e-731f-53e6def34150.jpeg)

コンソールへの出力を見たい程度であればこれで十分かもしれません。
普段デスクトップ版ブラウザのデベロッパーツールに慣れている場合にはちょっと慣れが必要かもしれません。

### Q. 自宅PC（ホストPC）の要件は？

#### A. わりとなんでもよさそう。

Remote TunnelsでアクセスするPCについてはVSCode Serverが動くものであればなんでもよさそうです。
私はMac, Windows, WSL(Ubuntu)で試しましたが、それぞれ問題なく利用できました。

特にWSLに対しては、接続したWindowsPCからさらにRemote Tunnelsで接続することができました。（ワンクリック！）

![image.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/370039/6bdbfb60-18c3-394f-69f7-6ea6290ddea9.jpeg)

もちろん、WSL上でCLIを用いてVSCode Serverを立ち上げることでも接続することができました。
あいにくLinuxPCが手元にないため検証できていませんが、LinuxPCも同様にCLIを用いたVSCode Serverの起動で接続できるようになるはずです。

AWSだったりGoogle Cloudだったりのクラウドコンピューティング環境を用意し、
そこにVSCode Serverを入れて接続することもできそうですし（ただしこの場合[Codespaces](https://github.co.jp/features/codespaces)の利用も検討した方がよさそう）、
最近流行り？のミニPCあたりを自宅サーバとして運用してもおもしろそうです。

### Q. {任意のノートパソコン}の方がよくない？

#### A. ...？🤔

...😮

...😟

...😗

#### 確かに...😔

## おわりに

Magic KeyboardにEscキーがなかったり(キーバインド変更でなんとかしてます)、
MacBook等と比べるとiPadはそんなに電池持ちがよくなかったりといろいろとつらみはあるものの、
iPadでもそこそこ開発を楽しめる環境を作ることができました。
もちろん、iPad以外のデバイスでもブラウザさえ動けば今回のような環境を簡単に作ることができます。

かなりピーキーな使い方になるとは思いますが、自宅に高性能なPCがあり外出先でもその環境で開発をしたいような場合には今回の話が役立つかもしれません。
iPadはiOSのアプリが動いたりお絵描きできたりとMacや他のPCには無い特徴もあるので、活用して素敵なiPadライフを過ごしていきたいですね。

P.S. MacBookAirを買いました。