オープンソースソリューションを扱う技術系企業 タイムインターメディア(以下TIM)が、「HOPプロジェクト」を開始した。HOPとは、Higher-Order Programming=高階プログラミングを略した言葉。HOPプロジェクトは、TIMの高階プログラミングにおける技術力を背景に、技術コンサルなどを行っていくプロジェクトだ。
そもそも高階プログラミングとは何なのか? まず、具体的に使用するツールは、関数型言語と呼ばれる「Haskell」や、「Gauche」、そしてGaucheを使って作られたアプリケーションサーバフレームワークの「Kahua」となる。HOPプロジェクトの推進役であるTIM 山下伸夫氏に、高階プログラミングとは何か? を聞いた。
山下伸夫氏(以下山下氏) Webサービスも何でもそうですが、スクラッチから組むことはありません。フレームワークを使うわけですが、そのフレームワークのデキの善し悪しが開発者としては問題になります。
フレームワークのそもそもの考え方は、共通で使ういろいろな部品をモジュール化して、それを組み合わせて欲しいモノを手に入れるというパターンです。技術的な観点、プログラマからの視点では、一種の部品……と言っていいのか分からないけれども、部品を組み合わせていく行為が重要になります。部品化は、ライブラリやAPIといった形でいろいろなものが存在していますが、どういう風に組み合わせられて提供されているかが、フレームワークの善し悪しだと思っています。
部品そのものが一種のプログラムの対象になっていて、開発者はそれを組み合わせて新しいプログラムを作る。つまり、プログラムを組み合わせてプログラムを作っているのです。それを称して高階プログラミングと言っています。そして、高階プログラミングに最も適した言語がHaskellやGaucheというわけです。
Lispがすでに持っていた
実は、高階プログラミングの考え方は、新しくも何ともありません。「プログラムをプログラムする」という仕組みは、Lisp(1958年に登場した言語)がすでに持っていたものです。Scheme(Lispの方言のひとつ)もそうですが、何故Lisp系言語が高階プログラミングを出来るかというと、シンタックス(プログラム構文)そのものをデータとして扱えるからです。新しい構文をプログラムの中で使って、さらに新しいプログラミングができる、>“マクロ”という機能があるのです。もともとLispやSchemeはそういうプログラミングをするのが普通で、フレームワークを作るための仕組みそのものが、言語のレベルですでに存在しているわけです。
Haskellも「関数型プログラミング言語」なので、Lispと同様高階プログラミングが可能です。普通のプログラミングでは、データをひねり回して、あるデータから新しいデータを作っていきます。しかし関数プログラミングはちょっと違っていて、データを変換する関数そのものを対象としてつなぎ合わせ、新しい関数を作るのです。あるデータに対して順番に関数を呼び出すのではなくて、一定の順番に関数を組み合わせて、最後にデータを渡すという方法です。
いわゆる“データ”を対象にしてプログラミングをするのではなく、関数に対してプログラミングするというわけです。Haskellのような、“純粋な関数型言語”は、関数の組み合わせ=プログラミングなのです。
高階プログラミングという、Haskellでは普通の考え方を使えば、フレームワークと言われるものも、新しい抽象化したライブラリになっていきます。そのほうがプログラミングとしての考え方が素直に表現できるのです。
関数型言語など、プログラムがプログラムを持つような言語を使うことで、より“高い位置”からプログラミングが出来るようになると思っています。フレームワークのような仕組みに、みんな気が付いてきていますが、ならば、そもそもフレームワーク的な使い方用に出来ていない言語を使ってフレームワークを作って利用していくよりは、高階プログラミングが可能なSchemeやHaskellを使ってやりましょう、という考え方なのです。
昔からある考え方なのに、なんで今さら「高階プログラミング」と言っているかというと、やっと「プログラムをプログラミングする」という考え方が認知されてきたからです。確かに新しい考え方ではないのですが、時代に乗ってきたかなというところで今回のプロジェクトが立ち上がっています。
次ページ「言語としての敷居は低い」に続く