Pythonコード改善メモ
Python環境構築手順
#PEP-8 に準拠: autopep8 --in-place --recursive --aggressive --max-line-length 99 src/` #Flake8 で規約をチェック: flake8 --max-line-length 99 src/ #リファクタリング していくうえで、既存の機能を壊していないことを確認できる仕組みを用意する 開発者が覚える事をむやみに増やさないようにする。
unittest.TestCase でテストを書く
テスト自動化
#tox で、コーディング規約の自動適用を実行: tox -e autopep8 #tox で、コーディング規約を自動チェック: tox -e flake8 #tox で、特定のコマンドを特定のパラメータで実行: tox -e run #tox で、UnitTestを実行: tox -e ut Pythonコーディングパターン
locals() の削除
exec() の削除
定数を大文字化
グローバル変数の削減
loggerを利用
ログ出力
方針: ログ出力をシンプルに使えることを目標とする
方針: Python標準のloggingの仕組みでできる範囲で実装するため、既存のログ出力とは結果が異なるかもしれない
printとfie.write()で書かれているログ出力コードをloggingに切り替える
コマンドラインのdebugオプションを削除し、logger.debugでログ出力
コマンドラインにloglevelオプションを追加
ライブラリのWARNINGもログ出力に統合して出力
captureWarnings() 関数を使って、 logging を warnings モジュールと統合できます。
元の実装との比較
--loglevel オプションでログ出力を制御
DEBUG: 元はdebugオプションで出力していた
INFO: 元はoutput(type='normal')で出力していた
WARNING: 元はoutput(type='warning')で出力していた
ERROR: 元はoutput(type='error')で出力していた
INPUT_ERROR: 元はoutput(type='input_error')で出力していた
--logfile オプションにファイル名を指定するとファイルに記録
--verbose オプションを指定するとログをコンソールにも出力(元実装を活かした)
ログ出力には必ず日時を付ける(元はログ出力内容ごとに選択可能な実装)
コードを抽象化して整理
方針: コードを抽象レベルで整理し分割する
見た目が似てるけど、本質が異なるる処理は、1つにまとめない(開発がしづらくなる)
見た目がどうであれ、本質的に同一の処理は、抽象化して関数化に括り出す
コマンドごとに実行タイミングや実行環境が異なることを考慮して、むやみに1つにまとめない
方針: 設定ファイルを導入する
引数をたくさん渡している状態なので、設定ファイル指定でも切り替えられるようにする
さまざまなパラメータを試したいとき、設定ファイルを保持しておける