Python

WSL(Ubuntu)でVSCodeを使ってPythonの開発をする

以前簡単なPythonのスクリプトを書いていた時期があって、このときはIntelliJ Ultimateで開発を行っておりました。
IntelliJ UltimateはPHPやPythonである程度は型などを理解してくれてジャンプなどをしてくれるのですごい開発しやすいです。

ですが今回MicrosoftのVSCodeでPython環境を整えてみたのですが、WSLとVSCodeがかなりシームレンスに連携できることがわかり想像を絶する環境を構築することができました。
VSCodeで一部まだプレビュー用の拡張を使っておりますが、かなりよい環境だと思います。

また、今回はWSL上のPython、VSCodeは既にインストール済みとして進めます。
もしWSLをまだインストールしていない場合はWindows Subsystem for Linux (WSL)の設定とUbuntuのインストール方法をご参照ください。

今回の目標

今回は以下を目標にしたいと思います。

  • VSCodeからWSL上のPythonを実行できる
  • 型を推論し補完できる(IntelliSense)
  • VSCode上からテストを実行できる

VSCodeに必要な拡張をインストールする

Remote WSLをインストールする

今回はWSL上のPythonを操作するためVSCodeからWSLを操作するための拡張をインストールします。
インストールするのはRemote WSLです。
詳しいインストール方法はVisual Studio CodeとWSLでPython開発に挑戦してみようがわかりやすいのでご参照いただけるとよいと思います。

この拡張をインストールすることでVSCodeとWSLを連携させることができます。
続いてWSLを起動します。
どこか適当なディレクトリに移動してcode .と入力します。
お恥ずかしいことに全く知らなかったのですがcodeコマンドを実行することでVSCodeを起動できるようです。
今回の場合、カレントディレクトリをプロジェクトにしてVSCodeを起動することになります。

というわけでWSL上でコマンドを実行起動するとVSCodeが起動します。
時代遅れかもしれませんが、WSLからコマンドを実行するとWindowsのプログラムが起動するとは軽い衝撃を受けました。
Windows Vista時代を経験した人間としては、非常に感慨深いものがあります。

VSCodeの左下にWSL: Ubuntu-18.04と表示されていれば正常に接続されています。

なおこの状態でVSCodeのターミナルを開いてみます。
ショートカットはCtrl + Shift + @です。

VSCode上のターミナルでもPowerlineがしっかりと反映されていますね。これは嬉しい。
WSL上でターミナル環境をPowerlineに対応させる手順はWindows TerminalでWSL Ubuntuの環境を整えるをご参照ください。

この状態でVSCodeでPythonのファイルを開いて、適当にインポート文を書いてみます。

こんな感じでシンタックスハイライトはされているのですが、補完は非常に弱いというかクラス名やパッケージ名(語弊があります)の候補が表示されていません。
(マウス操作が雑ですみません)
個人的にはPerlのスクリプトをメモ帳で修正させられたことがある経験から、シンタックスハイライトがある時点でかなりありがたいのですが2020年ではもう少しインテリ感があると大変良いです。
続いてVSCodeにPythonの拡張をインストールします。

Python拡張をインストールする

拡張の検索画面でPythonと検索するかVSCodeでPythonのファイルを開くと右下に表示させるバルーンをクリックしてもよいと思います。

なおインストールする拡張は以下です。

Install on WSL: Ubuntu: 18.04となっていることを確認してクリックしてください。
インストールが完了するのでReload Requiredをクリックしてリロードしてください。

VSCodeのリロードが完了して、左下を見てみます。

しっかりとPythonが認識されています。

この状態で拡張をインストールする前のインポート文を書いてみます。

パッケージ名(語弊あります)とクラス名がしっかりと補完されていますね。
(マウス操作がさらに雑ですみません)
VSCodeがさらにインテリ感あふれるIDEになりました。

VSCodeからPythonのテストを実行する

ここまででも十分実用に耐えうるのですがEclipseやIntelliJだとIDEからxUnit系のテストが実行できますよね。
そしてIDEから実行すると多くの場合、メソッド単位で実行したりクラス単位で実行できたりします。
もちろんコマンドからも実行できるのですがIDEから実行できれば更に便利になります。

お恥ずかしいことにPython自体に疎いのでテスティングフレームワークは何か業界標準なのかわかりませんので、今回はPython標準のunitetestを使っております。

VSCodeの設定でunitetestを有効にする

基本的にはPython testing in Visual Studio Codeの通りに進めます。
現在テストクラスが含まれるファイルを開くと以下のようになります。

先程のページを見るとVSCodeでPythonのテストを実行する場合は、使用するテスティングフレームワークごとに有効設定できるとあります。
ページではJSONの記述だったのですがVSCodeの設定から検索でunittestEnabledと検索すると、まさにその名の通りのUnittest Enabledという項目があるのでチェックを入れて有効にします。

ポイント

今回はunittestを使いましたが、pytest、nosetestに対応しているみたいです。

この状態で先程のファイルを開いてみます。

Run Testと表示されています。クリックするとテストが実行されます。

ちなみに、テストを失敗させると・・・

失敗したことがわかりやすいですね。
なお失敗理由というかテスト時の出力も確認できるようです。

InteliJだとテキスト系の失敗の場合は差分表示できるのですがVSCodeではできるかわかりませんが、この状態でも問題ないですね。
今後はクラスとテストクラスの相互移動ができるかなど、使い勝手をより向上できるか調査したいと思います。

まとめ

今回は、VSCodeでWSLのPythonを実行する環境を構築しました。
普段はIntelliJを使うことが多いのでVSCodeをあんまり使ったことがないのですが素晴らしいですね。
本当にいい意味で裏切ってくれました。
特にVSCodeはオープンでありながらもMicrosoftが関わっているので、これが大きいでしょうね。
Windows Vistaを経験している世代としては本当に考えられないです。
今後の発展にもさらに期待したいです。

-Python
-

© 2020 ビー鉄のブログ Powered by AFFINGER5