"ジェネレーティブ・プログラミングの世界" 勉強会の参加報告

さった2月15日に名古屋で行われた "ジェネレーティブ・プログラミングの世界" 勉強会に参加してきました。マイナーな?ネタにも関わらず40名ほどの参加者があり、活発な質疑応答で大いに盛り上がりました。

発表内容の詳細は、主宰者である佐野さんのブログが詳しいので、こちらを紹介します。
第29回IT勉強宴会in名古屋 ジェネレーティブ・プログラミングの世界 - 関西IT勉強宴会のブログです

ジェネレーティブという思想が目指すもの

以下は私の理解です。多少、妄想めいたものが含まれている可能性がありますが、ご容赦ください。

大規模で、かつ長期にわたって使い続ける業務アプリケーションにこそ、ジェネレーティブつまり自動生成技術をベースとした開発スタイルが望ましい、と考えています。

f:id:ynie:20140223103931g:plain

たとえば Java アプリケーションであれば、フレームワークとして Java EE もしくは Spring が選択されることが多いでしょう。ここまでは一般的な概念として共有されています。ではここにジェネレーティブという概念をいれるとどうなるのでしょうか。

はじめにアプリケーションの対象となるドメイン(問題領域)を「構造」「振る舞い」「制約」といった観点で整理し、パターンを見つける努力をします。類似機能はどちらかのパターンに寄せて統合するとよいでしょう。そのうち、パターンはいくつかの基本部品の組み合わせから構成されることが発見されます。その組み合わせを記述するための(そのプロジェクトでしか使えないかも知れない)言語を設計し、開発スタッフが、業務パターンを高次元の抽象表現で相互に認識できるような環境を整備します。

そして、パターンを表現するための言語(これがDSL; Domain Specific Language)から、採用したフレームワーク上で稼働する Java ソースコードを生成するための自動生成エンジンを開発します。その投資レベルに応じて、おおよそアプリケーション全体の30パーセントから80パーセントが自動生成できることを目標にします。マスタメンテナンス画面をはじめとする、ある程度の画面の自動生成も可能です。

もちろん、パターンで表現できない業務処理は残ります。それは複雑な業務判断を伴う処理であったり、バッチ処理などです。複雑な業務画面もあります。これは(従来どおりの)開発方法で対応します。ただし自動生成されたソースコードを再利用することで、こちらも生産性を上げることができます。

つまりジェネレーティブプログラミングの世界では、プロジェクト内で自動生成エンジンの開発チームを保有し、それを鍛え続けることを中核に据えます。パターン化できる部分は生産性と保守性が劇的に向上します。これはプログラマ不要論ではありません。業務に精通したエンジニアは業務をDSLで表現するまで求められるようになり、かつプログラマは単純なコード作成の作業ではなく、創造性を求められる高いレベルのプログラミングスキルをもってチームに貢献することが求められます。

これは結果として、人海戦術を終わらせることにつながります。少数の開発チームが大規模なアプリケーションをハンドリングできることが、ジェネレーティブプログラミングが目指す方向性です。

ジェネレーティブプログラミングが受け入れられない理由

ジェネレーティブプログラミングでは生産性や保守性を高めるためには、要件を一定のパターンで表現できるように解釈する必要があります。実はここが難しいところです。細かい要求を全て受け入れると自動生成エンジンの開発負荷が高まります。要件のパターン化とは、ユーザー企業、特に現場でシステムを操作する方にとって、ある種の「割り切り」をしていただく、ということになります。

ジェネレーティブプログラミングに否定的な方と話をしたとき、やはりこの点が突っ込まれます。いわく、日本のSIはユーザー企業の細かいニーズ(時によっては "我が儘" とみられるようなニーズでも)を実現することが求められる。この観点では、自動生成エンジンのカバー率は下がる一方であり、結果として投資に見合うリターンは得られないというものです。

そしてもう一つの反対理由は、関わる開発者が減ったとき、単純に売上が減ってしまうというSIのビジネスモデルにあります。仮に自動生成エンジンを利用したときでも、受注金額が同じならむしろ利益率は高まるわけです。しかしユーザー企業は工数減なら受注金額を減らしたいという動機付けが働きます。これがジェネレーティブプログラミングへの投資に消極的にならざるをえない理由です。

しかし風向きは変わりつつある

そうはいっても、先だっての名古屋での勉強会では、各発表者の研究成果(またはツール)をみて、ここまで自動化できるのか、といった驚きの声が相次ぎました。地道ではありますが、理想を目指して自動生成エンジンの開発をしているエンジニアが国内にしっかり存在しています。私自身は「超高速開発コミュニティ」の活動によってもまた、同種のツールが市場に投入されていることを知っています。プレーヤーが増えれば注目度は高まるはずです。

もう一つ、Facebook で知人から面白い記事を紹介していただきました。

ガートナー、2014年以降の日本におけるエンタプライズ・アプリケーションに関する展望を発表 ~「スピード」と「割り切り」がIT部門の緊急課題に~

ガートナーがエンタープライズアプリケーションに「割り切り」という切り口をもってきたのは始めてではないでしょうか。ユーザー企業がスピードを重視すれば、割り切ってもよいと考える場面も増えてくる可能性があります。その流れが「超高速開発」に結びついたとき、開発ツールに求められるレベルは大いに変わるはずです。スピードと高品質の勝負になれば、受注価格の値下げ圧力も調整できるかも知れません。この観点でユーザー企業がメリットを見出したとき、日本でもいよいよ、ジェネレーティブという考え方が広がっていくのではないかと期待しています。