KuriKumaChan’s diary

Kuri ちゃんと Kuma ちゃんの飼い主の独り言

Raspberry Pi の リモート開発 - VS Code と PyCharm - 今は VS Code か - でも Zero のサポート無しが極めて残念

Raspberry Pi (Pico 以外の 3,4,Zero など Linix OS が稼働するもの)の開発環境として、入門レベルで Tonny や VNC を使ってみたけれどもどうもエディターの使い勝手がイマイチなので、高機能 IDE リモート開発 (remote development) できる環境を調べてみました。
多分 Linux/Unix 環境では以前から IDE によるリモート開発の仕組みは当然あったはずなのですが(もちろんシェルから vi 起動すれば基本的な edit はできますが大規模開発となるとリモートの IDE でやりたいはず、と想像 )、私自身 Linux/Unix 環境での開発はちゃんとやったことがなく(せいぜい Mac で XCode/Swift をローカルで遊ぶくらい)、Raspberry Pi が初めてなので間違いもあるかもしれませんが、素人による情報の整理、ということでご容赦を。

Raspberry Pi が単なる Linux PC と違うこと

PC に Linux を直接導入したり、PC や Mac に VM を入れてその上で Linux などを動かすのとは異なり、一般的にはラズパイでの開発はラズパイに実装もしくは接続された物理的なデバイス類を制御するのが目的のはずですなので、なかなか仮想環境での開発/デバッグなどは難しいと思われます。ですのでラズパイアプリ開発/デバッグはラズパイ実機上で行う必要があると素人ながら考えられます。

Raspberry Pi の標準の開発環境

ラズパイローカルで IDE

ラズパイに入門するとまず最初にやってみるのが Tonny というラズパイ標準の簡易 IDE。ちょっとしたデバッガもついているので L チカ(LED を点滅させるプログラム)くらいなら何も問題ないですし、これで大きなコードを作れないという強い欠点は私には見当たりません(もちろん流行りの IDE のようにカッコいいとは言えないし、豊富な機能とは言い難いでしょう。)。これはラズパイOS に含まれており、当然ラズパイ上で稼働します。ですので開発のためにはラズパイにディスプレィやキーボード類を接続する必要があります(キーボード、マウスは bluetooth も可のはず)。

自分の整理できていないディスプレィ、キーボード環境

ただ私の環境では ラズパイにディスプレィ/キーボード/マウスを接続するのが面倒臭いというのが難点。普段は Mac がメインでたまに PC を使っているので既存の外部ディスプレィにはこの 2台を接続しています (Mac を 2台のディスプレィに Thunderbolt と HDMIで、PC は一台のディスプレィを Mac と共有で DVI で)。ここにたまにラズパイを接続するのにケーブル接続変更がめんど臭いので、実はわざわざ切替機を買ったのです。が、2分岐の切替機だったこと、実はキーボードは PC 専用に接続しっぱなしだったことなどから中途半端でな感じになってしまいました。 さらに、切替機自体が給電 (USB ポートから DC+5V) を必要とするので、たまにしか使わないラズパイのために常時給電しているのもどうかと思い配線を外そうかと考えています。
(切替機が悪いのではなく、ディスプレィ周りの配線がスッキリしていない自分の問題。)

ラズパイローカルで IDE をリモートで操作 (VNC)

ラズパイに電源以外の物理的な配線をせずとも、ネットワーク (wifi) に接続されていれば ssh 接続で最低限の作業はできますし、ラズパイ標準装備のリモートデスクトップである VNC が使えます。これなら同じネットワークにさえ繋がっていればラズパイが手元になくても(つまりディスプレィ/キーボード/マウスの接続がなくても)ラズパイのデスクトップを操作し、Thnny を Mac のディスプレィで操作できます。具体的に言えば Mac 上で稼働する VNC Vewer というアプリにラズパイのデスクトップが表示されるので、VNC Vewer をフルスクリーンでディスプレィに表示すればまるでラズパイに直接ディスプレィを接続しているかのような感じになります。昔でいえば Windows 環境用の citrixWinFrame、最近であれば TemViewer なんかに当たります。
(昔 citrix が日本に進出した頃、お客様が使ってみたいというので citrix にデモユースの環境を借り出ししばらくテストしたことがありました。当時は 10Base だったことがネックで、非常用以上の利用は難しいね、となったことを思い出しました。)

今時の wifi であれば、リモートデスクトップと言えどもさほどストレスを感じることなくラズパイデスクトップおよび各種 GUI アプリを操作することができますので、Thonny の操作もほとんど問題ありません。もちろんラズパイをローカルで操作するより速くなることはありませんが、Mac のキーボードで操作できますし、Mac で調べたサンプルコードをコピペするなどもできるので、総合的な操作性は上記の「ラズパイローカルで IDE」より良いと思います。

Raspberry Pi のリモート開発

しかし、さらに欲を出して Mac 上で稼働するオシャレな(高機能な)エディター / IDEでプログラミングしてみたくもなります。Mac ローカル上での稼働するエディター / IDE であれば、VNC を通じで 「Mac 上で操作できるけど実はラズパイ上で稼働している Thonny 」よりサクサクとプログラミングできるはずです(正確にはどのみちリモート実行なので完全ローカルとは違いますし、それだけのプログラミング能力が自分にあるかは棚上げ)。
ということでネットを調べてみました。私にとっては一時期有償契約していた JetBrains の PyCharm などが頭に浮かびます。しかし Python 開発者には人気と言われる PyCharm ですが、ラズパイアプリの開発に関する参考となる記事は少なく、多くは Microsoft の Visual Studio Code (以下 VS Code) を用いた事例ばかりでした....(ちょっと残念)

PyCharm によるリモート開発

PyCharm 開発元の JetBrains によるリモート開発は、もしかしたらラズパイのようなデバイスではなく汎用の unix/linux 大規模サーバーを想定しているのかもしれません。

JetBrains が実現するリモート開発

PyCharm によるリモート開発に関しては、私の検索で具体的に設定から利用(デバッグ等)まで記載されていた情報はあまりありませんでした。JetBrains のサイトにもラズパイ関連情報はありませんでした。その中でラズパイのリモート開発に関する具体的な設定を説明している記事が下記の二つ。そして動作を見せている YouTube が一つありました。

PyCharmでリモートのラズベリーパイのプロジェクトを開発します - Qiita

PyCharmからRasberry Piにssh接続して開発する - Qiita

youtu.be

これらの情報からは、
- プログラムはまず Mac 側に作成
- ssh とマッピングの設定により PyCharm が自動的にラズパイ側にプログラムをコピーされるようになる。
- 実行時はラズパイ側で実行させる。

という流れのようです。ただラズパイ上でコードが実行されると言っても、ラズパイ上の周辺インターフェースに関わる部分のデバッグもできるのだろうか??と少々心配になります。

The Visual Studio Code Remote - SSH extension

一方の VS code では Visual Studio の(Microsoft の?)ホームページにはちゃんとリモート開発の解説が掲載されています(英語)。 code.visualstudio.com

Microsoft の "Remote Development using SSH" より転載

この情報をみてわかることは、ラズパイもサポートされていること、図を見ればサーバー(ラズパイ)側でソースコードが実行されるだけではなくデバッガもサーバー側で動くらしいこと。そして謎の "VS Code Server" なるものがラズパイで稼働し、Mac 側 VS Code はこいつと ssh 接続してデバッグなどができるらしいこと。ふーん、それならラズパイボード上の GPIO をはじめとするラズパイ接続の周辺機器に接続するコードも Mac 側からリモートデバッグ出来そう。実際そのように利用しているという紹介記事が結構あるのがわかり、ラズパイ開発環境として VS Code をちゃんと使ってみよう!ということになりました。

VS Code を使ってみることにする!

ssh の構成がされていれば導入はすぐ!

注意!)下記の導入確認はラズパイ 4B と Zero 2 W で行いました。Zero W は VS Code のサポートが無いようです(2022/07/07現在)。

結構 VS code でラズパイ開発している人は多いので、たくさんの導入構成に関する紹介記事がありますが、実質上記のページにある導入手順(下図)のように、"1" の ssh 接続さえ終えていれば "2" の Mac 側に VS Code を導入することと "3" の VS code に "Remote Development" の拡張機能を導入するだけです。

Visualstudio のページより

Remote Development を導入すると他の三つの拡張機能も自動的に導入される

VS Code のリモート接続を司る "謎の VS Code Server" をどうやってラズパイに導入するのかわかりませんでしたが、一台目 (4B) のセットアップ時には何もせず「あれ?繋がっちゃった!」という感じでした。そこでもう一台 (Zero 2 W) を手順の確認がてらセットアップしてみたところ、最初の ssh 接続が確立し Mac 側で VS Code が動いていると Remote Development の拡張機能が自動的に "謎の VS Code Server" をラズパイ側に導入していることがわかりました。

VS Code サーバーは最初の ssh 接続時に自動的にサーバー (ラズパイ) 側に導入される。

早速ラズパイの Python アプリをデバッグしてみる

早速ラズパイ側にある Python アプリを VS Code で開いて(ファイルを開くのは問題なくできた)いきなり実行してみようとしたら「Python をデバッグする拡張機能がありません」の表示。

VS Code で Python ファイルを開いで「実行」しようとしたら..
一瞬「あれ?既に VS Code に導入したじゃん!」と思いましたが、どうやら例の謎の VS Code Server 側(ラズパイ側)にも拡張機能の導入が必要だとわかり先に進めると、次にまた flake8 の導入も促されます。どうやらローカル(Mac)側と同じ拡張機能がリモート側にも導入する必要があるようです。実際は勝手に導入してくれるのですが、あまりローカル側にたくさん拡張機能を入れておくと非力なラズパイ側にも導入されて負担になりそうな気もします。

喜んで Zero WH にも導入 ... エラーで導入できない😢

なんとなくリモート開発できるとわかると嬉しくなって、稼働中の Zero WH にも VS Code を導入してみました。が、Mac から VS Code で Zero WH を SSH ターゲットとして登録操作すると秘密鍵のパスフレーズを入力した直後に

Unsupported architecture: armv6l

と表示され、ラズパイ側への VS Code サーバーの導入が始まりかけてすぐに終了してしまいます。
んー、残念!Zero W はサポートしていないようで、2,3 年ほど前から対応リクエストリストに載っているようですが未だ対応されていないと言うことは望み薄かもしれません。
Zero 2 W が気軽に追加入手できない現状で、Zero W は現実的な主力なのだけれど...

github.com

たまたま 4B と Zero 2 W が手元にあるので、しばらくはこの2台で遊んでみようと思います。


参考)

VS Code のことばかり書いたので、PyCharm 関連情報も載せておきます。

JetBrain による情報

www.jetbrains.com

www.jetbrains.com

www.jetbrains.com

pleiades.io

www.gowrishankarnath.com