本セッションの登壇者
今日のテーマは「2024年のVS Code+ラズパイ事情」ということで、ラズパイ上でVS Codeって動くんですか? という突っ込みどころのあるタイトルです。
デモ:ラズパイ上でVS Codeは動くか?
これは、Ruby on Railsの開発環境を開いているところです。左下に青く「開発コンテナー」と出ていますが、私の後ろにラズパイがありまして、そこにSSHでつないでRuby on Railsの開発環境を立ち上げています。bundle exec rails s
と入力すると、
Railsのスタートアップ画面が出ます。表示されているのはWindowsのデスクトップ上ですが、実際にサーバーはどこで動いているのかというとラズパイの上です。
というわけで、答えとしてはVS Codeはリモート開発の機能で動きます。Live Share も動くし、その上で拡張機能としてCopilotも動きます。
アーキテクチャーとストレージが改善
動くんですが、今どきのWeb開発のトレンドから考えるとラズパイ上の開発にはいろいろな問題があります。1つは、アーキテクチャーが32ビットであることです。
最近はApple Siliconでもarmアーキテクチャーが普通になりましたが、aarch64とx86_64が混在している上に32ビットが入ってくることと、ラズパイといえばストレージはSDカードですが、アプリケーションの開発環境としてこの上でnpm installやGoのビルドなどをやり出すと入出力の性能が苦しいし、ストレージの容量も今どきのアプリケーションの開発環境としては苦しいということがあります。もともとがホビー用、学習用で、開発環境として使うことを想定していなかったんですね。
でも、ここ数年は変わってきました。
何が変わったのかというと、まずOSが64ビットになったことです。CPU自体は以前から64ビット対応していたのですが、ハード互換性の問題で、標準のRaspberry Pi OSが長らく32ビットでした。それが、2022年の2月からaarch64、いわゆるarm64と呼ばれるアーキテクチャーになり、ライブラリなどが最近のWeb開発向けのエコシステムにのれるようになりました。
もう1つは、Raspberry Pi 4以降、USB接続のSSDなどからブートできるようになったことです。Raspberry Pi 4だとモデルによってはディスクとの相性問題があったのですが、Raspberry Pi 5で、USB接続のストレージとの安定性も向上しました。入出力の性能が大幅に向上しています。ファイルシステムの容量も大幅に拡大し、アーキテクチャーも64ビットになりました。
これらを合わせると何ができるようになるかというと、ラズパイ上でDockerがちゃんと動くんです。実は先ほどのデモの環境もDockerfileの定義に基づいていて、ラズパイ上でDockerが動いていて、そこでVS Codeのリモート開発のサーバーが立ち上がっていて、フロントエンドのデスクトップとつながっています。
ラズパイ上でDockerが動いて、VS Codeとつないで何が嬉しいのかというところですが、まずはaarch64向けのDockerのイメージが作れる、動作することです。つまり、AppleシリコンのCPUでmacOSを動作させなくても、macOSのDocker Desktopに対応したイメージが作れるんです。Docker Desktopでも、Podman Desktopでも、Rosetta 2が使えます。私はイメージを作るのであればCPUをエミュレーションしないで作りたいので、arm 64ビット版アーキテクチャーでビルドできることは、利点にしたいと思います。
その上で、先ほどのデモのようにVS Code上から対象となるサーバーにSSHして、そこからDockerにつないで、ローカルで動いているのと同じようにリモート開発できます。デスクトップ環境が何であれ、画面共有していたり、チャットが動いている中でDocker関係も一緒に動かすとなるとメモリの制約がなかなか厳しくなりますが、そういうハードウェア的な制約も、リモート開発なら超えていくことができます。
起動も簡単に、ただしSSDを推奨
デモではSSDで起動していますが、USBメモリーでも起動します。ただ、試してみたらUSBメモリーのメディアが3ヶ月持ちませんでした。ということで、素直にSSDを使いましょう。USBメモリーとSSDは基本的にNAND型のフラッシュメモリーであれば、OSからリムーバルディスクとして見えるかどうかの違いしかなく、中で使っている媒体は一緒のはずなんですが、実際には部品の耐久性の違いがあるようです。したがって、USBメモリーでラズパイの起動はできますが、実際にはメディアが持ちません。
さらにおまけですが、昔はSDカードにRaspberry Pi OSのイメージを焼いてそれで立ち上げていましたが、今はRaspberry Pi Imagerというものがありまして、そこから直接USBのメディアに書き込みができます。
OSのイメージを焼く時にSSIDの情報やSSHする時の公開鍵情報を設定できるので、昔はOSのインストールのためだけにキーボードを用意したり、インストールの時だけHDMIで接続したり、ラズパイに対して相性がいいSDカードのメーカーを探したりといろいろありましたが、今はだいぶ変わって、立ち上げやすくなっています。
皆さんもVS CodeとRaspberry Piの組み合わせでリモート開発を試してみると楽しいと思います。以上です。ありがとうございました。