仮想マシン内の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を使うメリットはそれを上回ると信じています。
しばらく使ってみて、他に注意点が出てくるかもしれません。
その時は加筆します。