中味が空でも動く仕組み

 私は時々疑問に思うことがあります。コンピュータのプログラミングって、本当に子供の頃からやらないと習得できないものなのかな、という疑問です。私が初めて、コンピュータやそのプログラミングに興味を持って触れたのは、二十歳前後の頃です。当時のその開発環境は、今とは比べ物にならないくらい面倒くさいものでした。その割に、今とは比べ物にならないくらい、プログラムで簡単なことしかできませんでした。
 だから、ちょっと複雑なものを作ろうとすると時間と労力がかかって、大変でした。当時、アセンブリ言語でプログラムを組める技術者になれることは、仕事で食いっぱくれがないことから、多くの技術者の目標であり夢でした。しかし、大きなシステムの開発をまかされると、その膨大な時間と労力の負担のために、過労で命を落としてしまう技術者が、本当にいました。コンピュータのシステムやプログラムを作ることは、当時はそれほど大変なことだったのです。その頃の若い私は、先輩技術者からそんな話を聞かされ、我が身の将来を愁(うれ)いていました。
 そして、その一方で、プログラムを組むのに慣れてくると、それとは別の心配をするようになりました。コンピュータのプログラミングについて、いろんな知識を吸収し、いろんなものが見えてくると、これまで習得してきた技術が面倒くさくなって、それと同時に、思考が行き詰ってくるのです。新たな技術を開発する意欲というものがなくなってきます。コンピュータに出来ることと出来ないことの境目が、はっきりわかってしまうのかもしれません。理解するのが困難だった技術・知識が、わかってしまって当たり前になってしまうと、私たちの多くは興味や意欲を失ってしまうのだと思います。
 このような障害や困難を克服できないと、誰もコンピュータ開発技術者で居続けることはできないと思います。言いわけじみているかもしれませんが、あの頃の若い私が、その職をすっかりやめてしまったのも、無理からぬことだったように思われます。
 ところが、現在このようなコンピュータの技術や知識を、ただの趣味として、若い頃とは全く違った視点でとらえなおすと、全く違ったものに感じられてきました。そうなるまでに、30年も長い年月がかかっています。けれども、それに一生気づかずに、人生を終わらせなくて良かったな、とつくづく今では私は思っています。
 今になって考えてみれば、20代の若い頃の私は、UNIXやC言語などによるワークステーションのソフトウェア開発のノウハウを学んでいました。が、その使い勝手の良さを、当時の私はよくわかっていませんでした。上にも述べたように、その仕事に行き詰まりを感じていました。一方、現在は、ウィンドウズや簡易言語などを市販の安い中古のパソコンで使えるます。そして、労働時間に追われたり、毎月支払われる給料にみあった仕事をしなければいけないというプレッシャーをかけられることもありません。先端技術の習得に10年20年かかろうとも、誰にも文句を言われません。
 すると、世間一般から見ると至って当たり前のことでも、そんな私にとっては不思議に思えてくることがありました。今回は、そんな私のいくつかの経験の中から、最近のウィンドウズOSに見られる一つの仕組みを述べてみたいと思います。
 私は、マイクロソフト社のビル・ゲイツさんのように、金持ちでも億万長者にもなれませんが、むしろ経済的には真逆なのですが、ウィンドウズが、面白いコンピュータのソフトウェアの一つであることをよく知っています。ウィンドウズに匹敵するほどの面白いコンピュータ・ソフトウェアが、残念ながら日本にはありません。それで、ウィンドウズはあまねく世間に普及しています。その操作の仕方を知らない人がいないくらいです。それなのに、その面白さがどこにあるのかをわかっていない人が多いじゃないか、と残念ながら思われます。
 まずは、中味が空っぽのテキストファイルを作ってみることから始めましょう。メモ帳というウィンドウズの簡易テキスト・エディタで、中味が空(から)のファイルを作ります。このメモ帳で新規作成のファイルを開いて、何も文字を入れずに保存をすると、中味が空の、すなわち、ファイルサイズ(つまり、ファイルの大きさ)が0バイトのファイルが作れます。
 普通、画像や動画のファイルサイズが0だと、おかしいと判断されます。そういうファイルは壊れていると考えられます。しかし、もともとメモ帳などで作ったテキストファイルは、何の役にも立ちはしませんが、中味が何もないファイルを安全かつ簡単に作ることができます。
 次に、その中味ゼロのテキストファイルを、そのメモ帳から別の名前を指定して保存してみましょう。その時に、”.TXT”というファイル名の末尾につける識別子(いわゆるファイル拡張子)というものを、”.HTA”に変えてみましょう。すると、それによってできたファイルをダブルクリックした時に、メモ帳(notepad.exe)で中味を編集できるテキストファイルとしてではなく、ウィンドウズのアプリケーションと同じようなウィンドウとして画面上に開かれます。それは、その識別子が”.EXE”であるウィンドウズ・アプリケーション実行プログラムのように操作することができます。中味が何もない真っ白なウィンドウですが、マウスで画面上のカーソル矢印を使って、そのウィンドウを移動させたり、縦横サイズを変えてみたり、クローズボタンや最小化・最大化ボタンを操作することができます。
 つまり、上に述べた操作によって何ができるかと申しますと、ウィンドウズOSのデスクトップ画面上に自前でウィンドウを簡単に作り出すことができる、ということなのです。それを仮に、『ユーザーズ・ウィンドウ(user's window)』とか『手作りウィンドウ』と名付けましょう。
 こんなことが何ですごいのか、という意見の人が多いと思います。そう思う人は、ウィンドウズ以外のOSが動いているパソコンやスマホワークステーションでそれと同じことを試してみるといいと思います。UNIXでもMacOSでもAndroidでもLinuxでも、ウィンドウズほど簡単な操作で単純な自前のウィンドウを画面上に作ることはできないと思います。ウィンドウズ以外のOSでは、GUI(グラフィッカル・ユーザ・インターフェース)操作開発ソフトウェアが必ずあって、コンパイラアセンブラ・リンカ・GUI専用ライブラリなどがソフトウェア開発技術者のために用意されています。しかし、そうした開発ツールを持たない一般の使用者(ユーザ)が簡単にそれら利用できるかというと、必ずしもそうにはなっていません。
 実は、ウィンドウズOSでは、その自前で作ったウィンドウの中でいろんなアプリケーションの動作ができるようになっています。上に登場したファイル拡張子.HTAのファイルの中に、決められた書式でスクリプトを書き込むことによって、手作りのウィンドウを手作りのプログラムで動かすことができるようになるのです。すなわち、そのウィンドウ上の画面フォーマットやGUI操作はHTML(Hyper Text Markup Language)とスタイルシート(Style Sheet)で、そのウィンドウ内部の動作はVBスクリプトやJスクリプトJavaScript)などによって動作させることができます。
 と、ここまでは、WEBの開発環境をかじったことのある今の若い人たちにとっては、当たり前すぎる常識と思われるかもしれません。問題は、最初に私が述べた、中味が空っぽのファイル拡張子.HTAのファイルについてです。(以下、このファイルのことをHTAファイルと呼びます。)
 このHTAファイルの中味は、文字テキストです。よって、その中味を記述したり変更したりするには、メモ帳(notepad.exe)が使えます。その中味が空っぽの場合にできるのは、中味が真っ白のウィンドウに(上に述べた)ウインドウに対する基本的な操作(ウィンドウの移動、サイズ変更、最大・最小化など)です。以上のことは、全て当たり前の話に思われるかもしれません。しかし、へそ曲がりで心が歪んでいる私には、これがどうしても納得がいきませんでした。
 ここで大人の常識に立ち返って考えてみましょう。HTAファイルの中味は、メモ帳で編集できる文字テキストです。そこに、スクリプトでコンピュータへの命令や要求が書かれていたならば、プログラムとして実行されます。それも不思議なのですが、仮にウィンドウズOSがそれをやっていると、ここではしておきましょう。それでは、ファイルの中味が空っぽで、スクリプトによる命令や要求が何もないのに、何でウィンドウが画面上に出て、その基本的な操作ができるのか、あるいは、誰がそれをひき受けているのか、それが大きな疑問なのです。
 それもウィンドウズOSがやっていると考えれば、答えは簡単かもしれません。ウィンドウズのバージョンアップによって、それが新たにできるようになった、と考えれば簡単です。半分はそれで正解でしょうが、もう少し考えてみれば、もう半分は(厳密には)不正解なことがわかります。
 マイクロソフト社のホームページを見てもわかりますが、HTMLアプリケーションホストというものを、マイクロソフト社のソフトウェア開発技術者が開発したことは事実です。その提供の仕方も、ウィンドウズOSのバージョンアップに合わせて機能追加しています。ただし、HTMLアプリケーションホスト本体(mshta.exe)は、他の機能追加と同じパターンでウィンドウズ本体とは別ファイルになっています。つまり、HTMLアプリケーションホストはメモ帳(notepad.exe)と同じような、ウィンドウズのアクセサリの一つとしてみることもできるわけです。
 とするならば、メモ帳(notepad.exe)がファイル拡張子.TXTのテキストファイルを開くのと同じように、HTMLアプリケーションホスト(mshta.exe)はファイル拡張子.HTAのテキストファイルを開いています。もっとも、その中味は直接画面に出さずに、代わりにアプリケーションウィンドウを画面に出して、その中味は簡易言語としてコンパイル解釈して命令実行している、とみることもできます。つまり、HTMLアプリケーションホスト(mshta.exe)が、HTAファイルの面倒をみて、ウィンドウを画面に出すことから始まる一連のプログラムの動作を取り仕切っているとも言えましょう。
 したがって、HTAファイルの中味がなければ、ウィンドウの基本操作以外は何も動作しないわけです。とすると、そのウィンドウの基本操作は、HTMLアプリケーションホスト(mshta.exe)の中にそれを受け持っているプログラムがあると推測されます。しかし、それは、私たちウィンドウズを使う側からは、絶対に見えません。コンピュータを操作する私たちの側から見ることができるのは、デスクトップ画面上に出てきた真っ白いウィンドウだけなのです。
 ここに、コンピュータのソフトウェアの技術(IT)において、絶対に見逃すことのできない重要なものの一つがあることに気づかされます。それは、『オブジェクト指向』という考え方を理解するために、大変役に立つと私は思います。
 かつて、私たち日本人のプログラマは『オブジェクト指向プログラミング』は、C言語ではこれこれこういうプログラムを組んで、と事細かに学ばされました。私たちのほとんどは、そのプログラムの複雑さや難解さのどこにメリットがあるのかを十分に知らないうちに、『オブジェクト指向プログラミング』でプログラミングしないとその生産効率が上がらないとか、プログラムの質が上がらないなどと教え込まれました。そもそも『オブジェクト指向』とは何か、何のメリットがあるのかを理解できずに、その手法やうわべの形ばかりを学んだところで、実際の役に立つはずはありませんでした。
 ところが、上に述べた中味が空っぽのHTAファイルをHTMLアプリケーションホストがどう処理していくかその振る舞いを探っていくと、『オブジェクト指向』というものの基本的な考え方が図らずもわかってきたのです。だいぶ勿体(もったい)ぶってしまいましたが、それは『隠蔽(いんぺい)』という性質です。
 世間一般に、隠蔽(いんぺい)というと、悪いイメージで使われることがほとんどです。しかし、これこそがコンピュータのソフトウェアの技術(IT)としては、どうしても欠くことのできない技術なのです。正確に言えば、隠蔽は、encapsulation(カプセル化)と英単語で綴るように、もともとは悪いイメージのものではありません。このIT技術の重要性が、まだまだ日本人技術者にはわかっていないのかな、と私には感じられました。
 ここで話をまとめましょう。ウィンドウズでは、中味が空のHTAファイルをダブルクリックすると、中に何もない真っ白のウィンドウが画面上に出ます。そのHTAファイルの中には、自身のウィンドウを作るプログラムはありません。それは、ウィンドウを画面に出すための面倒くさい複雑なプログラムが、コンピュータの中のどこかにあるからです。そのプログラムは、どこかに隠蔽されていて、私たちコンピュータを利用する側(ユーザ側)からは見えません。しかし、このことは、私たちに害を与えるどころか、有益でさえあります。いかなるコンピュータ上でも、GUIの操作を目的とするウィンドウを画面に出すためには、面倒で複雑な処理を実行するためのプログラムが必要です。そうした複雑で面倒なプログラムの内容を意識しなくても、簡単なウィンドウを画面に出せれば、その分、私たちの労力を節約することができます。その分の私たちの労力を、ウィンドウを画面に出した後の処理を考え作ることに振り分けることができます。
 このような作業の効率化の一つ一つが、コンピュータ開発技術者を疲弊させてきた過去の環境の悪さを変えていくことは明らかです。趣味とはいえ、50代なかばの私が、コンピュータのプログラムを組める背景には、こうした過去の技術や知識やプログラムを生かせる『オブジェクト指向』の考え方があってのことだと思います。
 なお、今回は、『隠蔽(いんぺい)』という性質から『オブジェクト指向』の考え方を述べてきました。この考え方には、その他に『継承』と『多様態』という性質もあります。それらにも、簡単に触れておきましょう。
 HTAファイルでスクリプトを使ってプログラムを組めるというアイデアは、HTMLアプリケーションホストで初めて出てきたものではありません。その以前のウィンドウズのバージョンでは、インターネットエクスプローラで処理されるファイル識別子.htmのテキストファイルが、HTML(Hyper Text Markup Language)あるいはスタイルシート(Style Sheet)で記述されていました。プログラムは同じではありませんが、そうした簡易言語処理をインターネットエクスプローラから引き継いでいるとみることができます。インターネットエクスプローラでも、それ自身の処理は隠蔽されていて、コンピュータを利用する私たちの側は、それを気にせずにHTMLの記述だけに労力を費やせばよいというわけです。
 同様に、HTAファイルでVBスクリプトやJスクリプトJavaScript)を使ってプログラムを組めるというアイデアも、HTMLアプリケーションホストで初めて出てきたものではありません。それ以前のウィンドウズのバージョンでは、ウィンドウズ・スクリプティング・ホスト(WSH)で処理されるファイル識別子.vbsや.jsのテキストファイルがVBスクリプトやJスクリプトJavaScript)で記述されていました。プログラムは同じではありませんが、そうした簡易言語処理をウィンドウズ・スクリプティング・ホストから引き継いでいるとみることができます。ウィンドウズ・スクリプティング・ホストでも、それ自身の処理は隠蔽されていて、コンピュータを利用する私たちの側は、それを気にせずに各スクリプトの記述だけに労力を費やせばよいというわけです。また、そのウィンドウズ・スクリプティング・ホスト自体は、MS−DOSのファイル識別子.BATのテキストファイルを一括処理(バッチ処理)するアイデアをMS−DOSから継承していて、その仕様(スペック)や形式を大幅にバージョンアップしたものとみることもできます。
 このように見てくると、『隠蔽』と『継承』という性質は、『オブジェクト指向』という考え方においては、全く関連のない別々のものというより、一つのものに同時に備わっている2つの性質と言ったほうが当てはまっているようです。現に、各プログラムの内部処理はそれぞれ使われる環境によって相当違うと思われます。けれども、それぞれのプログラム処理は隠蔽されていて、それを利用する私たちの側からは見えません。それらがわからなくても、前のバージョンから継承されている簡易言語の仕様や形式や使い方などに従って、私たちはそれを利用し続けることができるのです。
 また、『多様態』については、私はこう考えます。ほとんどのコンピュータシステムのGUIでは、文字を表示するテキストウィンドウがその基本です。さらにウィンドウズでは、マルチメディアの考え方から、写真やイラストなどの画像を扱うウィンドウや、音声や音楽を扱うウィンドウや、動画を扱うウィンドウが考えられます。このように、どんな形のデータであっても、それに合わせた各種のウィンドウでその多様性の要望に応えています。しかも、それらのウィンドウそれぞれを作るために、HTAファイルに簡易言語の記述をすることができます。これらのことは、ウィンドウズOSのウィンドウというものが、マルチメディアを扱うための多様態になれるように、デザインされてきていることを物語っていると思います。