「日本語でプログラムを書く」というテーマは、過去に多くの先人達が挑戦してきたものである。しかしながら、現在に至るまで、一般に普及することはなかった。普及していない理由はさまざま考えられようが、「多くの技術者は日本語でプログラミングすることに不安」なのではないか、という理由があると思われる。特に、一般的に「日本語という言語は曖昧である」と思われていることが、「プログラムを日本語で記述する」という行為を不安にさせるのではないだろうか。
フランス語という言語は、論理的な言語だそうだ。筆者はフランス語を学んではいないが、「明晰ならざればフランス語にあらず」というフレーズを聞いたことがある。しかし、この言葉は「フランス語=明晰」という事実ではなく「フランス語は明晰でなくてはならない」というポリシーを示しているように聞こえる。どんな言語であっても、人間が使うのだから、すべてに白黒をつけられるわけがなく、いかようにでも曖昧にできるはずだ、というのが根拠である。
さて、「一般的にいって日本語は曖昧だから」という理由で、日本語プログラミングに懐疑的な向きに対して、最近よく用いる説得例がある。それは、「法律の条文はシステムを明確に記述している」というものである。我が国の法律は、当然日本語で記述されている。そして、この記述された法律をもとに、日本の司法というシステムは機能している。
筆者は、フランス語同様、法律も専門に学んだわけではないが、最近、ある事情から民法・商法をながめる機会があった。その条文を読み、「法律はプログラムみたいなものだな」という感想を持ち、なおかつ、「日本の民法・商法はもしかしたらオブジェクト指向で作られているのでは」、と考えるようになった。
筆者が法律の条文を読んだきっかけは、97年の暮れに、自分で会社を設立してみたことである。日本には、商法で規定されている会社が3種類(合名会社、合資会社、株式会社)と、有限会社法で規定されている会社が1種類(有限会社)がある。このうち、株式会社と有限会社がもっとも多いのだが、設立には一定額以上の(有限で300万)資本金が必要などと、簡単に設立できるものではない。しかし、合名会社と合資会社については、このような資本金の規定が一切なく、1円以上の資本金があれば設立できる。このような手軽さから、「合資会社」を設立した。
この合資会社は、最近のベンチャーブームで、手軽に設立できる会社として、多少知る人も多くなったようだ。しかし、設立について解説してある書籍も少なく、実際の運営の方法となると、よく分からないことが多かったのである。ならば、と、学部1年の時に購入した「六法全書」をひも解くことにした。
さて、この時読んだのは、民法と商法である。民法は、明治39年4月27日、商法は明治39年3月9日に施行されたもので、どちらも旧仮名遣いのままだ。この中で、それぞれの「会社」というものがどのように定義されているか見てみたい。
<合資会社クラス>
商147
合資会社には本章に別段の定ある場合を除くの外合名会社に関する規定を準用す
合資会社について調べると、まず、この条文にあたる。これは、「合資会社は合名会社を継承」することと意味的に等しい。
<合名会社クラス>
商62
合名会社を設立するには定款を作ることを要す
合名会社の定義の先頭は、定款についての記述である。定款には、商号(社名)や、会社の目的などが記される。ここで、定款というクラスを導入すると、この条文は、合名会社と定款との関連をしめす。または、定款は合名会社の属性とみることもできる。
<会社クラス>
商53
会社は合名会社、合資会社及株式会社の三種とす
ここは、合名会社、合資会社、株式会社の親クラスとしての「会社クラス」を定義していると考えられる。
<法人>
商54
会社はこれを法人とす
ここで、会社はは法人クラスを継承することを示している。ここで、「法人」については民法で規定されている。「商法」、「民法」はクラスを定義したパッケージであると考えると、以下のような継承関係になる。(矢印の先が親クラス)
商法.合資会社→商法.合名会社→商法.会社→民法.法人
以上を考えると、日本語であっても論理的な構造は記述できるし、「曖昧な日本語」が存在するのは、「日本語を曖昧に使っているから」なのである。
プログラマの多くは、日本語でプログラムを記述したことはない。その利点を述べても、「私は日本語でプログラムを書いたことがないから分からない」と、いうことになるし、利点を主張するならば、「日本語でプログラムを書く」、あるいは、「日本語でプログラムを読む」経験が必要である。
日本語プログラミング言語として、パソコンユーザを中心に普及している言語に「日本語Mind」がある。これは、リギーコーポレーション社の片桐明が開発したものである。このコンパイラそのものもMindで記述されているが、このソースコードを読ませて頂いたことがある。
日本語で書かれたソースコードには、以下のような明らかな利点があった。
l 変数名や、手続名が日本語で明確に示されている
l コードとドキュメントが分離していない
以上のようなメリットから、200ページ近いソースコードを僅か10時間程度で読み合わせることができた。
日本語Mindは逆ポーランド記法が日本語の文法と非常に似ていることに着目し開発された。しかし、
しかし、これだけでは、日本語Mindが優れた言語である理由を説明していない
JV-Talkは、「オンライン配信を目的とした小規模なアプリケーション開発のためのプログラミング言語」として設計された。アクセス社と共同で98年3月から開発をしている。この言語は、アクセス社が開発した軽量のJavaヴァーチャルマシンで動作するが、JDKでの実行も可能となっている。将来的に日本語プログラミング言語とすることを見据えて言語設計と検証のための実装を行っている段階である。
JV-Talkは、演算スタックにオブジェクトを積むことを特徴とする。このことにより、スタック上のオブジェクトへの演算の実行時チェックが可能になる。
スタックを
演算スタックに、オブジェクトを積むことができる。このことにより、スタック上の情報への
JV-Talkの文法は、
JV-Talkはスクリプトに従い、ターゲットに対してイベントを発生させるエンジンだと考えられる。画面の表示、入出力、ネットワークの機能などは、エンジン側では実装せず、ターゲット側で拡張することになる。ターゲットは、JV-Talkから受け取ったイベントをもとに必要な動作を行い、結果をJV-Talkのオブジェクトスタックに返すことになる。
JV-Talkでのイベントハンドラの定義は、「何が」「どうしたら」「どうする」の形で定義する。この場合、「何が」に相当するのは、ターゲットであるから、Whatで表わす。「どうしたら」を表わすために、キーワードWhenを導入する。
たとえば、アイコンという名前のターゲットがクリックされたときの動作を指定するときは、WhatとWhenを組み合わせて、「When(アイコン) When(クリック)」として定義する。このようにしてターゲットからJV-Talkに渡されるイベントは、ボタンなどアクションや、マウスクリック、アプレットのinit、start、stop、タイマイベントなど考えられる。
以上で、JV-Talkの概要について説明した。本節以降は、このように記述されたJV-Talkのスクリプトを、日本語として表示する方法について述べる。はじめに、助詞を補うルールを導入する。すなわち、
A) What(私) Tag(名前) Value(中鉢) Verb(です)
B) 私の名前は中鉢です
A)として記述されたスクリプトを、B)に変換するルールを設定する。これについては、現時点では未実装であるが、現在、有限オートマトンを用いることを検討している。また、スクリプトの入力は構造エディタで行うことを前提とする。すなわち、日本語で記述されたソースコードのパースは現時点では検討しない。これには、分かち書き、送り仮名、活用形の問題を避けるという消極的理由とともに、プログラム入力の新しい方法を検討したいという希望がある。
最後に、これから日本語プログラミングについて研究するうえでの指針をまとめてみたい。まず、現時点で確立されているソフトウェアテクノロジーを無視しないことは、言語の普及を考えると重要である。JV-Talkでは、オブジェクト指向と、Javaのヴァーチャルマシンの利用を行なっている。また、プログラミング言語は進化する。多くのユーザに利用されることで洗練され、発展するものであるから、 まず実用的な言語を1つ普及させることを目指すべきだろう。日本語Mindのように、ある程度普及すると、それなりに面白い「日本語プログラミング文化」のようなものが生まれる。
現在、コンピュータサイエンスは欧米の流儀で発展している。従って、生まれてくるソフトウェアは欧米中心の文化になっている。これはこれで、ソフトウェアのスタンダード化が進むことは利点かもしれないが、新たなソフトウェア文化を模索する場合、日本やアジアの各国など非西洋文化圏のものの考え方や見方がソフトウェアに反映されることが望まれる。
言葉は文化であるから、日本語でプログラムを書くことが、次のソフトウェア文化の創造のための第一歩になるかもしれない。