Timers Tech blog での2回目の投稿となります。
サーバエンジニアの長南です。
先日弊社CTOのアマドの「コミュニケーション能力はエンジニアにとって必要不可欠な能力である」という記事がありました。
考えてみると、開発の現場はコミュニケーションの連続です。UI/UXは開発者とエンドユーザの間でのコミュニケーションの場ですし、この Blog を表示されるために行われる HTTP や HTTPS、よりレイヤーの低い TCP/IP といったプロトコルもコミュニケーションのひとつの形です。そもそもコードを書くということ自体が人間とコンピュータの間のコミュニケーションと言っていいでしょう。
実際の開発現場、コードレビューの現場でどのようなコミュニケーションをとればよいのかということを紹介します。
コードレビュー
一般企業では外部に提出する書類を作るような場合に上席者に確認を求めることがありますが、ソフトウェア開発を行うIT企業では日常的にお互いのソースコードの査読を行いながら仕事をすすめています。開発の現場ではソースコードの査読を行うことを「コードレビュー」と呼んでいます。
見てもらいたいものが出てくるたびにソースコードを紙に印刷し会議をするのは非効率なので、大抵は GitHub などのシステムを使うのですが、その際にどのようなコミュニケーションをとるべきかというのは開発者として気になる人が多いのではないでしょうか。
レビュアーとして何をコメントすべきか
コードレビューを依頼するときの心がけについては色々なサイトに書かれているので今回は割愛することとして、レビューを依頼されたときに注意したいことを書き出してみます。
個々のコメントは簡潔に
コードを査読して気になる部分にはコメントをつけるわけですが、問題点がわかるように簡潔に書いておくと依頼元のレビュイーも読みやすくなります。
提案はより具体的に
自然言語とコンピュータの言語は違いますので、改善のポイントをコードの断片で記してあげるとレビュイーの修正作業が早くなり、チーム全体の開発スピードを低下させません。
修正対応の有無はハッキリと
コメントをつけたところが本当に修正を要するものなのか、あるいは今後気をつけるべきことなのかはハッキリしておかないとレビュイーが迷ってしまいます。私の場合はコメントの先頭にタグをつけて要不要を示しています。
- MUST
- このままレビューを通してしまうと間違いなくバグが発生するコードや、仕様の把握に誤解があり必ず修正して欲しいところに使います。
- THINK
- 最低限の機能は果たすコードだけれども実行速度が極端に遅かったり、記述が冗長すぎたり、可読性が低かったりするときにこのタグをつけています。レビュアーとしては直してほしいところですが「ちょっと考えてください」と示唆したい場合に使っています。
- INFO
- コードそのものは動作するしこのままレビューを通しても問題ないけれども、「こう書いたらもっと速くなる」とか「こう書いたら簡潔になる」といったアドバイスを書くときに使っています。かならずしも修正する必要はないものに使っています。
- TRIVIAL
- コメント内のTypoや重箱の隅を突くようなコメントを書くときに使っています。基本的に修正する必要はないという位置づけでつけていますが、直して欲しいときには、MUST と組み合わせて使っています。
少しでも感心したことは遠慮無く褒めよう
コードレビューは、レビュイーにとっては「実力のある同僚に仕事のダメ出しをもらう」、レビュアーにとっては「同僚の仕事にダメ出しをする」という心理的に過酷な仕事です。そんな辛い仕事を楽しくこなすためには、少しでも良いコードであったり、がんばった形跡があったら遠慮なく褒めることがとても大切です。私がレビューするときにはこんなタグを使っています。
- GOOD
- すこしでも光るものがあるコードが書かれた場合やがんばった形跡があった場合、コメントをていねいに書いた場合やインデントをキレイにそろえていた場合には、その部分を躊躇なく褒めます。良いコードやスタイルやコメントは技術的負債ではなく資産になるものです。「詳しくコメントを書いていただきありがとうございます!」などと「ありがとう」文脈で書くのがオススメです。
チーム全体のモチベーションを向上しよう
コードレビューのコメントなんて、要件が伝われば良い感じもしますが、短い文章でのコミュニケーションでもこのように工夫することで、チーム全体のモチベーションが上がります。私のチームでは GOOD タグを使い出したらメンバーが真似してみんな使うようになりました。GOOD を使いすぎて慣れ合いになるのは問題ですが、良い所はキッチリ褒めて悪いところもキッチリ直してもらうスタイルがコミュニケーションの良い循環を生むのではないでしょうか。
積極採用中!!
子育て家族アプリFamm、カップル専用アプリPairyを運営するTimers inc.では、現在エンジニアを積極採用中! 急成長中のサービスの技術の話を少しでも聞いてみたい方、スタートアップで働きたい方など、是非お気軽にご連絡ください! 採用HP : http://timers-inc.com/engineerings