VS CodeからRaspberry Pi 5にSSH接続してPython開発環境を構築する方法

当ページのリンクには広告が含まれています。

Raspberry Pi 5(ラズパイ5)で開発すると、エディタが重かったり日本語入力が不安定だったりと色々ストレスを感じることが出てくると思います。そこで便利なのが、windowsのVS CodeからSSHでリモート接続するやり方です。手元の快適な環境を使いながら、実行はラズパイ側で行えるため、作業効率が大きく向上します。

前回の記事で、公開鍵認証によるSSH接続の手順を紹介しました。本記事では、公開鍵認証によるSSH接続を既にクリアしていることを前提に、VS Codeを使ったリモート開発環境の構築手順についてわかりやすく解説します。また、ラズパイ5のハマりポイントとして、venv内でGPIOライブラリ(gpiozero)が使えないトラブルについても軽く触れています。

目次

この記事でできること

この記事では、WindowsのVS Codeからラズパイ5にSSH接続し、リモートでPython開発ができる環境を構築します。

具体的には、VS Codeから以下のことができるようになります。

  • ラズパイ5にリモート接続
  • ラズパイ5のファイルを編集
  • ラズパイ5上でPythonコードを実行

これにより、「編集はPCの快適な環境で、実行はラズパイで行う」という効率的な開発スタイルを実現できます。また、公開鍵認証によるSSH接続を前提としているため、パスワード入力なしで安全かつスムーズに接続できるのもポイントです。

以下のような構成で動作します。

[ Windows(VS Code) ] ── SSH接続 ──> [ Raspberry Pi ]
        (編集)                          (実行)

この後、実際に環境を構築する手順を順番に解説していきます。

前提条件

最初に書きましたが、本記事では

ラズパイ5に公開鍵認証でSSH接続できること

を前提としています。まだ設定が済んでいない場合は、以下の記事のように公開鍵認証の導入を先に行ってください。

VS Codeの準備

まず準備として、SSHでリモート接続するための拡張機能「Remote SSH」をVS Codeにインストールします。

VS Codeの拡張機能タブを開き、Microsoftの「Remote SSH」をインストールしてください。

この拡張機能が、リモート開発の中核になります。

SSH接続の設定(configファイル)

次に、VS Codeからラズパイ5に接続するための設定を行います。

configファイルの編集

Remote SSHをインストールすると、モニタのような形をしたアイコン「リモートエクスプローラー」が左側に表示されるようになります。このリモートエクスプローラーをクリック。

右側に歯車のアイコン(Open SSH Config File)が出るのでクリックします。


すると、一番上のコマンドパレットに設定ファイルの選択肢が出てきます。

上のハイライトされている方が個人用設定ファイル、その下がシステム全体に反映される設定ファイルです。特に指定なければ、個人用の設定ファイルを選択して開きます。

デフォルトでは下のように記述されていますが、これを自分の環境用に書き換えていきます。

私は公開鍵認証を使用してログインするので、それに合わせて下のように記述しました。

設定に必要な項目は以下のとおりです。

  • Host → 任意の名前を記述
  • HostName → ラズパイのIPアドレス
  • PasswordAuthentication  → 公開鍵認証を使用するので「no
  • IdentitiesOnly → 公開鍵認証のみでログインするので「yes
  • User → ラズパイ5のログインユーザー名
  • IdentityFile → 秘密鍵を指定 (※フルパスで記述する)

【注意】IdentityFileのパス指定について

ここで気を付けたいのは、IdentityFileで指定する秘密鍵のパスです。

IdentityFileでは、チルダや環境変数(%USERPROFILE%)を使わず、”C:\Users\ユーザー名\.ssh\xxx”のようにフルパスで秘密鍵を指定する必要があります。

私自身、最初は~/.ssh/ のようにチルダで書いていたため接続できずエラーになってしまいました。余計なトラブルを避けるためにもフルパスで書くのが一番確実です。

また、秘密鍵のファイルは「.pub」が付いていない方です。.pubがある方は公開鍵なので間違えないようにしましょう。

VS Codeからラズパイ5に接続する

ここまでの設定で準備が整ったので、実際にリモート接続します。

接続手順

configファイルの設定が完了すると、「Host」で指定した名前のアイコンが出てきます(下の画面では、Pironman-mini5)。

このアイコンにフォーカスをあてるとアイコンが二つ並んで出てきます。そのうち右のアイコンをクリックすると、新しいウィンドウが開いてSSH接続が開始されます。

コマンドパレットのところにOSプラットフォームの選択項目が出てきたら「Linux」を選択。

問題無ければ接続が完了し、ウィンドウ左下に接続先が表示されます。

これで、VS CodeからSSHでラズパイ5に接続できました。

接続できたか確認する

実際に接続できていれば、VS Codeのターミナルを使ってラズパイのターミナルと同じように操作できます。例えば、lsと入力してラズパイ5のホームディレクトリの内容が表示されればOKです。

あとは普段と同じように、ワークスペースをプロジェクトフォルダで開いて開発を進めます。

Python開発環境の構築

Pythonの確認

ラズパイ5(Bookworm OS)は標準でPythonが入っていますが、VS Codeターミナルから「python -V」と入力してPython 3.11以上が入っていることを確認します。

仮想環境(venv)の作成

次に、開発用の仮想環境をvenvで作成します。

ここでは、Lチカを題材として仮想環境を構築します。まず、ホームディレクトリに開発用フォルダを作ることにします。私は、「my_project」という名前で作成しました。

mkdir ~/my_project

VS Codeのエクスプローラーをクリックし、「my_project」を開きます。

ワークスペースにmy_projectフォルダが出てきます。ここをLチカのプロジェクトフォルダにしてもいいのですが、後々プロジェクトが増えることを考え、この下にLチカ用のフォルダを作ることにします。

「新しいフォルダ」をクリックし、

Lチカ用プロジェクトフォルダ「raspi5_led」(←名前は何でもOK)を作成します。

ターミナルからraspi5_ledに移動し、venvで仮想環境を作成します。

cd ~/my_project/raspi5_led
python -m venv .venv

直下に.venvフォルダが作成され、仮想環境が構築されました。

仮想環境でLチカ実行

「新しいファイル」をクリックして、Lチカ用のPythonファイル(led.py)を作成します。ソースコードはこちらで紹介したものと同じです。

仮想環境に入るために、sourceコマンドでactivateを実行します。

source ./.venv/bin/activate

仮想環境に入ると、プロンプトの先頭に(.venv)が表示されます。

その後、コマンドラインからled.pyを実行すると、gpiozeroのライブラリがないと言われました。

そこで、「pip install gpiozero」でgpiozeroライブラリを仮想環境にインストールして再実行。すると今度は、「BadPinFactory: Unable to load any default pin factory! 」というエラーが出て実行できませんでした。

【注意】venvでgpiozeroが使えない?

結論から言うと、上のエラーを避けるためには、以下のように「–system-site-packages」オプションを付けて仮想環境を作ることが一番手っ取り早いようです。

python -m venv .venv --system-site-packages

ちょっと調べてみたのですが、gpiozeroは単体で動作するのではなくRPi.GPIO、lgpio、pigpioといったライブラリを裏で使っています。これらは、OSやハードウェアに依存するライブラリのため、インストールには自力で依存関係を解決する必要があります。

pipは、「Pythonパッケージの依存関係」しか解決しないので使えません。

システムのPythonに用意されているgpiozeroは、バックエンドも含めて正しく連携された状態でインストールされています。一方、仮想環境にgpiozeroをインストールだけでは、バックエンドがないため「裏のGPIOライブラリが使えないよ!」と言われてしまいます(BadPinFactory)。venvは、デフォルトではシステムにインストールされているパッケージを参照しないためです。仮想環境としては当たり前の挙動ですが。

それなら、システムのライブラリを無理やり使えるようにしたらいいじゃん

というのが上で紹介した「–system-site-packages」。このオプションを付けて仮想環境を作成すると、システムのPython環境を参照できるようになります。そうすると、当然システムに入っているgpiozeroも使えるようになるというわけです。

実際、上のように「–system-site-packages」を付けて仮想環境を再度構築して実行したところ、今度はエラーは出ずにちゃんとLチカできました。

GPIO関係のライブラリを自力でインストールするのは難しそうなので、今後は仮想環境を作成するときに「–system-site-packages」を付けるようにします。

まとめ

以上、windowsパソコンのVS Codeから公開鍵認証でラズパイ5に接続できるようにするまでの手順を解説しました。gpiozeroをvenvから使うときのハマりポイントについても説明しました。

VS CodeとSSHの組み合わせによってラズパイ5の開発環境がより使いやすいものとなり、さらに公開鍵認証を使うことで安全かつストレスのない開発環境が実現できます。

一度この環境を構築するともう戻れないレベルで快適になるので、ぜひ試してみてください。

目次