見出し画像

コードの品質を担保する取り組み

はじめまして。スペースマーケットでチーフテックリードをやっている小林といいます。

弊社のエンジニアの人数もサービスの成長とともに増加して15名を超えました。本記事では、コード品質にばらつきが出ない事を担保するための取組みとして実施している事をご紹介したいと思います。

レビュワーのスキル平準化

スペースマーケットは複数サービスをユーザーに提供しており、20+のgitリポジトリで開発を行っています。今まではレビュワーについては誰を指名しても良い文化だったので、レビューをお願いする人の知識の違いや、そこまで業務ドメインを知らない人へのレビューが発生する状況でした。下のキャプチャのようなリポジトリオーナー制を作り、そのリポジトリの業務ドメインに詳しいエンジニア(◎がついている人)に必ずレビューを依頼するようにしました。

スクリーンショット 2020-03-19 0.24.14

またエンジニアリングマネージャーも自分のチームメンバーのコードは必ずレビューするようにして、自分のチームのアウトプットの品質確保と、メンバーの技術的成長を促すタッチポイントとして活用しています。

まとめるとリポジトリオーナーとエンジニアリングマネージャーの二人からgithub上でapprovedされるとdeployしてOKという文化になっています。

スクリーンショット 2020-03-19 0.36.14

PRテンプレートの改善

PRテンプレートは以前から作っていましたが、最近エンジニアマネージャーのdkakinokiのアイデアでアップデートしました。

リリース予定日を追加しました。そのPRはいつまでに出したいからレビューをこのくらいまでにやらないとな..というのが今まではPR作成者しかわからなかったのですが、明示的にレビュワーもわかるようになりました。以前にnaraが導入してくれたPull Pandaと併用することで、下記のようなワークフローが自然と出来上がりました。

1. レビュワーは毎日Slackに通知されるPRのリマインドを受信
2. リリース予定日が迫っているものからレビューしていく

私の場合ですと、今日はどのPRからレビューするかな?といった事に頭を悩ませる必要がなくなり、機械的に急ぎなものを今日はレビューしよう!という風にレビュワーそれぞれのやり方でカスタマイズできるようになりました。

レビューしてほしいポイントを追加しました。これは特にPR作成者が不安に思っていることや気になる部分をレビュワーに伝える項目なんですが、今までは人によって書いたり書かなかったりしていたので、項目として設けることで相互でレビューポイントが共通認識となり、ディスカッションがより活発になることを狙いとしています。

スクリーンショット 2020-03-19 0.49.11

レビュー自動化

なるべく機械的にレビューを行えるように各種ツールを開発フローに組み込んでいます。

Prettierによる自動フォーマット。こちらはlocal開発時にgit  commitした時に自動で走るようにしており、強制的にコードがコーディング規約にそって書き換えられます。再度commitする必要がありますがコードの属人的な差分が起きにくいようにしています。

// package.jsonから抜粋
"husky": {
  "hooks": {
    "pre-commit": "lint-staged"
  }
}

LinterでのPR自動コメント。スペースマーケットのサービスは Javascript、Rubyで開発されているので、ESLint、RubocopなどのLinterがCircleCI上からDangerを通して実行されてPRに自動的にコメントするようにしています。

// circle.ymlから抜粋
- run: if [ $CIRCLE_NODE_INDEX == "0" -a $CIRCLE_BRANCH != "master" ] ; then bundle exec danger ; fi

スクリーンショット 2020-03-19 1.36.06

前項で紹介したPull PandaもPRリマインドの自動化としてPRをmergeするまでのリードタイム改善に繋がっています。

おわりに

スペースマーケット社内でのコード品質担保の取組みをご紹介させていただきました。今後の展望としてはレビューすら自動化したく、AWSのCodeGuruの多言語対応(現在Javaのみ)やDeepCodeなどのSaaSにも期待しています。

エンジニア絶賛募集中です!

スペースマーケットに少しでも興味がある方は下記Watendlyからの応募をお待ちしております。


よろしければサポートお願いします!