IT・技術研修ならCTC教育サービス

サイト内検索 企業情報 サイトマップ

研修コース検索

コラム

ゼロから歩くPythonの道

CTC 教育サービス

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes 

第57回 PythonのコードフォーマッターBlack様を使ってみた。 (菱沼佑香) 2024年10月

こんにちは、吉政創成 菱沼です。
今回も「きれいなPythonプログラミング(マイナビ出版)」という書籍を利用して学習します。

前回は、コードを自動で整形してくれるBlack様についてと、インストール方法まで学びました。
今回は、実際に使ってみたいと思います。

強制力の強い俺様コードフォーマッター、Black

Black様はコマンドプロンプトやターミナルウィンドウからの実行以外に、Jupyter NotebookやPyCharmなどのエディタ以外でも実行することができるそうです。私自身はBlack様をVS Codeで試しに使ってみたことしかありません。
Blackの仕様的な詳細は以下のサイトをご覧ください。
https://github.com/psf/black

---------------------------------------------------------------
P.57
例としてyourScript.pyというファイルを自動整形してみましょう。Windowsのコマンドラインから、次のように実行します(macOSやLinuxでは、pythonではなくpython3としてください)。


C:¥Users¥Al>python -m black yourScript.py

このコマンドを実行すると、yourScript.py内のコードがBlackのスタイルガイドに沿って整形されます。
Blackを直接実行できるように環境変数PATHがすでに設定されているかもしれませんが、その場合は次のように入力するだけでyourScript.pyをフォーマットできます。


C:¥Users¥Al>black yourScript.py

フォルダー内のすべての.pyファイルに対してBlackを実行したい場合は、個々のファイルではなく、フォルダーを指定してください。


C:¥Users¥Al>python -m black C:¥yourPythonFiles

---------------------------------------------------------------

例えばこんなプログラムをBlack様にお見せしてみました。

fig01

結果...。

fig02

1行目の終わりに括弧がついてませんので、「Oh no!」と怒られます。エラーがあった次の行の部分が引っ張り出されているようなので、前の行を確認すればエラー箇所が見つけられそうです。
ちなみに文字化けは絵文字です。絵文字。爆発とハートブレイクらしいです。

修正してもう一度通してみると、「All done!」と表示され、問題がないことが分かります。そして、相変わらず文字化けしてますが、ケーキとキラキラの絵文字でお祝いされるようです。

fig03

より詳しい内容やVS Codeで使う時のことは以下のブログで解説されていました。ぜひご参考に。
【black】Pythonのソースコードを自動整形!!コードフォーマットで議論するのはもう止めませんか?

Blackで使えるオプションなどを確認したいときは、[python -m black --help]と入力すると一覧が表示されます。

Black様が聴いてくれるお願い事は3つ

基本的にBlackの設定は変更することができませんので、Blackでチェックしきれない部分のチェックや、修正させたくない場合にはBlackを使わず、他のコードフォーマッターを一部分に使うなど、合わせ技を取ることがあると聞いたことがあります。
ただ、どうやら一部変更が可能なオプションというのもあるようです。ここからは内容をまとめつつ、補足&一部引用という形でお送りします。(P.58~59)
なお、コードはすべてWindowsでの記述です。

コードの長さ調整

Pythonコードの1行当たりの標準的な長さは80文字だそうですが、Blackは1行88文字という設定になっているそうです。1行があまり長くても見にくくなってしまいますが、これを自分の好みに合わせて変えることができるそうです。
変えたいときは以下のようにコマンドオプションをつけて書きます。


C:¥Users¥xxx>python -m black -l (文字数) yourScript.py

※数字の1ではなく、小文字のLで書かれています。

ダブルクォートを使った文字列設定の無効化

文字列にはシングルクォート(')かダブルクォート(")を付けますが、Blackはダブルクォートで統一するそうです。シングルクォートだと、英語などの時にわかりにくくなりますしね。ただ、文字列にダブルクォートが入っていた場合は、シングルクォートに変換するそうです。
例)d = "Zophie said, &"meow"" → d = 'Zophie said, "meow"'
これを変えてほしくない場合は以下のように、Sオプションを加えて書けばいいそうです。


C:¥Users¥xxx>python -m black -S yourScript.py

もし先ほどのオプションと並列で使いたい場合は以下のように書けばいいとのこと。


C:¥Users¥xxx>python -m black -l (文字数) -S yourScript.py
Blackによる整形結果をプレビューする

Blackはチェックしたコードを自動で整形してくれますが、整形する前に確認したいケースはあると思います。基本的には自分でバックアップをとるなり、バージョン管理ソフトを利用して、前後を確認してもらうことになると思いますが、オプションを使えば変更前にプレビューで確認することができるそうです。


C:¥Users¥xxx>python -m black --diff yourScript.py

例えば実行するとこんな感じで表示されます。(これは先ほどのファイルとは別のものです。)

fig04

「-」が削除される内容で、「+」が「-」に変わって置き換えられる内容になります。
変更される内容に問題がないのであれば、[--diff]を消して実行すればいいようです。

コードの一部でBlackを無効にする

プロジェクトチームによっては、そのプロジェクト特有のルールが存在することがあるようで、そういった場合には、Blackのように強制的な矯正をされると困ってしまうことがあるのだとか。そこで、コードの一部分に対してBlackが作用しないようにする方法です。


# fmt: off
(コード)
#fmt: on

このように、Blackのコード整形をオフにしたい行の前にコメントで「# fmt: off」と入れ、再開したい行の前に「#fmt: on」と入れてあげると、コードの空白部分やその他のフォーマットには影響しないようになるそうです。

それではきりが良いので、今回はこちらで終了です。
今回もお付き合いいただきありがとうございました。

 


 

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes