とある計算神経科学者のPython環境

English

もう大分前の話になりますが、仕事で使う言語をMatlabからPythonに変更しました。快適に作業ができるようになるまでセットアップに苦労したので、ここにどんなことをしたかを記しておこうと思います。

マシンの選択:Intel版Mac

Macを使う理由はコントロールキーとコマンドキーが分かれているからです。プラットフォームの選択について他にも色々と絡む要素があると思いますが、個人的に重要なのはこれくらいです。これら2つのキーが分かれていることの利点は、後述するエディタ、VS Codeを含む多くのアプリで使用感に一貫性が出ることです。とりわけ、Vim的な動作をアプリに求めるとコントロールとコマンドが分かれていない場合は多くのコマンドが干渉してしまうことになります。(例:ctrl-v はVimではページ送りですが、Mac以外のプラットフォームではペーストと干渉します。)

なぜインテルなのか。これはこの記事を書いた時点では、Apple Siliconへの多くのソフトの対応が遅れていたからで、今となってはApple Siliconで何ら問題ないと思います。Apple Siliconの優位性については過去の記事を参照してください。

個人的にはアップルのキーボードは好みではないので違うのを使っています。しばらくは東プレのRealForceを使っていたのですが、Ferris Sweep(キーレイアウトについてはこちら)を経てCorneに落ち着きそうです。RealForceをMacで使う場合はKarabiner-Elementsを使って一部のキーをリバインドするといいかもしれません。

エディタ:Visual Studio Code (VS Code)

VS Codeはマイクロソフトが出している(一応)オープンソースのエディタです。汎用性が高く、プラグインを使うことでPythonを含む様々な言語に対応できます。

特筆すべきはそのリモート支援機能です。この機能はリモートマシンにVSCodeをインストールしてサーバとして動かすことができます。そのサーバとローカルのVSCodeを通信させてファイルの読み書きができるので、リモートのマシンを使いながらもローカルな操作感(入力遅延なし)が実現できます。以下、私の環境の詳細を記しておきます。

使用中のプラグイン

Python plugin: VS CodeのPythonの基本的なサポート機能です。ほぼ必須です。

Pylance: Pythonのより進んだコード補完(他のファイルを参照して関数等のチェックも行う)や色付けができます。あると便利です。

Jupyter: 人とやりとりする時やデモの作成にノートブックを使うことがあると思いますので、あるといいでしょう。入力と出力がこんがらがるので個人的にはノートブックは好きではなく、Matlabのセルの方がいいと思うのですが、そういう人のために、インタラクティブモードも用意されています。

VS Code Neovim (Vimが好きな人用): Vimをメインエディタにしている人におすすめです。Vimプラグインもあるのですが、そちらはVimの機能を完全に再現しているわけではなく、一部の機能しかありません。一方こちらのNeoVimプラグインはシステムにインストールしてあるNeoVimをVSCode内部で直接動かすため、NeoVimの全ての機能が使えます。

Remote development extension pack (リモートのマシンを動かしたい場合): 現状私がVS Codeを使う最も大きな理由がこれです。リモートのマシンにssh接続するとそこに自動でサーバ用ソフトをインストールし、ローカルのVS Codeで操作できるようにしてくれます。離れた場所にある計算機にアクセスしたい時にも便利だし、MacでできないことをMacのインターフェイスでやりたい時(Linuxに載ってるNvidiaのGPUを使いたい等)にも便利です。どちらにしてもファイルをローカルで直接いじっている感覚で使えます。

その他のエディタの設定

フォーマッタ: Black
コードのフォーマットを綺麗にしておくことはメンテナンスのためにとても良いことですが、フォーマットのことまで考えながらコーディングするのは面倒ですし、書いちゃったらもう直すのは面倒です。ですが、Blackを使うとなんと自動的にコードをフォーマットしてくれます。最高です。Blackを使うことによる様々な利点については、こちらのブログを参照していただきたく存じます。VS Code側で”Editor: Format On Save”をチェックしておくと、保存する度に自動的にフォーマットしてくれます。

色のテーマ: Monokai
Pylanceを使うと、”semantic highlighting”という特殊な色付けが使えます。これは普通のハイライティングよりも一歩進んだやつで、コードを読んで、変数、クラス、メソッド、関数などを区別し、それぞれを別の色にしてくれる機能です。残念ながら、すべての色のテーマがこれに対応しているわけではないので、テーマによっては区別できるのにされない要素などがあったりします。Monokaiはそれぞれの要素のちゃんと別々の色が定義されているのでおすすめです。

その他の設定: 添付ファイルを参照
その他にも色々と変更した点があるので設定ファイルを添付しました。何かおかしいと思う所がある場合は参照してみてください。

デバッグ: “justMyCode” を “False” にしておく
デバッグの設定は launch.json で行うのですが、この中にある “justMyCode” を “False” にしておくといいかもしれません。デフォルトでは “True” になっていて、そのままにしておくとエラーが出た時にそのエラーが自分が書いた部分でない場合デバッガが起動しません。自分が書いた部分でなくても、ライブラリ関数への引数の与え方が違っていてエラーになる事などもしょっちゅうあるので、これは”False”にしておいた方がいいと思います。

一行実行するショートカット”Ctrl + .”の設定
何か試したい時に、セルを作らずに一行だけ実行したい時ってあると思います。そういう時のためにショートカットを用意しましょう。”Jupyter: Run Selection/Line in Interactive Window” を適当なキー(私の場合は “Ctrl + .”にしてあります)に割り当てておくと作業が捗ります。

プロファイリング: cProfile + pyprof2calltree (+ QCacheGrind)
ここはまだちょっと最適解を得たのかちょっと自信がない部分ではあります。こちらに詳しい解説があります。個人的には、Matlab付属のプロファイラの方が使い勝手はよさそうだなと感じます。もしよりよいツールがあればコメントでお教えいただけると有り難いです。

まとめ

短い記事で広範な内容をざっとカバーしました。デフォルトの状態でもよく機能するPyCharmなどとは違ってVS Codeは使い勝手がよくなるまでにセットアップを要する印象があります。しかし、根気よくセットアップをしてやればその豊富なプラグインで唯一無二のツールになってくれるでしょう。この記事がその一助になれば幸いです。