HOMEへ

うちのLAN



目次
はじめに
インターネットのホストってUNIXなのね
自宅でUNIXができるの?
ルータを買おう
IPの「仮面舞踏会」
いよいよ我が家でUNIX

コラム「うちのLAN」について

Andardstay Inputway
アクセスカウンター
あるトラブル、そして常時接続
これは誰のパソコンですか?


はじめに

私はパソコンが好きです。マニアないしはオタクのレベル、と言っていいと思います。今では私の家でWindows95、MacOS、FreeBSDの三種類のOSをLAN接続して使用するまでになっています。

今のこの状況を作り上げるために、友人・知人やパソコン通信、インターネット等を通じ、多くの先輩達から様々な情報を得、参考にさせていただきました。現在、私の家では充分に便利な環境が実現していますが、さらに、まだまだアップグレードを続けていこうと思っています。

このコーナーでは、これまで諸先輩から有形・無形にいただいた数多くの情報に対する感謝の意味をこめて、私が家で行っている(主にインターネットに関する)環境のアップグレード作業をそのままレポートする、ということを試みてみようと思います。 私が行ったことを、自分用の記録という意味も持たせながら、ただダラダラと書き綴るだけですので、わかりにくい部分なども多々あるかと思いますが、もしこのページを読んで少しでも「参考になった」と思ってくださる方がいらっしゃればこれほど嬉しいことはありません。


インターネットのホストってUNIXなのね

「UNIX」。それは私にとってあこがれとも言える魅力的な響きを持った言葉でした。MS-DOSを使っていたころから、何かっていうと「もともとはUNIXの何々というコマンドを云々」、「誰かUNIX使える人にお願いして何々のファイルをコピー云々」などという言葉を、頻繁ではないけど時々耳にし目にする、実際のUNIXはどんなものなのかは全く知らないけど、UNIXってなんだか専門的で「カッコイイ」。やれMS-DOSだ、Macintoshだ、今度出たWindowsっていうのはいい、などと世の中で騒がれる中、「私はUNIX使ってます」なんて言えたらカッコイイなぁ、と、十数年間漠然と思い続けていたのです。

時代は下り、世は空前のインターネットブーム。このブームがちょうど始まるころ、私はあるプロバイダに入会しました。私が最初に入会したプロバイダがそこでなかったら、きっと今ほど自宅のネットワークが整備されることはなかったでしょう。そのプロバイダはシェルが使えるのです。と言っても入会した当初は「シェルって何?」て感じで、プロバイダに接続して最初に出るメニューの中の「3. シェル(shell)」の項目は全く気にかけず、「どうせ僕には関係ないや」と思っていたのでした。

一方、私の女房が、これまた偶然ですが、過去に仕事でほんの少しですがUNIXを触ったことがあり、UNIXの入門書を持っていることがわかったのです。「UNIX」という言葉にあこがれていた私は、早速その本を見せてもらいました。そしてUNIXのプロンプトは「#」とか「%」であること、MS-DOSのCOMMAND.COMに相当するコマンドインタプリタを「シェル」と呼び、「sh」や「csh」があること、などを学びました。「ん? シェル? そういえば...」と、はたと気づいてプロバイダに接続し、いつも無視していた「3. シェル(shell)」を選んでみたのです。すると、「uranus% 」と出た、これは、UNIXのコマンドプロンプトだぁ、と、えらく感動したのを覚えています。そこから私とUNIXのおつきあいが始まったのでした。


自宅でUNIXができるの?

さて、プロバイダにつないで「3. シェル(shell)」を選べばUNIXの勉強ができる、ということはわかったものの、一々ダイヤルアップ接続しないといけないわけですから、なかなか勉強もはかどりません。それでもUNIXのコマンドを少しずつ覚え、見よう見まねでSSIを使用して自分のホームページ(ここのことです)にアクセスカウンターなどを付けたり、などとやっていた頃、私の勤め先の関係からの仕事で、コンピュータネットワークを応用したソフトの開発をしたい、という話が舞い込んできました。私の会社も私自身も、コンピュータは使ってはいますが決して専門ではありません。この仕事が来たのも全くの偶然からです。そんな状態でソフトの開発なんてどうしたらいいものか、私は全くわかりませんでしたので、とりあえず私の演劇関係の知り合いでコンピュータに最も詳しい人(東京のとある劇団の方)に相談してみました。そしたら、やはり持つべきものは友、彼の友人でプロフェッショナルのプログラマ、W氏を紹介してくれたのです。

W氏は(プロですから当然ですが)コンピュータに関する知識が大変豊富で、私は仕事の話もそこそこに、彼の持つ数多くの知識を貪欲に聞き出し、たくさんの興味深い事実を知ったのです。中でも最も驚愕したのは、W氏が、自宅でUNIXを動かしている、という事実でした。な、なんと、パソコンにUNIXが搭載できるのか!? 私はとんでもないカルチャーショックを受けました。UNIXというと、詳しくは知らないけどいわゆる大型コンピュータと言われるもので使うためのもの、という固定観念を持っていたからです。
負けず嫌いの私がW氏に「ほうほう、今はパソコンで動くUNIXがあるんですか。」などと涼しい顔をして相づちをうってみると、W氏は、
「えぇ、今はありますよ。LINUXとかFreeBSDとか。私はLINUXを使っていますが。」
とお答えになりました。「LINUX」、そして「FreeBSD」。パソコンでUNIX。
感激もひとしおに、「LINUX、FreeBSD、LINUX、FreeBSD...」と、まるで豆腐を買いに行く小僧さんのようにつぶやきながら、その日は帰宅したのでした。


ルータを買おう

当時(1996年春頃)私の家には、MS-DOSで使用していたPC9801-BX、出たばかりのWindows95が搭載されたPC9821V12、そしてMacintosh LC475、の合計3台のパソコンがありました。一応Windows95とMacintoshはEthernetで接続していましたが、ネットワークでやることと言えば「あっちで書いた文章をこっちで印刷する」とか、「こっちでダウンロードしたファイルをあっちにインストールする」とか、いわば「互いにつながっているだけ」の用途でした。

インターネットもその頃はNetscapeバージョン1の時代で、テレビCMで二枚目俳優が「おい、お前インターネットって知ってるか」などと渋い声で言っていた頃でした。私がインターネット接続に使用していたのは主にMacintoshで(Windows95は発売されたばかりで使い方をよく把握していなかった)、Netscapeを使いながら「ちょっと表示が遅いよなぁ」不満に感じていたのでした。

その不満を解消すべく、当時アナログの最高速だった28800bpsの壁を破るため、ISDN回線の導入に踏み切りました。しかしここでも一つ問題がありました。それはMacintoshのシリアルポートのスピードです。私の所持しているMacintosh LC475のシリアルポートで出る速度は57.6Kbpsです。これでは最大128KbpsというISDNの魅力が生きてきません。もちろん、ISDNの導入によってそれまでの28.8Kbpsよりは速くなりましたが、どうも劇的な差が感じられず、中途半端な気分でした。

そんなある日、パソコンショップをぶらぶらとしていたら、気になる商品が目に飛び込んできました。いわく「TA機能を内蔵したルータ。端末型ダイヤルアップIPの接続でも使用可能。定価168,000円」。当時「ルータ」といえば何十万もする高価なもので、とても私のような素人が使うようなものではない、と思っていたので、最初にその値段の安さに驚きました。そして店頭に掲示された機能をじっくりと読み、「これだ!」と思いました。

それまで私が行っていたインターネット接続は

CPU−−シリアルポート−−TA−−ISDN−−プロバイダ−−インターネット
という形だったので、シリアルポートの57.6Kbpsがボトルネックになっていました。しかし、このルータを使用すれば
CPU−−Ethernet−−ルータ−−ISDN−−プロバイダ−−インターネット
という形になり、ボトルネックはなくなります。

大きな出費は賭でしたが、その店頭にあったルータをその場で購入し、家のEthernetに接続しました。このルータ購入は単にネットサーフィンのスピードアップというのが直接の動機でしたが、後から考えればこれこそが、それまで「互いにつながっているだけ」だった我が家のネットワークが、外への指向を持つきっかけとなった瞬間だったのです。


IPの「仮面舞踏会」

ルータによるインターネット接続は始めから快調でした。ルータを使用する大きな利点として、ルータがプロバイダに一回線だけつながっていれば、LAN内のどのパソコンも同時に独立にインターネットに接続できる、という点です。この技術を「IP masquerade(マスカレード)」と言うのだそうです。(注:IP masquerade は全てのルータが持っている機能ではなく、またルータでなければ実現できないものでもありません。今はあくまで私が購入したルータの話です。

インターネット接続を行う場合、パソコンはIPアドレスを持たなければなりません。今このページをこうして読むことができるのも、こちらのサーバがあなたのコンピュータのアドレス「(none)(54.225.1.66)」に向けてデータを送っているからです。

通常パソコンにTAやモデムを直接つないでダイヤルアップする場合なら(WindowsのダイヤルアップネットワークやMacintoshのMacPPPなど)、パソコンがプロバイダにダイヤルしたときに、プロバイダの手持ちのアドレスの中から他と重複しないIPアドレスを一つ借り受けます。そしてそれはダイヤルしたパソコン自体のアドレスになります。ですから、通常はダイヤルアップの度に毎回違うIPアドレスが与えられます。

しかし、ルータ接続の場合はやや事情が違います。パソコンにはあらかじめ固定のIPアドレスを振っておきます(仮に「192.168.1.2」としましょう)。このアドレスはユニークなものである必要はなく、どこかで同じアドレスが使われていてもかまいません(実際にはローカルアドレスとして予約されているアドレスを付けます)。パソコンがインターネットに要求を出すとその要求はルータに送られ、ルータはプロバイダにダイヤルします。そして他と重複しないIPアドレスを一つ借り受けます。パソコンから直接ダイヤルアップする場合と異なり、IP借り受けはルータが行いますので、パソコンはその借りたアドレスを知る必要がありません。

仮にその借り受けたアドレスが「210.154.11.189」だったとすると、パソコンからのパケット(送信元「192.168.1.2」)はルータで「210.154.11.189」という仮面(masque)をかぶせられ、「210.154.11.189」から送信されたものとしてインターネットへ出ていきます。逆に外から来る「210.154.11.189」宛のパケットはルータに到着して仮面をはがされ、パケットを要求したアドレス「192.168.1.2」に返されます。仮に別のパソコン(例えば「192.168.1.3」)からパケットが出ても、ルータはやはり同じ「210.154.11.189」の仮面をかぶせます。インターネット側から見ると、どのパソコンから出たパケットも、見かけ上は一つの「210.154.11.189」というアドレスから発しているように見えます。そしてそれに答えて「210.154.11.189」にパケットを返します。受け取ったルータは仮面をはがし、パソコンごとに正しく振り分けます。これが「IP masquerade」の動作のあらましです。

ルータがアドレスを一つ借り受ける...LAN内のパソコンはその一つのアドレスをみんなで共同して使う...外向きのパケットはルータが見知し、自動的に仮面をかぶせてインターネットに出してくれる...
私の頭の中で、インターネットの解説書に出てくる、あの蜘蛛の巣のような図形が広がり始めました。「そうか、考えてみると、パソコンがインターネットに接続されているというより、うちのEthernetがインターネットに接続されている、と言う状態なんだな。」

じゃぁ、家の中にサーバがあってもいいんじゃん。

Macintosh用のWWWサーバ「MacHTTP」というプログラムについて、書籍などでその名前だけは知っていました。早速ダウンロードし、Macintosh LC475で走らせました。そして隣にある使い慣れないWindows95でNetscapeを起動し、Macintoshに振ってあったIPアドレスを入れてみました。

http://192.168.10.1

スルッ、とスマートにMacintosh内のWebページが表示されました。そのページ内のリンクをクリックすると、ルータのランプがチカチカしてプロバイダにダイヤルし、遠くのページが表示されました。「こりぁ、当初思っていたより便利だぞ!」単なるTAの代わりに買ったルータがこの日から「パケットの宛先を見て送り先を振り分ける」という本来の「router」として認識されたのです。「宛先がこのアドレスなら勤務先の会社へのダイヤルアップ」「この宛先なら別のプロバイダへダイヤルアップ」と、送り先パケットによって適切なダイヤル先を選ぶようにルータの設定を次々に増やしていきました。

今で言う「イントラネット」の原理ですね。今考えれば「何をあたりまえのことを」と笑っちゃいますが、当時は感動したものです。さて、MacHTTPでローカルなホームページを表示することができ、さらにそこから透過的にインターネットに出ていけることはわかりました。ただMacintosh LC475はサーバとしてはやや力不足でしたし、第一、サーバを動かしたままだと普段の使用に支障が出ます。「でも家の中にもサーバがあったら色々便利だよなぁ」。

その時、あのW氏が自宅でUNIXを動かしていることを思い出したのです...


いよいよ我が家でUNIX

自分の家のネットワークも東京の会社のネットワークも地球の裏側のネットワークも、透過的に同じレベルで考えることができる、これこそがインターネットのすばらしさだ、と確信した私は、さらに貪欲に情報を収集しました。幸いルータの導入でインターネットへの接続効率が大きく改善されたので、様々なWebページを訪れ、様々なソフトウェアをダウンロードし、様々な試みを行いながら多くのことを学びました。

機は熟し、いよいよ自宅でUNIXを使ってみよう、ということを具体的に考えるようになりました。MS-DOSで使用していたPC9801BXにハードディスクを増設し、そこにUNIXを入れてみよう、というわけです。狙っているのは98への移植が進んでいるという噂のFreeBSDです。情報を得るために書店に行き、FreeBSDのインストール用の参考書を一冊購入しました。その本の裏表紙にはCD-ROMが引っ付いています。パソコン関連書籍に慣れていた私は、よく見もせずに、あぁ、デモ版のソフトが入ったCDだろう、などと気にも留めずに購入したのでした。そしてその本を読み始めてすぐに、私はある事実を知って愕然としました。

なんとFreeBSDは無料のフリーソフトウェアだったのです。

Windows95を購入したときには、以外に安いもんだなぁと感じましたが、FreeBSDはなんとタダで、商品ですらなく、フリーソフトだったのでした。私は情けないことに、この時点になってやっとFreeBSDの名前の由来に気がついたのでした。裏表紙に引っ付いているCD-ROMは、デモ版でもなんでもなく、実に本物のFreeBSDそのものだったのです。

オペレーティングシステムが、フリーソフトウェア。そこには何か、商用ソフトと決定的に異なる、私にとって未知の哲学が流れているように感じられました。持っていた参考書を捨てるように脇に置き、突き動かされるようにブラウザを起動して検索Webページを開き、検索フィールドに「FreeBSD」の文字を打ち込みました...

市販ソフトの場合、それを購入した人たちがパソコン通信などで互いに情報交換することはあります。しかし、フリーソフトとなると話は逆です。オンライン世界にある情報こそ、オリジナルの本物の情報であり、書籍はあくまで二次的なものにすぎない、ということになるからです。そしてやっと、FreeBSDの公式のWebページにたどりつきました。日本語のページもあることがわかりました。Webページを読み進む中で

などを知りました。

当時、FreeBSD(98)のバージョンは2.1.5でした。しかしPC/AT互換機用のFreeBSDは2.1.7の時代に入っていました。参考書についていたCD-ROMは2.1.6です。FreeBSD(98)のインストールガイドを参考にしてインストール用のブートフロッピーは作成してみたものの、バージョンがずれているのでそのまますんなりとはインストールできません。また、2.1.5のCD-ROMを今から入手するのは絶望的でした。そこで、えーい面倒だ、とばかりにFTPインストールにトライすることにしました。FreeBSDの全てをインターネットサイトからダウンロードしてインストールする方法です。 このFTPインストールは結果的に難なく成功したのですが、その勝因は、

だったと思います。

(もちろんその前提に、FreeBSD(98)移植チームの方々をはじめFreeBSDプロジェクトに関わる多くの方々のお力があることは言うまでもありません)

FTPインストールは、やってみるとなかなか感動的なものです。インストールに必要なのは、先ほどちょっと述べましたが、たった一枚のフロッピーディスク(ブートフロッピー)です。FTPインストールの場合、OSの全てをインターネット経由で入手するので、ソフトウェアのインストールには付き物のCD-ROMとか膨大な枚数のフロッピーディスクなどは必要有りません。そしてそのブートフロッピーも、ディスクイメージをFTPソフトによりダウンロードします。つまり、最初は手元には何もないところから始まるわけです。

インストールの方法の選択肢から「FTP」を選ぶと、接続先のFTPサイトのリストが現れ、その中からネットワーク的に近いところを選択します。その次に、デフォルトルートやネームサーバの設定を行います。私の場合、デフォルトルートはルータのアドレス「192.168.10.4」を指定することになります。ネームサーバはプロバイダのネームサーバのアドレスを指定すればOKです。それらを指定し終えたらインストール実行。すると、ブートフロッピー内の小さなプログラムの要求によりパケットがルータに送られ、ルータはプロバイダにダイヤルアップして、目的のFTPサイトに接続されます。そしてFreeBSD一式をダウンロードし、ハードディスクの的確な場所にインストールしてくれます。この間、全自動。FreeBSDのインストーラは何と優れていることでしょう。

OSまるごとですからダウンロードは数時間かかりますが、意外なほどあっけなくインストールができてしまいました。

インストールが成功した後、W氏より98用のFreeBSDのCD-ROMが存在することを教えてもらいましたが、後悔はまったくありませんでした。FTPインストールを実際に体験してみて、これこそが本来のFreeBSDのインストール法だ、とさえ思っています。(と言ったからって、FTPインストールを薦めてるわけではありません。CD-ROMからインストールできるならCD-ROMを使うべきです)

こうして、PC9801BXに無事FreeBSDがインストールされました。

最初に

login:

と表示されたとき、それはとても無表情でしたが、心の中で熱く感動したのをよく覚えています。

こうして、私の家にUNIXがやって来ました。私にとっては何度目かの、「新たなOSとの出会い」です。プロバイダへアクセスして「3. シェル(shell)」を選ぶことにより、ある程度UNIXのコマンドを使用することはありましたが、それはあくまで利用者としての立場でのUNIXであり、制限も多く、できることは限られていました。今度は自宅の、私の目の前のパソコンにUNIXがインストールされたわけです。さぁこれで思う存分UNIXを習得できるぞ、と軽い気持ちで意気揚々として望んだのですが...
その考えが甘かったことをすぐに思い知らされました。Windows95のような親切、MacOSのような親しみ、MS-DOSのような生真面目さ...
UNIXにはそれらが全くなく、ただひたすら寡黙でした。UNIXは自分からは何も教えてくれません。自分からは何も求めて来ません。

そうか、こちらから要求しないと何もしてくれないんだな。

この、コンピュータを使う上で至極あたりまえのこと、そして忘れかけていた懐かしい感覚を、UNIXに触れることで久しぶりに再認識させられることになるのでした。



<コラム> 「うちのLAN」について

この拙文「うちのLAN」は、初章「はじめに」にも書いた通り、もともとは「我が家の環境のアップグレード作業をそのままレポートする」つもりでした。例えば以下のような文体の文章を考えていました。


まず/etc/ttysにシリアルコンソールを登録しておく

ttyd0   "/usr/libexec/getty ppp.38400"  dialup  on

これにより、ttyd0にダイヤルアップが来ると、
ppp.38400というラベルでgettyが呼ばれる。

そして、/etc/gettytabには

ppp.38400|PPP-38400-baud:\
        :np:sp#38400:lo=/usr/local/bin/ppplogin:

を記述。loというのは最初に起動するプログラムのこと。
そして、それを作成(/usr/local/bin/ppplogin)。
ちなみに私が作成したものを表示してみると
% cat /usr/local/bin/ppplogin
#!/bin/sh
/usr/sbin/ppp -direct ppp

もちろん、このppploginは chmod +x が必要。

このような、やや難解だけど、しかしある種の人には大変有用なもの、という想定だったのです。で、ずいぶん昔にやった作業については細かいことは忘れてしまっているので、その部分は概念的な説明にとどめよう、という方針でこのシリーズを書き始めました。「いよいよ我が家でUNIX」までの文章はそのつもりで書いてきたわけです。

現在の私の家ではFreeBSDが二台稼働しており、インターネットには専用線で接続されています。つまり、「いよいよ我が家でUNIX」に書かれているのは、まだまだずいぶんと前のことなわけです。それ以降も現在に至る細かい作業はほとんど記録していませんし、忘れちゃってますので、まだまだ多くの「概念的な説明」をしなければなりません。

ところが、文章を書き進め、「いよいよ我が家でUNIX」まで書いたところで、ちょっと私の心境に変化がありました。むしろ、現在の形態(文体)でこのままこのシリーズを続ける方が良い(あるいは面白い)のではないか、と思い始めたのです。

冷静に考えてみれば、セットアップの具体的な方法を解説したWebページは数多くあります。その上、私は、上記の四角内の記述を見てもわかるとおり、いわゆる取扱説明書的な文章は下手です。私は「照明はコンピュータに通底している」などとエラソウなことを某雑誌で発言しましたし、そういう性格に期待してこのページに来ている方もいらっしゃるでしょうから、どうせならより演劇的に、多少の創作も混ぜておもしろおかしくLAN構築の経緯のドキュメンタリーを作ってみよう、と思うようになったのです。そんなわけで、以下の章でもこのシリーズは、「コンピュータに詳しくない人でもなんとなくわかる(あるいは感じ取れる)」という雰囲気を理想として書き進めようと思います。

「いよいよ我が家でUNIX」をアップしてから以下の章を書くまでにちょっと時間があいたのは、実は上記のような迷いがあったからなのでした。



Andardstay Inputway

話はずっとさかのぼって、私が初めてMS-DOSに触れたときのこと。最初に入力したMS-DOSコマンドはご多分に漏れずDIRでした。

A:\>DIR

と打つと、ファイルの一覧が画面に表示されます。画面のことを標準出力と呼ぶことも知りました。次にCOPYというコマンドを覚えました。「COPY file1 file2」と打つと、file1の複製としてfile2ができます。TYPEというのも比較的初期に覚えました。「TYPE file1」と打つとfile1の内容が画面に表示されます。こんな調子でDEL、CD、MOREなど、MS-DOSのコマンドを色々覚えました。キーボードのことを標準入力と呼ぶことも知りました。

それらのコマンドに対する当時の感想を正直に表現するなら、「それで?」っていう感じでした。確かに、短いテキストファイルを作ったり、それをディレクトリに分類したり、それを保存するためのディスクをフォーマットしたり、あるいはそれらの結果を画面に表示したり、ということはできます。あるいは、リダイレクトというのを使って、画面に表示されるべきものをファイルに保存する、なんていうこともできます。でもMS-DOSコマンドはどれも結局のところ、

ファイルをあっちへやったりこっちへやったりするだけで、
一足す一は?
の答えも出せないじゃん。

というのがその時の正直な感想でした。計算や集計をしたり、文章を整形して印刷したり、データを分類整理したりということがやりたかったら、別途にプロが作成したアプリケーションをインストールしないとできない、というのが正直なところでした。


さて話を現在に戻しましょう。私が初めて入力したUNIXコマンドは、これまたご多分に漏れずlsでした。

% ls

と打つとファイルの一覧が画面に表示されます。そして、MS-DOSの時と同様に、cp、cat、rm、cd、moreといった具合に、まずはMS-DOSと対比させながらコマンドを覚えていきました。さすがにUNIXはMS-DOSよりはコマンドも多く、「一足す一は?」を答えられるコマンド(bcなど)もありましたが、総合的に思った感想はやっぱり「それで?」でした。

MS-DOSの時と違って楽しかったのは、ゲームがインストールされていたことでした。FreeBSDのインストーラで「全てインストール」を選択すると簡単なゲームが自動的にインストールされるのです。「rain」や「worms」といったスクリーンセーバー的なものや、プログラミングの教科書に出てきそうな「fish」「snake」などの簡単なゲーム、さらには「tetris」なんていう高度なものも入ってたりして、暇つぶしになります。
そのゲームディレクトリの中に、「pig」というプログラムがありました。これはなんだろう、と何の気なしに

% pig

と入力してみました。何も起きません。何も起きない画面に向かって「a」と打ってみました。すると「away」という表示が出ました。次に「abc」と打ってみると「abcway」と応えます。「dog」と打ってみました。すると今度は「ogday」という応え。どうやら、入力した文字列に対して何らかの規則に基づいた変換をし、その結果を表示しているようです。

% pig
a
away
abc
abcway
dog
ogday

何はともあれ、まず pigのオンラインマニュアルを見てみることにしました。

% man pig

すると、



PIG(6)                     FreeBSD Reference Manual                     PIG(6)

NAME
     pig - eformatray inputway asway Igpay Atinlay

SYNOPSIS
     pig

DESCRIPTION
     Ethay igpay utilityway eadsray ethay andardstay inputway andway iteswray
     itway outway otay andardstay outputway inway Igpay Atinlay.

     Usefulway orfay eneratinggay onthlymay eportsray.


なんじゃこりゃ? NAME、SYNOPSIS、DESCRIPTIONというのはどのマニュアルにもあるけど、その内容に書いてあるのはいったい何? 何語? 全部の単語が「y」で終わってるし... :-(

困り果てて、アメリカに留学した経験のある女房にこの謎の文章を見せてみました。すると「あ! ピッグラテンでしょ。」との答え。どうやら、アメリカの子供が遊びで使う暗号アルゴリズムのことだということがわかりました。教わってみれば非常に簡単な変換規則です。上記の文を解読したものを下記に書いておきますので、どうぞご自分で変換規則を突き止めてみて下さい。(C言語のわかる方はこちらへどうぞ



NAME
     pig - reformat input as Pig Latin

SYNOPSIS
     pig

DESCRIPTION
     The pig utility reads the standard input and writes
     it out to standard output in Pig Latin.

     Useful for generating monthly reports.



さて、いきなり私的な話になって恐縮ですが、pigの謎の解明に協力してくれた女房が、ちょっと離れた地方へ一ヶ月ほど滞在することになりました。その滞在先は、たまたま電話よりもFAXの方が連絡をとりやすい所でした。そこで、滞在半ばの時期に、手紙をFAXで送ってやろうと思い立ちました。しかし、FAXを送るとなると誰に見られるかわかりません。そこで文章を英語にしてピッグラテンで暗号化して送ることを思いつきました。英文の手紙を作成し、とりあえず「tegami.txt」という名前で保存しました。さて、これをピッグラテン形式に暗号化するのには、どうしよう。まずは例の「pig」を使えないだろうかと思い、久しぶりに「pig」を起動してみました。「hello」と打てば「ellohay」と返してきます。「hello world」と打つと「ellohay orldway」と返してきます。

% pig
hello
ellohay
hello world
ellohay orldway

まてよ、これって、キーボードで打ったものをpigが解釈して、結果を画面に返してくる、っていうことだよな...

pigのマニュアルに書かれていたことが頭の中によみがえりました。

... reads the standard input and writes it out to standard output ...

キーボードが標準入力で、画面が標準出力...たしか「パイプ」っていうのは、標準出力と標準入力をつなぐもので...「リダイレクション」っていうのは....そうか、わかったぞ! 次の瞬間、私の指は目的の結果を得るための最良のコマンド(と言っても良いでしょう)を打ち込んでいました。

% cat tegami.txt | pig > tegami-pig.txt

新しく作成されたファイル「tegami-pig.txt」を見てみると、見事に原文がピッグラテンに変換されていました。それをワープロにペーストして印刷し、FAXで送信する間、私の頭の中では、UNIXのコマンドで標準入力を受け取れるものにはどんなものがあったかを思い出していました。cat、more、grep、head、tail、そして、sed、awk、perl、さらには telnet、ftp。数え上げたらきりがありません。UNIXは、かつて覚えたMS-DOSに比べ、標準入力を受け取ることのできるコマンドがとてもたくさんあります。そして、UNIXは標準入力と標準出力を、ディスクに保存された普通のファイルと区別無く位置づけています。

画面に表示されるべき結果をファイルに書き出す、あるいはパイプでコマンドに渡す。処理したい原稿をファイルに書いておいて、リダイレクトでコマンドに渡す...標準入力と標準出力を縦横に組み合わせれば、なんと無限の可能性が開けてくることでしょう。

何よりも、私は単純に、UNIXのコマンドでピッグラテンの作成ができたことがうれしかったのです。テキストデータの加工というごく単純な作業でも、それが実生活でぴったり使える瞬間にたまたま居合わせることができた、それがとても感動的だったわけです。

こうして私は、最も遠回りな、しかし最も楽しい過程を経て、UNIXの基本である、全てのデバイスをファイルとして扱うという考え方を理解したのでした。


その後はさらにUNIXの可能性に心おどらせ、テキストデータ、標準入力、標準出力、パイプ、リダイレクションなどをキーワードに勉強を進めて、UNIXの良さが少しずつわかるようになって行ったのでした。

ある日、私はぼんやりと、そういえばホームページってテキストデータなんだよなぁ、と考えておりました......



アクセスカウンター

自宅にUNIXを置いて何をやるか、と言えば、やっぱりWWWサーバはやりたい、というケースも多いことでしょう。私もそうでした。FreeBSDでは、packages、portsといった形で様々なアプリケーションが配布されており、WWWサーバも例外ではありません。私も早速、ApacheというWWWサーバをインストールしてみることにしました。packages、portsによるインストールは実に簡単で、すぐにWWWサーバを動かすことができました(packagesやportsに関しての詳しい説明はここではしません。FreeBSDのWebページなどを参照して下さい)。
WWWが動いたと言っても、インターネットに接続するにはプロバイダにダイヤルアップしなければならない身分でしたから、そのWWWサーバに置いたページを一般に公開することはできません。あくまでLANの中での使用になります。公開はしなくても、LAN内にWWWサーバがあるのは意外と便利なもので、例えばブックマークのページのようなものをLAN内のWWWサーバに置いておけば、使用するパソコンやブラウザに全く依存せずにLAN内の全てのパソコンで共用できるブックマークが構築できます。

しかし、LAN内(ローカル)にサーバを置く一番のメリットは、「自由」な環境が得られることでしょう(FreeBSDのFreeという言葉には、無料という意味の他に、自由という意味も込められているそうです−−ここで使っている意味とは違うと思いますが(^^;)。例えば、今ご覧になっている私のホームページの表紙には、アクセスカウンターがありますが、最初にアクセスカウンターを付けた当時は、カウントの動作原理などもよくわからず、失敗が怖くて、ただやみくもにAizawa Toshiyukiさんのページに書かれた通りに設定しておりました。しかし、ローカルにサーバを置いてからは、それこそ何でもやり放題です。SSIだろうとCGIだろうと、納得のいくまでローカルサーバで研究し、何回でもテストを重ね、自分の好みの動作が得られてから、悠々とプロバイダのサーバにコピーしてやればいいのです。

早速、自分のページに(やみくもに)付けたアクセスカウンターについて研究してみることにしました。index.htmlのアクセスカウンターの部分には、実際には

Access counter: <!--#exec cmd="./count.sh"-->

と記述されていて、count.shには下記のようなことが書かれています(当時)。


#!/bin/sh
COUNT=./count
OLD=`cat $COUNT`
NEW=`echo $OLD + 1 | /usr/bin/bc`
echo $NEW
echo $NEW > $COUNT

一行目の「#!/bin/sh」は、解説書ではよく「おまじない」と言われているもので、この一行を書いておくと以下のスクリプトを/bin/shというプログラムで実行せよというような意味になります(たぶん)。/bin/shというのは、MS-DOSで言えばCOMMAND.COMみたいなもんです。ものすごく乱暴に例えると、
UNIXのスクリプトで「一行目に#!/bin/shを書く」というのは、MS-DOSなら「拡張子を.BATにする」ということに相当します。

二行目COUNTは変数名です。別にCOUNTでなくても、XでもYでもかまいません。右辺の./countはファイル名です。このファイルにはアクセスカウンターの数字が格納されています。すなわち、例えば今現在(2024/03/19 16:05)で言うと、カウンター値は「 200326 」であり、これはつまり./countに「 200326 」という数字が書かれている、ということを意味します。
シェルプロンプトから「cat ./count」を実行すれば、カウンタの現在値が標準出力に返されます。

% cat ./count
200326
%

三行目の「`cat $COUNT`」では、いま代入したCOUNTを使い、まさに上記のことを行っています(変数を呼び出すには「$」を使います)。そしてそれ全体が「`」で挟まれた形で書かれています。「`」で挟むと、実行結果の意味になります。つまり
OLD=`cat $COUNT` とすると、まず「cat $COUNT」すなわち「cat ./count」が実行され、その結果である「 200326 」がOLDに代入されます。

四行目の「/usr/bin/bc」というのは計算をするプログラム(電卓プログラムと考えればよい)で、標準入力から計算式を読み、結果を標準出力に返します。ここではパイプ「|」により計算式を受け取っています。パイプの前段にあるのは「echo $OLD + 1」で、結局「200326 + 1」という計算式が/usr/bin/bcに渡されることになります。その処理全体が「`」で囲まれてますから、最終的に「200326 + 1」の計算結果「 200327 」がNEWに代入されます。

そして、五行目の「echo $NEW」でNEW(= 200327 )を標準出力に出し六行目の「echo $NEW > $COUNT」で./countの中身をNEWに書き替えます。

ここで、注目すべきは五行目です。

このシェルスクリプト(count.sh)を仮にシェルプロンプトで実行すると、実行毎に1ずつ増える数字が表示されます。

% ./count.sh
200327
% ./count.sh
200328
% ./count.sh
200329
%

数字が表示されるのは、五行目の「echo $NEW」の実行結果としてです。つまり、この六行のスクリプトの中で、五行目だけが「表示」をする行なのです。言ってみれば、SSI(の #exec cmd )による表示というのは結局のところ、コマンドの標準出力がHTMLに埋め込まれてブラウザで表示されるわけです。「SSI」というと、解説書には色々と難解なことも書かれていますが、ユーザのレベルだけで考えるならば、HTMLの一部に、標準出力(ないしはそれに類するもの)を埋め込む、ということだと考えることができます。

標準入出力はUNIXの得意技。SSIを使用すればその標準出力を自由にページに張り込める...

WWWというのは今までは「HTMLファイルを表示するもの」だと思っていたけど、「標準出力が表示できる」となるとさらに大きな可能性があって...

いやむしろ、「標準出力を表示する」という方が本来的で、HTMLファイルというのはその特別なケース、と考えた方が良いのかも知れない...

私のWWWへの興味は次第にHTMLとは違う方向へ進んでいきました。サーバでプログラムを動かし、その結果をクライアントに返す、という動作がとても魅力的に見えてきたのです。アクセスカウンターは非常に小さなスクリプトでしたが、私にとってはスクリプト言語を勉強する大きなきっかけになりました。このホームページの表紙にあるAllen Mullen 氏の文字絵もSSIで表示しています。毎回違う絵が出るのは、表示する絵をランダムにプログラムで選択しているからです。

そして私の興味は、SSIよりもっと自由で、もっと大きな可能性を秘めた「CGI」へとシフトしていくことになるのです。

*     *     *

さて、賢明な読者の方には既におわかりの通り、この文章自体にもSSIが含まれています。例えば、アクセスカウンターの解説部分に出てくるセンテンス

その処理全体が「`」で囲まれてますから、最終的に「200326 + 1」の計算結果「 200327 」がNEWに代入されます。

は、実際のHTMLファイルには下記のように書かれています。

その処理全体が「`」で囲まれてますから、最終的に「<!--#include virtual="../count"--> + 1」の計算結果「 <!--#exec cmd="echo `cat ../count` + 1 | /usr/bin/bc"-->」がNEWに代入されます。

最近は、カラフルで賑やかなホームページが花盛りですが、私はむしろ、結果の見た目は地味でも、しかしその裏には楽しい技術がたくさん盛り込まれている、という方が性に合っているようです(笑)



あるトラブル、そして常時接続

こうして、自宅のFreeBSDでテストしたものを、プロバイダのサーバにアップロードする、ということをやりながら、SSI、CGI、メーリングリスト等、様々なことを楽しんでいるころのこと。

プロバイダへの接続で不具合が発生しました。当時の私の接続環境は、「ルータを買おう」でも述べたように、ルータを使用したISDN回線の接続でした。ISDNの魅力は何といっても最高128Kbpsというそのスピードにあるわけですが、ある時、プロバイダに64Kbpsでしか接続できなくなってしまったのです。症状は何とも奇怪で、ある特定の機器(私の使用していたルータ、友人の使用していたあるTA)を使用し、かつ私のアカウントで接続しようとした場合にだけ、回線が切断される、という現象でした。プロバイダと何度も連絡を取り合い、ルータのメーカーはもちろん、かのW氏をはじめ、多くの友人・知人に協力してもらいながら原因究明に努めたのですが、結局原因はわからず、その後も症状は謎の回復、再発を何回か繰り返しました。その間、プロバイダは「お客様の設定の問題」、私は「プロバイダ側の何らかの異常事態の発生」という主張を互いにゆずらず、物別れのままになりました。

そのころ、私が一ヶ月にインターネット接続に使っていたお金は、プロバイダ課金だけで軽く5桁に達していました。電話料金を合わせれば数万円です。それと時期を前後してNTTが「OCNエコノミー」という新しいサービスを開始しました。プロバイダに128Kbpsでつながらないことに苛ついていた私は、このOCNを使用して常時接続してみようか、という考えに急速に傾いて行きました。W氏に意見を聞いてみると、彼自身は既に数ヶ月前に常時接続を確立しており、なかなか良いとのことでした。

よし、いっちょやってみるか。

自宅にUNIXを置いて以来、ずっと不満に思っていたのはこちらからはインターネットの世界に飛び出してどこへでも行くことができるが、インターネット側からはこちらにアクセスすることはできない、という点でした。そしてその不満は高額な出費をして常時接続を実現しなければ解消されない、ということもわかっていました。ですから、仮に常時接続になったらどうなるかという思考実験(イメージトレーニング)は既に十分でした。

決断してからは非常に迅速でした。私の頭の中には既に常時接続体制の模型が出来上がっていたからです。

私の家のパソコンは7台を数えるまでになっていました。自分でも驚くほどのスピードで環境整備を進めていきました。

そして、ついに自分で自由に使えるドメイン、IPを入手しました。

ドメイン:letre.co.jp
IPアドレス:210.154.11.176/28

うちのLAN」はついに世界に接続されたのです。

% ping 210.154.11.178
PING 210.154.11.178 (210.154.11.178): 56 data bytes
64 bytes from 210.154.11.178: icmp_seq=0 ttl=252 time=58.974 ms
64 bytes from 210.154.11.178: icmp_seq=1 ttl=252 time=55.626 ms
64 bytes from 210.154.11.178: icmp_seq=2 ttl=252 time=55.550 ms
64 bytes from 210.154.11.178: icmp_seq=3 ttl=252 time=55.163 ms

やった! インターネット側(外の世界)から私のコンピュータに信号を送り、その返事が返された瞬間です。このときはとても感動したのを覚えています。

地球上のどこかで私宛に送信されたパケットは、インターネットを縦横に駆けめぐり、世界にたった一台しかない私のコンピュータめがけて飛んでくる...
何と感慨深いことでしょう。

こうして「letre.co.jp」ドメインはスタートしました。ホームページも自分のドメインに移動し、メールソフトに「メールを定期的にチェック」の設定をしました。そして、女房にもメールアドレスを与えてみました。

英語に堪能な女房は、あれよあれよと言う間にアメリカで運営されている趣味のメーリングリストに入会し、WWWから映画俳優のデータベースを見つけだし、イギリスに住む友人と文通を始めてしまいました。その姿は、私の知る「コンピュータの初心者」とは明らかに異なるものでした。

そしてある日女房はこんなことを言いました。
インターネットって便利だねぇ

私は あれ? と思いました。これまで私は、インターネットの良さはコンピュータの専門家や私のようなオタクにしか理解できないものだと思っていました。なのに、これまでパソコンをワープロとしてしか使っていなかった女房が見る見るうちに様々なサービスを上手に利用するようになり、挙げ句の果てに「インターネットって便利だねぇ」です。

それを見て、世の中に「インターネットは難しい」という人と「インターネットは簡単だ」という人がなぜ同じ位の数いるのか、その理由が少しずつわかりかけてきました...



これは誰のパソコンですか?

話は変わりますが、私はこのようにコンピュータに夢中になっていると同時に、演劇の照明をデザインするという仕事もしています。演劇について考えるとき、私はよく、それは人に属しているか、場所に属しているかという考え方をすることがあります。

あらゆる「もの」は、「誰のもの」という人に属する側面と、「どこのもの」という場所に属する側面を持っています。ものによって、そしてそのものへの見方によって、それは人に属したり場所に属したりします。



では、コンピュータはどうでしょうか。




そうです。パーソナルコンピュータとは、その名の通り、「人に属するもの」であり、またそうなっていくべきであると私は考えます。

* * *

私はよく、いわゆる「パソコン初心者」の方々から色々と質問を受けるケースがあります。それに応対していて気づいたのですが、パソコンを上手に使えない方たちに共通するのは、パソコンをどうしても「場所に属するもの」と考えてしまうことです。

一方、パソコンをよく使える方は、本人が意識しているかどうかは別として、確実にパソコンを「人に属するもの」としてとらえています。

では、コンピュータにおける「ネットワーク」はどうでしょうか。
ネットワークは言うまでもなく、場所に属するものです。foo.ne.jpという場所、bar.or.jpという場所、hoge.ac.jpという場所、全てそれらは特定の人ではなく、場所を示しています。

そして、それらの場所はインターネットというすばらしいシステムにより、互いに接続されています。

「場所に属するもの」としてのネットワークがあり、「人に属するもの」としてのパソコンをその中に置く。

これこそが、現代において最も有効にコンピュータを利用する方法だと思います。私の女房は、自分専用のパソコンを持ち、そして「letre.co.jp」という場所を与えられました。だからこそ、あそこまで上手にインターネットを使いこなすことができたのです。

今、このページをご覧になっているあなたも、おそらく電子メールアドレスを持っているでしょう。あなたの電子メールアドレスをもう一度見つめてみて下さい。その中の「@」以降の部分、それがインターネットにおけるあなたの「場所」です。

その場所は、
あなたの実際のいる場所とどれくらい一致していますか。
あるいは、どれくらい異なっていますか?

*

*

*

私がこうして構築してきたLAN、それは、私という人間が作ったものですが、ネットワークである以上、一つの場所としての責任を負わなければなりません。このネットワークは、たとえそれが私一人が作ったものであっても、決して、私という人に属する「私のLAN」ではなく、やはり、

うちのLAN

なのです。


ξ 
□P


長々と書きつづってきたこのシリーズ、今回で完結です。最初はドキュメンタリー的なもの、という構想だったのですが、終わってみれば、結局好き勝手に思うままを書いただけでした。実用的な内容を期待された方には大変申し訳なく思います。
でも、このシリーズが、誰かにとっての、何かを感じたり考えたりするきっかけになったなら、これほどうれしいことはありません。

「うちのLAN」
おわり

HOMEへ