始めに
UNIX哲学について記載する。
尚、解説時には、以下の3つの形式に分けて解説する。
- what??
- why??
- how??
UNIX哲学
what??
UNIXを支え続けている哲学のこと。
以下の9つの定理がある。
①小は美なり
②レバレッジ・ソフトウェア
③一つ一つ仕事
④シェルスクリプト活用
⑤速攻プロトタイプ
⑥対話インタフェース回避
⑦効率性より移植性
⑧フィルタ化
⑨データはテキスト
why??
UNIX哲学は優れていて、かつ普遍的であるため。
how??
UNIX哲学の背景にある理由を把握し、適切に活用する。
①小は美なり
what??
小さいソフトウェアは、大きいソフトウェアよりも遥かに優れているという考え方。
why??
小さいソフトウェアには以下の6つのメリットがあるため。
- 理由が容易。
- 保守が容易。
- マシンリソースに負担をかけない。
- 他のソフトウェアと組み合わせやすい。
理解が容易
最小限のアルゴリズムしか含まず、全てが目的の作業に直結しているため、理解が容易。
保守が容易
コードが読みやすいと保守が容易。
マシンリソースに負担をかけない。
- 実行イメージがわずかなメモリしか占有しないことで、メモリの割り当てが容易になり・性能も向上する。
- 消費するディスク容量も小さくなる。
他のソフトウェアと組み合わせやすい。
要求の多様性や変化に、柔軟に対応するのが容易になる。
大きなソフトウェアには以下の問題がある。
- 複雑でコードの理解が困難。
- 不足の事態に対応できない。
how??
ソフトウェアを設計するときは、解決する問題を完全に理解し、小さく設計して、一つの仕事に専念するようにする。
機能が足りない場合は、他のソフトウェアと連携する。
②一つ一つ仕事
what??
1つのソフトウェアには、1つのことをうまくやらせるという考え方。
why??
- 実行速度の向上
- 問題への理解の確認
- 再利用性の向上
how??
1つのソフトウェアには1つの仕事を担当させる。
解決すべき問題が大きい場合は、小さく分割して対応する。
③速攻プロトタイプ
what??
できるだけ早くプロトタイプ(試作)に着手するという考え方。
why??
試行錯誤なしで良いものは作れないため。
how??
できる限り早くプロトタイプを作成する。
プロトタイプの作成には以下の3つのメリットがある。
- 前提の誤りを早期に発見できる。
- 要件不備により手戻りを減らせる。
- 速いうちから誤りを取り除く作業を始められる。
④効率性より移植性
what??
ソフトウェアの設計において、効率性より移植選を優先するという考え方。
why??
ソフトウェアの価値を持続させるため。
一つのハードウェアの価値が落ちた際、新しいハードウェアへの移植コストが少なく済むため。
how??
ハードウェアに依存する部分と、依存しない部分を切り離した設計を行う。
依存しない部分に関しては、再利用しやすい単位でモジュール化する。
移植性のために、コードの最適化に時間をかけないようにする。
⑤データはテキスト
what??
データはデータファイルに保存するという考え方。
コードの移植性のみでなく、データの移植性も重要であり、そのための解がテキストファイルである。
why??
テキストファイルは万能型であるため。
テキストファイルには以下のメリットがある。
- 人間がデータを直ちに確認でき、修正・開発中のデバッグも容易。
- 別の形式への変換を考慮しなくて良い。
how??
データはテキストファイルに保存する。
ソフトウェアは、各々テキストファイルを入出力するように設計し、ソフトウェア同士の連携を容易にする。
その際、選択する形式は、他のソフトウェアとの接続性のため、標準的なものにする。
⑥レバレッジ・ソフトウェア
ソフトウェアを梃子として利用することで、力を増幅させるという考え方。
そのために、ソフトウェア同士で組み合わせる。
why???
自分の仕事に他人の成果を取り組むことで、先人の努力をうまく利用して、自分のコードの有用性を格段に高めるため。
how??
それぞれが単機能で炭化地に集中して小さなソフトウェアを作り、グルー言語で繋げて、大きな仕事を達成する。
⑦シェルスクリプト活用
what??
シェルスクリプトで接着することで、梃子の効果と移植性を高めるという考え方。
why??
- 自分の仕事に他人の成果を取り組むことで、先人の努力をうまく利用して、自分のコードの有用性を格段に高めるため。
- 多くの人に使われることで、梃子の効果を増幅させるため。
how??
シェルスクリプトをグルー言語として使用する。
⑧対話インタフェース
what??
基本的に対話的インタフェースを避けるという考え方。
使用すると、ユーザーがそのソフトウェアのユーザーインタフェースの内部に拘束されてしまう。
why??
対話的インタフェースにすることで以下の問題が発生するため。
- ソフトウェアごとの独自の対話方法を覚える必要がある。
- ソフトウェア同士が対話できなくなる。
- 待ち時間が長くなる。
- 入力部分の解析コードが大きく、見にくくなる。
- 「大は美なり」的なアプローチになる。
how??
基本的に対話インタフェースは避ける。
⑨フィルタ化
what??
全てのソフトウェアをフィルタとして設計するという考え方。
フィルタ
入力ストリームをデータとして受け取り、何らかの加工を施し、加工したデータを出力ストリームに送り出すこと。
why??
コンピュータの仕事であるデータの収集とフィルタリングだけに集中させ、うまくやるため。
how??
標準入出力を使用し、正しく設計する。