今日のウェブページは、カスケーディング・スタイルシート、XMLコード、アドホックなデータベースクエリ、JavaScript関数など、相互に作用するさまざまな要素の成果です。ごく初歩的なサイトを除けば、こうした要素がどのように相互作用し、互いを参照し、データをやり取りするかを把握し続けるのは、時間のかかる厄介な作業になり得ます。
Association for Computing Machinery(計算機学会)のプログラミング言語原理シンポジウムで発表される論文で、Douglas Ross Career Development Professor of Software TechnologyのAdam Chlipalaは、Ur/Webという新しいプログラミング言語について説明しています。この言語を使えば、開発者はウェブアプリケーションを自己完結型のプログラムとして記述できます。言語のコンパイラ(高水準の命令を機械が実行できるコードに変換するプログラム)は、対応するXMLコードとスタイルシート仕様を自動生成し、JavaScriptコードとデータベースコードを適切な場所に埋め込みます。
Ur/Webはウェブアプリケーションを記述しやすくするだけでなく、安全性も高めます。「ウェブページにカレンダーのウィジェットを置き、そのウィジェットを提供するライブラリを使うとしましょう。同じページには、広告ネットワークが提供するコードに基づく広告ボックスもあります」とChlipalaは言います。「広告ネットワークがカレンダーの動作を変更できたり、カレンダーコードの作者が広告の配信を妨げたりすることは避けたいはずです。」Ur/Webは、ページ要素間のこの種の不正なアクセスを自動的に禁止します。
型付けとスコープ
Ur/Webがセキュリティ保護と異なるウェブ技術の連携をともに実現できるのは、C++やJavaのような本格的なプログラミング言語の多くと共通する2つの性質によるものです。1つは「強い型付け」です。つまり、プログラマーがUr/Webで新たに定義する変数は、特定のデータ型に制約されます。同様に、新しい関数の仕様には、その関数が扱うデータの型と、返すデータの型を含めなければなりません。
返す値を計算する際、関数は新しい変数を作る必要があるかもしれません。(たとえば、データベース内の値の平均を返す関数なら、まず合計を計算する必要があります。)しかし、そうした変数はプログラムのほかの部分からアクセスできません。これが「変数スコープ」と呼ばれる2つ目の性質です。関数内で定義された変数のスコープ、すなわちアクセス可能な範囲を制限します。
「ユーザー名とパスワードを記録するデータベーステーブルを、ライブラリの内部状態として非公開にしたい場合があるでしょう」とChlipalaは言います。「アプリケーションのほかの部分から、パスワードを読み取ったり上書きしたりできるようにはしたくありません。ほとんどのウェブフレームワークは、この方式をサポートしていません。プログラムのすべての部分がデータベースに完全にアクセスできることを前提にしています。」
型付けはセキュリティにも役立ちます。多くのウェブ開発フレームワークでは、データベースクエリを生成する方法に問題があり、ウェブサイトにログインしようとしている人がユーザー名欄にコードを入力することで、実際にはデータベースのデータを上書きできてしまいます。Ur/Webでは、ユーザー名は独自のデータ型となり、データベースクエリとは大きく異なる方法で処理されます。
期待に応える
型付けによって、ウェブ技術間の連携も可能になります。あるJavaScriptコードがデータベースから取得したデータを処理し、その結果をXMLコードで指定された位置にあるウェブページに表示するとします。Ur/Webのプログラマーが、JavaScriptの想定とは異なる型のデータを抽出するデータベースクエリを書いた場合や、JavaScriptがXMLページの想定と異なる型の出力を生成した場合、コンパイラは食い違いを検出し、そのコードにエラーが含まれていると警告します。
明示的に型を指定していないコードにも、暗黙の整合性ルールがあることは珍しくありません。たとえば、SQLデータベース言語で、複数のテキストフィールドに含まれる数値の平均を求めるクエリを書くと、データベースサーバーは要求を処理できないと通知します。Ur/Webでウェブ技術間のデータの流れを調整できるようにするため、ChlipalaはSQL、XML、カスケーディング・スタイルシート(CSS)用に、こうしたルールを組み込んだ新しいデータ型のライブラリを作成する必要がありました。
現行版のUr/WebコンパイラはXML、JavaScript、SQLコードを生成しますが、スタイルシートは自動生成しません。しかしChlipalaによれば、「コンパイラにできることの1つは、プログラム全体を分析して、『使用される可能性のあるCSSクラスを漏れなく列挙し、それぞれのクラスが使われる可能性のある文脈を説明することです。そこから、どのプロパティを設定するとよいかが分かります。』たとえば、特定のクラスがテーブルプロパティに意味がある位置で使われることが決してないなら、それらを設定する必要はありません。」
本記事は、 MIT Newsとの協力により掲載されています。掲載は、世界経済フォーラムが見解を支持することを意味するものではありません。
Forum:Agendaの最新情報を受け取るには、 週刊ニュースレターに登録してください。
著者:Larry HardestyはMIT Newsのゲスト寄稿者です。
画像:2013年2月28日、ワルシャワで男性がコンピューターのキーボードを打つ様子を写した資料写真。最大規模のサイバー攻撃の一つにより、世界のインターネットサービスが遅くなっている。スパムコンテンツを遮断する組織が標的となり、混乱はさらに悪化する可能性があると専門家の一部は述べている。INTERNET-ATTACK/に合わせる。REUTERS/Kacper Pempel。

