LoginSignup
1
1

More than 3 years have passed since last update.

GitHub Actionsでコードレビュー前にフォーマッタをかける

Last updated at Posted at 2019-11-29

突然ですがJavaのコード、なにで書いてますか?

私見ですが、ショートカットキーが手に馴染んだIDEとそうでないIDEでは明らかに作業効率が変わる気がします。
「IDEが選べる」「PCが選べる」はエンジニア採用の現場でも売りとして扱われているようですし、実際選べない会社より選べる会社の方が嬉しい。
ただ、実際選べる環境に入ってみると、それはそれでこんな状況が起こりがち。

  1. Eclipseで書かれたコードをIntelliJ愛用者が編集(逆もまたしかり)
  2. 手癖でフォーマッタをかける
  3. コードの差分が大変なことになる
  4. レビューつらみ

フォーマッタはできれば統一したいところ。
一方で「ソースコードプッシュするときは、ビルドツールでフォーマットしてからにしましょう」とかルール化するのもそれはそれで面倒。
pre-commitのセッティングを各人にお願いしてもいいのですが、GitHub使ってるならそっちで勝手にやってくれれば楽なはず!

というわけで、設定してみました。
ビルドツールやフォーマッタはプロジェクトによって色々かとは思いますが、本記事ではGradle+Google Java Formatを扱います。

結論

  1. google-java-format-gradle-pluginを導入
    https://github.com/sherter/google-java-format-gradle-plugin
  2. GitHub Actionsのworkflowを設定
    https://github.com/tom-myz/shelffy/blob/master/.github/workflows/gradle.yml
  3. アクセストークンを発行してリポジトリのシークレットに登録

これでフォーマッタバラバラでレビューしづらい問題とはおさらばできるかも!

気をつけるべきポイント

追加commitはコマンドで

実行結果をcommitする、みたいな機能は見つかりませんでした。
まじめにgitコマンドを書くほかなさそうです。

gitの参照先がデフォルトブランチになる

トリガーがpull_requestなのだからマージ元のブランチをローカルに複製して参照してくれてる
……なんてことはなく、ブランチのcheckoutを抜かすとHEADにコミットされます。
originは設定されているようです。

continue-on-errorを設定したstepは終了コードに関わらずsuccessする

後続のstepにif success()をおいても意味が無くなります。
コマンドAが失敗した場合、コマンドBをスキップしてコマンドC以降を実行とかやりたい場合、

  • コマンドA・コマンドBを同一ステップにおいてcontinue-on-error
  • コマンドC以下は次のステップに配置

で実現するのがよさそうです。

その他

何か思い出したら追記するかもしれません。しないかもしれません。

イケてない点

  • 歴史あるリポジトリだと適用した瞬間の差分が大変なことになる
    → それ以前まで遡ろうとすると結局git blameしづらい問題
  • ユーザー名とメールアドレスが具体的すぎる
    → 実プロジェクトでやるなら専用ユーザー用意した方がいいとおもいます
  • フォーマッタかけたあとのコミットにももう一度フォーマッタをかけようとする
    → しかも結構時間がかかる。JDKのインストールからやってることもあり、内容Hello worldレベルでも1分半ほど
  • コミット数が純増してログがきたない
    → squashとかで行けそうな気もしつつ、Gitちからが足りなすぎてモチベーションがつづかなかった

感想

GitHub Actionsはよいものでしたが、肝心のGitの知識がなさすぎてやたらと時間かかりました。
仁義なきコスメティック・レビューから一人でも多くの開発者が解放されますように!

参考文献

https://help.github.com/ja/actions
http://nomadblacky.hatenablog.com/entry/2018/10/27/145451

1
1
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
1
1