📝

コードレビューにおける○○っぽいコードという表現が意味すること

2024/02/04に公開

はじめに

チームで開発をしていると日々誰かにコードレビューしてもらったり自分がコードレビューする機会があると思います。

そんな折、たまに見かけるのが「この書き方は○○っぽくないので、こう書いた方が○○っぽいです」といったレビューコメントです。

○○の部分にはプログラミング言語やプロダクトの名前が当てはまる場合が多いです。

この表現はしばしば物議を醸すので、この表現が何を指しているのかについて書いてみようと思います。

○○っぽさが意味すること

私はRubyでプログラミングをすることが多いので今回は○○の部分をRubyとします。

今まで他のプログラミング言語を書いていた人がプロジェクトに参画して何かの機能を実装すると、コードレビューの際にしばしば「そういった処理はRubyではこう書くことが多いです」といったレビューコメントが見られます。

自分が書いたコードにこういったコメントが付いた際にどういった感情が発露するかは人によって異なりますが「処理が正常に動いているのであればRubyっぽいかどうかは別にどうでも良いのではないか」といった趣旨の意見を目にすることもたまにあり、それも一理ある話です。

では何故そういったコメントが行われるのか?

これはあくまで私の場合ですが、私は可読性、ひいては保守性に繋がるからだと考えています。

一例としてRubyで0から9までの値を使った10回の繰り返し処理を書く場合、Rubyには for という制御構造があるので下記のように書くことができます。

for i in 0..9
  # 繰り返し処理
end

他にも whileloop などを使うことができますが、では実際に業務等でRuby on Railsを使ったWebアプリケーションの機能を実装していて繰り返し処理を書く際に forwhile を使うのかというと、私が最もよく見る形は下記のようなコードです。

10.times do |i|
  # 繰り返し処理
end

どちらも同じ処理です。タイプする文字数もさほど変わりません。パフォーマンス等の話をしてしまうと色々と違いは出てくるであろうものの、Webアプリケーションで10回程度の処理であれば制御構造の違いによる差はあまり気になるものでは無いでしょう。

それではどちらの書き方でも良いのではないか?

いいえ、私は後者の書き方をするでしょうし、コードレビューする際も後者の書き方をオススメします。

それはひとえにRubyを書く人間として見慣れた書き方であることというのが大きいです。それを場合によっては「Rubyっぽい」と表現することもあるでしょう。

ここでRubyっぽいとは何かについて事細かに書くことはしませんが、繰り返し処理に限らずこういったものはたくさんあります。それはRubyに限らずC言語でもJavaでもPHPでもGo言語でも同様でしょう。

世の中にはたくさんのプログラミング言語があります。初めて触ったプログラミング言語がJavaScriptの人もいればHaskellだった人もいます。

人はどうしても初めて長く触った言語や、最近ずっと触っていた言語の癖というものが出てきます。私が普段よく触っているRubyで書かれたプロダクトのコードを見ても「これC言語っぽい書き方だなー」と思うコードや「なんかSwiftっぽい書き方だな」と思うコードが出てくることは否めません。

だからといって新たに書かれたそういったコードをレビューの際に全て受け入れていくと、いずれC言語っぽい書き方やSwiftっぽい書き方にHaskellっぽい書き方やGo言語っぽい書き方のものが加わり、そしてRubyっぽい書き方が混在したコードができあがります。

そのコードを読む際にすんなり頭に入ってくるかというと、やはりRubyっぽい書き方でできるだけ統一しようとしたコードと比べると引っかかる場所が多いでしょう。

これが可読性、そして結果としての保守性だと思います。

勿論一度しか実行せず、実行後すぐに削除するスクリプトなどであればそこまでこだわらない場合もあります。

しかし長く保守するプロダクトのコードであるならば一貫性のある書き方であるのが望ましい、それを表現した言葉が「○○っぽいコード」になるのかなと思います。

おわりに

自然言語を使ったコミュニケーションは受け取り手によって解釈が異なる場合が多くあります。

「○○っぽいコード」という表現は解釈に幅のある表現であり、主観的にも思えます。

自分にとっての当たり前と相手にとっての当たり前が違う場合も多々あります。

これが難しくも面白いところですが、伝わらないもしくは誤って伝わることがなるべく減らせるよう、表現を考えていきたいですね。

GitHubで編集を提案

Discussion