[コードレビュー] reviewdogに任せませんか?

# 初めに　

[myjlab advent calendar 19日目](https://qiita.com/advent-calendar/2022/myjlab)、最近マキマさん推しな4年の阿左見です。 
昨日は@easy_yuki_ で[プログラミング初心者さん向けのDjango](https://qiita.com/easy_yuki_/items/a6c2440fb09e0e6e525a)でした。フルスタックフレームワークなのでなんでもできるのはいいですよねDjango。

さて、本日は[reviewdog](https://github.com/reviewdog/reviewdog)についてざっくりですが書いていこうと思います。

~~ギリギリに書き始めているのは週末朝まで飲んでたせいです。~~

# reviewdogって何?
![スクリーンショット 2022-12-18 22.53.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/695469/47950e09-8a94-29e9-abed-929ceca622c3.png)
こんな感じで自動でコードをレビューしてくれます。

[haya14busa](https://twitter.com/haya14busa)さんが作成されたOSSのようです。(日本人なんですねすごい!)
SNSはtwitterが多く更新されているようです。スプラトゥーンが好きなようですね😳

# 適用してみる
今回はgithubを例として書いていきます(多分gitlab等でもできるとは思います)

まずは[github actions](https://github.co.jp/features/actions)を有効化しましょう。publicリポジトリなら無料なので、無料で作成してみましょう。

最近は論文書いてたのでtextlintを例にやってみたいと思います。
論文作成に使用していた設定をそのまま引用するので、今回はマークダウンじゃなくてtexを使用します。

まずはtextlintの設定ファイルから

```.textlintrc
{
  "filters": {},
  "plugins": ["latex2e"],
  "rules": {
    "preset-ja-engineering-paper": true,
    "preset-ja-spacing": true,
    "preset-ja-technical-writing": {
      "ja-no-mixed-period": {
        "periodMark": "．"
      },
      "max-kanji-continuous-len": {
        "max": 11,
      }
    },
    "preset-japanese": true,
    "preset-jtf-style": {
      "1.2.1.句点(。)と読点(、)": false,
      "1.2.2.ピリオド(.)とカンマ(,)": false,
      "4.1.3.ピリオド(.)、カンマ(,)": false
    },
    "spellcheck-tech-word": true
    }
}
```

こんな感じで今回はtextlintを定義しています。

次は本命のreviewdog.ymlです。
パスは```./.github/workflows/reviewdog.yml```
にしています。

```.yml
name: advents2022_dog
on: [pull_request]
jobs:
  textlint:
    name: runner / textlint
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
        with:
          submodules: true
      - name: textlint-github-pr-review
        uses: tsuyoshicho/action-textlint@v3
        with:
          github_token: ${{ secrets.github_token }}
          reporter: github-pr-review
          level: warning
          textlint_flags: "*.tex"
      - name: Run reviewdog
        if: failure()
        env:
          REVIEWDOG_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          cat .textlint.log | reviewdog -f=checkstyle -name="textlint" -reporter="github-pr-review"
```
こんな感じにしてみました。

githubでプルリクエストを作成するとreviewdogが```.tex```
ファイルに対してレビューしてくれます。

これで個人開発においても、レビューに困ることはないですね！
(レビューされるのが嫌いな人には苦行かもしれません笑)

# プルリク作成するとどうなるの？

[こちら](https://github.com/renasami/sample-reviewdog/pull/1)に今回のプルリクエストをおいておきます。

![スクリーンショット 2022-12-19 2.12.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/695469/00f13128-57cc-a041-3f57-9b80590398d7.png)

はいこんな感じでレビューしてくれます。
これが無料です。個人的には革命です。

textlintだけではなく、linterが存在していれば、他のメジャーな言語は対応してそうでした。レビューする側、される側においても、不要な部分のレビュー等は先にやってくれるので。いいですね。

個人的には先日、プロジェクト内のテストコードで適当に書いてしまったfixture達をいい感じに直してくれました。まじ便利。

# まとめ
* review dogはいい感じに自動レビューしてくれる
* (多分)日本人作成のOSSだった
* linterが存在するものは大体レビューしてくれる
* 期限ギリギリで記事を書き始めてはいけない

細かいことは[reviewdogのリポジトリ](https://github.com/reviewdog/reviewdog)を参照してください。
駄文にお付き合いいただきありがとうございました。これで在学中のアドベントカレンダー最後です。

明日は@linked34ce の記事です！お楽しみに！
# 参考にした資料達
https://www.tech-blog.s-yoshiki.com/entry/258

http://haya14busa.com/reviewdog/

https://dev.classmethod.jp/articles/shuntaka-github-actions-reviewdog/