« 「なろう一括取得から青空文庫形式」の改良版(2021/05/03追記) | トップページ | TinkerBoardのApache2 HTTPS対応メモ(2020/03/26追記) »

2020/03/16

Pythonリファクタリング初体験(2021/05/03追記)

「小説家になろう」のテキストに青空文庫形式の注記を付けて読むPythonスクリプトを作って使っていて、いつまでも「動けば正義」でいいのかなと思い、チェックするツールを使ってみました。

はじめに次のページを見ながらflake8というツールを試してみたところ、出るわ出るわ(^^;;
Vimメモ : flake8でPythonのコードをチェックする - もた日記

 

そもそも「インデントはスペース4つ」からコーディングスタイルを意識していなかった(というか、持っている教科書に載っていたPEP 8という言葉さえスルーしていた)ので、ギャップが酷かったです。
Pytutorial

インデント以外で目立っていたのが、次の2つ:
E501 line too long … 確かに、長すぎる行は気になっていた
C901 'main' is too complex (15) … そんなに複雑とは思っていなかった
あと、使わなくなったライブラリをインポートしているのが見つかった、など。

 

せっかくの機会なので、リファクタリングみたいなことをしてみることにしました。
長い行を改行するにも細かいルールがあって、その辺はautopep8が教えてくれそうです
autopep8 – PythonコードをPEP 8スタイルガイドに準拠するように自動的にフォーマットするツール – GitHubじゃ!Pythonじゃ!
また、循環的複雑度CCや保守性miという指標で測定してくれるradonも入れてみました
radonを使用したPythonのソースコードのメトリックスの取得 - Qiita

実際に使ってみたところ、文法的な問題をflake8が、基本的な「書き方」をautopep8が、お作法への適合度をradonが、それぞれ教えてくれる感じでした。

 

ほぼ1日チマチマと作業をしていたところ、いずれのツールでもエラー無くA評価を頂けるようになりました。
数値的には、循環的複雑度CCが18から5に大幅改善したものの、保守性miは57から53に低下して、実際、見やすくなったかというと微妙な感じです。まぁ、あくまでも書いている本人の主観なので、元々が自分に分かりやすいように書いていただけなのですけど。

 

また、前回3/12にリリースした後に、少し機能強化してました:
・追加取得(差分取得)時に、章タイトルが前と同じなら被らないようにした
・青空文庫形式の注記なしのテキストを、オプション -t で取得できるようにした

 

新版はこちらです(前のページも差し換わっています):
ダウンロード - narou2az.py

(2020/03/21差し換えました。詳細は下記)

シェルスクリプト自体は変わっていないのですが、後の方に参考文献などのメモを付けているので、こちらも差し換えておきます:
ダウンロード - nabat.sh

ちなみに前回の版と、コードチェックするシェルスクリプトと、前回と今回のチェック結果を付けておきます(今となっては、すごく恥ずかしい):

ダウンロード - narou2az_200312.py

ダウンロード - codechk.sh

ダウンロード - check200312.txt

ダウンロード - check200316.txt

 

ご利用は自己責任で。

 

パドラッパ from MacBook Air (2017)

 

【2020/03/21記】
宅内のCGIサーバーに組み込み、JavaScriptの皮を被せて、PCを起動しなくても取得できるようにしました。
N2a_cgi
このお遊びの最中に、Python側のバグが見つかったので、Pythonファイルを差し換えました。
ファイル読み込み時のUTF-8明示し忘れがあって、CGIから起動したときに叱られた次第です。

併せて、引数のNコードがおかしくても確認を求めないオプションを付けました(CGI起動だと返事できないので)。

【2021/05/03記】
今後、こちらのスクリプトは随時最新版に差し換えます。更新履歴および最新版の確認はGitHubをご覧ください(詳しくはこちら)。

| |

« 「なろう一括取得から青空文庫形式」の改良版(2021/05/03追記) | トップページ | TinkerBoardのApache2 HTTPS対応メモ(2020/03/26追記) »

コメント

コメントを書く



(ウェブ上には掲載しません)




« 「なろう一括取得から青空文庫形式」の改良版(2021/05/03追記) | トップページ | TinkerBoardのApache2 HTTPS対応メモ(2020/03/26追記) »