こんにちは、吉政創成 菱沼です。
今回もPythonエンジニア育成推進協会のPython 3 エンジニア認定実践試験の主教材「Python実践レシピ/技術評論社」を使って学習中です。
前回は、プラグインを利用してより便利にFlake8を使う方法について学びました。
今回から2.3「ソースコードの自動整形 -Blak」に入り、コードフォーマッターBlackについて学んでいきます。
議論できないコードフォーマッターBlack様
Blackといえば、「妥協しない」コードフォーマッターとしてPythonエンジニア育成推進協会の顧問理事 寺田様のコラムでも何度か紹介されていました。最近ではRuffを中心に利用されているようですが、実践試験ではBlackが範囲となります。
コードフォーマッターとは、コードのスタイルをチェックしてくれるもので、PEP8に準拠した形で書いたソースコードを自動で整形してくれます。いくつか種類があるようですが、その中でもBlackは「妥協しない」という座右の銘(?)の通り、とても厳しいルールでソースコードを自動で矯正してくれるツールで、設定で変更することがほぼできないそうです。議論の余地がないとテキストでも書かれています。
ちなみにlinter(リンター)と呼ばれるソースコードを解析して潜在的なバグやコードの品質を指摘してくれるツールもあります。気になる方は検索してみてくださいね。
インストールの前にBlackの特徴について引用します。
—————————
P.32
BlackはPEP8に準拠したスタイルを適用したうえで、以下のような個々の好みに分かれ議論になりがちな項目をBlackのルールでフォーマットします。
- 折り返し(改行)の方法や要不要の判断
- シングルクォートとダブルクォートの使い方
Blackをプロジェクトで採用すると、プロジェクトの全コードがBlackのスタイルで統一されます。
—————————
ソースコードとは人によって癖が出るものらしいということは聞き及んでいるので、いろいろな人が集まるようなプロジェクトだとルールを決めるのも大変でしょうし、ツール側で制御してくれるのは調整の必要が無くなるのでそれだけでもよさそうですよね。。
Black様のインストールとフォーマット方法
さて、まずはBlackのインストール方法です。以下のコマンドを実行します。(P.32)
(なお、私はWindowsで動作確認を行っています。)
pip install black |
Blackのインストールが完了したので、実際にどのようにフォーマットされるのかを確認してみるようです。テキストに載っていたサンプルコードをまず作成し、Blackにチェックをお願いします。
P.33サンプルコード)ファイル名:test202505.py
j = [1, 2, 3] |
そして、[black test202505.py]を実行すると次のように結果が表示されます。
成功すると「All done!」と出るようです。実際にファイルを開いてみると修正されていました。
次にBlackの独自フォーマットの一部を教えてくれるようです。テキストに書かれていたサンプルコードでファイルを作成します。
P.33サンプルコード)ファイル名:test202505-2.py
# バックスラッシュでの折り返しif rule_who_know1 \ and rule_who_know2: pass # 長い行AsynchronousClass.important_method(tasks, limit, lookup_lines, io_params, extra_argument) # さらに長い行def very_exciting_function(template: str, values: list[str], file:os.PathLike, engine:str, header:bool = True, debug: bool = False): “”” ‘values’ を ‘template’ に整えて、 ‘file’ に書き込む “”” with open(file, ‘w’) as f: pass # シングルクォートの利用。カンマの後ろのスペースがないl = [‘1′ ,’2′,’3′,’4’] |
このファイルに対してblackコマンドを実行した結果がこちらです。
すっきりしました。
PEP8に準拠した形になっている上、Black独自のルールが適用されてこの形になっているそうです。
—————————
P.34
Blackのフォーマットは、シングルクォートではなくダブルクォートを使う点や、折り返しの位置に特徴があります。Blackのルールは多岐にわたります。詳細は以下を参照してください。
https://black.readthedocs.io/en/stable/the_black_code_style/current_style.html
—————————
Black様はimport文の順序チェックと修正はしない
PEP8ではimport文の書き方も書かれています。行を分けるとか。
詳細が気になる方は以下のページのimport文の項目をご参照ください。
https://pep8-ja.readthedocs.io/ja/latest
ただ、Blackはそのimport文に関しては修正を掛けないそうで、修正をしてくれる別のライブラリがあるとのこと。
—————————
P.34
import文の順序を自動でチェック、修正するライブラリにisortがあります。Blackではimport文の順序チェック、修正は行わないため、Blackと併せて利用することが多いライブラリです。詳細は公式ドキュメントを参照してください。
—————————
アルファベット順に並べ替えたり、セクションやタイプ別に自動的に分けたりしてくれるそうです。
それではきりが良いので、今回はこちらで終了です。お付き合いいただきありがとうございました。
実践試験について知りたい方は以下をご覧ください。
●Python3エンジニア認定実践試験