Python フォーマットツール
Pythonフォーマットとは?
Pythonフォーマットは、整理されていないPythonコードを標準化された読みやすい形式に整えるプロセスです。良いコードフォーマットは可読性を向上し、デバッグを容易にし、エラーを減少します。Pythonはインデントでコードブロックを定義するため、正しいフォーマットが特に重要です。フォーマットには: 一貫したインデント、適切な改行、演算子のスペースが含まれます。圧縮は空白とコメントをすべて削除し、ファイルサイズを大幅に減少します。
使い方
使い方
- 左側の入力欄にPythonコードを貼り付けるか入力します
- インデントサイズ(スペース2個、スペース4個、Tab)を選択します
- 「フォーマット」でコードを整形、「圧縮」でファイルサイズを小さくできます
- 右側に結果が表示されます(シンタックスハイライト付き)
- 「コピー」をクリックしてクリップボードにコピーします
オプションの説明
Pythonのヒント
- Pythonはインデントに厳密なので、結果をプロジェクトにコピーする前に、整形後の制御ブロックを必ず確認してください
- フォーマットでは型チェック、インポート、テストは実行されません。動作や依存関係の検証には、普段お使いのPythonツールをご利用ください
利用シーン
仕組み
Pythonは、ブレース(中括弧)ではなくインデントを使用してコードブロックを定義する数少ない主流言語の一つです。同じインデントを持つ連続する文は同じブロックに属し、1スペースの違いでセマンティクスが変わります。この設計によりコードの視覚的な構造がロジックと一致しますが、フォーマッターは論理レベルを正確に識別する必要があります。 フォーマッターはまずtokenizeモジュールまたはカスタムレキサーでコードをスキャンし、各行の先頭空白をインデント情報として処理します。括弧(丸括弧、角括弧、波括弧)内の文は複数行にわたることができ、その場合は先頭空白ではなく括弧の深さによってインデントが決定されます。文字列リテラル内(三重引用符、一重引用符)の空白は変更してはなりません。さもないと文字列の値が変わってしまいます。 PEP 8はPythonの公式スタイルガイドで、4スペースインデント、最大行長79文字、演算子前後のスペース、インポートのグループ化、命名規則を規定しています。Blackは設定不要派フォーマッターの代表例で、二重引用符文字列、末尾カンマ、88文字の行長を強制し、厳格で変更不可のルールを持ちます。yapfはGoogleスタイルに近く、設定が可能です。
- インデントのセマンティクス:Pythonは先頭空白でコードブロックを判断。同じインデントは同じブロックを意味し、インデントの変更でスコープが切り替わる。
- PEP 8ルール:4スペースインデント、行幅79文字、演算子前後のスペース、クラス名はCapWords、関数名はsnake_case。
- 括弧内の改行:括弧(丸括弧、角括弧、波括弧)内の文は折り返すことができ、インデントは先頭空白ではなく括弧の深さで決定される。
- 文字列境界:三重引用符文字列やdocstring内の空白は変更不可。さもないとリテラルの内容が壊れる。
- Blackスタイル:設定不要、カスタマイズ不可、二重引用符強制、末尾カンマ、1行88文字、プロジェクト全体で同一の出力。
- 型アノテーション:PEP 484で導入。フォーマッターは `->` リターン型やパラメータ `: type` アノテーション前後の適切なスペースを保持する。
使用例
関数定義のフォーマット
入力: def add(a,b):
return a+b
def subtract(a,b):
return a-b
出力:
def add(a, b):
return a + b
def subtract(a, b):
return a - bリスト内包表記のフォーマット
入力: result=[x*x for x in range(10) if x%2==0]
result2={k:v for k,v in items if v>0}
出力:
result = [x * x for x in range(10) if x % 2 == 0]
result2 = {k: v for k, v in items if v > 0}クラス定義のフォーマット
入力: class User:
def __init__(self,name,email):
self.name=name
self.email=email
def __repr__(self):
return f"User({self.name})"
出力:
class User:
def __init__(self, name, email):
self.name = name
self.email = email
def __repr__(self):
return f"User({self.name})"よくある質問
どのPythonスタイルを使用しますか?
ほとんどのビルドはデフォルトでPEP 8の規約を使用し、多くの場合Black経由です。88カラムの行幅、二重引用符の文字列、末尾セミコロンなしです。Blackは独自の見解を持ち、ほとんどの設定オプションを排除して、プロジェクト全体で一貫したスタイルを提供します。柔軟性が必要な場合は、autopep8とyapfにより多くのオプションがあります。
フォーマッタにとってインデントは重要ですか?
はい。Pythonのインデントはブロック構造を定義します。フォーマッタは既存のブロック境界を尊重します。入力にタブ/スペースが混在していたり、インデントレベルが間違っていたりすると、フォーマット実行前に解析が失敗します。
import順序は修正されますか?
Black、autopep8、yapfは空白のみを処理します。importをソートしてグループ化するには、isort(またはruff --fix)を使用してください。一部のページでは両方を組み合わせています。実際に何が適用されているかを知るには設定を読んでください。
型ヒントに対応していますか?
現代的なパーサーでは対応しています。関数シグネチャ、変数、クラス属性の型注釈(PEP 526、484、612)は正しくフォーマットされます。非常に新しい構文(3.12以降のPEP 695ジェネリック構文)には最近のパーサーが必要で、古いビルドはつまずく可能性があります。
コードはアップロードされますか?
いいえ。フォーマットはPython ASTのJavaScript実装を使用してブラウザ内で実行されます。貼り付けたコードは送信されません。
結果はCI上のblackと一致しますか?
近いですが、常に同一とは限りません。Blackのバージョンが異なるとフォーマットがわずかに異なる可能性があります(Blackは定期的にルールを更新します)。CIの一貫性のためには、ローカルとCIで同じBlackバージョンを実行してください。このページは簡単な視覚的チェックとして扱ってください。
長い行が複数行に折り返されるのはなぜですか?
PEP 8とBlackは1行あたり88文字以下を目指します。長い式、多くの引数を持つ関数呼び出し、メソッドのチェーン呼び出しは、可読性のために複数行に分割されます。チームで100または120を使用している場合は、行幅オプションを調整してください。