――あるいは How to be an Computer Otaku
(ascii.PC 2002 年 2 月号)
山形浩生
コンピュータがむずかしいのは、それが何重にも層(レイヤー)になって重なっているからだ。コンピュータが「わかる」人っていうのは、その重なり具合をきちんと区分して認識できている。コンピュータが苦手な人は、それが区別できないで、ぐちゃっとした一体のものとしてしか認識していない。
もちろん、これは何でもそうなんだろう。車に強い人は、車の仕組みをちゃんと知っていて、調子が悪いときは車の仕組みを思い浮かべながらあちこちいじる。ただ車の場合はまだわかりやすい。エンジンがかからないのか、ブレーキが利かないのかは直感的にわかる。また、ほかの人が何かトラブっている時でも、どういう現象が起きているのかきけば、何がまずいのかはだいたいわかる。「ブレーキの利きが悪いんですけど、どうしましょう」という質問をしても、車関係者はだれも怒らない。
でも、コンピュータの場合はそうはいかない。「マウス(のポインタ)が動かないんですけど」「インターネットエクスプローラをバージョンアップしたら起動しなくなったんですけど」といわれても、一体何かいけないのかはさっぱりわからない(同じ現象が何千件も起きて話題になっているのでない限り)。掲示板とかでこういう質問をすると「もっと詳しく説明しろ!」と怒られるのがふつうだ。幾重にも重なった層のどこで問題が起きているかわかる材料を提供しろ――その人たちは、そう言って怒っているわけだ。
たとえば、メールを打とうとしているのに、送信ボタンを押しても何も起きない。どうしたんだろうか。
まずそれは、あなたが何かヘマをしているのかもしれない。送り先のアドレスを入れ忘れているとか、あるいは漢字が変換途中で確定していないとか。次に、それはメールソフトがおかしいのかもしれない。あるいは、マウスのケーブルがはずれているのかもね。マシンごと死んで/落ちている場合だってあるだろう。マウスの動作をメールソフトに伝える部分だけが壊れているのかもしれない。あるいは、ネットワークのソフトがおかしいのかもしれない。そしてひょっとすると、ネットワークにつなぐケーブルがおかしいのかもしれない。あるいは単に、マシンがほかの作業で忙しくて反応が遅いだけかもしれない。可能性はいろいろある。でも「メールが送れない」と言っても、だれにもわかってもらえない。
で、仕方なく「わかってる人」を呼んでくるわけだけれど、そのわかっている人だって、実は見ただけじゃどこをいじっていいかわからない。その点では、あなたと何も変わりない。なにが違うかというと、その人はまず頭の中で、メールに関連するいろんな層を一通り思い浮かべている。そしてその層ごとに、いろんなことをやってみる。まず、ほかのソフトを動かして(たとえばブラウザとかね)、ネットワークにちゃんとつながっているかをチェックするだろう。キーボードを叩いてみて、入力できるか調べる。次はマシンを再起動。そうやってかれらは、可能性を一つ一つ消していく。わかっている人の多くは、それがほとんど無意識にできるようになっているんだ。
そしてもちろん、わかっている人だって、目新しい事態が起きればまごつく。ぼくは最近無線式のマウスを使うようになったんだけれど、机の上からケーブルが消えてとてもすっきりした。でも数ヶ月たって、マウスの電池が切れてコンピュータがまったく反応しなくなったときには、何が起きたかわからなくてえらく焦った。ケーブルはずれから何から一通り試して、電池を替えるという当然の解決に思い当たるまで三十分もかかったかな。
これまでの連載では、そういういろんな層をあまりきちんと区別せずに扱ってきた。でも、この連載もそろそろ後半戦半ばにさしかかってきたから、だんだんそういう具体的な話も強化することにしよう。というわけで、今回はまず全体的な構造と、その中のやりとりの仕組みを見てやろう。
とはいっても実際に細かく厳密な層(レイヤー)を見ていくと、これはもうめんどくさくて話にならない。ふつうに使う人には、そんなもの必要ないものね。おおざっぱに知っておくべきなのは、ハードウェア、オペレーティングシステム、ソフトウェア(アプリケーション)。これは、鏡餅状に積み重なっている。コンピュータ単体としてはそのくらいが理解できていればいい。
このうち、ハードウェアについてはざっとこれまでにお話をしてきた。そしてオペレーティングシステムについても、ざくっと話はしたね。
そして、その全体がのっかっているものとして、前回ちょっと触れたネットワークがある。ネットワーク自体もいくつか層になっている。ハードウェア(ケーブルとか無線とかね)、その上のデータを送る仕組み、そしてその仕組みの上で動く実際のアプリケーション、というレベルがある。このくらいが理解できていたら、もう初心者としては完璧だろう。
厳密に言うと、ネットワークの層(レイヤー)というのはもっと複雑で、もっとたくさん層が考えられる。その筋の専門家たちが集まって、何年にもわたりすさまじい議論をくりひろげたあげく、全部で層が7つあるんだ、という結論が出た。ただし、実際にぼくたちがインターネットなんかで使っている仕組みを見ると、実はこんなにきれいに分かれていない。だからこの七つの層という話は、本当に概念整理にしか使われていない。
さて、それぞれのレイヤーごとに、いったいどういうデータのやりとりが行われるか、という仕組みが決まっている。それがプロトコル、というやつだ。たとえばキーボードやマウスを取り替えても大丈夫なのは、そのキーボードやマウスがマシン本体とデータをやりとりするプロトコルが決まっているからだ。もちろんほかのところにもプロトコルはある。だいたい複数のものがなんらかの形でつながっているとき、そこには必ずなんらかのプロトコルが決まっている。そうでないと、コンピュータのデータなんて、一と〇の固まりだ。どの一がメールの一で、どの〇がエロ画像の〇か、なんてその規則が決まっていないと話にならない。
プロトコルは本来、儀式の手順のことだ。そしてそれは、決めごとだ。お葬式のお焼香を考えてみよう。まずある種の着るべき服装と持ち物(お数珠とか)があるよね。で、とりあえずお焼香の順番がある。で、神妙な顔をして通路を進んで、左右のご遺族にお辞儀をして、手をあわせてから前に出てお香をつまんで三回おでこに持っていって……(これもいろんな流派はあるけれど)。あるいは、名刺交換のプロトコルだってある。電話をかけるとき「もしもし」と言うのだってプロトコルだ。コンピュータ以外の場面で「プロトコル」ということばをいちばんよく使うのは、国の外交の世界だ。外交っていうのは、(少なくとも昔は)ひたすら儀式のかたまりだからだ。一昔前なら、プロトコルをちょっとまちがえたら、第一次世界大戦が起きたりしたわけだ。一挙一動誤解されないよう意味を決めておく必要がある。
コンピュータの場合でも、プロトコルがいちばんたくさん出てくるのは、コンピュータが他のコンピュータとやりとりするときのネットワークの世界だ。インターネットというのは、実際のいろんなケーブルなんかを除けば、あとはすさまじいプロトコルの固まりだと思っていい。インターネットにはじめてさわった人は、いろんな略称にとまどう。TCP/IPの設定をして、PPPでダイヤルアップ接続してファイルをFTPでゲットして、メールを読むにはPOPで送るにはSMTPで、ウェブを見るときにはhttpなんとかと入れて……この最後にPがついてるものはすべて、なんとかかんとかプロトコルの略だ。
そして、このプロトコルは、さっき述べた層ごとに分かれているのだ。
ただし特にインターネットの場合、こうしたプロトコルの仕組みというのは、少なくとも基本的な考えのところでは死ぬほど簡単にできている。たとえば、LANを組むときには、イーサネットというのを使う。最近ADSLを入れて、ネットワークカードを用意しろ、と言われた人もいるだろう。いまネットワークカードと言ったら、たいがいがイーサネットのカードなのだ。で、こいつに使われているプロトコルというのは、泣きたいくらい単純だ。たとえばデータを受ける方は:
これだけ。送る方は:
こんだけ。これはさっき言った、ネットワーク上のデータを送る仕組みの部分だ。ネットワークカードを持っている人は、マシンの裏やカードを見ると、なにやらLEDがチカチカしているのが見えるだろう。このプロトコルがわかっている人は、そのチカチカぶりを見て、ネットワークで何が起きているのかだいたい見当がつくのだ。
また、インターネットのデータを、マシンからマシンに転送する仕組みがある。これもネットワーク上のデータを送る仕組みの一部だけれど、これまた死ぬほど簡単にできている。
そしてこのデータ転送の仕組みの上にある、アプリケーションレベルでのプロトコルがある。その例としてウェブページを見るときに使われるのは、HTTPというプロトコルだけれど、これはこんなものだ。
もちろんどのプロトコルも、実際にはこれだけじゃすまない。たとえばデータを送るとき、ときに送り先不明のやつが出てくる。そのときはどうするか? (有効期限を見て、古ければ捨てるのだ)いるはずの相手が返事しなければ? データ転送が途中でとぎれたら? そういう細かい取り決めはいっぱいある。だけれど、基本的なところはすごく簡単だ。なぜかというと、簡単にしておかないとあとあと柔軟性がなくなるのと、必要以上に複雑にするとみんな面倒くさがってすぐにルール違反をして、収拾がつかなくなるからだ。
それと、もう一つ特徴がある。ネットワークでもコンピュータでも、いろんな層があるけれど、特にいまのインターネットの仕組みでは、それぞれの層はほかの層の中身には一切干渉しないようになっている。
これは、高速道路を走る自動車と同じだと思ってほしい。道路は、そこを走るのがどんな車かはまったく気にしない。通れるものはなんでも通す。そして自動車は、自分に乗るのがどんな人だろうとまったく気にしない。乗れる人はだれでも乗れる。そういうことだ。こうしておけば、お目当ての人がこないというトラブルがあったときも、道が通行止めになっているのか、車が故障したのか、本人が遅れているのかを、別個に確認できるわけだ。途中で、道と人間との相性が悪いのかもしれない、なんてことは心配しなくていい。もっとも、実際にはそういうことはないわけじゃない。エイリアンをデザインしたギーガーという人は、トンネルが怖くて絶対通れない。来日してあちこち連れ回すときにはえらく苦労した。だから思ったほど切り分けはきれいじゃないんだろうけれど。
この層に分けて、それぞれが別のプロトコルを使うメリットはもう一つある。それぞれの層は、お互いの中身に干渉しない。すると、たとえばハードウェアをアップグレードしても、データを送る仕組みはそのまま使える。ブラウザを変えても、ハードウェアまで変えなくてすむ。だから部分ごとの更新が簡単だ。
ちなみにこの明快な切り分け、層ごとのプロトコルの独立性と不干渉は、インターネット(そして普通の道路)の発展にとって大きな意味を持っていた。いろんな人が、いろんな層ごとにいろんな試みを出せる。ウェブを作ったとき、ウェブ用のHTTPというプロトコルを使っていいかどうか、だれも気にしなくていい。ネット上のデータ転送の仕組みは、その上でどんなプロトコルが走ろうと気にしないからだ。みんなが好き勝手な思いつきで好き勝手なプロトコルやハードウェアを使えたからこそ、インターネットは爆発的に進歩した。
実はネットワークにはこれ以外のやりかただってある。いまのインターネットは、自分が転送しているのがエロ画像か海賊ソフトかテロ情報かはまったく気にしないけれど、それをチェックさせようという考え方もある。車だって、カーナビをどんどん発達させて、道が車のコントロールを全部引き受けて自動運転させるという構想もある。たぶんそうすると、便利なこともかなりあるだろう。でもいろんなネットワークの発展を考えたとき、それが本当にいいことなのか、実はよくわかっていない。賢くしようとして、かえって小回りがきかなくなる、そんな可能性だって相当にある。ある意味でそれは、ネットワーク上の自由ってどういうことなのか、というでかい問題とからんでくるのだ。
でもこの話は最終回にまわそう。それまでの数回は、もうちょっとマシンよりの話を続けることにする。ではまた。
前の号 次の号
ASCII.pc Top YAMAGATA Hirooトップ