こんにちは! TECH DRIVEのTedです。
今回は影響範囲という言葉についてご紹介したいと思います。
未経験で現場に入られた方や現場に入って日が浅い方に多いと思いますが、業界で使われる語彙の意味をとらえきれずに苦しい思いをされている方も少なくはないと思います。
ちなみに筆者(Ted)は現場に入って7〜8ヶ月ほどになりますが、現場に入った瞬間から様々な語彙に囲まれて四苦八苦しました(今もですがw)
日常的に使う語彙の意味を知っておくことはチームでお仕事する時に役立ちますので、ぜひ抑えていただければと思います!
*チームごとに使用される語彙の差はあると思いますが、弊社では当記事で紹介する内容を「影響範囲」と呼んでおりますので下記も同様に進めさせていただくことをご了承ください。
[解説編] 影響範囲って何ですか?
ここでいう「影響範囲」とは、何かしらのコードを書いたとき、そのコードが影響を及ぼす範囲のことを差します。
言葉だけでは説明がつきにくいので、例をあげてみましょう。
ここではRuby on Rails
を題材に取り上げます。
例えば、Userモデルが姓: last_name
、名: first_name
という情報(カラム)を持っていたとします。
そしてユーザーのフルネームを表示するために下記のようなメソッドが定義されているとします。
class User < ApplicationRecord def name last_name + ' ' + first_name end end
何度も使われそうな処理はメソッドにしてしまうと便利なのです。
そしてユーザーのフルネームが呼びたくなっと時はこんな風に使えそうですね。
user.name
このような便利なメソッドがあるといろんな場所で使われそうです。
しかし、複数の場所で使われるということは、このnameに変更が発生した場合、このメソッドを呼び出している箇所全てが「変更の影響」をうけるようになります。
[まだまだ解説] 影響範囲って何が重要なの?
さらに重要な話になってきます。
影響範囲を意識せずにコードに変更を加えると、予期せぬ場所でバグを埋め込んでしまったりサービスの動きが変わってしまったり最悪の場合、本番環境でサービスが望む動きをしなくなる可能性も十分にありえます。
先ほど挙げたUserモデルとname
というメソッドで例を挙げていきましょう。
name
というメソッド名を変更しなければいけないことになったとしましょう。
下記のように修正するはずです
class User < ApplicationRecord def name # name → full_nameへ last_name + ' ' + first_name end end
name
メソッドがfull_name
に変更されたということは、プロジェクトでname
メソッドを使っている箇所を全てfull_name
へ修正しなければエラーが発生してしまいます。
なので、name
を変更することで影響を受ける範囲を洗い出し、同様に修正をかける必要があります。
もしも修正漏れがあった場合、今回の例だとエラーによってユーザーが画面を開くことができなくなってしまいます。
そしてこの変更が誰のレビューの目にも止まらずに本番にデプロイされてしまったときは致命的なミスになります。
というように今回は表示するメソッドを例えに挙げましたが、大きな例でいうとお金の支払いに関する処理で同様のことが起きると本当に大変であることがわかります。
なので影響範囲を確認することは重要で、確実な仕事をするためには必要不可欠な要素です。
次からは、じゃあどうやって影響範囲を調べるの?に迫ります!
[実践編] 影響範囲の見極め方
では、実際に影響範囲をどうやって調べて見極めるのかが大事になってくると思います。
実際に私が現場に入りたてのころ使っていたやり方をご紹介しようと思います。
ご紹介する方法は現在では古典的なやり方なので、お使いの開発環境によってはより良い方法があると思いますが、知っておいて損は無いので眺めてみてください。
今回の場合ならば、name
というメソッドがプロジェクト内のどこで使われているかを知る必要があります。
name
はUserモデルのメソッドでuserオブジェクト.name
のように使われるはずです。
ここでLinuxコマンドのgrep
を使います。
grepはファイル内の文字列に対して指定した文字列(正規表現)に該当する文字列を検索するコマンドです。
grepには-r
というオプションがあるのでファイル単体だけでなくディレクトリごと指定することができます。
なので
grep -r name app/*
みたいに検索するとappディレクトリ以下でname
の文字列が書かれている場所を一気に検索してくれます。
これでプロジェクトでname
が使われている場所の全てがわかります!
あとはヒットした箇所が自分の変更によって変わるべきなのかを吟味すると良いでしょう。
ちなみに私の場合は検索結果をリスト化して残し、動作チェックする時に使用したりもしますし、チームのメンバーに相談する時の良い材料にもなります。
Rubyを用いた開発をしていてRubyMineをお使いの方の場合は、RubyMineの便利機能がありますのでそちらを使うとなお強力な検索ができます。
下記の記事の検索系やコードジャンプを使うとgrep相当のことが手軽にできます。
RubyMine以外の多くのエディタの場合、一括検索もしくは全文検索という名前でgrep相当の機能がありますのでそちらを活用するのも良いでしょう。
コラム
今回検索した文字列はname
でしたが、表記方法には数種類あります。
- スネークケース&キャメルケース →クラス名はキャメルケース、テーブル名はスネークケースだったりします。
- シンボル表記
これらを全て網羅した検索ができると、影響範囲の見積もり漏れをよりしっかり防ぐことができるでしょう。
終わりに
影響範囲は開発作業をする上で非常に重要な要素であり、必要不可欠と言えるでしょう。
逆に検索する能力をしっかり高めて、これを抑えた仕事をきっちりできる人は信頼されるはずです。
一度癖つけると自然と体がついてくるので是非実行してみましょう!
PR
TECH DRIVE協賛企業のサークルアラウンド株式会社では、プログラマーの成長を加速させるためのトレーニングを行なっています。フロントエンド/バックエンド問わず各種バリエーションがございますので、ご興味がある方は是非以下のリンクより詳細をご覧ください。
Ruby Climbing
週1からはじめられる「Ruby」でWEB開発の基礎が習得できる塾です。現役のプログラミング講師&Rubyエンジニアがプログラミング入門からフレームワーク(Sinatra/Ruby on Rails)を使用した本格的なWEB開発の学習までをしっかりとサポートします。
個別トレーニング
短期間でぐっと成長したい方は弊社主催の個別トレーニングがおすすめです。 トレーニング内容は、受講者の方の課題/要望をお伺いした上で、フルオーダメイドで作成させていただきます。 詳細は以下のリンクよりご確認ください。(応募者多数の場合には時間を別途ご用意する予定です)。