12
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【UNIX】背後にある9つの設計哲学とは!?【初心者向け】

Last updated at Posted at 2022-11-14

始めに

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??

標準入出力を使用し、正しく設計する。

12
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?