PEP8・Black・Ruffで“読みやすい”Pythonコードへ!自動整形とLintではじめる品質向上
Pythonでプログラムを書くとき、コードの「読みやすさ」は非常に重要です。なぜなら、コードは一度書いたら終わりではなく、後から何度も読まれたり、修正されたり、他の人と共有されたりするからです。もし自分だけがわかるような書き方をしていたら、将来の自分やチームのメンバーが内容を理解するのに苦労し、バグの原因になったり開発のスピードが落ちたりしてしまいます。
特にチームで開発を行う場合、全員がバラバラのスタイルでコードを書いていると、レビューや修正がとても大変になります。これを防ぐために、Pythonには「PEP8(ペップエイト)」という公式のスタイルガイドが存在します。この記事では、PEP8に従った綺麗なコードを誰でも簡単に書けるようにするためのツール、「Black」と「Ruff」を紹介します。専門家でなくてもわかるように、ツールの役割から具体的な導入手順まで丁寧に解説していきますので、ぜひ最後までご覧ください。
そもそもPEP8とは? Pythonの公式スタイルガイド
PEP8(Python Enhancement Proposal 8)は、Pythonのコードを読みやすく、一貫性のあるものにするための公式なルールブックです。 例えば、以下のような基本的なルールが定められています。
- インデント: 字下げには、スペースを4つ使う。
- 1行の長さ: 1行は最大でも79文字(ツールによっては88文字を推奨)に収める。
- 空白の使い方: 計算式や関数の引数の間には適切にスペースを入れて見やすくする。
- 命名規則: 変数名や関数名は小文字とアンダースコアで(例: `my_variable`)、クラス名は大文字で始める(例: `MyClass`)。
これらのルールに従うことで、誰が書いても同じような見た目のコードになり、チーム全体でコードの理解がスムーズになります。 結果として、バグの発見がしやすくなったり、メンテナンスの効率が上がったりという大きなメリットがあります。
しかし、これら多くのルールを手作業で一つひとつ確認しながらコーディングするのは非常に大変です。そこで活躍するのが、今回紹介する「コードフォーマッタ」と「リンター」という自動化ツールです。
コードフォーマッタとリンター:コードを綺麗にする自動お掃除ロボット
「コードフォーマッタ」と「リンター」は、コードの品質を保つために欠かせないツールですが、役割が少し異なります。初心者の方にも分かりやすく、掃除に例えてみましょう。
ツール種別 | 役割(掃除の例え) | Pythonでの代表的なツール |
---|---|---|
コードフォーマッタ (Formatter) | 部屋の見た目を整える「自動整理ロボット」。本棚の本を整頓したり、机の上の物を配置し直したりするように、コードのインデントや改行を自動で綺麗に整形します。 | Black, autopep8, yapf |
リンター (Linter) | 部屋に問題がないかチェックする「点検ドローン」。窓の閉め忘れや使っていない電化製品のコンセントを指摘するように、コードの間違いや非効率な書き方(例: 使われていない変数)を警告します。 | Ruff, Flake8, Pylint |
フォーマッタがコードの「見た目」を整えるのに対し、リンターはコードの「中身」をチェックして潜在的な問題点を教えてくれます。 この2つを組み合わせることで、コードの可読性と品質の両方を自動で高めることができるのです。
BlackとRuffとは? – “書式整形”と“静的解析”の強力コンビ
数あるツールの中でも、近年特に人気を集めているのが「Black」と「Ruff」の組み合わせです。 それぞれの特徴を見ていきましょう。
Black:問答無用のコードフォーマッタ
Blackは、「The Uncompromising Code Formatter(妥協しないコードフォーマッタ)」というキャッチフレーズの通り、非常に強力なコード整形ツールです。 Blackの最大の特徴は、細かい設定がほとんどないことです。「どう整形するか」で開発者同士が議論する時間をなくし、「Blackに任せる」という文化を推奨しています。これにより、チーム内でコーディングスタイルに関する無駄な議論がなくなります。
例えば、以下のようなバラバラな書き方のコードも…
def my_func(a,b, c):
return a+b*c
x=my_func(1,2,3)
Blackを実行すると、一瞬でこのように整形されます。
def my_func(a, b, c):
return a + b * c
x = my_func(1, 2, 3)
スペースの入れ方やインデントが自動で統一され、誰が見ても分かりやすいコードになりました。
Ruff:Rust製の超高速リンター&フォーマッタ
Ruffは、プログラミング言語Rustで作られた、非常に高速なPython用のリンターです。 従来は、スタイルチェックの「Flake8」、インポート順の整理の「isort」など、複数のツールを組み合わせるのが一般的でしたが、Ruffはこれらの機能をたった一つでカバーできるオールインワンツールです。
Ruffの主な役割は以下の通りです。
- 静的解析によるバグ検出: 使われていない変数やインポート、未定義の変数の参照など、コードを実行する前に潜在的なバグを見つけ出します。
- 高速な動作: Rust製のため、従来のPython製ツールよりも圧倒的に高速に動作します。大規模なプロジェクトでもストレスなく利用できます。
- 設定のシンプルさ: 後述する
pyproject.toml
というファイル一つで設定を管理でき、プロジェクトごとにルールを簡単に統一できます。
この記事では、主にBlackをフォーマッタ、Ruffをリンターとして役割分担する方法を紹介します。この組み合わせにより、コードの見た目と品質の両方を効率的に管理できます。
BlackとRuffの導入手順 – 3ステップで自動化環境を構築
それでは、実際にBlackとRuffを導入してみましょう。ここでは、人気のコードエディタであるVisual Studio Code(VS Code)を使った設定方法を解説します。
ステップ1:BlackとRuffをインストールする
まず、お使いのPCにPythonがインストールされていることを確認し、コマンドプロンプト(ターミナル)で以下のコマンドを実行して、BlackとRuffをインストールします。
pip install black ruff
これで、2つのツールが使えるようになりました。
ステップ2:VS Codeに拡張機能をインストールする
次に、VS CodeでBlackとRuffを便利に使うための拡張機能をインストールします。
- VS Codeを開き、左側のアクティビティバーから拡張機能アイコン(四角が4つあるアイコン)をクリックします。
- 検索ボックスに「Black Formatter」と入力し、Microsoftが提供しているものをインストールします。
- 同様に、「Ruff」と検索し、Astral Softwareが提供しているものをインストールします。
ステップ3:VS Codeの設定を変更する (settings.json)
最後に、VS Codeの設定を変更して、ファイルを保存するたびに自動でコードが整形され、エラーがチェックされるようにします。
Ctrl + Shift + P
(Macの場合はCmd + Shift + P
)を押してコマンドパレットを開きます。- 「Preferences: Open User Settings (JSON)」と入力して選択し、設定ファイル
settings.json
を開きます。 - 以下の設定を追記して保存します。
{
// ... 他の設定 ...
"[python]": {
"editor.defaultFormatter": "ms-python.black-formatter", // PythonのフォーマッタをBlackに設定
"editor.formatOnSave": true // 保存時に自動でフォーマット
},
"editor.codeActionsOnSave": {
"source.organizeImports": true // Ruffによるインポートの自動整理
},
"ruff.linting.enabled": true // Ruffによるチェックを有効化
}
これで設定は完了です!Pythonファイル(.py
)を作成・編集して保存すると、Blackが自動でコードを整形し、Ruffが問題点をリアルタイムで指摘してくれるようになります。
プロジェクト共通のルールを作る (pyproject.toml)
チームで開発する場合、全員が同じルールでツールを使うことが重要です。そのために、プロジェクトのルートフォルダにpyproject.toml
という設定ファイルを作成し、共通のルールを記述します。
以下は、基本的な設定例です。
[tool.black]
line-length = 88 # 1行の長さを88文字に設定
[tool.ruff]
target-version = "py311" # 対象のPythonバージョン
line-length = 88 # Blackと合わせる
select = ["E", "F", "I"] # チェックするルールの種類 (E: スタイルエラー, F: 論理エラー, I: インポート順)
ignore = ["E501"] # 行が長すぎることに関する警告は無視 (Blackが整形するため)
このファイルをプロジェクトに含めておけば、他のメンバーがプロジェクトを開いたときも自動的に同じ設定が適用され、ルールの一貫性が保たれます。
さらに便利に!GitHub Actionsで品質チェックを自動化
チーム開発では、GitHubなどのプラットフォームにコードをアップロードする際に、自動で品質チェックを行う仕組み(CI/CDと呼ばれます)を導入すると非常に便利です。 GitHub Actionsを使えば、誰かがコードをプッシュするたびにBlackとRuffを自動実行し、スタイル違反やエラーがないかを確認できます。
プロジェクトの.github/workflows/
ディレクトリに、以下のような設定ファイル(例: `lint.yml`)を作成します。
name: Lint and Format Check
on: [push, pull_request]
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: '3.11'
- name: Install dependencies
run: pip install black ruff
- name: Check code format with Black
run: black --check .
- name: Lint with Ruff
run: ruff check .
この設定により、コードがプッシュされるたびに、Blackがフォーマットをチェックし(--check
モード)、Ruffがエラーをチェックします。もし問題があれば、GitHub上で通知され、コードの品質を常に一定に保つことができます。
よくある質問 (Q&A)
- Q: VS Codeで自動フォーマットが動きません。
- A: Black Formatter拡張機能が正しくインストールされているか、
settings.json
のeditor.defaultFormatter
の設定が正しいかを確認してください。また、VS Codeの右下で適切なPython環境が選択されているかもチェックしましょう。 - Q: Ruffの警告がたくさん出てきてしまいます。
- A: Ruffは非常に多くのルールをチェックします。最初は重要なエラー(
F
: 論理エラーなど)に絞って対応し、不要な警告はpyproject.toml
のignore
設定で無効化するのがおすすめです。 - Q: Blackの整形スタイルが気に入りません。変更できますか?
- A: Blackは「妥協しない」ことをコンセプトにしているため、カスタマイズ性は意図的に低くされています。細かいスタイルにこだわるよりも、チーム全体で一貫したスタイルを保つメリットを優先するのがBlackの考え方です。
まとめ
この記事では、Pythonコードの品質と可読性を高めるための公式スタイルガイド「PEP8」と、それを自動で適用するための強力なツール「Black」と「Ruff」について解説しました。
これらのツールを導入することで、以下のようなメリットが得られます。
- コードの整形を自動化でき、手作業でのスタイル修正から解放される。
- チーム全員が一貫したスタイルでコーディングできるため、レビューや共同作業がスムーズになる。
- 使われていない変数などの潜在的なバグを早期に発見できる。
- GitHub Actionsと連携させることで、コード品質を常に高く維持できる。
最初は設定に少し手間がかかるかもしれませんが、一度環境を整えてしまえば、あとは意識することなく「読みやすいコード」を書き続けることができます。本記事で紹介した手順を参考に、ぜひあなたのプロジェクトにもBlackとRuffを導入して、快適なPython開発ライフをスタートさせてください。✨
参考文献
“`
—
**(納品用)Citationタグを除去した最終的なHTML**
—
“`html
PEP8・Black・Ruffで“読みやすい”Pythonコードへ!自動整形とLintではじめる品質向上
Pythonでプログラムを書くとき、コードの「読みやすさ」は非常に重要です。なぜなら、コードは一度書いたら終わりではなく、後から何度も読まれたり、修正されたり、他の人と共有されたりするからです。もし自分だけがわかるような書き方をしていたら、将来の自分やチームのメンバーが内容を理解するのに苦労し、バグの原因になったり開発のスピードが落ちたりしてしまいます。
特にチームで開発を行う場合、全員がバラバラのスタイルでコードを書いていると、レビューや修正がとても大変になります。これを防ぐために、Pythonには「PEP8(ペップエイト)」という公式のスタイルガイドが存在します。この記事では、PEP8に従った綺麗なコードを誰でも簡単に書けるようにするためのツール、「Black」と「Ruff」を紹介します。専門家でなくてもわかるように、ツールの役割から具体的な導入手順まで丁寧に解説していきますので、ぜひ最後までご覧ください。
そもそもPEP8とは? Pythonの公式スタイルガイド
PEP8(Python Enhancement Proposal 8)は、Pythonのコードを読みやすく、一貫性のあるものにするための公式なルールブックです。 例えば、以下のような基本的なルールが定められています。
- インデント: 字下げには、スペースを4つ使う。
- 1行の長さ: 1行は最大でも79文字(ツールによっては88文字を推奨)に収める。
- 空白の使い方: 計算式や関数の引数の間には適切にスペースを入れて見やすくする。
- 命名規則: 変数名や関数名は小文字とアンダースコアで(例: `my_variable`)、クラス名は大文字で始める(例: `MyClass`)。
これらのルールに従うことで、誰が書いても同じような見た目のコードになり、チーム全体でコードの理解がスムーズになります。 結果として、バグの発見がしやすくなったり、メンテナンスの効率が上がったりという大きなメリットがあります。
しかし、これら多くのルールを手作業で一つひとつ確認しながらコーディングするのは非常に大変です。そこで活躍するのが、今回紹介する「コードフォーマッタ」と「リンター」という自動化ツールです。
コードフォーマッタとリンター:コードを綺麗にする自動お掃除ロボット
「コードフォーマッタ」と「リンター」は、コードの品質を保つために欠かせないツールですが、役割が少し異なります。初心者の方にも分かりやすく、掃除に例えてみましょう。
ツール種別 | 役割(掃除の例え) | Pythonでの代表的なツール |
---|---|---|
コードフォーマッタ (Formatter) | 部屋の見た目を整える「自動整理ロボット」。本棚の本を整頓したり、机の上の物を配置し直したりするように、コードのインデントや改行を自動で綺麗に整形します。 | Black, autopep8, yapf |
リンター (Linter) | 部屋に問題がないかチェックする「点検ドローン」。窓の閉め忘れや使っていない電化製品のコンセントを指摘するように、コードの間違いや非効率な書き方(例: 使われていない変数)を警告します。 | Ruff, Flake8, Pylint |
フォーマッタがコードの「見た目」を整えるのに対し、リンターはコードの「中身」をチェックして潜在的な問題点を教えてくれます。 この2つを組み合わせることで、コードの可読性と品質の両方を自動で高めることができるのです。
BlackとRuffとは? – “書式整形”と“静的解析”の強力コンビ
数あるツールの中でも、近年特に人気を集めているのが「Black」と「Ruff」の組み合わせです。 それぞれの特徴を見ていきましょう。
Black:問答無用のコードフォーマッタ
Blackは、「The Uncompromising Code Formatter(妥協しないコードフォーマッタ)」というキャッチフレーズの通り、非常に強力なコード整形ツールです。 Blackの最大の特徴は、細かい設定がほとんどないことです。「どう整形するか」で開発者同士が議論する時間をなくし、「Blackに任せる」という文化を推奨しています。これにより、チーム内でコーディングスタイルに関する無駄な議論がなくなります。
例えば、以下のようなバラバラな書き方のコードも…
def my_func(a,b, c):
return a+b*c
x=my_func(1,2,3)
Blackを実行すると、一瞬でこのように整形されます。
def my_func(a, b, c):
return a + b * c
x = my_func(1, 2, 3)
スペースの入れ方やインデントが自動で統一され、誰が見ても分かりやすいコードになりました。
Ruff:Rust製の超高速リンター&フォーマッタ
Ruffは、プログラミング言語Rustで作られた、非常に高速なPython用のリンターです。 従来は、スタイルチェックの「Flake8」、インポート順の整理の「isort」など、複数のツールを組み合わせるのが一般的でしたが、Ruffはこれらの機能をたった一つでカバーできるオールインワンツールです。
Ruffの主な役割は以下の通りです。
- 静的解析によるバグ検出: 使われていない変数やインポート、未定義の変数の参照など、コードを実行する前に潜在的なバグを見つけ出します。
- 高速な動作: Rust製のため、従来のPython製ツールよりも圧倒的に高速に動作します。大規模なプロジェクトでもストレスなく利用できます。
- 設定のシンプルさ: 後述する
pyproject.toml
というファイル一つで設定を管理でき、プロジェクトごとにルールを簡単に統一できます。
この記事では、主にBlackをフォーマッタ、Ruffをリンターとして役割分担する方法を紹介します。この組み合わせにより、コードの見た目と品質の両方を効率的に管理できます。
BlackとRuffの導入手順 – 3ステップで自動化環境を構築
それでは、実際にBlackとRuffを導入してみましょう。ここでは、人気のコードエディタであるVisual Studio Code(VS Code)を使った設定方法を解説します。
ステップ1:BlackとRuffをインストールする
まず、お使いのPCにPythonがインストールされていることを確認し、コマンドプロンプト(ターミナル)で以下のコマンドを実行して、BlackとRuffをインストールします。
pip install black ruff
これで、2つのツールが使えるようになりました。
ステップ2:VS Codeに拡張機能をインストールする
次に、VS CodeでBlackとRuffを便利に使うための拡張機能をインストールします。
- VS Codeを開き、左側のアクティビティバーから拡張機能アイコン(四角が4つあるアイコン)をクリックします。
- 検索ボックスに「Black Formatter」と入力し、Microsoftが提供しているものをインストールします。
- 同様に、「Ruff」と検索し、Astral Softwareが提供しているものをインストールします。
ステップ3:VS Codeの設定を変更する (settings.json)
最後に、VS Codeの設定を変更して、ファイルを保存するたびに自動でコードが整形され、エラーがチェックされるようにします。
Ctrl + Shift + P
(Macの場合はCmd + Shift + P
)を押してコマンドパレットを開きます。- 「Preferences: Open User Settings (JSON)」と入力して選択し、設定ファイル
settings.json
を開きます。 - 以下の設定を追記して保存します。
{
// ... 他の設定 ...
"[python]": {
"editor.defaultFormatter": "ms-python.black-formatter", // PythonのフォーマッタをBlackに設定
"editor.formatOnSave": true // 保存時に自動でフォーマット
},
"editor.codeActionsOnSave": {
"source.organizeImports": true // Ruffによるインポートの自動整理
},
"ruff.linting.enabled": true // Ruffによるチェックを有効化
}
これで設定は完了です!Pythonファイル(.py
)を作成・編集して保存すると、Blackが自動でコードを整形し、Ruffが問題点をリアルタイムで指摘してくれるようになります。
プロジェクト共通のルールを作る (pyproject.toml)
チームで開発する場合、全員が同じルールでツールを使うことが重要です。そのために、プロジェクトのルートフォルダにpyproject.toml
という設定ファイルを作成し、共通のルールを記述します。
以下は、基本的な設定例です。
[tool.black]
line-length = 88 # 1行の長さを88文字に設定
[tool.ruff]
target-version = "py311" # 対象のPythonバージョン
line-length = 88 # Blackと合わせる
select = ["E", "F", "I"] # チェックするルールの種類 (E: スタイルエラー, F: 論理エラー, I: インポート順)
ignore = ["E501"] # 行が長すぎることに関する警告は無視 (Blackが整形するため)
このファイルをプロジェクトに含めておけば、他のメンバーがプロジェクトを開いたときも自動的に同じ設定が適用され、ルールの一貫性が保たれます。
さらに便利に!GitHub Actionsで品質チェックを自動化
チーム開発では、GitHubなどのプラットフォームにコードをアップロードする際に、自動で品質チェックを行う仕組み(CI/CDと呼ばれます)を導入すると非常に便利です。 GitHub Actionsを使えば、誰かがコードをプッシュするたびにBlackとRuffを自動実行し、スタイル違反やエラーがないかを確認できます。
プロジェクトの.github/workflows/
ディレクトリに、以下のような設定ファイル(例: `lint.yml`)を作成します。
name: Lint and Format Check
on: [push, pull_request]
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: '3.11'
- name: Install dependencies
run: pip install black ruff
- name: Check code format with Black
run: black --check .
- name: Lint with Ruff
run: ruff check .
この設定により、コードがプッシュされるたびに、Blackがフォーマットをチェックし(--check
モード)、Ruffがエラーをチェックします。もし問題があれば、GitHub上で通知され、コードの品質を常に一定に保つことができます。
よくある質問 (Q&A)
- Q: VS Codeで自動フォーマットが動きません。
- A: Black Formatter拡張機能が正しくインストールされているか、
settings.json
のeditor.defaultFormatter
の設定が正しいかを確認してください。また、VS Codeの右下で適切なPython環境が選択されているかもチェックしましょう。 - Q: Ruffの警告がたくさん出てきてしまいます。
- A: Ruffは非常に多くのルールをチェックします。最初は重要なエラー(
F
: 論理エラーなど)に絞って対応し、不要な警告はpyproject.toml
のignore
設定で無効化するのがおすすめです。 - Q: Blackの整形スタイルが気に入りません。変更できますか?
- A: Blackは「妥協しない」ことをコンセプトにしているため、カスタマイズ性は意図的に低くされています。細かいスタイルにこだわるよりも、チーム全体で一貫したスタイルを保つメリットを優先するのがBlackの考え方です。
まとめ
この記事では、Pythonコードの品質と可読性を高めるための公式スタイルガイド「PEP8」と、それを自動で適用するための強力なツール「Black」と「Ruff」について解説しました。
これらのツールを導入することで、以下のようなメリットが得られます。
- コードの整形を自動化でき、手作業でのスタイル修正から解放される。
- チーム全員が一貫したスタイルでコーディングできるため、レビューや共同作業がスムーズになる。
- 使われていない変数などの潜在的なバグを早期に発見できる。
- GitHub Actionsと連携させることで、コード品質を常に高く維持できる。
最初は設定に少し手間がかかるかもしれませんが、一度環境を整えてしまえば、あとは意識することなく「読みやすいコード」を書き続けることができます。本記事で紹介した手順を参考に、ぜひあなたのプロジェクトにもBlackとRuffを導入して、快適なPython開発ライフをスタートさせてください。✨
参考文献
“`
Sources
help
qiita.com
zenn.dev
zenn.dev
kanaries.net
rcmdnk.com
st-hakky.com
tsurutatakumi.info
zenn.dev
classmethod.jp
qiita.com
dev.to
dev.to
medium.com
zenn.dev