モジュール
モジュール(英: module)とは、工学などにおける設計上の概念で、システムを構成する要素となるもの。いくつかの部品的機能を集め、まとまりのある機能を持った部品のこと。モジュールに従っているものをモジュラー(英: modular)という。
入出力を絞り込んで標準化することにより、システム開発を「すり合わせ」から「モジュールの組み合わせ」に変更できる[1][要ページ番号]。
ハードウェア
[編集]パソコンなどを作成する際、標準規格に合った部品であれば、どの会社のモノを使用しても機能を発現できる。
IBMが、1980年代、コンピューター「PC/AT」の仕様を公開し、規格にあったモジュールであれば内部はブラックボックスでもかまわないという開発体制(モジュール化)をとった。これにより、世界中に無数の部品メーカーが誕生、モジュールの性能を競ったためパソコンの性能は飛躍的に高まった。反対に日本メーカーは系列会社の生産した部品による作り込み(摺り合せ)の開発体制をとったため競争力を喪失した。これ以降、パソコンメーカーは性能がよく安いモジュールを世界中から探し組み立てるというビジネスに特化。組み立て産業となったパソコン産業では、格安の賃金で大量生産できる新興企業が幅を利かせることになった。価格低下により、旧来のメーカーにとっては利幅の薄い仕事となり、とうとうパラダイム転換の主であるIBMは撤退することになった。
現在、「組み立て」の前段階のモジュール作成においてはCPUやメモリなどの分野で最新技術がブラックボックスとして詰め込まれている。このため利益を上げやすい。一方で、「組み立て」後のアフターケアも需要は厚く利益を上げやすい。このように中段階だけ利益率が低く、前段階と後段階が利益率が高い状態が「U」のような曲線を描くためスマイルカーブと呼ばれている。
同じようなモジュールの組み立て産業に自動車産業があるが、自動車の場合は、容積や重量などが重要要素であり、2万点以上ある部品間の相互依存性[注釈 1]が大きいため、部品間において綿密かつ独自のすり合わせが必須である。このため、組み立てといえども容易に新規参入できるものではなく、自動車組み立て業は高い利益を上げることができる。
鉄道車両では、内装や床下機器の製作にモジュール化が進められている[2][3][4]。主に日立製作所製の『A-train』で採用が始まったもので、従来は内装・床下配線・配管は骨組みに対し、現物合わせで組み立てていた[4]。モジュール工法の通勤電車(一例)では、前もって中央天井、側天井、つり手・腰掛の各モジュールや配線・配管モジュールをアウトワークにて製作し、これらの各モジュールをダブルスキン構体の一部であるマウンティングレール(カーテンレール状のつり溝)にボルトで固定する方法を採用している[2][3][4]。これにより構造の簡素化、部品点数削減、コストダウンを図っている[4]。
産業用機械などでは、作業に必要な装備を同じ外形のパッケージに纏め、必要に応じてモジュールを交換する手法が採用されている。
軍用艦では1980年代初頭にスタンダード・フレックスなどのコンセプトが登場した。沿海域戦闘艦は対機雷戦、対水上戦、対潜戦に必要な機材を交換できるように設計されている。
装輪装甲車では後部をモジュール化することで通信指揮車、装甲救急車、自走迫撃砲として利用できる車両が登場している。
建築物では、中銀カプセルタワービルが各部屋を物理的に交換可能とした設計を採用している。
ソフトウェア
[編集]ソフトウェア工学におけるモジュールは、ソフトウェアシステムを構成する部分的プログラムである。
モジュール分割はソフトウェア開発工程に影響を与える。なぜなら良く分割されたモジュールはそれぞれ独立して実装・テスト・改修できるからである。各モジュールに開発者を割り当てることでモジュール群の並行開発が可能になり、全体の完成を早めることができる。またモジュールの入れ替えで機能を高めたり補修したりできる。モジュールが正しく分割できていない場合、複数の開発者の変更内容に矛盾が生じたり、変更のために多くの開発者の同意が必要になったりすることで開発工程に影響を与える。
モジュールはサブルーチンとデータ構造の集合体としてのソフトウェアの実体である。モジュールはその部分だけでコンパイル可能な単位でもあり、再利用可能であると同時に、複数のプログラマが同時並行的にそれぞれ異なるモジュールの開発を行うことが可能となる。モジュールの特徴として「モジュール性」とカプセル化があり、それらによって複雑なプログラムを理解しやすくできる。
モジュールはインタフェースと実装を分離する。モジュールのインターフェイスはそのモジュールが外部に提供すべき要素とそのモジュールが必要とする要素を表している。実装はそのインターフェイスで提供するよう定義された機能を実際に実現するコードを含む。モジュールの概念を明示的にサポートする言語として、Ada、D言語、F言語、FORTRAN、Pascal、ML、Modula-2、Python、Ruby などがある。
モジュール性
[編集]モジュール性(Modularity)はプログラムがもつ属性であり、モジュールによって構成される範囲の程度を示すものである。
モジュールは低い結合度と高い凝集度をもつことが望ましい。すなわちプログラム内の任意の2つの部分が相互に関連することが多い場合、そのようなコードは結合度が高くモジュール性が低い。一方モジュール間のインターフェイスがきちんと定義されていて、それ以外の相互の関連が存在しないプログラムコードは、モジュール性が高いと言える。また関係性の低いプログラムが内部に混在した(関心の分離が実現していない)モジュールは凝集度が低くモジュール性が低い。
モジュールとクラス
[編集]モジュールとクラスの違いは以下の通りである。
- クラスにはインスタンスとしてオブジェクトを生成する機能がある。
- クラスは他のクラスの動作やデータを継承することができる。
- ポリモーフィズムにより、クラスのインスタンス間の関係は実行時に変化するが、モジュール間の関係は静的である。
モジュールとクラスの類似点は以下の通りである。
- どちらも実装の詳細を外部から隠蔽する。
- どちらも階層(モジュール階層とクラス階層)を形成することができる。