ブラックボックス

ブラックボックス  とは、内部の動作原理や構造を理解していなくても、外部から見た機能や使い方のみを知っていれば十分に得られる結果を利用する事のできる装置や機構の概念。転じて、内部機構を見ることができないよう密閉された機械装置を指してこう呼ぶ。

1. 概要
-----

一般消費者にとって、今日の工業製品の大半はブラックボックスだと言える。例えばテレビ受像機を例にとると、一般消費者でテレビ受像機の動作原理を理解している人は限られている。さらに、たとえ部品が全て揃っていても、テレビの回路図を読んでテレビ受像機を組み立てられる人は、一般消費者の中では非常にまれな存在だと言える。しかしテレビの電源を入れ、見たい番組にチャンネルを合わせることは幼児でもできる。つまり内容や仕組みを知らないで、その効果を利用しているので、これをブラックボックスという。

反面、テレビ受像機の設計を専門とする技術者にとっては、テレビの内部構造は常識的な知識である。しかし、例えば『原始家族フリントストーン』に登場する「石器テレビ」のように「全く未知の機構によって」たまたまテレビ受像機と同じような動作をする装置は、現用のテレビの構造を知る技術者にとってもブラックボックスである。

また今日では、多くの電子機器がICやLSIといった複数の機能を提供する集積回路が樹脂パッケージによって密封されており、専門の技術者であっても大規模な集積回路の内部動作の詳細を完全に理解している者は限られる。これは集積回路の設計を担当する技術者以外からは内部構造は不明ながら、所定の入力に対して一定の動作を行なう、言い換えれば「内部構造は省みられない」という意味で、ブラックボックスである。

こういった複雑化や高度化に伴うブラックボックス化は、それを扱うユーザーの理解度にもよるが、古くは内部構造が単純であったために、一般ユーザーのうちにも幾許かの知識で修理などが可能であった家電が、利便性の追求や多機能化、あるいはメーカーの差別化戦略にもよって複雑なものとなり、ユーザーはなおのこと電器店でも手に負えなくなっていった経緯に顕著である。

一般的に考えられているブラックボックスの概念は以上のようなものであるが、今日の技術進歩の過程においては様々なものがブラックボックスとなり得る。

2. 技術の変化に伴うブラックボックス化
--------------------

技術体系の変化に伴って、旧来の技術がブラックボックス化することもある。最も顕著な例としては、日本の電卓が挙げられる。

電卓という装置は、ボタンを叩いて計算式を入力し、内部の電子回路の働きによって計算結果を画面に表示する。この装置は1960年代から急速に小型化と低価格化が進んで普及した。このようなコモディティ化が進んだ結果、電卓は利益の少ないありふれた商品となった。そのため、日本の電卓メーカーは1990年代後半からは生産拠点を海外へ移し、さらには開発技術者までも現地で採用するようになり、海外で設計製造することが一般的になった。その結果、電卓よりもはるかに複雑で高機能な電子回路を設計できる技術者は国内にいるのに、電卓のように単純な電子回路を低消費電力や信頼性・低生産コストといった求められる性能・条件を満たして適切に設計できる技術者が、日本国内にいなくなってしまったという話さえ出ている。こうなると日本国内では、電卓はブラックボックス化してしまったと言える。

失われた技術によって作られた機械装置は、ブラックボックスの中でも、特に解析が困難なものである。

3. ソフトウェアとブラックボックス
------------------

なおこの概念は、物理的な機構を持つハードウェアに限らない。初期のマイコンではユーザー自身がソフトウェアを作成していたが、今日のパソコンなどのコンピュータのユーザーは既成のソフトウェアを使用するのが普通であり、使用するソフトウェアの内部を理解していることはまれである。つまり、ソフトウェアに関してもブラックボックス化が進んでいると言える。

これはソフトウェアの開発者についても言える。特に商用のOSやミドルウェアがアプリケーションソフトウェアに機能を提供するために用意しているAPI群は、開発者に対して仕様は公開しているが内部は公開していないのが普通である。ソースコードを公開していないソフトウェアの内部構造は、逆アセンブルという、非常に高度なスキルを持つエンジニアが膨大な手間と労力をかけてのみ達成できる作業によってしか知ることはできない。Windowsのような巨大なソフトウェアの全貌を逆アセンブルすることは到底不可能であるし、商用ソフトウェアは使用契約によって逆アセンブルを禁止していることが普通である。

一方でLinuxのようなオープンソースのソフトウェアでは内部構造も公開しているが、その内容は膨大であるためアプリケーションソフトウェアの開発者が理解することは時間的に困難である。そもそもAPIを介してソフトウェアの機能を利用するだけならば、わざわざ内部の詳細を知る必要はない。結局、商用・非商用を問わず、上位のソフトウェアの開発者は、下位のソフトウェアをブラックボックスとして扱っていることに違いはない。

このようなAPI群は、公開された仕様通りに機能する限りは、優れたブラックボックスであると言える。下位のソフトウェアがAPIを介してブラックボックス化されることによって、上位のソフトウェアの開発者は下位のソフトウェアやハードウェアの詳細を理解し、それらを自らの設計に折り込む労苦から解放されるのである。ソフトウェアの発展の歴史とは、このような抽象化の積み重ねの歴史である、と言うこともできる。

逆にそのようなOSやライブラリのAPIが仕様と異なる動作をすると、利用しているソフトウェアにとって非常に根の深いバグの原因になりうる。このようなケースは稀なものではなく、また市場で広く利用されているOSやライブラリのバグを修正することは困難であるから、アプリケーションソフトウェアの開発者はバグを回避してAPIを利用する必要に迫られることもある。

一方でオープンソースのソフトウェアの場合は、アプリケーションソフトウェアの開発者がソースコードを読んで内部構造を理解してバグを修正するという最終手段を取ることは不可能ではない。もっとも現実には、それができるスキルを持つ技術者や、それに必要な時間を割くことのできる開発組織は限られている。

4. 技術・情報・性能の流出を防止するためのブラックボックス化
-------------------------------

section=1 これまでに述べた、機械の複雑・高度化と簡便な利用を目指した結果として自然にブラックボックス化していったものとは別に、外部の人間に技術を模倣されたり性能を分析されないために意図的に装置の内部を見ることができない様に封印した物もブラックボックスと称する。

特に兵器に多く見られる。最新技術を積め込んだ兵器が敵の手に渡ると模倣されたり対抗手段を講じられたり自軍の情報が漏れたりする事となる。また、敵国に対するブラックボックスだけでなく、輸入した兵器ではその兵器を購入して使用する国に技術を盗まれないためという目的のものもある。また保安管理体制が十分でない国から情報が漏れるのを防ぐためでもある。重要な機器やデータの入ったコンピュータなどに封印が施されたり、自律破壊装置が組み込まれたり、無理やり分解を試みるとデータが消去されるようになっているとされる。

日本でも例外ではなく、米国から導入した自衛隊の飛行機などのレーダー制御装置・ソナー分析システムなどが、輸入後封印されたまま搭載されている。

また、宇宙開発事業団が初期にアメリカから購入したロケットエンジンや装置に頼っていた時期があるが、重要な機器は、購入すると一緒にアメリカのメーカーの技術者がやってきて、日本人が機器を触ったり分解したりしないように監視し、その機器の作業はアメリカ人技術者の手で行う様にされていた。

そのほか、然るべき地位の人間以外には見られないための封印や、修理のための適切な技能を持たない人間が分解しないための封印などもブラックボックスと呼ぶことがある。date=2018年10月13日  11:21 }}

5. モデルとしてのブラックボックス
------------------

複雑な系のうち、ある部分について、その内部にさらに多くの構成要素があり、それらが複雑な相互の関係を持っていて解析が難しい場合、それらを解析することをあきらめて、その部分全体の入出力だけを考える場合がある。これも一つのブラックボックスである。

例えば、生態系を考える場合、微生物が関わる部分は常に解析が困難である。それを発見すること、同定すること、量を把握すること、それらの働きを把握することのいずれの段階でも大きな困難があるためである。そこで、それらをまとめてしまう扱いが行われる例が多々ある。たとえば池の水を一定量採取し、光を当てたときの酸素発生量をもって植物プランクトンの光合成量を代表させたり、土壌の酸素消費量で土壌微生物の呼吸量としたり、といった方法である。また、栄養段階における微生物の役割を分解者とすることが多いが、実際には寄生性や捕食性などの微生物も多く、すべてを分解者として扱うのは問題が多い。しかし、それらの働きを総合して死んだ有機物を消費分解しているという把握をしたのが「分解者」という表現になるのであって、これもブラックボックス化である。

6. 航空機のブラックボックス
---------------

航空機事故調査のために旅客機などに搭載されている、飛行データを記録するフライトレコーダー