ソースコード自動生成の黒歴史を塗り替えるブランコ
Excelからプログラムを作る多言語対応オープンソース
NTTデータ ビジネスブレインズ
伊賀敏樹
2007/12/25
開発現場の夢をかなえるブランコ
ソフトウェア開発をしていて、「設計書を書き終わったら、そのままソースコードができちゃったらいいな」なんて思ったことはありませんか? この記事では、まさに「設計書(Excelブック形式)からソースコードを自動生成」してしまう「blanco Framework」(Sourceforgeのページ)というツールの紹介をします。
blanco Frameworkが提供しているExcel様式に、Microsoft Office(Excel)やOpenOffice.orgを使って所定の必要項目を記入すると、Java、.NET、JavaScript、PHP、Ruby、Pythonのソースコードが自動生成できます(主にサポートしているのは、Java、C#.NETの2言語です)。皆さんのソフトウェア開発に組み込むと、プログラミング作業の一部をとても楽にすることが期待できます。
![]() |
| 図1 blanco Frameworkの概念図(設計書を書き終わったらソースコードができちゃう) |
こちらのblanco Frameworkについて、開発者メンバーの1人として紹介させていただきます。とはいえ、「ソースコード自動生成」というジャンルについて、あまりご存じない方も多いでしょうから、まずソースコード自動生成にまつわるさまざまなトピックについて紹介していきます。
ちなみに、ソースコード自動生成を行うプログラムのことを、「ソースコード・ジェネレータ」と呼ぶ場合があります。
■ ソースコード自動生成と、その黒歴史
ソースコードを自動生成するという取り組みは、ソフトウェア開発業界の中で長い歴史を持っています。そして、悲しいことにそれら大部分の取り組みはおおむね失敗に終わってしまいました。業務システム開発においては、特にその傾向が強いようです。
人によっては、ソースコード自動生成は20世紀に取り組まれて、そして「失敗」の烙印(らくいん)が押された「過去の遺物」でしょう。このような背景のため、ソフトウェア開発業界の経験が長く、それら「暗黒の歴史」を知っている人ほど、ソースコード自動生成という取り組みには懐疑的な立場を取ることが多いと思われます。
ソースコード自動生成の弱点を克服するために
暗黒の歴史を持つソースコード自動生成ですが、最近になって弱点を克服するためのポイントが整理されてきて、また克服できるようになってきています。
■ 昔よりコンピュータが速くなった
明らかに昔と一番変わっていて、そして効果が高い点がコンピュータの処理能力です。
● 黒歴史:その1「自動生成のコストが掛かり過ぎだ!」
かつてのソースコード自動生成への取り組みにおいて、ソースコード自動生成のコストと自動生成されたソースコードをコンパイルするためのコストは、とても高いものだったのです。このため、普通にコーディングしたソースコードをコンパイルするだけでも結構な時間が必要であったうえに、ソースコード自動生成や自動生成されたソースコードのコンパイルのための時間がさらに必要になってしまっていたのです。
● 昔の汎用機に比べたら
現在では、この点が劇的に改善されています。皆さんの目の前にあるパソコンは、一昔まえの汎用機よりも、単純にCPU能力やメモリ搭載量などの処理能力が圧倒的に高いのです(総合的な能力では、依然として劣っている場合があるのですけれどもね……)。
ソースコード自動生成や、自動生成されたソースコードのコンパイルを、何度でも、そして即座に実行できるようになったのです。
コラム 「貧弱なコンピュータでソースコード自動生成をしてはいけない!?」 |
| このように、ソースコード自動生成はある程度のコンピュータ処理能力を前提としています。あまり非力なマシンでソースコード自動生成に取り組むと、前述のような「黒歴史」と同じ目に遭ってしまう可能性があります。 とはいえ、コンピュータ処理能力にも当然のごとく限界があります。ソフトウェア規模が大きなシステムにおいては、全ソースコード自動生成と全コンパイル・ビルドには相当な時間が必要となります。 このような場合には、ソースコード自動生成とコンパイル・ビルドの単位を分割することにより対処する必要があります。そのような大規模システムの場合には、分割してビルドできるように当初から計画しておきましょう。 |
■ 2つのデザイン・パターンの発見
その次に重要なのが、「ジェネレーション・ギャップ」パターンや「フック・オペレーション」パターンというデザイン・パターンの発見です。
● 黒歴史:その2「生成されたソースコードと設計書が違う!」
20世紀におけるソースコード自動生成の取り組みの致命的な欠点の1つとして、自動生成されたソースコードが設計情報と乖離してしまうという問題が挙げられます。
多くのソースコード自動生成の実装は、自動生成されたソースコードを直接編集することを前提としていました。しかし、ひとたび自動生成されたソースコードを手動で編集してしまうと、ソースコード自動生成の再実行ができなくなるか、あるいは手動で編集した部分をあきらめて破棄するか、いずれかを選択する必要があったのです。揚げ句の果てに、設計情報の変更に合わせてソースコードを手動で編集する始末でした(設計情報とソースコードの二重メンテナンスは結構嫌なものです)。
このようなことから、ソースコード自動生成が生産性や保守性を上げるどころか、むしろ生産性と保守性を下げる結果につながる場合が多かったのです。特に、システム全体の中で、保守に掛かるコストの割合が高いシステムにおいては、この点が致命傷となってしまうのです。
● デザイン・パターンとオブジェクト指向の組み合わせによる解決
現在では、「ジェネレーション・ギャップ」パターンや「フック・オペレーション」パターンの発見により、この点は克服できるようになっています。これらのパターンをオブジェクト指向プログラミング言語と併用することにより、自動生成されたソースコードを直接編集することなく、自動生成されたソースコードに機能追加や機能変更ができるようになったのです(※注釈:工夫すれば非オブジェクト指向言語でも同様のことは実現できるでしょう)。
これにより、ソースコード自動生成は何度でも繰り返し実行できるようになりました。設計情報の変更のたびに、あるいはソフトウェアのビルドのたびに、ソースコード自動生成を実行することにより、設計情報と自動生成されたソースコードとは乖離しなくなったのです(参考「フレームワークをベースとした自動生成技術の登場」)。
■ ソフトウェア領域を小分けにしたソースコード自動生成
最近の潮流の1つとして、ソフトウェア領域を小分けにしてソースコード自動生成を行うという手法があります。「ソフトウェア領域」には、例えば、Strutsによる画面設計に関する部分や文字列処理に関する部分、定数、ファイル入出力、DB処理、Webサービス、バッチ処理に関する部分などがあります。
● 黒歴史:その3「すべて自動生成できたらいいのに……」
すべてのソースコードを自動生成できれば、それは素晴らしいことです。ところが、現実的にはすべてを自動生成しようとすればするほど、ソースコードの複雑度が上がり、その結果自動生成が想定していない機能の実装が難しくなってしまう場合があります。
また、すべてを自動生成するために、多くの設計情報を事前にセットしてからでないとソースコードの自動生成が実施できないという場合もあるでしょう。
このように、ソースコード自動生成の取り組みにおいて、すべてを自動生成しようと取り組めば取り組むほど、さまざまな自由度が下がり、どうもうまくいかなくなってしまう場合があるということが知られていました。
● ドメイン特化言語を使ってのソースコード自動生成が増えた
このような背景もあり、最近、ソフトウェア領域を小分けにしてソースコード自動生成を行うというアプローチが注目されています。
対象とするソフトウェア領域が小さければ小さいほど、自動生成されたソースコードの複雑度は下がり、事前にセットしなければならない設計情報も少なくなります。自動生成が想定していない機能を実装する場合には、その部分だけ自動生成を実施しないという方法も取りやすくなります。
![]() |
| 図2 ソフトウェア領域を小分けにしたソースコード自動生成(小分けにすることにより複雑度が下がる) |
このような対象のソフトウェア領域が小さいソースコード自動生成においては、ドメイン特化言語(DSL=Domain Specific Language)が利用されることが多くなってきているようです。
続いて次ページでは、設計書からソースコードを自動生成する4つのメリットや自動生成とDI/AOPの関係、さらに、blanco Frameworkならではの7つの特徴について見ていきましょう。
| 1-2-3-4 |
| INDEX 特集「Excelからプログラムを作る多言語対応オープンソース」 | ||
| Page1 | ||
| 開発現場の夢をかなえるブランコ ソースコード自動生成の弱点を克服するために コラム 「貧弱なコンピュータでソースコード自動生成をしてはいけない!?」 コラム 「設計情報とソースコードとを乖離させない工夫」 |
||
| Page2 | ||
| 設計書からソースコードを自動生成する4つのメリット コラム 「ソースコード自動生成とDI/AOP」 blanco Frameworkならではの7つの特徴 |
||
| Page3 | ||
| コラム 「有償サポートもある」 blanco Frameworkでソースコードを自動生成するために必要な環境 コラム 「Ruby on Railsとの違い」 |
||
| Page4 | ||
| blanco Frameworkのツール一覧 ソフトウェア開発改善のためのアプローチの1つとして |
||
| Java Solution全記事一覧 |
ホワイトペーパー(TechTargetジャパン)
- 調査の難しい「OutOfMemoryError」事例、5選 (2010/3/11)
Java開発者が避けて通れないメモリ不足エラーの基本的な問題切り分け方法と発生につながる事例、対処法を解説 - 究極の問題解析ツール、逆コンパイラJD-Eclipseとは (2010/3/8)
ライブラリ内で例外が発生! そのクラスのソースコードを調べたい!! 自動で逆コンパイルしてくれる無料Eclipseプラグインがあります - いまさら聞けない「Webサービス」の常識 (2010/2/26)
昨今では企業システムでも使われる「Webサービス」の概念やJava標準のJAX-WSを紹介しJBoss WSでサンプルを作成 - Android 2.1の新機能で作る、美しく燃える“待ち受け” (2010/2/24)
新しく追加された、動く壁紙「Live Wallpaper」機能のサンプル動画を表示し、構成、設定ファイル、実装の仕方を解説します
|
|
スキルアップ/キャリアアップ(JOB@IT)
スポンサーからのお知らせ
- - PR -
| 仮想環境の構築とデータ保護の特効薬?! 実績と信頼性の高いパッケージで安心運用 New! |
| 仮想環境のバックアップもこれまでどおり 「まるごと取ってまるごと戻す」簡単運用 |
| おばかアプリ選手権、第4弾開催中!! ムダにカッコよくてくだらない作品求ム! |
| 社内ファイルサーバを“クラウド”に統合 VPN直結「クラウド型ストレージ」を紹介 |
| その数、なんと400台以上! グループ内 サーバの「統合管理」によるメリットは? |
| 美人!? まあまあ? 気になる いやし系!! PV急増で「美人時計」がとった手段とは? |
| 進化を続ける富士通ストレージETERNUS DX 製品開発者の自信を裏付けるものとは何か |
| 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |
- - PR -
お勧め求人情報

**先週の人気講座ランキング**
〜Java編〜
| ◆ | 上司や部下、部署内メンバーとの情報共有 を“ガラッ”と変えるコラボツールとは? New! |
| ◆ | おばかアプリ選手権、第4弾開催中!! ムダにカッコよくてくだらない作品求ム! |
| ◆ | 社内ファイルサーバを“クラウド”に統合 VPN直結「クラウド型ストレージ」を紹介 |

| ◆ | Twitterのアカウントはなぜ突破された? メールによる新手の攻撃手法とその対策 |
| ◆ | もう仮想化のお試しフェイズは終わりだ! Hyper-V 2.0が基幹システムも仮想化 |
| ◆ | 美人!? まあまあ? 気になる いやし系!! PV急増で「美人時計」がとった手段とは? |

| ◆ | クライアント企業から求められる人材 ⇒IT技術と経営戦略を併せ持つ「戦略家」 |
| ◆ | .NET編集長が実践する「技術情報検索術」 サンプル・コードを簡単に探す“技”は? |
| ◆ | 業務効率と情報セキュリティ対策を両立! 手間なく確実に機密情報を守る方法とは? |

| ◆ | 直属上司が海外にいるのエンジニアに見る 【実例】場所に捉われないワークスタイル |
| ◆ | 進化を続ける富士通ストレージETERNUS DX 製品開発者の自信を裏付けるものとは何か |
| ◆ | 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |

| ◆ | 【CTC事例】約30の基幹システムを統合! 膨大なバッジジョブを制御した方法は? |
| ◆ | 仮想化すればコストは削減できるか? 仮想化に必要な「3つの視点」を解説する |
| ◆ | その数、なんと400台以上! グループ内 サーバの「統合管理」によるメリットは? |








