IntelliJ IDEAのUltimateの機能検証(Python)

IntelliJ IDEAのUltimateの機能検証(Python)

はじめに

IntelliJ IDEA は基本的にJVM系言語をサポートしているIDEです。 実は、他の言語もたくさんサポートしています。

以下の記事が詳しいです。 https://www.jetbrains.com/ja-jp/idea/features/editions_comparison_matrix.html

その中でPythonもサポートしているようなので実際に環境構築ができるか検証してみました。

目標

  1. Docker機能を使って外部ライブラリを参照してコード補完ができることを検証
  2. コンテナ上のMySQLにもう一つのコンテナ上のPython Appから接続できることを検証

環境

項目 バージョン
Windows10 Pro 20H2
IntelliJ IDEA 2021.1 (Ultimate Edition)

前提

手順

Python pluginの導入

  1. 設定画面へ ctr + alt +s
  2. Pluginsカテゴリを選択し、Marcketplaceタブを選択していることを確認
  3. Pythonを探してInstallします。開発元はJetBraninsです。

    プロジェクトの作成

  4. File>New>Projectをクリック
  5. 言語でPythonを選択し、適当なSDKを選択(後で変更します。)し、Nextをクリック
  6. テンプレートを選択できますが、何も選択せずNextをクリック
  7. 任意のプロジェクト名を入力し、Finishをクリック
  8. プロジェクトの作成ができました。

現状のディレクトリ構造です。

# カレントディレクトリの名前は、4.で設定した任意のプロジェクト名になっています。
.
└─.idea

Intellijの設定ファイルのみある状態です。

Docker関連の設定ファイルとPythonファイルの追加

  1. カレントディレクトリの直下にDockerfileと依存関係を記載したrequirements.txtとdocker-compose.ymlを作成します。
ファイル名 説明
Dockerfile 今回のプロジェクトのサンプルアプリ使用するPythonのruntimeコンテナの設定を記述
requirements.txt 今回のプロジェクトのサンプルアプリが依存するライブラリ名を記述
docker-compose.yml MySQLコンテナの設定と今回のプロジェクトのサンプルアプリのコンテナの関係を定義するファイル
  1. 今回のアプリで使用するPythonファイルを作成します。Pythonファイルはmain.pyという名前にします。main.pyはpythonというディレクトリに記述するようにします。 ※ディレクトリとファイル名は任意です。 現状のディレクトリ構造です。
C:.
├─.idea
└─python

Docker関連の設定ファイルとPythonファイルの内容の記述

  1. 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

  1. requirements.txt
PyMySQL
cryptography==3.1.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:
  1. ./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()
  1. 上記でサンプルファイルの準備が整いました。

  2. ここまでの設定でコンテナ上で実行できること確認します。 コマンド

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
  1. 以下のメッセージが表示されれば成功です。
Database version: 8.0.24
  1. IntelliJで動かす 現状だと参照するライブラリが見つからないため、pymysqlのコード補完が効かない状態です。

また実行もできない状態です。

  1. プロジェクトの設定を開きProject SDKのリストを展開し画像を参考にしてPython SDK ... をクリック。
ctr + shift + alt + s

  1. InterpreterとしてDocker Composeを選択、Serviceをpython5にしてOKをクリック。

  2. Apply->OKとクリック

  3. LoadingするのでIDEがLoadするのを待つ。

  4. ロードが終わったら実行を試す。 右クリック->実行

  5. 実行が成功

  6. コード補完は効かない状態。

  7. キャッシュを削除してリスタートする。 File>Invalid Caches... をクリックし、表示されたInvalidate and Restartをクリック

  8. 再起動を待ちます。 起動後、IDEの初期化があります。待ちます。

  9. コード補完も効くようになりました。

結論

公式サイトの比較にあった通りに機能を使用できることが確認できた。 現状だと、キャッシュを削除して再起動しないとコード補完が効かないバグが存在すること確認できた。 記事には記載していなかったですが、デバッグも実行できること確認できております。

感想

感想としては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