Help us understand the problem. What is going on with this article?

見せて貰おうか、Amazon新サービス「CodeGuru Reviewer」の性能とやらを

はじめに

これは、NTTコミュニケーションズ Advent Calendar 2019 5日目の記事です.関連記事は目次にまとめられています。前日は@TAR_O_RINさんによるTektonでCI/CDパイプラインを手の内化しよう - Qiitaでしたね!

あなたはだ〜れ?!

昨年書いた深層学習を利用した食事画像変換で飯テロ - Qiitaに既に書いてあるので省略します。好きな言語はObjective-Cです。お世話になった言語もObjective-Cです。嫌いな言語もObjective-Cです。最近はPythonしか書いてないのでマンネリ化が激しいです。最近のマイブームは夜な夜なサイクリングロードです。一緒にサイクリングしましょう。

モチベ

複数人で開発を行う上でコードレビューを行う文化は非常に重要ですよねー。ただ、

  • 開発者はコードレビューをする時間を確保する必要がある
  • 入念にチェックはしても一部の見逃しは発生する(人間だもの)
  • レビュー担当者の技術レベルによってレビュー濃度がまちまち

などなど、他人のコードを読むのは大変勉強になるし、もはやレビューに何も抵抗は無いですが、時間が無い時などは後回しにしがち。ぶっちゃけコードレビューって大変ですよね。自動でコードレビューしてくれたらなあ。。。なんてそんなあなたに、

Amazon CodeGuru - Amazon Web Services

スクリーンショット 2019-12-05 20.42.14.png

今北産業(三行まとめ)

  • 2019年12月3日(米国時間)に公開された機械学習ベースの自動コードレビュー新サービスAmazon CodeGuruCodeGuru Reviewerについての検証
  • Amazon CodeGuruの利用方法について導入方法の解説
  • Amazon CodeGuruにより自動生成されるレビューコメントへの言及

CodeGuruとは

CodeGuru自体の説明は既にいくつかのメディアが取上げているので概要についてはリンク先に委ねようと思います。要は機械学習ベースの自動コードレビュー(CodeGuru Reviewer)およびプロファイラー(CodeGuru Profiler)機能を提供するサービスです。CodeGuru ProfilerについてはAmazon CodeGuruを試してみた - Qiitaにて記載がありますが、CodeGuru Reviewerの方はあまり記載が無かったので前記のブログを補填する内容になっています。

実際のCodeGuruの基調講演はYouTubeに公式がアップロードしていますので以下のYouTube動画を御覧ください。(Qiitaはインライン表示できないので画像リンクとしています。01:58:40からAmazon CodeGuruの発表が始まります。)
見せられないよ!!

簡単な使用手順

ここでは、Amazon CodeGuruの利用方法について導入方法の解説を行います。

CodeGuru Reviewer利用の際の下準備編

自動レビュー機能を試す前にCodeGuruと自動レビュー対象とするレポジトリの紐付けを行います。Preview版ではGitHubおよびAWS CodeCommitをサポートしているようです。今回はGitHubによる検証を行いたいので、GitHubアカウント、GitHubレポジトリとの紐付けを行う想定で記載します。CodeCommitとの紐付けについては公式ガイドGetting Started with Amazon CodeGuru Reviewer - Amazon CodeGuru Reviewer User Guideを参照しましょう。

1. AWSマネジメントコンソールからCodeGuruを選択する

AWSにログイン後、 サービスを検索する の入力欄に CodeGuru と入力して、表示項目をクリック。
0_選択.png

2. リージョンの変更

2019/12/5時点では、サポートリージョンが図中の5リージョンのみなので、もし同じ画面に遷移した場合は、何れかのリージョンを選択。今回は米国東部(オハイオ)を選択します。
1_リージョン変更.png

3. Amazon CodeGuruからCodeGuru Reviewerの選択

Amazon CodeGuruのホーム画面です。今回はCodeGuru Reviewerによるコードの自動レビュー機能を試すので図中のいずれかをクリックしてレポジトリとの紐付けを行います。
スクリーンショット 2019-12-05 17.44.43.png

4. CodeGuru ReviewerとGitHubアカウントの紐付け

CodeGuru Reviewerによる自動レビューの対象とするレポジトリの紐付けを行います。この時、CodeGuru Reviewerによる自動レビューを行う専用のGitHubアカウントを作成することをオススメします。公式ガイドGetting Started with Amazon CodeGuru Reviewer - Amazon CodeGuru Reviewer User Guideにも記載されていますが、専用のGitHubアカウントを介してCodeGuru Reviewerによるレビューが行われるので、人手によるレビューなのか自動か否かの混乱を防げます。また、複数のレポジトリを自動レビュー対象にする場合は、レポジトリに新規に作成したCodeGuru Reviewer専用のGitHubアカウントをレポジトリにCollaboratorsとして招待すればOKです。※ GitHubアカウントとの紐付け後に別のGitHubアカウントに変更する場合はブラウザのCookieを削除する必要があります。
スクリーンショット 2019-12-05 18.05.48.png

5. CodeGuru Reviewerとレビュー対象レポジトリの紐付け

GitHub認証が正常に終了したらConnect to GitHubConnectedへと変わるはずです。これでCodeGuru ReviewerとGitHubとの紐付けが完了します。次に、Repository locationのリストから自動レビューの対象とするレポジトリを選択してAssociateボタンをクリックすれば設定は終了です。(めちゃ楽)※ CodeGuru Reviewer専用のGitHubアカウントを自動レビュー対象レポジトリへ事前に招待して承認しておけば、勿論プライベートレポジトリも全て表示されます。また、Organizationsについても同様です。
スクリーンショット 2019-12-05 18.30.30.png

6. CodeGuru Reviewer紐付け完了ステータスの確認

Associateボタンをクリック後は以下の画面に遷移します。紐付け直後のStatus部分はAssociatingと表示されますが、(レポジトリの規模によりますが)数分程度でAssociatedへと切り替わり下準備は完成です。(公式ガイドGetting Started with Amazon CodeGuru Reviewer - Amazon CodeGuru Reviewer User Guideでは数分程度と記載してありますが、空のレポジトリということもあり、今回は数秒でした。)※ ブラウザの更新か、画面中のAction左にある更新ボタンを押す必要があります。
スクリーンショット 2019-12-05 18.42.55.png

簡単な検証

ここでは、Amazon CodeGuruから実際に自動レビューコメントを受けるまでの検証を行います。※ ここからは実験みたいなものなので文章の雰囲気が変わるやもしれません。

CodeGuru Reviewerによる自動レビューの例その1:まじめなコード編

今回はむかしのむかしに書いたコードをぶっこんで見ることにしましょう。現状はJavaのみのサポートのようなのでそれ以外のコードおよび変更点は多分無視されます。CodeGuru Reviewerによる自動レビューのトリガーはPull Requestにより作動します。おもむろにPRを出してやりましょう。

スクリーンショット 2019-12-05 19.08.48.png

するとCodeGuruDashboardに変化が見られると思います。色々と実験をしていたのでLines of code analyzedが実際と乖離していますが、自分が出したPRと書いたコードの行数が簡易的に表示されます。※ Reviewer recommendationsはいくら待っても変わりませんでした。バグなのかな?

スクリーンショット 2019-12-05 19.15.36.png

(数分後…)適当にPR画面を見ていると何やらコメントが11件来てる。。。

スクリーンショット 2019-12-05 19.23.29.png

恐る恐る確認してみると…なんか色々書かれていて、公式ガイドRecommendations in Amazon CodeGuru Reviewer - Amazon CodeGuru Reviewer User Guideによると以下5項目の観点からレビューをしているっぽい?AWS best practicesConcurrencySensitive information leak preventionについては今回のPRには含まれていないはずだからそれっぽいレビューコメントはついていないみたいだ。

The following kinds of recommendations are provided:
- AWS best practices
- Concurrency
- Resource leak prevention
- Sensitive information leak prevention
- Common coding best practices

スクリーンショット 2019-12-05 19.27.28.png

11件のコメントの中でユニークコメントだったのが以下の3つで残りはほぼResource leak preventionに関する指摘で全文まったく同じコメントレビューが記載してあった。問題点と解決策、参考リンクなど簡潔なレビューだけどどうやって生成してるんだろう…

スクリーンショット 2019-12-05 19.41.09.png
スクリーンショット 2019-12-05 19.39.34.png
スクリーンショット 2019-12-05 19.39.27.png

CodeGuru Reviewerによる自動レビューの例その2:ウンコード編

皆さんはウンコード・マニアという神サイトはご存知だろうか?その名の通りウンコード撲滅を目論む崇高な神サイトである。読めば読むほど一度は…と心に刺さるものがあるので是非訪れてほしい。
スクリーンショット 2019-12-05 19.55.24.png

さて、今回はウンコードをCodeGuru Reviewerにレビューしてもらおう。そう君は今日からUnCodeGuru Reviewerなのだから。

代表的なウンコード

現状のCodeGuru ReviewerはJavaのみのサポートであるので、Java ウンコード-ウンコード・マニアから引用させてもらおう。有名所で申し訳ないが好きなのはやっぱり波動拳ネスト型ウンコードである。(※ 画像はIndent Hadouken : ProgrammerHumorから引用。redditで議論されてて楽しい。)

I1CShqp2wBguKcuv21m6XRnREKuw8kyAoCavCAGJPBI.jpg

もちろん、ウンコード・マニアも扱っているので、[Java] フルHD推奨。-ウンコード・マニアを引用する。

// [[Java] フルHD推奨。-ウンコード・マニア](http://unkode-mania.net/view/5040f47b9b6066a52e000003)を一部改変。

public class ClassSample {
    public static void main(String args[]) {
        int proc = 0;
        try {
            if ( proc == 0 ){
                // 正常処理
                try {
                    if ( proc == 1 ){
                        // 正常処理
                        try {
                            if ( proc == 2 ){
                                // 正常処理
                                try {
                                    if ( proc == 3 ){
                                        // 正常処理
                                        try {
                                            if ( proc == 4 ){
                                                // 正常処理
                                                if ( proc == 5 ){
                                                    // 正常処理
                                                    // まだまだ続くよ!
                                                } else {
                                                    // 異常処理
                                                }
                                            } else {
                                                // 異常処理
                                            }
                                        } catch(Exception e) {
                                            // 例外処理
                                        }
                                    } else {
                                        // 異常処理
                                    }
                                } catch(Exception e) {
                                    // 例外処理
                                }
                            } else {
                                // 異常処理
                            }
                        } catch(Exception e) {
                            // 例外処理
                        }
                    } else {
                        // 異常処理
                    }
                } catch(Exception e) {
                    // 例外処理
                }
            } else {
                // 異常処理
            }

        } catch(Exception e) {
        // 握りつぶす
        }
        System.out.println("Hello! World!");
    }
}

ウンコードのPRを同様に出す

さて先程と同様にPRを出して自動レビューのトリガーを引こう。…が待てよ待てとも一向にレビューが来ない…(ここでボロクソにレビュー来たら面白かったんですがね)前述の5項目の観点外だから音沙汰が無いのか、糞すぎるのか何れにしても何らかの反応はほしいですね。。

スクリーンショット 2019-12-05 20.21.37.png

まとめ

つい先日公開されましたAmazon CodeGuru - Amazon Web Servicesの導入方法と実際に生成される自動レビューについて簡単に検証してみました。【IT】「Amazon CodeGuru」発表。機械学習したコンピュータが自動でコードレビューは5chスレですが、たしかに自動でコードレビューしてくれても実装難易度爆高な方法を提示されたりなんてことがあったらそれはそれで面白そうです。(囲碁・将棋であったように)実装難易度順に候補複数提示してくれるとかだったら神ですね。

また、今回はまだ試していないマルチスレッディング、AWS API等に関するコードレビューは時間があるときにでも試してみたいです。後、コードレビューの正当性についても言及したい。特にマルチスレッディング系はどんなレビューが生成されるのか気になる。

なにわともあれCodeGuru自体はプレビュー版なのとJavaのみのサポートということもありまだまだ開発途上ではありますが、実際に自動で生成される様を見ると、何やら若干の未来感を感じ心躍る気分になりました。早急にPythonとSwiftに対応してくれ〜〜!使うから!笑

明日は@jkr4869さんの記事です!!お楽しみに〜〜〜!!!

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away