🐥

Flake8のDockerコンテナ作る

2022/08/11に公開

Python規約チェック用のDockerコンテナ作る

Dockerの勉強とPythonの勉強のため、Pythonスクリプトがコーディング規約PEP8に則してるかチェックする環境をDockerで用意しました。これはその備忘録です。規約チェックにはLinter(リンター)という解析ツールを使うみたいです。今回は、flake8 という解析ツールを使用しました。

ディレクトリ構成

ファイル/フォルダの構成はこのようにしました。

$ pwd
/home/usr/data/docker
$ tree
.
├── Dockerfile_Flake8
└── src
    └── sample.py
  • Dockerfile_Flake8
    • 規約チェックツール flake8 をインストール
  • src
    • Dockerコンテナ上の/work/src/としてバインドするディレクトリ
  • sample.py
    • 解析対象のPythonスクリプト
sample.py
sample_list1 = [100000000, 200000000, 300000000, 400000000, 500000000,
600000000, 700000000]
sample_list2 = [100000000, 200000000, 300000000, 400000000, 500000000,
                600000000, 700000000]
print(sample_list1)

Dockerファイル

Dockerfile_Flake8
ARG python_image_v="python:3.10-buster"
FROM ${python_image_v}

ARG work_dir="/work/"
# コンテナにアクセスした際のデフォルトディレクトリ
WORKDIR ${work_dir}

# pip更新
RUN pip install --upgrade pip
# flake8 インストール
RUN pip install flake8

Dockerコンテナに入る

$ cd /home/usr/data/docker

# Dockerイメージを作る
$ docker build -f Dockerfile_Flake8 -t flake8_img .

# Dokckerコンテナを作成し起動する
$ docker run --rm --name flake8_env -v /home/usr/data/docker/src/:/work/src -dit flake8_img

# Dockerコンテナに入る
$ docker exec -it flake8_env bash

↓コンテナに入れるとこんな感じになる

$ docker exec -it flake8_env bash
root@8f4691e2e0c7:/work#

スクリプトを解析してみる

flake8を使ってPythonスクリプトを解析する
sample.pyを解析してみる。

root@8f4691e2e0c7:/work# cd src/
root@8f4691e2e0c7:/work/src# ls
sample.py
root@8f4691e2e0c7:/work/src# flake8 sample.py
sample.py:2:1: E128 continuation line under-indented for visual indent
root@8f4691e2e0c7:/work/src#

2行目の1文字目に規約違反があると言ってるようです。
E128の内容をFlake8 Rules(https://www.flake8rules.com/)で確認します。
E128の説明 https://www.flake8rules.com/rules/E128.html によるとインデントの設定がいけてないと言ってるようです。

ということで2行目を以下のように修正します。

修正前
sample_list1 = [100000000, 200000000, 300000000, 400000000, 500000000,
600000000, 700000000]
修正後
sample_list1 = [100000000, 200000000, 300000000, 400000000, 500000000,
                600000000, 700000000]

もう一度解析します。

root@8f4691e2e0c7:/work/src# flake8 sample.py
root@8f4691e2e0c7:/work/src#

何も怒られなくなりました。

ーーーー

簡単ですがこれでおわり

Discussion