はじめに
Pythonを書き始めてしばらくすると、「リンター入れた方がいいよ」と言われることがあります。
最初は正直、「ちゃんと動けばいいのでは?」と思っていました。
ですが、コード量が少し増えたあたりから、
- なんか読みにくい
- 微妙なミスに気づかない
- 書き方が毎回ブレる
といった問題が目立つようになりました。そこでリンターを入れてみたところ、想像以上に助けられたので整理してみます。
リンターの役割
リンターとは何か
リンター(linter)は、コードを実行せずに「静的解析」して問題点を指摘してくれるツールです。
具体的には、
- 文法エラー
- 未使用の変数
- 不適切なインポート
- スタイル違反
などを検出します。
コンパイルエラーのような致命的なものだけでなく、「将来的にバグになりそうな書き方」も教えてくれます。
実際に使ってみて感じたこと
自分では問題ないと思っていたコードでも、
- importしたのに使っていない
- 変数名が上書きされている
- インデントの揺れ
などが山ほど出てきました。
人間が書いてるとなかなか気が付けないことでも、一瞬で示唆してくれるのですぐに直すべきところがわかります。
Pythonではどういうリンターがあるのか
代表的なリンター
Pythonにはいくつかの有名なリンターがあります。
- flake8
- pylint
- pyflakes
- mypy(型チェック寄り)
- ruff(最近の流行)
それぞれ思想や厳しさが違います。ルールが強い、弱いなど特徴があるようなので、人によっては合う合わないがあるとのこと。
昔からよく使われているのがflake8やpylintです。
pylintはかなり細かくチェックします。スコアまで出るので、最初は少し心が折れます。
flake8は比較的軽量で、必要最低限のチェックという印象でした。一時期はかなり人気だったようです。
最近の流行り・よく使われているリンター
ruffとは
最近よく名前を聞くのがruffです。
Rust製の高速リンターで、flake8系のルールをまとめて実装しています。
特徴としては、
- とにかく高速
- 多くのルールを内包
- formatter機能も持つ
という点があります。
実際にruffを導入してみた
インストールは簡単で、
pip install ruffその後、
ruff check .とするだけでチェックできます。
VSCodeなどのIDEなら拡張機能での導入もできると思います。
速度が非常に速く、長めのコードでも一瞬で結果が出ました。ルールもflake8に慣れてる人なら違和感がないと思います。
自分はflake8をずっと使ってきたわけではありませんが、指摘事項が厳しいとは思いませんでした。
体感的には、「とりあえずruff入れておけばいいのでは」という空気があるのも納得です。
リンターを導入することで防げるミス
未使用コードの放置
importしたまま使っていないコードは意外と残ります。
リンターが即座に指摘してくれるので、とにかく使っていないものは消すという習慣が付きます。
危険な書き方の検出
- 変数の上書き
- 到達不能コード
- 曖昧な比較
など、自分では見逃しがちなポイントを拾ってくれます。大きなバグに繋がりかねない部分なので、この辺はPython勉強中の自分としてはかなり助かります。
実際、バグ修正の時間が減りました。
構文の習熟
ミスとは少し違いますが、私のような独学の初学者にとっては、構文上のルールなどをリンターから学ぶことが多いです。
もちろんAIなどをメンターにすることもできますが、より粒度の低い「書き方」の部分での習熟が進みます。
プロジェクトのレギュレーションに合わせる必要
ルールは絶対ではない
リンターは万能ではありません。
プロジェクトごとに
- どのルールを有効にするか
- どの警告を無視するか
を調整する必要があります。特にチームなどで開発を行うときは、チーム内でルールをしっかり共有することが大事だと言われれます。
例えば、ruffでは設定ファイル(pyproject.toml)で細かく制御できます。
チームでは合意が重要
個人開発では好きに決められますが、チームでは「どのリンターを使うか」「どこまで厳しくするか」を揃える必要があります。
Aさんは○○、Bさんは××のリンターを使うといったことは基本的にやらない方がよいとされます。
ここがブレると、レビューで毎回スタイル論争になります。
まとめ
最初は「リンターは面倒なだけでは?」と思っていました。
ですが、
- 小さなミスの早期発見
- 書き方の統一
- バグの予防
という意味で、導入の価値はかなり高いと感じました。
今から始めるなら、まずはruffを入れておけば十分だと思います。
その上で、必要に応じてmypyなど型チェックを追加したりすると、よりコードを書きやすくなると思います。
リンターは地味ですが、コード品質の土台になります。Pythonを本格的に触るなら、早めに入れておくのがおすすめです。


コメント