昨今のプログラミングでは自動でコード整形されるのは当たり前で、人間が手でコードを綺麗にしたりレビューで指摘したりといった作業は過去のものである。Python においても black + isort や Ruff といったツールが盛んに使用されており、IDE と連携することで簡単に自動フォーマットを実現できる。
...そんなプログラミング環境に慣れていると、たまに Jupyter Lab を触ったときに「フォーマットされねぇのかよ〜」となってしまう。自分が Jupyter を使うときはたいてい書き捨てのコードなのでそこまできれいに書く必要ないのだけど、それでも自動フォーマットしてくれたほうが読みやすいし気分もいい。
JupyterLab Code Formatter
なんと JupyterLab Code Formatter1 という便利パッケージがあり、これを入れてちょっと設定するだけで簡単に実現できる。
pip install jupyterlab-code-formatter black isort
on Docker
Jupyter Lab を Docker で立ち上げる場合は Settings から変更してもコンテナ再作成時に元に戻ってしまうので、コンテナイメージをビルドするときに設定を埋め込みたい。
{
"preferences": {
"default_formatter": {
"python": ["isort", "black"]
}
},
"black": {
"line_length": 120
},
"isort": {
"line_length": 120
},
"formatOnSave": true,
"suppressFormatterErrorsIFFAutoFormatOnSave": true
}
例えばこんな設定ファイルを用意しておいて、適切な場所に配置するように Dockerfile を書けばよい。
RUN pip install jupyterlab-code-formatter black isort
COPY jupyterlab_code_formatter.json /root/.jupyter/lab/user-settings/jupyterlab_code_formatter/settings.jupyterlab-settings
この「どこに配置したらいいか」を調べるのがちょっと面倒だった。(どうやって調べたのか忘れた)
また、 root
ではないユーザで Jupyter Lab を実行する場合は配置するパスが違いそうだけど、おそらく /root/
の部分を実行するユーザのホームディレクトリに変えてやればいけると思われる。