みなさんは、Linter や Formatter を使用していますか
Pythonの開発では、Linterとして flake8、Formatter として Black などがよく使用される(体感です)と思います。
これらについて考える機会や知る機会が意外となく、実務経験では必須レベルなのに知らない方も多そうなので軽く調査したことを書いていきます。
本記事のまとめ
Lint や Formatter をCI/CDに組み込むと幸せになれます!!!
そもそも Lint, Format is 何?
結論から言うと、自動でコードがベストプラクティスに従ってるか、解析してくれるものです。
例えば、Python では PEP8と呼ばれる、コードを書く際の決まりがあります。
コードは動かすだけなら簡単にかけますが、個々人が好き勝手にいろんな書き方をしてしまうと他の人の書いたコードが読みづらかったりして、今後の開発に差し支えてしまいます。
そこで、コードを書く際のルールを決めたものが PEP8 です。
Lint は、このようなコードの規則やベストプラクティスに従っていないコードを静的解析によってチェックします。
Formatterは、コードに影響が出ない範囲内で、軽微な修正をするようにコードを静的解析でチェックします。
(静的解析とは、ざっくりコードを実行せずに解析することをいいます。)
静的開発ツールであり、ファイルを読み込んでルールベースに合致するか判定するだけなので色々と開発でされてます。
Python では Linter として、Flake8、Formatter として Black, isort などをよく使います。(他のツールもよく使います。)
どう使うの?
ここでは Python で flake8, black を使用してみます。
パッケージ管理ツールとして poetry を使用してますが、pip などでも同じです。
- flake8
poetry add flake8
- black
poetry add black
下記コマンド実行すると、警告が表示されたりフォーマットが修正されたりしていい感じにしてくれます。(細かい使い方は公式ドキュメントをご参照ください)
poetry run flake8 .
poetry run black .
かなり簡単に使えますね!!!
なんでつかうの?どこに使うの?
既に説明しましたが、基本的に多人数でのgitなどの環境での開発で使われます。
そのため、いわゆるCI/CD(Continuous Integration/Continuous Delivery & Deployment)にてアプリケーションのデプロイの自動化でチェックする際に使われます。
例えば、Github Actions と呼ばれる CI/CD ツールでは、以下のような yml ファイルを .github/workflows/の配下におくことで、push や pull request を行う際に、black や flake8 が自動で行われます。
name: CI
on:
push:
branches:
- main
pull_request:
branches:
- main
jobs:
check-lint-and-formatting:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: 3.10
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install poetry
poetry install --no-root
- name: Format with Black
run: poetry run black --check .
- name: Lint with flake8
run: poetry run flake8 .
まとめ
意外と知らないLinterやFormmaterについて書いてみました。
何か間違いや気になることがあれば気軽にご連絡いただけますと幸いです。