LLの惑星群を楽しもう!~gihyo.jp×LL Planets presents

第1回 メタプログラミングの光と闇

この記事を読むのに必要な時間:およそ 2 分

皆さんこんにちは。

今回から数回にわたって,8月20日(土)に,東京ドームのすぐそばにある文京シビックホールで開催する軽量言語のイベントLL Planetsを紹介する記事を書いてゆくことになりました。初回となる今回は,メタプログラミングの光と闇というパネルセッションについて紹介します。

メタプログラミングとは

「メタプログラミング」という言葉自体は,比較的多くの方が耳にしたことがあるはずです。「メタ」とはもともと「高次の」「~を超えた」という意味を持つギリシャ語です。接頭辞なので名詞などの前に付けて使います。たとえば「メタ小説」と言えば小説自体を題材にした小説ですし,「メタ認知」と言えば認知という行為自体を認知するため手法を指します。ある手法や事象を入れ子のように内包してより高次にし,客観化することを「メタ化する」などと言ったりします。Webの世界でよく聞く「メタデータ」も,データをメタ化してより高次のデータとして扱うための手法ですね。

同じような文脈で「メタプログラミング」について解説すると,プログラムをメタ化する,つまり「プログラム自体を生成するプログラムを作る手法」というように説明できます。

メタプログラミングという概念自体は実はそれほど新しくありません。事実,Lispなどでは古くから使われてきた手法の1つです。

LLにおけるメタプログラミングは,要件の変化が激しく,RADな開発を要求されるWeb開発にLLが使われ始めたのを契機に,より多くの注目を集めたという経緯があるように思っていてます。この原稿を読んでいる皆さんも,近年急激に「メタプログラミング」という言葉を目にするようになったのではないでしょうか。

より具体的にメタプログラミングの活用例を見てみましょう。最も皆さんにご理解いただきやすいところでは,Ruby on RailsのO/RマッパーActiveRecordなどでメタプログラミングの手法が活用されています。たとえばActiveRecordでデータベースの特定のテーブルに接続するとき,テーブル名など最小限度の情報をクラスに与えておくと,カラム名などを動的に取得して,データベースのアクセスに必要なメソッドが自動的に展開されたりします。データベース側でカラムが追加されても,それに追従してメソッドが追加されます。

メタプログラミングの手法を使わないで似たようなことをしようとすると,カラムごとにメソッドを定義して(つまりプログラムを書いて)やらなければなりません。ActiveRecordではメタプログラミングの手法を使うことによって,プログラムを書くことと同等のことを,動的にかつ自動的に実行しているわけです。「プログラム自体を生成する」手法がいかに強力で魅力的か,感じ取っていただけたでしょうか。

メタプログラミングの手法を使うと,少量の設定チックなコードを書くだけで必要なクラスやモジュールが出来上がるので,コードが簡潔で美しくなる傾向にあります。反面,思いがけない副作用が潜り込んだりして,デバッグのしづらい不具合を埋め込む元凶になることもあります。光と闇が同居しているのがメタプログラミングなのです。セッションでは,各言語のメタプログラミングの実装手法を比較しながら,メタプログラミングとうまく付き合っていくための方法論について議論できればと思っています。

パネラー紹介

このセッションはパネルディスカッションです.パネラーとして登壇予定の方々を簡単に紹介します。

まずPerlの登壇者として牧大輔さんをお呼びしています。牧さんは『モダンPerl入門』の著者でもあり,またYAPC::Asia Tokyoを開催,運営しているJapan Perl Associationの代表理事としても活動されています。

Pythonは小泉守義さんにパネラーをお願いしています。moriyoshiさんも開発者の間では有名な方なので,説明不要かもしれませんね。前回「LTの虎」に出場した際の「殺伐Python」での活躍も記憶に新しいところです。小泉さんはPHPのコミッターでもあります。

Rubyは,「メタプログラミングRuby」の翻訳者でもある角征典さん。Ruby界はもちろんのこと,アジャイル界でも活躍される方です。

もう1人,パネラーとして山本和彦さんをお呼びしています。山本さんはEmacsのメールリーダーmewの作者としても有名ですが,今回はHaskellとメタプログラミングについてお話していただきます。型付けの違いによるメタプログラミングの手法の違いなど,言語仕様に切り込んだ展開があるのではないかと今から楽しみです。

そして司会は西村賢さん。@IT副編集長です。2008年開催のLL Futureでラリー・ウォールさんをお呼びしたとき,ディナーミーティングに同席されたときにお会いして,ぜひ一度セッションに出ていただきたいと持っていた方でした。

今年の夏は東京ドーム近くでLL漬けになろう!

筆者自身は,このセッションには「番長」として関わっています。「番長」とはLLイベント独自のスタッフの分類です。格好良く言うとプロデューサーですが,その実体は「企画から人集めまで責任を持ってやる何でも屋」です。

企画者として,当初はPerl,Python,Rubyの他にLispの登壇者を呼ぼうと思っていました。LL勢の発表に「その手法,10年前にLispで見たわ~」といちいちLispのパネラーが突っ込んでいる様を想像して1人でニヤニヤしていたのですが,やはりCommon Lispという名前は1人が背負うには大きすぎたのでしょうか。他の言語の登壇者に比べ選考が難航していました。結局,一番最初にお声がけした山本さんに登壇いただけることになりました。もともと,個人的に山本さんのお話を伺いたいと思っていて,今回の人選はベストだと思っています。

技術系のイベントに限らず,パネルディスカッションはテーマと登壇者をどう選ぶかがセッションのクオリティを決定づける重要な要素となります。安くないお金を払ってチケットを買い,大切な休日を使ってイベントに来てくれる参加者に報いるために,クオリティの高いセッションを作り上げることが番長のつとめだと思っています。

今回,メタプログラミングという興味深いテーマを取り扱うことができ,私が「ぜひこの人に」と思っていた登壇者の皆さんにご登壇いただけて,企画者自ら楽しいパネルディスカッションができるのではないかと大変楽しみにしています。

LLイベントのスタッフとして関わって8年になるのですが,日々新しいテーマを追いながら,またLL周辺で活躍する素晴らしい人達をリサーチしながら作ったプログラムの結果が出るのがイベント当日です。LLイベント当日は,裏方の番長にとっても大切な日です。

みなさんもぜひ会場に足を運んで,メタプログラミングの神髄に触れてください。また,他にも沢山楽しくためになるセッションが用意されています。2011年の夏の終わりに,年に1回のLL漬けの1日を満喫してください。

著者プロフィール

柴田淳(しばたあつし)

Webcore株式会社代表取締役。Python,Google App Engine使ったシステム構築やコンサルティングが主な業務となっています。『みんなのPython改訂版』などの著書があります。

URL:http://coreblog.org/ats/

Twitter : @ats

Google+ : https://plus.google.com/102582147551168701105

コメント

コメントの記入