仮想マシン内のPython開発をIDEAで
仮想マシン(Ubuntu)のPythonプロジェクトを、ホスト(Windows)のIntelliJ IDEAで開発できるようにしてみました。
Table of Contents
はじめに
5月にVS Codeでリモート開発できるようになった旨の記事を書きました。
あれから、Linuxで稼働するプロジェクトの開発はできるだけVS Codeを使うようにしてきました。
しかし、IDEとして見ると、IntelliJ IDEAを恋しくなることが多々ありました。
『IntelliJ IDEAでもVS Codeと近しい開発ができないだろうか..』
そのような経緯からチャレンジしてみました。
結論から言うと、 VS Codeほどではないが現実的に開発できる状態までいける と思います。
前提
以下の環境で動作確認しています。
| 環境 | バージョンなど | 備考 |
|---|---|---|
| ローカル | Windows10 (10.0.18362) | IntelliJ IDEA動作環境 |
| リモート | Ubuntu in VM (18.04.1 LTS) | Pythonプロジェクト動作環境 |
| Vagrant | 2.2.0 | |
| Virtual Box | 5.2.20 r125813 | |
| IntelliJ IDEA | 2019.1.3 |
無料版では使えません
Community版を利用されている場合はUltimate版の試用/購入を検討してみてください。
IntelliJ IDEAの設定
デプロイ設定
リモート環境へのデプロイ設定が必要です。
設定のBuild, Execution, Deployment > Deploymentから追加しましょう。
Test Connectionをクリックして接続できればOKです。
設定名(ubuntu)や Host User name Authentication には適切な値を設定してください。
SDKの設定
プロジェクトのSDKにSSH Interpreterを設定しましょう。
Existing server configurationで先ほど作成したデプロイ設定を選択します。
次にリモートのインタープリタへのパスとリモートの同期先を指定します。
同期すると改行コードで大量に差分が出る..
再起動
設定が終わったらIntelliJ IDEAを再起動します。
動作確認
テスト
まずはテストを実行してみます。
Testing started at 20:17 ...
ssh://vagrant@ubuntu:2222/home/vagrant/.local/share/virtualenvs/jumeaux-kkpgPyTd/bin/python -u /home/vagrant/.pycharm_helpers/pycharm/_jb_pytest_runner.py --path /home/vagrant/git/github.com/tadashi-aikawa/jumeaux/tests
Launching pytest with arguments /home/vagrant/git/github.com/tadashi-aikawa/jumeaux/tests in /home/vagrant/git/github.com/tadashi-aikawa/jumeaux/tests
============================= test session starts ==============================
IntelliJ IDEA上で結果が表示され、上記のようにログでリモートに接続された旨が表示されていればOKです。
勿論、デバッグ実行した場合はブレイクポイントで止まりますよ😄
接続の関係上、ローカル実行より速度は低下します。
仕組み上、避けられない問題だと思いますので気にしません。
実行
普通に実行してみます。
デバッグができていたので当然成功します。
ssh://vagrant@ubuntu:2222/home/vagrant/.local/share/virtualenvs/jumeaux-kkpgPyTd/bin/python -u /home/vagrant/git/github.com/tadashi-aikawa/jumeaux/jumeaux/executor.py init simple
✨ [Create] config.yml
✨ [Create] requests
✨ [Create] templates with a api directory
このコマンドはWorking Directory配下にファイルを作成するです。
作成先はローカルではなくリモートのみになるようです。
開発フローの考慮
同期の挙動を考慮する必要があるため、開発フローは厳格にした方がよいと思いました。
| タスク | ローカル | リモート | 備考 |
|---|---|---|---|
| ソースコード変更 | O | X | リモート→ローカルへは同期されないから |
| package更新 | X | O | インタープリタはリモートだから |
| Git操作 | O | X | リモート→ローカルへは同期されないから |
| リリース前確認 | X | O | git pull. 実際に動かすのはリモートだから |
| リリース | X | O | Windowsではできないから |
| リリース後作業 | O | X | git pull |
リモート環境のソースコードは参考程度に考えましょう。
ローカルとブランチが同期していないため、特にGitの差分を気にしてはいけません。
そのため、リリース前確認/リリースのフェーズではローカルは一切触らず、リモートの適切なブランチで作業が必要です。
ローカルを触っていけないのは、ローカルを触るとリモートへの同期が走るためです。
リモートのリリース作業中に発生した変更点は、ローカルにてGitから取得しましょう。
総括
WindowsのIntelliJ IDEAでUbuntuのPythonプロジェクトを開発できるようにしてみました。
VS Codeみたく完全にリモート環境に入り込んで開発できるわけではなく、それなりに気を使う必要があります。
それでもIntelliJ IDEAを使うメリットはそれを上回ると信じています。
しばらく使ってみて、他に注意点が出てくるかもしれません。
その時は加筆します。



