はじめに
Understand? Understand! nikkieです。
先日Pythonスクリプトをスタイルガイドに合わせる方法を書きました。
そこに入り切らなかった事項をまとめたエントリです。
スタイルガイドに沿ったPythonを自分の手で書けるようになっていきたい方に捧げます。
目次
フォーマッタが見た目を直すのを、私は理解したい
先の記事の「手元のPythonスクリプトをスタイルガイド(PEP 8)に合わせたいあなたへ」というタイトルには、細かいこだわりがあります。
それは「スタイルガイドに沿ったPythonスクリプトを書きたいあなたへ」としなかったこと。
先の記事では、スタイルガイド(PEP 8)に沿ったPythonスクリプトを得るために、あなたは好きに書いてその後フォーマッタに任せようと提案しています。
PEP 8にはたくさんの項目がありますし、私もすべての項目を把握しているわけではありません。
なのでフォーマッタに任せている部分は多くあるのですが、それでも「これがPEP 8準拠の書き方」と理解している項目が私にはあります。
フォーマッタに任せるというスタンスで仕事や趣味のプログラミングは何も問題なく進められます。
一方、職人気質とでもいうのか、PEP 8に沿ったコードとはどんなものか理解したいという想いが私にはありました。
PEP 8のある項目に沿ったコードを理解している=PEP 8のある項目に沿ったコードを書ける、というのが私の中での定義です。
以降はそんな想いに共感される方向けとなります(すべてのPython使いが理解すべきと主張する気はさらさらありません)
思えば、Flake8に叱ってもらってきた
Blackでフォーマッタを使い始めた私は、リンタとしてFlake8も採用しました。
Flake8は以下の3つをまとめてリンタ機能を提供しています1
- pycodestyle: PEP 8のスタイルをチェック
- pyflakes: Pythonコードのエラーをチェック
- mccabe: 複雑度をチェック
pyflakesの指摘はコードを実行したらエラーになるものなので、実行前に気づけてよかったというものが多いです。
なので実行前にflake8を走らせるようになりました。
pycodestyleはPEP 8まわりのエラーを指摘しますが、Blackでフォーマットするとその多くは解決します。
直らないものは以下のサイトを参照して直したり、
直したいけど事情によりスタイル変更が難しいものは# noqa: <code>コメントしたりして対応しました。
すべての指摘は理解できないけれど、重複している指摘を1つ選んでちょっとだけ寄り道するというのを重ねて、PEP 8で理解している項目を増やしてきたように思われます
Ruffは自動で修正する
ツールの組合せへのカウンターとして、リンタとフォーマッタを兼ね備えて登場したRuff。
Black + flake8 (+ isort + ...) という構成は、いまはRuffに移行できます。
Ruffで便利な点は、リンタの指摘のうち直せるものは自動で直す点(ruff check --fix)。
https://docs.astral.sh/ruff/linter/#fixes
ただこれは便利な反面、自動修正しないFlake8の指摘にあった、「なんで怒られてるんだろう?」と開発者が考える機会を奪っているようにも思われます。
この機会って開発中は、目の前の実装に対して「ヤクの毛刈り」感もあってちょっと苛立たしい2んですが、長い目で見ると私にとってはPythonを知ることにつながったのかなと思います。
事例:pyupgrade
過去記事より、RuffでUPルールもリンタの対象にすると、pyupgrade相当の書き換えを行ってくれます。
pyupgrade自体はFlake8のように指摘せずに書き換えるツールなので、Ruffの自動修正とあまり変わりません。
ただ私はpyupgradeのREADMEを一読した状態で使っていて、どんな書き換えが起こるか把握・同意しています。
便利なツールを設定してそれに任せるだけでなくて、もう少し踏み込んで一部だけかもしれないけれど理解したうえで使いたいなと私は思います。
終わりに
スタイルガイド(の特定の項目)に沿ったPythonを理解して書けるようになるまでに取り組んできたことを書きました。
- 指摘を自動修正しないリンタ Flake8 に叱ってもらって、いくつかの指摘は理解してきた
- 現在主流のリンタ Ruff は自動修正を提供
- これは便利な半面、「なぜ怒られているのか」を理解する機会が減少しているのでは
- 私としては便利さよりも理解が大事。最初は一部だけの理解でもよく、徐々に理解を広げられる3使い方をしていきたい
影響としてはマイクロソフト牛尾さんの「理解には時間がかかる」があると思います。
もしかすると、自動修正をあえて使わないという不便は、学びの機会を作ることになるのかもしれません