0
1

Python コーディング規約

Posted at

Pythonコーディング規約

本記事ではPythonのコーディング規約に関する情報を記述する。
コーディング規約とは、チーム開発を行う際に、コード上のコメントの記述や関数、変数の定義時のルールを決めることで、コードの見た目を均一に整え、レビュー等を行いやすくするために決められる。
コーディング規約を決める際の指標として下記3点をまとめる。

  • PEP8
  • Flake8
  • Black

PEP8

PEP8とはPythonのスタイルガイドである。
スタイルガイドとは、インデントや空白などのコードの見た目に関するもの、コメント、関数や変数の命名などの基本ルールを定義したコーディング規約のこと。

  • コードのレイアウトに関するルール
    読みやすく、見た目に一貫性があるコードを目指すための指針。

    • インデント
      基本のインデントは半角スペース4文字
      カッコ内部で改行した際のインデントについては下記コードを示す。

      <正しい例>
      - カッコの先頭に揃えるパターン
      def correct_indent1(var_one, var_two
                          var_three, var_four):
      
      - 先頭の値を縦で揃え、定義の初めの位置に閉じカッコを揃えるパターン
      num_list = [
          1, 2, 3,
          4, 5, 6,
      ]
      
      <誤った例>
      - 引数が揃っていないパターン
      def miss_indent1(var_one, var_two,
              var_three,
              var_four):
          print('test')
      
      - 引数は揃っているが関数内部の行と同じインデントのパターン
      def_miss_indent2(
          var_one, var_two,
          var_three, var_four):
          print('test')
      
    • 空白
      空行については下記ルールが定義されている

      • トップレベルの関数やクラスの間は、2行空ける
      • クラス内のメソッドの定義は、1行空ける
    • import文
      import文については下記ルールが定義されている

      • 異なるモジュールはimport文を分ける
      • 次の順番でグループ化する
        1. 標準ライブラリ
        2. サードパーティに関連するもの
        3. ローカルライブラリ
    • 空白
      空白については下記ルールが定義されている

      • 余計な空白文字は使わない
      • 代入演算子や比較演算子などの両側に1つ空白を入れる
      • カンマの後ろに空白を入れる
      • 同じカッコなどの終わりを表す文字の前に空白を入れない
  • コメントに関するルール
    コメントで重要なことはコードと矛盾しないこと。
    コード修正時はコメントも更新する必要がある。
    コメントの書き方の例として3つ紹介する

    • ブロックコメント
      ブロックコメントは説明したいコードの前の行に書くコメント。

      • コードと同じインデント
      • 1つの#と1つの空白の後ろに書く
    • インラインコメント
      インラインコメントは、コードと同じ行に書くコメント。

      • コードとコメントの間に2つ以上の空白
      • 1つの#と1つの空白の後ろに書く
    • docstring
      docstringとは、モジュール、関数、クラス、メソッドについて説明を書くコメント。

      • よりよく書くためのルールがPEP257にまとめられている
      • 関数やメソッドの説明はdefの直後に書く
      • """で始まり、"""で終わる行
      • 説明が複数行の場合は、1行目の後に空行を置く
  • 命名に関するルール
    PEP8での命名規則を下記表に示す。

用途 スタイル 用例
パッケージとモジュール名 lowercase system, datetime
クラス名 CamelCase TestCase, HTTPRequest
関数、変数名 lowercaseまたは、lower_case_with_underscores testnum、test_def
定数 UPPERCASEまたは、UPPER_CASE_WITH_UNDERSCORES MINVALUE、MAX_VALUE
例外の名前 CamelCase、末尾にError ClientApiError

Flake8

Flake8はコーディング規約であるPEP8に準拠しているか、不具合のもとになる箇所がないかを静的コード解析を行うツールである。

  • Flake8のインストール
    Flake8は下記コマンドを実行することでインストールできる
pip install flake8
  • 静的コードチェックコマンド
    静的コード解析実行コマンドを下記に示す。
<特定のファイルを解析>
flake8 ファイルパス

<フォルダ内のPythonファイルを解析>
flake8 フォルダパス
  • エラーコード
    エラーコード一覧は下記記事が大変参考になります。

  • オプション
    主要なオプションを下記に示す。
オプション 概要 使用例
ignore 特定のエラーを無視 flake8 --ignore=E203, E501
exclude チェックの対象から除外 flake8 --exclude=.env, doc/build
max-line-length 1行の最大文字数指定 flake8 --max-line-length=80
max-complexity 複雑度を設定しチェック flake8 --max-complexity=10

Black

Blackは妥協のないコードフォーマッターである。
PEP8の規約をもとに、PEP8で明確に定められていない項目についても独自に定めた規約にコードを自動整形するツール。
変更もできないため、コーディング規約で議論する必要がなくなるメリットがある。

  • インストール
pip install black
  • 実行コマンド
black ファイルパス
  • オプション
    主要なコマンドラインオプションを下記に示す。
オプション 概要
-l, --line-length 1行の最大文字数
--check ファイルをチェックし結果を出力する。ファイル修正はしない
--diff ファイルをチェックし差分を出力する。ファイル修正はしない
--include チェックしたいファイルやディレクトリを正規表現で指定
--exculde 除外するファイルやディレクトリを正規表現で指定
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1