いきなりですが、「成果物」から見て下さい。学部3年生の「データ・モデリング」の自由課題で、O.M.さんが世界遺産に関するデータベースを作成し、さらにそれを遠山研で開発しているSuperSQLという言語を使ってWebページに変換した作品です。




皆さんがスマホやPCで日常的に目にするSNSやショッピングサイトなどは、ほとんど全てこれと同じようにデータベースから得た情報を元にWebページを生成しています。この変換は2段階、すなわちデータベースからの情報の取り出し(検索)と、得た情報をHTMLなどのメディアに変換する出版作業によって行われます。

世界遺産のサイトの「地域別のページ」に必要な情報は、標準的な検索言語SQLを使えばデータベース中の5つのテーブルから下記のようにして得ることができます。


     SELECT r.name, c.name, t.name, h.name, h.year
     FROM region r, country c, type t, heritage h, belong b
     WHERE c.region=r.id and b.country=c.id and b.heritage=h.id and h.type=t.id;


そして、得た情報を国ごと、種別ごとにまとめてWebページに変換する部分は、一般的にはRuby、PHP、Javaのようなプログラミング言語で書いたプログラムで行います。プログラマの腕の見せ所です。
一方SuperSQLを使えば、同じページをプログラミングなしに次の4行で生成できます。


     FOREACH r.id
     GENERATE HTML [r.name ! [c.name ! [t.name, [h.name, h.year]!]!]!]!
     FROM region r, country c, type t, heritage h, belong b
     WHERE c.region=r.id and b.country=c.id and b.heritage=h.id and h.type=t.id;


デモページでは、国名や遺産名をクリックすると、それぞれの国、遺産の詳細ページへのリンクとなっています。このリンクを生成するためには2行目のGENERATE句にlink関数を2つ書き加えて以下のようにすればokです。


     GENERATE HTML [r.name ! [link(c.name, ‘country.ssql’, c.id) ! 
          [t.name, [link(h.name, ‘heritage.ssql’, h.id), h.year]!]!]!]!


プログラマはこれだけ書いて、後はWebデザイナに任せれば、色やフォントなどのデザインが決まって出来上がり!もうプログラミングは必要ない?

世界遺産の例では12種類、計1284ページのWebサイトを作るのに、画面の種類ごとに全部で12個のSuperSQL質問文と、CSSスタイルシートを一つ使っています。

もうちょっと詳しく見てゆきましょう。SuperSQLはデータベースからの検索と出力媒体の生成を同時に行うデータベース出版・プレゼンテーション言語なのですが、出版の際にはレイアウトを、角カッコのペアで表すグルーピングと、連結方向(横、縦、奥行)の指定で定義します。2次元なら横結合をカンマ (,)、縦結合を感嘆符 (!) で表します。ここでグルーピングだけに着目すると、たとえば国名だけならば [国名] の一通りしかありませんが、国名、遺産名の2項目だと、


[国名, 遺産名]  [国名, [遺産名]]  [[国名], 遺産名]  [国名], [遺産名]


の4通りのバリエーションが可能です。右端の例では、国名のリストと遺産名のリストを並べて表示しますが、どの遺産がどの国に属するかはわからなくなります。国名、種別、遺産名のように3項目ならば22通り、4項目なら146通り、5項目で1,082通り、6項目だと計算上は8,609通りにもなります。さらに結合方向の指定も加わるので極めて多くのレイアウトの指定ができることが分かります。SuperSQLではこれらの違いの表現はカッコのつけ方と結合子だけで制御するので色々と試行錯誤もできますが、Javaなどのプログラミングでこれらを表現し分けたり、表現を変更したりするには大きな手間がかかります。

遠山研究室ではSuperSQLの出力媒体としてWeb (HTML) ばかりでなく、時間軸を加えて動画を生成したり、Unityを媒体として3次元VRを生成することなどにもチャレンジしています。

宣言的プログラミング


SuperSQLはプログラミングを全く不要にするのではなく、宣言的とか、非手続き的と呼ばれる種類のプログラミングということができます。SQLは宣言的プログラミング言語の代表格の一つで、データベース検索という目的に特化しています。SuperSQLは、それを更にメディア生成・出版まで機能拡張しようとするものです。

親子丼を作るとしましょう。SQLはちょうどスーパーマーケットのようなもので、「鶏肉、玉子、ネギ」、などと宣言すれば材料が揃いますが、それから先の調理には手続きが必要です。SuperSQLを頼めば何でも作ってくれるレストランとして、


乗せる(玉子でとじる(鶏肉, ネギ), ご飯)


のように宣言(注文)することで親子丼が出来あがるようなものと言えます。

ナビゲーションの始まり