アンチパターンってなに?

2009年5月11日(月)
細川 努

Lava Flow(溶岩流)

 長年にわたってシステムを保守していると、もう現在では使っていない昔の技術に関係したプログラムコードや、現在では、何のために作ったかわからないロジックなどが数多く存在する場合があります。

 こうした、今となっては必要でない、プログラムコードの残がいのことを“溶岩流”と呼びます。溶岩流は、早めに除去しないと、取り除くのが困難になってゆき、そのまま放置すると、さらに新たなコードの残骸が増えてゆき、最後には、誰にも手をつけられないシステムになってしまうのです。

 以下のような症状があれば、溶岩流アンチパターンにかかっている可能性があります。
・その場しのぎ的な変数やコードが次から次へと追加されている
・ドキュメントなどの説明がないコードが多数存在している
・使われていないデッドコードが多数存在している

 こうした溶岩流アンチパターンを発生させないためには、場当たり的な開発でなく、きちんとしたアーキテクチャに基づく開発を行う必要があります。アーキテクチャがいい加減であれば、冗長なコードやデッドコードが発生し、その後のテストや保守作業に苦労することになるのです。

 さらに困難なのは、すでに稼働しているシステムから溶岩流を取り除く作業です。現在のプログラムコードから冗長なコードやデッドコードをつきとめるには長い時間と根気が必要であり、さらに、こうした無用のコードを除去してテストするには大変な手間がかかります。

 また、溶岩流となったコードを地道に除去するくらいなら、1から作り直した方が効率が良い場合もあります。結論としては、溶岩流に悩まされないようにするためには、開発の当初からしっかりとしたアーキテクチャを構築した上で、不要となったコードはその都度きれいに除去することが大切なのです。

スパゲッティコード

 スパゲッティコードは、最も有名で、昔から存在する、アンチパターンです。多くの場合、プログラムのコードは、当初作成したコードに対して、何回も修正や拡張を繰り返し加えられます。こうした拡張が繰り返されると、コードは次第に当初の構造が崩れてゆき、だんだんと理解しづらいプログラムになっていくのです。

 以下のような症状があれば、スパゲッティコードアンチパターンにかかっている可能性があります。
・再利用できそうなオブジェクトやメソッドが少ししかない
・メソッドの中に大量のロジックが記述されている
・オブジェクト間での呼び出し関係がほとんどない
・オブジェクトのメソッドにパラメータがなく、インスタンス変数やグローバル変数を直接操作している
・オブジェクトの使い方がワンパターン

 こうした症状がまん延すると、コードの再利用性が低下するどころか、コードを修正することすら困難になってきます。その結果、現在のコードをすべて捨てて、新しくコードを書き直した方が経済的になってしまうのです。

 スパゲッティコードを予防するためには、ソフトウエアの設計段階をおろそかにせず、きちんとした設計を行った上で、初期の設計構造を崩さないようにコードのクリーニングを継続する必要があります。一般的にプログラムは、当初の開発費用よりも保守段階での費用の方が多いだけに、プログラムコードを予防する作業は、手間はかかりますが決して無駄にはならないのです。

 次回からは、さらにほかの種類のアンチパターンを紹介します。

【参考文献】
William J. Brown(著)、Raphael C. Malveau(著)、Hays W.“Skip” McCormick III(著)、Thomas J. Mowbray(著)、岩谷宏(訳)

『「アンチパターン」ソフトウェア危篤患者の救出』ソフトウェアパブリッシング刊 ISBN 978-4797321388

株式会社アーキテクタス
(株)アーキテクタス 代表取締役 技術士(情報工学)大手シンクタンクで金融系システム構築等を経験。現在、総務省CIO補佐官として、総務省内のシステム構築への助言等を担当している。要求開発アライアンス理事 日本Javaユーザー会(JJUG)監事

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています