blanco Framework 画像(小) 2009/04

blancoCg

[blanco,Code,Generator,Java,C#,JavaScript,VB,PHP,Ruby,Python,Source,コードジェネレータ] blancoCgは、とても軽量なソースコード自動生成ライブラリです。 多くのプログラミング言語 (Java, C#.NET, JavaScript, VB.NET, PHP, Ruby, Python) のソースコード生成に対応しています。

広告: イマドキのIDE事情: Eclipseベースの統合翻訳環境「Benten」を使ってみよう 09/27
たげぞうさんの手による Benten 紹介記事!
インディックスページへ戻る
blanco Framework 一覧 ドキュメント Download (ダウンロード) SourceForge.jp
AntTask BatchProcess Cg CharacterGroup Commons Constants
Csv Db EclipseDistribution FixedLength JSF Log Mail Message NLpack
PDF Report ResourceBundle Service SOAP SQL StringConverter
StringGroup Struts SvnConf ValueObject
blancoCgについて

blancoCgは、とても軽量なソースコード自動生成ライブラリです。 多くのプログラミング言語 (Java, C#.NET, JavaScript, VB.NET, PHP, Ruby, Python) のソースコード生成に対応しています。

視点 自己評価 説明
対応言語 - Java, C#.NET, JavaScript, VB.NET, PHP, Ruby, Python 言語
※blancoCgそのものは Java言語からのみ利用することができます。
出現頻度 ソースコード自動生成そのものを実装したい人にのみ有益です。
ソースコード自動生成に携わる人は少数派でしょう。
適用効果 ★★★ 同一のソースコード自動生成アーキテクチャによって複数言語に対応できます。
また、blancoCgのアーキテクチャは 多言語対応が比較的容易です。
導入のしやすさ ★★ ドキュメントが整備されていません。

blanco Frameworkによって提供され、また blanco Framework の各種プロダクトから利用されています。バリューオブジェクトによるクラス定義を入力として、ソースコードを自動生成します。

blancoCgの利用例 (Java)

blancoCgのAPIは下記のような手順で呼び出します。ここでは Java言語のソースコードを自動生成する例を示します。

blancoCgのAPI呼出例 (このソースコードを実行することにより、ソースコードが自動生成されます)
        final BlancoCgObjectFactory cgFactory = BlancoCgObjectFactory
                .getInstance();

        // ソースファイルを生成します。
        final BlancoCgSourceFile cgSourceFile = cgFactory.createSourceFile(
                "myprog", "テスト用のクラス");
        cgSourceFile.getImportList().add("java.text.NumberFormat");
        // 同じパッケージのインポート試験。
        cgSourceFile.getImportList().add("myprog.MyClass2");

        // クラスを生成します。
        final BlancoCgClass cgClass = cgFactory.createClass("MyClass",
                "このクラスは、テストのためのクラスです。");
        cgSourceFile.getClassList().add(cgClass);
        cgClass.getLangDoc().getTagList().add(
                cgFactory.createLangDocTag("author", null, "blanco Framework"));
        cgClass.getExtendClassList().add(
                cgFactory.createType("java.lang.Thread"));
        cgClass.getImplementInterfaceList().add(
                cgFactory.createType("java.lang.Runnable"));

        // フィールドを生成します。
        final BlancoCgField cgField = cgFactory.createField("myField",
                "java.util.Date", "日付フィールドの試験です。");
        cgClass.getFieldList().add(cgField);
        cgField.setDefault("new Date()");

        // メソッドを生成します。
        final BlancoCgMethod cgMethod = cgFactory.createMethod("myMethod",
                "メソッドの試験です。");
        cgClass.getMethodList().add(cgMethod);

        // パラメータを追加します。
        cgMethod.getParameterList().add(
                cgFactory.createParameter("argString", "java.lang.String",
                        "文字列引数。"));
        cgMethod.getParameterList()
                .add(
                        cgFactory.createParameter("argDate", "java.util.Date",
                                "日付引数。"));
        // 戻り値を設定します。
        cgMethod.setReturn(cgFactory.createReturn("boolean", "成功ならtrue。"));

        cgMethod.getThrowList().add(
                cgFactory.createException("java.io.IOException",
                        "入出力例外が発生した場合。"));

        // アノテーションの追加。
        cgMethod.getAnnotationList().add(
                "Copyright(value=\"blanco Framework\")");
        cgMethod.setOverride(true);

        // メソッドの内容を追加します。
        final BlancoCgLine cgLine = cgFactory.createLine("int a = 0;");
        cgLine.setDescription("代入の試験です。");
        cgMethod.getLineList().add(cgLine);

        final BlancoCgTransformer cgTransformerJava = BlancoCgTransformerFactory
                .getJavaSourceTransformer();
        cgTransformerJava.transform(cgSourceFile, new File("./tmp/blanco"));

このソースコードから生成されるソースコードの例は下記のようになります。

MyClass.java (自動生成されたJavaソースコード)
/*
 * テスト用のクラス
 */
package myprog;

import java.io.IOException;
import java.text.NumberFormat;
import java.util.Date;

/**
 * このクラスは、テストのためのクラスです。
 *
 * @author blanco Framework
 */
public class MyClass extends Thread implements Runnable {
    /**
     * 日付フィールドの試験です。
     */
    private Date myField = new Date();

    /**
     * メソッドの試験です。
     *
     * @param argString 文字列引数。
     * @param argDate 日付引数。
     * @return 成功ならtrue。
     * @throws IOException 入出力例外が発生した場合。
     */
    @Override
    @Copyright(value="blanco Framework")
    public boolean myMethod(final String argString, final Date argDate) throws IOException {
        // 代入の試験です。
        int a = 0;
    }
}
※このソースコードは blancoCg (0.3.3) により自動生成されたものです。
blancoCgの利用例 (C#.NET)

blancoCgのAPIは下記のような手順で呼び出します。ここでは C#言語のソースコードを自動生成する例を示します。

blancoCgのAPI呼出例 (このソースコードを実行することにより、ソースコードが自動生成されます)
        final BlancoCgObjectFactory cgFactory = BlancoCgObjectFactory
                .getInstance();

        // ソースファイルを生成します。
        final BlancoCgSourceFile cgSourceFile = cgFactory.createSourceFile(
                "Myprog", "テスト用のクラス");
        cgSourceFile.getImportList().add("System.Text.DummyText");
        // 同じパッケージのインポート試験。
        cgSourceFile.getImportList().add("Myprog.MyClass2");

        // クラスを生成します。
        final BlancoCgClass cgClass = cgFactory.createClass("MyClass",
                "このクラスは、テストのためのクラスです。");
        cgSourceFile.getClassList().add(cgClass);
        cgClass.getLangDoc().getTagList().add(
                cgFactory.createLangDocTag("author", null, "blanco Framework"));
        cgClass.getExtendClassList().add(
                cgFactory.createType("java.lang.Thread"));
        cgClass.getImplementInterfaceList().add(
                cgFactory.createType("System.WebException"));
        cgClass.getImplementInterfaceList().add(
                cgFactory.createType("System.WebException2"));

        // フィールドを生成します。
        final BlancoCgField cgField = cgFactory.createField("myField",
                "java.util.Date", "日付フィールドの試験です。");
        cgClass.getFieldList().add(cgField);
        cgField.setDefault("new DateTime()");

        // メソッドを生成します。
        final BlancoCgMethod cgMethod = cgFactory.createMethod("MyMethod",
                "メソッドの試験です。");
        cgClass.getMethodList().add(cgMethod);

        // パラメータを追加します。
        cgMethod.getParameterList().add(
                cgFactory.createParameter("argString", "System.String",
                        "文字列引数。"));
        cgMethod.getParameterList()
                .add(
                        cgFactory.createParameter("argDate", "System.DateTime",
                                "日付引数。"));
        // 戻り値を設定します。
        cgMethod.setReturn(cgFactory.createReturn("bool", "成功ならtrue。"));

        cgMethod.getThrowList().add(
                cgFactory.createException("System.IO.IOException",
                        "入出力例外が発生した場合。"));

        // アノテーションの追加。
        cgMethod.getAnnotationList().add(
                "Copyright(value=\"blanco Framework\")");

        // メソッドの内容を追加します。
        final BlancoCgLine cgLine = cgFactory.createLine("int a = 0;");
        cgLine.setDescription("代入の試験です。");
        cgMethod.getLineList().add(cgLine);

        final BlancoCgTransformer cgTransformerCs = BlancoCgTransformerFactory
                .getCsSourceTransformer();
        cgTransformerCs.transform(cgSourceFile, new File("./tmp/blanco"));

このソースコードから生成されるソースコードの例は下記のようになります。

MyClass.cs (自動生成されたC#.NETソースコード)
// テスト用のクラス
using System;
using System.IO;
using System.Text;

using java.lang;
using java.util;

namespace Myprog
{
    /// <summary>このクラスは、テストのためのクラスです。</summary>
    public class MyClass : Thread, WebException, WebException2
    {
        /// <summary>日付フィールドの試験です。</summary>
        private Date myField = new DateTime();

        /// <summary>メソッドの試験です。</summary>
        /// <param name="argString">文字列引数。</param>
        /// <param name="argDate">日付引数。</param>
        /// <returns>成功ならtrue。</returns>
        [Copyright(value="blanco Framework")]
        public bool MyMethod(String argString, DateTime argDate)
        {
            // 代入の試験です。
            int a = 0;
        }
    }
}
※このソースコードは blancoCg (0.3.3) により自動生成されたものです。
blancoCgの利用例 (JavaScript)

blancoCgのAPIは下記のような手順で呼び出します。ここでは JavaScript言語のソースコードを自動生成する例を示します。

blancoCgのAPI呼出例 (このソースコードを実行することにより、ソースコードが自動生成されます)
        final BlancoCgObjectFactory cgFactory = BlancoCgObjectFactory
                .getInstance();

        // ソースファイルを生成します。
        final BlancoCgSourceFile cgSourceFile = cgFactory.createSourceFile(
                "Myprog", "テスト用のクラス");

        // クラスを生成します。
        final BlancoCgClass cgClass = cgFactory.createClass("MyClass",
                "このクラスは、テストのためのクラスです。");
        cgSourceFile.getClassList().add(cgClass);
        cgClass.getLangDoc().getTagList().add(
                cgFactory.createLangDocTag("author", null, "blanco Framework"));
        cgClass.getExtendClassList().add(
                cgFactory.createType("java.lang.Thread"));

        // フィールドを生成します。
        final BlancoCgField cgField = cgFactory.createField("myField",
                "number", "数値フィールドの試験です。");
        cgClass.getFieldList().add(cgField);
        cgField.setDefault("Number(1)");

        // フィールドを生成します。
        final BlancoCgField cgField2 = cgFactory.createField("myField2",
                "number", "数値フィールドの試験です。");
        cgClass.getFieldList().add(cgField2);
        cgField2.setAccess("public");
        cgField2.setDefault("Number(3)");

        // メソッドを生成します。
        final BlancoCgMethod cgMethod = cgFactory.createMethod("myMethod",
                "メソッドの試験です。");
        cgClass.getMethodList().add(cgMethod);

        cgMethod.setAccess("private");

        // パラメータを追加します。
        cgMethod.getParameterList().add(
                cgFactory.createParameter("argString", "string", "文字列引数。"));
        cgMethod.getParameterList().add(
                cgFactory.createParameter("argDate", "Date", "日付引数。"));
        // 戻り値を設定します。
        cgMethod.setReturn(cgFactory.createReturn("string", "結合後の文字列。"));

        cgMethod.getThrowList().add(
                cgFactory.createException("System.IO.IOException",
                        "入出力例外が発生した場合。"));

        // メソッドの内容を追加します。
        final BlancoCgLine cgLine = cgFactory
                .createLine("return argString + \", \" + argDate;");
        cgLine.setDescription("結合の試験です。");
        cgMethod.getLineList().add(cgLine);

        final BlancoCgTransformer cgTransformerJs = BlancoCgTransformerFactory
                .getJsSourceTransformer();
        cgTransformerJs.transform(cgSourceFile, new File("./tmp/blanco"));

このソースコードから生成されるソースコードの例は下記のようになります。

MyClass.js (自動生成されたJavaScriptソースコード)
/**
 * デフォルトコンストラクタ
 * @author blanco Framework
 * @fileoverview テスト用のクラス
 * @class このクラスは、テストのためのクラスです。
 * @constructor
 */
function MyClass() {
    /* パラメータの数、型チェックを行います。 */
    if (arguments.callee.length != arguments.length) {
        throw Error("[IllegalArgumentException]: MyClass.MyClass のパラメータは["
            + arguments.callee.length + "]個である必要があります。しかし実際には[" + arguments.length
            +  "]個のパラメータを伴って呼び出されました。");
    }

    /**
     * 数値フィールドの試験です。
     * @private
     * @type number
     */
    this.myField = Number(1);

    /**
     * 数値フィールドの試験です。
     * @type number
     */
    this.myField2 = Number(3);
};

/**
 * メソッドの試験です。
 * @addon
 * @private
 * @param {string} argString 文字列引数。
 * @param {Date} argDate 日付引数。
 * @return 結合後の文字列。
 * @type string
 * @throws IOException 入出力例外が発生した場合。
 */
MyClass.prototype.myMethod = function(/* string */ argString, /* Date */ argDate) {
    /* パラメータの数、型チェックを行います。 */
    if (arguments.callee.length != arguments.length) {
        throw Error("[IllegalArgumentException]: MyClass.myMethod のパラメータは["
            + arguments.callee.length + "]個である必要があります。しかし実際には["
            + arguments.length +  "]個のパラメータを伴って呼び出されました。");
    }
    if (typeof(argString) != "string") {
        throw Error("[IllegalArgumentException]: MyClass.myMethod の1番目のパラメータは[string]型でなくてはなりません。しかし実際には["
            + typeof(argString) + "]型が与えられました。");
    }
    if (argDate instanceof Date == false) {
        throw Error("[IllegalArgumentException]: MyClass.myMethod の2番目のパラメータは[Date]型でなくてはなりません。しかし実際には["
            + typeof(argDate) + "]型が与えられました。");
    }

    // 結合の試験です。
    return argString + ", " + argDate;
};
/* クラス[MyClass]宣言の終了。 */
※このソースコードは blancoCg (0.3.3) により自動生成されたものです。
※ホームページ掲載時に レイアウトの都合 複数箇所に手動で改行を加えてあります。
blancoCgを利用する上でのポイント

現在は ソースコードを表現するバリューオブジェクトを自動生成に複数回にわたって用いることはできません。一回のみ生成可能です。

現在、ソースコードはローカルマシンのデフォルトエンコーディングで生成しています。

blancoCgのライセンス
ダウンロード (download)

blancoCgの実行形式は、下記のページからダウンロードすることができます。

blancoCgの開発本拠地

blancoCgは SourceForge.jpを中心に開発されています。

SourceForge.jp


いがぴょんについて
Last modified: $Date: 2010/09/27 20:42:52 $