10
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GDSC JapanAdvent Calendar 2023

Day 20

【GitHub】レビュワーがいなくとも綺麗にコード書く気になるサービス2選と利用方法

Posted at

はじめに

コード、綺麗に書きたいですよね。使い捨てならともかく。

しかしレビュワーがいないと、ついつい神関数を作り上げたり、ネストしまくったり、

良くないね.py
if nanika == None:

って書いてしまいがち。(良い子はnanika is Noneと書く)

そんなあなたに、めんどくさいぐらい読みづらコードを指摘してくるサービスをご紹介します。

CodeClimate

ふいんき

publicレポジトリなら無料です。
OSSでよく使われたり使われなかったりするものです。

これは、プルリクエストを出すたびに、自動でコードレビューをしてくれ、プログラム構造のまずさを指摘してくれます。

まずは見ていただく方が早いでしょうか。

image.png
こちらに、とんでもないアホネストコードを書きました。これでプルリクを出してみましょう。

すると、なんと自動的にレビューが飛んできました。
image.png
Cognitive Complexityが15超えてるぞ、リファクタリングしてせめて5にしろと言われています。

このCognitive Complexity(認知的複雑度)は、めっちゃ簡単に言うとぐちゃぐちゃ度です。
ずっと上から下へ直線的に流れて来たプログラムが、例えばifforに当たると、流れが変わる。その流れの変わり方が複雑すぎるとこのCognitive Complexityが上昇します。

これを下げるには、関数化などしてネストを軽減するリファクタリングをしよう、ということです。

GitHubのプルリク画面だけでなく、CodeClimateのWebサイト上に「ヤバいとこリスト」をまとめて見れます。

(僕もコントリビュートしているpythainlpのをお見せしています: https://codeclimate.com/github/PyThaiNLP/pythainlp)
image.png

最初の複雑度103ってなんだ、どんなコードだよ、と思いますよね。
こんな感じです
うーん、確かに読みたくない。

設定項目

CodeClimateが指摘する事項はこれらがあります:
(設定画面)
image.png

  • 引数の数
  • 条件文の複雑度
  • ファイルの行数
  • 一致したコードの存在
  • 関数の複雑度
  • クラス内のメソッド数
  • メソッドの行数
  • 分岐のネストの深さ
  • 返り値の数
  • かなり類似したコードの存在

正直、 デフォルトの設定はかなり厳しいです

例えば、1ファイルの行数制限は250行(空行除く)です。
250行越えのファイル、みなさん書いてますよね。
しかし、このルールにも妥当性はあります。250行にどんな根拠があるのか分かりませんが。というのは、単純に何でも同じファイルに盛り込んでアホデカファイルを作っても、保守の際にアクセス性が悪いですよね(目的の記述を探す手間)だから責務を分割して、モジュール化しよう、というcodeclimateからの指摘です。

という感じで、これら全てに従うようにリファクタリングすると、なかなか構造的に 見やすい、扱いやすい コードになるかと思います。

その一方で、「引数の数は3つまで」みたいな、プロジェクトの目的によってはちょっと邪魔な項目もあります。
この場合は、 オン/オフ あるいは 上限数 を編集することができます。安心ですね。

使い方

簡単です。

  1. CodeClimateのWebサイトにアクセスする
    ここで一つ罠があります

    2023/12/1現在、Google検索で当たる" https://codeclimate.com/ "では、OSS版(無料)にアクセスできる導線がなく、 ずっと有料のCodeClimate Velocityの案内を見させられます。

    こっちにアクセスしてください: https://codeclimate.com/oss/dashboard

    こっちがpublicレポジトリ用の無料版です。

    image.png

    GitHubアカウントでユーザー登録ができます。

  2. GitHubを連携

    右上の自分のアイコン->User Settingsを選択

    image.png

    メニューからGitHubを選び、連携を設定
    image.png

  3. 対象のレポジトリを登録

    Add a Repositoryからレポジトリを選んで登録
    image.png

  4. レポジトリの連携設定
    レポジトリの管理画面を開いて"Repo Settings"を選択
    image.png

    左のメニューから"GitHub"を選び、"Pull request comments"と、"Pull request status updates"を有効化。
    image.png

    これで、デフォルト設定で利用することができるはずです。
    アホプルリクで試してみてください。

  5. レポジトリ直下に、.codeclimate.yml
    細かい設定がしたい場合はレポジトリ直下に.codeclimate.ymlファイルを作成し、やってほしいことを記入。デフォルト設定は[こちら]にあります。

Codacy

ふいんき

これも publicレポジトリの場合は無料 です。
そしてこれもまたOSSでよく導入されていますね。

これもまたコードレビューを飛ばしてくるタイプのサービスです。
ただ、CodeClimateとは明確に役割が違っています。CodeClimateは行数やネストの深さなど「 形式 」を見るのに対し、Codacyは「 記述 」の お行儀の良さ を見ます。

例えば先ほどのカスコードなら
image.png
未使用のループ変数をやめ、_にしろと。こんな感じで言語特有のお言葉遣いを指摘してきます。例はpythonですが、メジャーな言語はだいたい対応しています。
しかもいい感じに書いてくれていて、1クリックで修正コミットを出せるようになっています。
レビュー文はAI生成とのこと。ほんまに無料でいいの?

CodeClimateと同じように、サイトからヤバいとこリストを見ることができます。
このほかに、またもやpythainlpから。
image.png
予約済み語を使うな、全例外catchはやめろ、など。

いかにも「 お行儀 」の躾をされている感じがして、気持ちがいいですね(?)

利用方法

  1. ユーザー登録
    CodeClimateと違って普通にできます:https://app.codacy.com/

  2. レポジトリを登録
    たぶん丁寧に画像で手順書かなくとも分かるかと思うので省略
    image.png

これで完了のはずです

Codacyの設定はかなり簡単です。

最後に

林修からモノを列挙するときは3つ述べると多すぎず少なすぎずちょうどいいと授業で習いましたが、あとはlinterしか思いつかず、、、

Pythonの場合はBlackを使うと楽にフォーマットできるのでオススメです。

それはともかく、みなさんは綺麗なコードを書き、モジュールを分けて、保守可能なプロジェクトを開発しましょう。

いいね頂けると泣きながら喜びます><

この記事を読んでいる方は次の記事も読んでいるのかもしれません:

10
9
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
10
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?