Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

「レガシーコード改善ガイド」のススメ
第5回:レガシーコードを攻略するための原則とプラクティス

邦訳版『Working Effectively With Legacy Code』の重要トピックを紹介

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加
2009/07/31 14:00

 このシリーズでは7月に刊行される翻訳書「レガシーコード改善ガイド(Working Effectively With Legacy Code)」に書かれている内容から、重要なトピックを取り上げて紹介していきます。連載最終回の今回は、『レガシーコード改善ガイド』で取り上げている原則とプラクティスの一部を紹介しましょう。

目次

保守開発のための原則とパターン、プラクティス

 前回までは、『レガシーコード改善ガイド』で紹介している技法の中から、レガシーコードをテストで保護するための手法を紹介しました。しかし、この本で取り上げているのは、コードのリファクタリング技法だけではありません。魅力の一つは、取り上げるテーマの幅広さであり、開発者が保守開発で必要となるさまざまなテクニックやノウハウを紹介していることです。

 こうしたテクニックやノウハウは、原則、パターン、プラクティスの3つに分けることができます。前回の記事で紹介した「テストで保護するための24のリファクタリング技法」はパターンに相当します。連載最終回の今回は、『レガシーコード改善ガイド』で取り上げている原則とプラクティスの一部を紹介しましょう。

レガシーコードを改善するための原則

 レガシーコードの問題の一つは、度重なる変更でコードが大きくなりすぎていることでした。結果として、1つのクラスがたくさんのメソッドと多すぎる責務を持つことになってしまいます。

 保守や再利用のしやすさの観点からすると、1つのクラスに数多くの責務があることは望ましいことではありません。こうした状況にしないための原則が「単一責務の原則」です。

単一責務の原則(Single-Responsibility Principle:SRP)

 クラスが持つ責務は1つだけにするべきである。責務が1つであれば、そのクラスを変更する必要があるのは、その責務に関する変更をする場合だけである。

 このSRPの他にも、『レガシーコード改善ガイド』では、設計を改善するために目指すべき原則として、次のようなものを紹介しています。

  • Liskovの置換原則(The Liskov Substitution Principle:LSP)【第8章】
  • コマンドとクエリーの分離(Command/Query Separation)【第10章】
  • インターフェース分離の原則(Interface Segregation Principle:ISP)【第20章】
  • 解放/閉鎖原則(Open/Closed Principle:OCP)【第21章】

 これを見て「おやっ」と思った方がおられるかもしれません。そう、これらはどれもオブジェクト指向設計の一般的な原則としてよく知られているものです。実際のところ、レガシーコードの保守開発でも新規のシステム開発でも、設計目標として目指すべきことは何も変わらないのです。著者のマイケル・フェザーズ氏は、設計スキルとして、責務を把握することと責務を適切に分割するやり方を学ぶことが重要であると書いています。そして、このような設計スキルを身につけるには、新規開発よりもレガシーコードの保守開発の方がはるかに多くのことを学べる、と述べています。

 その理由は、実際に動作するコードがあるからです。確かに、設計はこうあるべき、という考え方を理解することも基礎知識としては大事ですが、保守開発での実際の変更作業やオープンソースのコードを読むことの方が、「腹に落ちた」と感じることが多いのではないでしょうか。

 保守開発に経験の少ないプログラマが投入されがちなことは連載第1回でもお話しましたが、逆に設計スキルを磨くチャンスとも言えます。『レガシーコード改善ガイド』で紹介されているテクニックやノウハウはその助けになることでしょう。


  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • 田村 友彦(タムラ トモヒコ)

    ウルシステムズ株式会社 シニアコンサルタント ICカードの通信プロトコルからWebアプリケーションまで、さまざまなソフトウェア開発をさまざまな言語・環境で経験してきた。2006年より現職。現在は、技術的な支援を行う立場でシステム開発に携わっている。支援だけでなく、ときにはどっぷりとコーディングをす...

バックナンバー

連載:翻訳書「レガシーコード改善ガイド」の注目トピック
All contents copyright © 2005-2019 Shoeisha Co., Ltd. All rights reserved. ver.1.5