大きな問題は小さくして1つずつ対処する――分割統治法問題解決力を高めるコツはプログラミングの原則・思考にあり(4)(3/4 ページ)

» 2017年08月21日 05時00分 公開
[上田勲]

UNIX哲学(2) 1つ1仕事

 英語  Make each program do one thing well.

 日本語  1つのプログラムには1つのことをうまくやらせる。

 What 〜1つのソフトウェアは1つの仕事

 1つのソフトウェアには、1つのことをうまくやらせます。

 最良のソフトウェアとは、その生涯において、ただ1つのことをうまく成し遂げるソフトウェアのことです。1つのことをうまく成し遂げ、自分はただちに退場して、次の1つのことをうまくやるソフトウェアに道を譲ります。

 例えば、ディレクトリの内容を一覧するコマンドがあるとします。このコマンドの表示の見栄えをよくしようとして、表示整形の機能を追加してはいけません。このコマンドは、あくまでディレクトリの内容を一覧する仕事に徹するようにします。表示の整形に関しては、別途整形を専門とするコマンドを作成して、それを組み合わせればよいのです。

 Why 〜ソフトウェアがピュアになる

 1つの仕事に集中することにより、コードの不要な部分をなくすことができます。コードに不要な部分があると、実行速度が遅くなります。また、コードが不要に複雑になり、機能追加などの融通が効かなくなります。

 さらに、1つの仕事に集中することにより、その仕事の本質をつかむことができます。1つのことをうまくやるようにソフトウェアを作れないのであれば、問題をまだ完全には理解していない、ということです。

 1つのことをうまくやるソフトウェアができると、他のソフトウェアの中でも比較的簡単に再利用することができます。そこには、大きなソフトウェアにありがちな、再利用を躊躇してしまうような曖昧性はありません。

 How 〜1つの仕事に集中

 1つのソフトウェアには、1つの仕事を担当させるようにしましょう。

 問題が大きかった場合は、まず、問題を小さく分割します。そして、その小さな問題に対応する、小さなソフトウェアを作成します。あくまで、小さなソフトウェアは1つの仕事に専念するようにしてください。大きな問題も、このようにすれば、少しずつ、しかし確実に克服することができます。

 問題が拡張していった場合は、別途1つの仕事をするソフトウェアを作成し、組み合わせることで対応します。前のソフトウェアに継ぎ足さない方針にすると、巨大なソフトウェアにありがちな、スパゲッティ・コード状態になることを回避できます。

 1つの仕事をするシンプルなソフトウェアが作成できたら、そこに新機能やオプションを付ける誘惑に負けないようにします。「多機能主義」に抗うのは、案外難しいことです。しかし、これを許すと、もともとの目的から少しずつずれたソフトウェアに変容してしまいます。そのコードが、本当に必要なのか、そのソフトウェアの本質からずれていないか、常に問い続けます。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。