「なぜ長いメソッドはダメなのか?」新人エンジニアのためのメソッド分割ガイド
こんにちは。ゆうせいです。
今回は「メソッドが長くなるとなぜ良くないのか?」というテーマでお話しします。
新人の方にとって、「とりあえず動けばいいから、ひとつのメソッドにまとめちゃおう!」と思ったこと、ありませんか?
でも、それが将来の自分やチームを苦しめることになるかもしれません…。
長いメソッドが引き起こす問題とは?
問題1:読みづらい・理解しづらい
長いメソッドは「小説の一文が10ページある」ようなもの。読むのも大変、どこに何が書いてあるのかも見つけにくいですよね。
- 何をしているのか一目でわからない
- 一部を直すと全体に影響してしまう
まるでスパゲッティみたいに、ぐちゃぐちゃのコードになってしまいます。
問題2:再利用ができない
例えば「日付のフォーマットを整える処理」が、長いメソッドの真ん中に書かれていたら…
それを別の場所で使いたくなったとき、またコピペしないといけません。
コードを再利用できないというのは、同じバグが複数箇所に発生するリスクにもなります。
問題3:テストが難しい
小さな単位のメソッドなら、「この処理はこう動く」と確かめる単体テストが簡単に書けます。
でも、処理がたくさん詰め込まれていると、どこが悪いのか特定できない。
「黒い箱」を相手にしているような気分になります。
メソッドを分割すると、どう良くなる?
メリット1:読みやすくなる!
分割されたメソッドには名前が付きます。名前を見れば、処理の内容が一目でわかるようになります。
public void processOrder() {
calculateDiscount();
applyCoupon();
sendConfirmationEmail();
}
この3つの処理が、メソッドの中にそのまま書かれていたら? もう読むだけで疲れてしまいますよね。
メリット2:バグを見つけやすい!
小さく分けておけば、「どの処理がバグってるか」がすぐに分かります。
- エラーが起きたら、まずメソッド単位でログを確認
- 特定のメソッドだけをテストできる
バグ修正にかかる時間が圧倒的に減ります!
メリット3:テストしやすい!
テストコードは「処理を確認するためのチェックリスト」。メソッドを小さくしておくと、テストもしやすく、漏れも防げるんです。
@Test
public void testCalculateDiscount() {
// 割引計算の単体テストがしやすい!
}
「長い」とはどれくらい?
基準は“1画面以内”または“1つの責務”
- 20~30行以内
- 1つのメソッドが「1つのこと」だけをする
これが目安です。英語では「Single Responsibility Principle(単一責任の原則)」と呼ばれる大事な考え方です。
分割の実践例
例:注文処理のメソッド
Before(悪い例):
public void processOrder() {
// 顧客情報チェック
// 割引計算
// クーポン適用
// メール送信
// 在庫減らす
// 売上記録
}
After(良い例):
public void processOrder() {
validateCustomer();
calculateDiscount();
applyCoupon();
sendEmail();
updateStock();
recordSales();
}
処理のまとまりごとにメソッドを分けると、見通しが格段によくなります。
まとめ表
メソッドの長さ | 問題点 | 解決法 |
---|---|---|
長すぎる | 読みにくい、バグが出やすい、再利用できない | 処理ごとにメソッドを分ける |
適切な長さ | 読みやすい、テストしやすい、保守しやすい | 名前付きで責務ごとにメソッド化 |
最後にひとこと
「処理のまとまりごとにメソッドを分ける」という考え方は、今後のプログラミングでもずっと役立ちます。
もし、「これは何の処理だっけ?」と自分で読んでいて迷ったら、それは分割のチャンスです!
次のステップとしては、以下のことも勉強してみてください。
- リファクタリングの手法(Martin Fowlerの書籍がおすすめ)
- 命名の技術(分割したメソッドに良い名前をつける)
- DRY原則(Don't Repeat Yourself)
これらを新人エンジニア時代から意識できるようになると、プロとしてのコードの質が一段階アップしますよ!
セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク
投稿者プロフィール
