🗃️

Raspberry Pi 5のVS CodeでPython開発環境を整える

2024/02/27に公開

はじめに

2024年2月に日本でも販売が開始されたRaspberry Pi5を購入し、久しぶりに電子工作をやりはじめてみました。ソースコードはPythonで書いています。


ラズパイで7Seg LEDをチカチカ

Raspberry Pi OSにはPython用IDEのThonnyが搭載されていますが、普段から使い慣れているVS Codeで書く方が何かと便利です。

メインPCのVS Codeの設定をそのまま反映しても良いですが、最近ではRuffなどの新しいツールも登場しているため、この機会に拡張機能や設定を見直すことにしました。

この記事では、Raspberry Pi OS上で電子工作用の簡単なPythonスクリプトを書くことを想定したVS Code設定を紹介します。

環境

今回の設定は以下の環境で構築しています。

バージョン
デバイス Raspberry Pi 5
OS Raspberry Pi OS 12 (bookworn)
VS Code 1.86.2
Python 3.11.2

Pythonはシステムのデフォルトのバージョンを利用しています。Python自体のバージョン管理システムなどは導入していません。

設定の方針

今回は、以下のような要件を想定して設定を行いました。

  • リンター、フォーマッター、型チェッカーを導入する
  • セーブしたタイミングで自動的にフォーマットする
  • 個別ツールをインストールせず、拡張機能のインストールだけで済ませる
  • 個人開発を前提とする

「リンタ、フォーマッターってなに?」という人は、筆者の過去記事を参照してください。

https://zenn.dev/tanny/articles/cdb555d6124a2a

こちらの記事では、リンター・フォーマッターとして4つのツールを導入していました。
現在では、「Flake8」「Black」「isort」の代替としてRuffというツールの人気が高まっているようです。(Ruffの詳細は参考文献を参照)

https://docs.astral.sh/ruff/

ただし2024年2月現在、Ruffは型チェックの機能を搭載していません。そこで今回は、RuffとPlyanceの2つのツールを導入して、必要な機能を網羅するようにしました。

ツール 機能 備考
Ruff リンター Flake8の代替
フォーマッター Blackの代替
import順の入れ替え isortの代替
Pylance 型チェック mypyの代替
その他、コード補完など Python IDEとしての機能

VC Codeに拡張機能を導入し、設定ファイルを編集して、上記の機能を導入します。

拡張機能の導入

以下の拡張機能を導入します。

Python

VS CodeでPython開発する上で必須の拡張機能。Pylance拡張も一緒にインストールされます。
https://marketplace.visualstudio.com/items?itemName=ms-python.python

Ruff

VS Code上でRuffを実行可能にします。(2024年2月現在、ruff==0.2.2が提供されます)
https://marketplace.visualstudio.com/items?itemName=charliermarsh.ruff

settings.jsonの編集

settings.jsonを開いて以下のように設定します。(Python固有の設定内容だけ抽出しています)

settings.json
{
  // Python Settings
  "[python]": {
    "editor.formatOnSave": true,
    "editor.codeActionsOnSave": {
      "source.fixAll": "explicit",
      "source.organizeImports": "explicit"
    },
    "editor.defaultFormatter": "charliermarsh.ruff",
    "editor.rulers": [88],
  },
  "python.analysis.typeCheckingMode": "basic",
  "python.analysis.autoImportCompletions": true,
  "python.analysis.inlayHints.functionReturnTypes": true,
  "python.analysis.inlayHints.variableTypes": true,
}

設定内容の詳細を紹介します。

Ruffの設定
{
  // Python Settings
  "[python]": {
    "editor.formatOnSave": true,
    "editor.codeActionsOnSave": {
      "source.fixAll": "explicit",
      "source.organizeImports": "explicit"
    },
    "editor.defaultFormatter": "charliermarsh.ruff",
    "editor.rulers": [88],
(略)
  }
}

ここではファイルのセーブ時にRuffでフォーマットし、修正可能なエラーは修正し、import順も入れ替える設定を記載しています。
Ruffではデフォルトで88桁目で折り返すため、目印として88桁目にルーラーを表示しています。


Pylanceの設定
{
    (略)
  "python.analysis.typeCheckingMode": "basic",
  "python.analysis.autoImportCompletions": true,
  "python.analysis.inlayHints.functionReturnTypes": true,
  "python.analysis.inlayHints.variableTypes": true,
}

ここではPylanceの設定を記載しています。

typeCheckingMode": "basic"は、型ヒントを書いた部分だけ型チェックを行なう設定です。電子工作でPythonを書くくらいならこの程度で十分だと思います。

inlayHintsは変数型と戻り値型に対してヒントを提示してくれる機能です。Pylanceの設定を調べている時に見つけたので有効にしてみました。
個人的にはRustっぽくて好みですが、邪魔であれば消してください。

グレー背景の箇所が Inlay hints (VS Code公式ブログより)

おわりに

これで設定は完了です。

Pythonコードをガシガシ書いて文法エラー等を修正しつつ、セーブしたタイミングでフォーマットしてくれる環境が整いました。つまらないミスでエラーを吐いてしまうケースを減らせるので、快適にスクリプトの実行ができます。

ラズパイ上でのコーディングはいつもと違うまっさらな環境で実施できるので、コーディング環境を見直してみる良い機会かもしれません。

なお、今回はRuff自体の設定はデフォルトのままにしました。Ruffでは700以上のリンタールールを追加できるので、色々と試してみようと思います。

参考文献

https://gihyo.jp/article/2023/03/monthly-python-2303

https://news.mynavi.jp/techplus/article/20220708-2394218/

GitHubで編集を提案

Discussion