IntelliJ IDEAのUltimateの機能検証(Python)
はじめに
IntelliJ IDEA は基本的にJVM系言語をサポートしているIDEです。 実は、他の言語もたくさんサポートしています。
以下の記事が詳しいです。 https://www.jetbrains.com/ja-jp/idea/features/editions_comparison_matrix.html
その中でPythonもサポートしているようなので実際に環境構築ができるか検証してみました。
目標
環境
項目 | バージョン |
---|---|
Windows10 Pro | 20H2 |
IntelliJ IDEA | 2021.1 (Ultimate Edition) |
前提
- WindowsでDockerが動作すること。 WSL インストール Docker インストール
- IntelliJ IDEA Ultimateが動作すること。
手順
Python pluginの導入
- 設定画面へ ctr + alt +s
- Pluginsカテゴリを選択し、Marcketplaceタブを選択していることを確認
- Pythonを探してInstallします。開発元はJetBraninsです。
プロジェクトの作成
- File>New>Projectをクリック
- 言語でPythonを選択し、適当なSDKを選択(後で変更します。)し、Nextをクリック
- テンプレートを選択できますが、何も選択せずNextをクリック
- 任意のプロジェクト名を入力し、Finishをクリック
- プロジェクトの作成ができました。
現状のディレクトリ構造です。
# カレントディレクトリの名前は、4.で設定した任意のプロジェクト名になっています。 . └─.idea
Intellijの設定ファイルのみある状態です。
Docker関連の設定ファイルとPythonファイルの追加
- カレントディレクトリの直下にDockerfileと依存関係を記載したrequirements.txtとdocker-compose.ymlを作成します。
ファイル名 | 説明 |
---|---|
Dockerfile | 今回のプロジェクトのサンプルアプリ使用するPythonのruntimeコンテナの設定を記述 |
requirements.txt | 今回のプロジェクトのサンプルアプリが依存するライブラリ名を記述 |
docker-compose.yml | MySQLコンテナの設定と今回のプロジェクトのサンプルアプリのコンテナの関係を定義するファイル |
- 今回のアプリで使用するPythonファイルを作成します。Pythonファイルはmain.pyという名前にします。main.pyはpythonというディレクトリに記述するようにします。 ※ディレクトリとファイル名は任意です。 現状のディレクトリ構造です。
C:. ├─.idea └─python
Docker関連の設定ファイルとPythonファイルの内容の記述
- Dockerfile
FROM python:3.8-alpine3.12 RUN apk update RUN apk upgrade RUN set -ex && apk --no-cache add sudo RUN sudo apk --no-cache add python3-dev RUN sudo apk --no-cache add build-base RUN sudo apk --no-cache add libffi-dev RUN sudo apk --no-cache add openssl-dev RUN mkdir /app WORKDIR /app COPY /python/main.py main.py COPY requirements.txt requirements.txt RUN python -m pip install --upgrade pip RUN pip install pipenv RUN pip3 install -r requirements.txt
- requirements.txt
PyMySQL cryptography==3.1.1
- docker-compose.yml
version: "3" services: mysql_db: container_name: "mysql_db" image: mysql:8.0 command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci volumes: - db_volume:/var/lib/mysql environment: # Set up mysql database name and password MYSQL_ROOT_PASSWORD: password MYSQL_DATABASE: employees MYSQL_USER: user MYSQL_PASSWORD: password networks: - app-tier python5: restart: always build: . container_name: "python5" working_dir: "/root/" tty: true depends_on: - mysql_db networks: - app-tier volumes: - .:/root - pycache_volume:/root/.cache networks: app-tier: driver: bridge volumes: db_volume: pycache_volume:
- ./python/main.py
import pymysql con = pymysql.connect(host='mysql_db', user='user', password='password', port=3306, database='employees') try: with con.cursor() as cur: cur.execute('SELECT VERSION()') version = cur.fetchone() print(f'Database version: {version[0]}') finally: con.close()
上記でサンプルファイルの準備が整いました。
ここまでの設定でコンテナ上で実行できること確認します。 コマンド
docker-compose build docker-compose up -d docker container ls docker-compose logs --tail 20 python5 docker container ls docker exec -i -t 872e0d1e1bce /bin/sh >python ./python/main.py >ctr p + q # コンテナとイメージをすべて削除するので使用には気を付けること。 # docker-compose down --rmi all --volumes --remove-orphans
- 以下のメッセージが表示されれば成功です。
Database version: 8.0.24
- IntelliJで動かす 現状だと参照するライブラリが見つからないため、pymysqlのコード補完が効かない状態です。
また実行もできない状態です。
ctr + shift + alt + s
InterpreterとしてDocker Composeを選択、Serviceをpython5にしてOKをクリック。
Apply->OKとクリック
LoadingするのでIDEがLoadするのを待つ。
ロードが終わったら実行を試す。 右クリック->実行
実行が成功
コード補完は効かない状態。
キャッシュを削除してリスタートする。 File>Invalid Caches... をクリックし、表示されたInvalidate and Restartをクリック
再起動を待ちます。 起動後、IDEの初期化があります。待ちます。
コード補完も効くようになりました。
結論
公式サイトの比較にあった通りに機能を使用できることが確認できた。 現状だと、キャッシュを削除して再起動しないとコード補完が効かないバグが存在すること確認できた。 記事には記載していなかったですが、デバッグも実行できること確認できております。
感想
感想としてはPycharmとIntelliJ IDEA 両方のUltimateを購入しなくてもよいので経済的にはお得だなと思いました。 少し癖はあるけれど、環境構築さえできればあとは十分快適に開発できるのでIntelliJ IDEAで十分かなと思いました。 IDEのリスタートに関しては、WEBに情報が無かったのでサムライズムさんにサポートメールを出して助けて頂きました。
参考
https://qiita.com/yuta-ushijima/items/d3d98177e1b28f736f04 https://zetcode.com/python/pymysql/ https://qiita.com/kenjiSpecial@github/items/63d682274ad993d69c10 https://github.com/pypa/pipenv https://qiita.com/y-tsutsu/items/54c10e0b2c6b565c887a https://stackoverflow.com/questions/49225976/use-sudo-inside-dockerfile-alpine https://stackoverflow.com/questions/21530577/fatal-error-python-h-no-such-file-or-directory https://qiita.com/emori92/items/3751dd330e4fa6484cc0 https://qiita.com/HorikawaTokiya/items/a2a174680d7dd759ccae https://qiita.com/pottava/items/970d7b5cda565b995fe7 https://qiita.com/suin/items/19d65e191b96a0079417 https://qiita.com/tera_shin/items/8a43e904bd15990d3129 https://github.com/kenjiSpecial/docker_mysql_python_beginner https://www.jetbrains.com/ja-jp/idea/features/editions_comparison_matrix.html https://docs.docker.com/docker-for-windows/install/ https://docs.microsoft.com/en-us/windows/wsl/install-win10