はじめに
コード、綺麗に書きたいですよね。使い捨てならともかく。
しかしレビュワーがいないと、ついつい神関数を作り上げたり、ネストしまくったり、
if nanika == None:
って書いてしまいがち。(良い子はnanika is None
と書く)
そんなあなたに、めんどくさいぐらい読みづらコードを指摘してくるサービスをご紹介します。
CodeClimate
ふいんき
publicレポジトリなら無料です。
OSSでよく使われたり使われなかったりするものです。
これは、プルリクエストを出すたびに、自動でコードレビューをしてくれ、プログラム構造のまずさを指摘してくれます。
まずは見ていただく方が早いでしょうか。
こちらに、とんでもないアホネストコードを書きました。これでプルリクを出してみましょう。
すると、なんと自動的にレビューが飛んできました。
Cognitive Complexity
が15超えてるぞ、リファクタリングしてせめて5にしろと言われています。
このCognitive Complexity
(認知的複雑度)は、めっちゃ簡単に言うとぐちゃぐちゃ度です。
ずっと上から下へ直線的に流れて来たプログラムが、例えばif
やfor
に当たると、流れが変わる。その流れの変わり方が複雑すぎるとこのCognitive Complexity
が上昇します。
これを下げるには、関数化などしてネストを軽減するリファクタリングをしよう、ということです。
GitHubのプルリク画面だけでなく、CodeClimateのWebサイト上に「ヤバいとこリスト」をまとめて見れます。
(僕もコントリビュートしているpythainlpのをお見せしています: https://codeclimate.com/github/PyThaiNLP/pythainlp)
最初の複雑度103ってなんだ、どんなコードだよ、と思いますよね。
こんな感じです
うーん、確かに読みたくない。
設定項目
CodeClimateが指摘する事項はこれらがあります:
(設定画面)
- 引数の数
- 条件文の複雑度
- ファイルの行数
- 一致したコードの存在
- 関数の複雑度
- クラス内のメソッド数
- メソッドの行数
- 分岐のネストの深さ
- 返り値の数
- かなり類似したコードの存在
正直、 デフォルトの設定はかなり厳しいです
例えば、1ファイルの行数制限は250行(空行除く)です。
250行越えのファイル、みなさん書いてますよね。
しかし、このルールにも妥当性はあります。250行にどんな根拠があるのか分かりませんが。というのは、単純に何でも同じファイルに盛り込んでアホデカファイルを作っても、保守の際にアクセス性が悪いですよね(目的の記述を探す手間)だから責務を分割して、モジュール化しよう、というcodeclimateからの指摘です。
という感じで、これら全てに従うようにリファクタリングすると、なかなか構造的に 見やすい、扱いやすい コードになるかと思います。
その一方で、「引数の数は3つまで」みたいな、プロジェクトの目的によってはちょっと邪魔な項目もあります。
この場合は、 オン/オフ あるいは 上限数 を編集することができます。安心ですね。
使い方
簡単です。
-
CodeClimateのWebサイトにアクセスする
ここで一つ罠があります2023/12/1現在、Google検索で当たる" https://codeclimate.com/ "では、OSS版(無料)にアクセスできる導線がなく、 ずっと有料のCodeClimate Velocityの案内を見させられます。
こっちにアクセスしてください: https://codeclimate.com/oss/dashboard
こっちがpublicレポジトリ用の無料版です。
GitHubアカウントでユーザー登録ができます。
-
GitHubを連携
右上の自分のアイコン->User Settingsを選択
-
対象のレポジトリを登録
-
レポジトリの連携設定
レポジトリの管理画面を開いて"Repo Settings"を選択
左のメニューから"GitHub"を選び、"Pull request comments"と、"Pull request status updates"を有効化。
これで、デフォルト設定で利用することができるはずです。
アホプルリクで試してみてください。 -
レポジトリ直下に、
.codeclimate.yml
細かい設定がしたい場合はレポジトリ直下に.codeclimate.yml
ファイルを作成し、やってほしいことを記入。デフォルト設定は[こちら]にあります。
Codacy
ふいんき
これも publicレポジトリの場合は無料 です。
そしてこれもまたOSSでよく導入されていますね。
これもまたコードレビューを飛ばしてくるタイプのサービスです。
ただ、CodeClimateとは明確に役割が違っています。CodeClimateは行数やネストの深さなど「 形式 」を見るのに対し、Codacyは「 記述 」の お行儀の良さ を見ます。
例えば先ほどのカスコードなら
未使用のループ変数をやめ、_
にしろと。こんな感じで言語特有のお言葉遣いを指摘してきます。例はpython
ですが、メジャーな言語はだいたい対応しています。
しかもいい感じに書いてくれていて、1クリックで修正コミットを出せるようになっています。
レビュー文はAI生成とのこと。ほんまに無料でいいの?
CodeClimateと同じように、サイトからヤバいとこリストを見ることができます。
このほかに、またもやpythainlpから。
予約済み語を使うな、全例外catchはやめろ、など。
いかにも「 お行儀 」の躾をされている感じがして、気持ちがいいですね(?)
利用方法
-
ユーザー登録
CodeClimateと違って普通にできます:https://app.codacy.com/
これで完了のはずです
Codacyの設定はかなり簡単です。
最後に
林修からモノを列挙するときは3つ述べると多すぎず少なすぎずちょうどいいと授業で習いましたが、あとはlinterしか思いつかず、、、
Python
の場合はBlackを使うと楽にフォーマットできるのでオススメです。
それはともかく、みなさんは綺麗なコードを書き、モジュールを分けて、保守可能なプロジェクトを開発しましょう。