開発基盤部会 Blog

開発基盤部会 Blog >> 記事詳細

2016/09/21

Open 棟梁の使い方(基礎編)第5回

Tweet ThisSend to Facebook | by nishino

第 5 回 プロジェクトテンプレートを作ってみよう (後編)

こんにちは!

前回から、そのテンプレート ベースをカスタマイズして、独自のプロジェクトテンプレートを作る方法をご紹介しています。 今回はその後編です。

DBMS に合わせてテンプレートベースをカスタマイズする (SQL Server 以外の DBMS を使用する場合のみ)

テンプレートベースは、既定では SQL Server 向けのデータアクセスクラスが使われています。 もし、システム開発プロジェクトで、Oracle など、SQL Server 以外の DBMS を使用する場合、その DBMS 向けのデータアクセスクラスに切り替える必要があります。 (システム開発プロジェクトで SQL Server を使用する場合は、この手順は必要ありません。)

ここでは、PostgreSQL を使用する場合のカスタマイズ手順をみてみましょう。 (PostgreSQL 以外の DBMS をお使いの場合も、手順はほぼ同じです。 以下、PostgreSQL のところを、それぞれの DBMS に読み替えてください。)

PostgreSQL 用のデータアクセスクラスをテンプレートベースに含める

  • C:\root\programs\C#\Frameworks\Infrastructure\AllComponent.sln を開いてください。
  • AllComponent.sln に、以下のプロジェクトを追加してください。
    C:\root\programs\C#\Frameworks\Infrastructure\Public\Db\DamPstGrS\DamPstGrS.csproj
    (C:\root\programs\C#\Frameworks\Infrastructure\Public\Db フォルダには、いろいろな DBMS 用のデータアクセスクラスがあります。 今回は PostgreSQL でしたが、それ以外の DBMS をお使いの場合は、対応するプロジェクトを追加してください。)
  • PostgreSQL のデータプロバイダである Npgsql を最新バージョンに更新するため、Visual Studio のパッケージ マネージャー コンソールで以下のコマンドを実行してください。
    Update-Package -ProjectName DamPstGrS

既定で使用するデータアクセスクラスを、PostgreSQL 用のものに変更する

  • フレームワーク
    • AllComponent.sln を開いた状態で、Business プロジェクトに、DamPstGrS プロジェクトへの参照を追加してください。
    • Business プロジェクトの、[Business]-[MyFcBaseLogic.cs]を開いてください。
    • MyFcBaseLogic.cs で、以下の箇所を検索してください。
      // SQL Server / SQL Client用のDamを生成
      dam = new DamSqlSvr();
    • これを、以下のように修正します。 (なお、Dam とは Data Access Manager のことで、データアクセスクラスのことです)
      // PostgreSQL 用のDamを生成
      dam = new DamPstGrS();
    • [Ctrl]+[Shift]+[S] キーを押し、すべてのファイルを保存してください。
    • C:\root\programs\C#\3_Build_Framework.bat を実行して、ビルドが正常に完了することを確認してください。
    • ここがポイント!
      Visual Studio では、ソリューションファイルやプロジェクトファイルを含めた、すべてのファイルを保存する場合は、[Ctrl]+[S] ではなく、[Ctrl]+[Shift]+[S] キーを使用する。

  • リッチクライアント用フレームワーク (リッチクライアントを使う場合のみ)
    • C:\root\programs\C#\Frameworks\Infrastructure\RichClientComponent.sln を開いてください。
    • Business.RichClient プロジェクトに、以下の dll への参照を追加してください。
      C:\root\programs\C#\Frameworks\Infrastructure\Build\DamPstGrS.dll
    • Business.RichClient プロジェクトの、[Business]-[MyFcBaseLogic2CS.cs] を開いてください。
    • 同じように、DamSqlSvr クラスのインスタンスを生成しているところを、以下のように修正してください。
      // PostgreSQL 用のDamを生成
      dam = new DamPstGrS();
    • [Ctrl]+[Shift]+[S] キーを押し、すべてのファイルを保存してください。
    • C:\root\programs\C#\3_Build_Framework.bat を実行して、ビルドが正常に完了することを確認してください。
  • 付属ツール
    Open 棟梁には、いくつかの付属ツールがあります。 その中で、データアクセスに関係するツールは、「動的パラメタライズドクエリ・分析ツール」と「D 層自動生成ツール」の 2 つです。 これらも、最初は SQL Server 向けですので、PostgreSQL を使うようにカスタマイズしていきます。

    • D 層自動生成ツール
      • C:\root\programs\C#\Frameworks\Tools\DaoGen_Tool\DaoGen_Tool.sln を開いてください。
      • DaoGen_Tool プロジェクトに、以下の dll への参照を追加してください。
        C:\root\programs\C#\Frameworks\Infrastructure\Build\DamPstGrS.dll
        C:\root\programs\C#\Frameworks\Infrastructure\Build\Npgsql.dll
      • DaoGen_Tool プロジェクトの、DummyDaps.cs ファイルを開き、以下をコメントアウトしてください。
        /// <summary>
        /// DamPstGrSのダミー
        /// </summary>
        public class DamPstGrS { }
        
        namespace Npgsql
        {
            /// <summary>
            /// NpgsqlConnectionのダミー
            /// </summary>
            public class NpgsqlConnection
            {
                /// <summary>コンストラクタ</summary>
                /// <param name="s">接続文字列</param>
                public NpgsqlConnection(string s)
                {
                    throw new NotImplementedException("this is dummy.");
                }
        
                /// <summary>Openメソッド</summary>
                public void Open()
                {
                    throw new NotImplementedException("this is dummy.");
                }
        
                /// <summary>Closeメソッド</summary>
                public void Close()
                {
                    throw new NotImplementedException("this is dummy.");
                }
        
                /// <summary>GetSchemaメソッド</summary>
                public DataTable GetSchema(object o)
                {
                    throw new NotImplementedException("this is dummy.");
                    //return null;
                }
            }
        }
        
        namespace NpgsqlTypes
        {
            /// <summary>
            /// xxxのダミー
            /// </summary>
            public class xxx
            {
            }
        }
      • [Ctrl]+[Shift]+[S] キーを押し、すべてのファイルを保存してください。
    • 動的パラメタライズドクエリ・分析ツール
      • C:\root\programs\C#\Frameworks\Tools\DPQuery_Tool\DPQuery_Tool.sln を開いてください。
      • DPQuery_Tool プロジェクトに、以下の dll への参照を追加してください。
        C:\root\programs\C#\Frameworks\Infrastructure\Build\DamPstGrS.dll
        C:\root\programs\C#\Frameworks\Infrastructure\Build\Npgsql.dll
      • [Ctrl]+[Shift]+[S] キーを押し、すべてのファイルを保存してください。
    • ここまで終了しましたら、C:\root\programs\C#\4_Build_Framework_Tool.bat を実行して、ビルドが正常に完了することを確認してください。

サンプルアプリケーションを修正する

  • PostgreSQL データベースを作成する
    • PostgreSQL のデータベースを作成してください。(データベース名、ログインユーザー名、パスワードなどはご自由に設定してください。なお、ここでは PostgreSQL のインストール手順については省略します。ここなどの情報を参照してください。)
    • 作成したデータベースで、以下のファイルに書かれているスクリプトを実行し、テストデータを作成してください。
      C:\root\files\resource\Sql\pstgrs\TestTable.txt
    • pgAdmin III などのツールで、「shippers テーブルができており、3 件のレコードが追加されていること」を確認してください。
  • PostgreSQL 用に、D 層クラスを再生成する
    • 以下のファイルを実行し、D 層自動生成ツールを起動してください。
      C:\root\programs\C#\Frameworks\Tools\DaoGen_Tool\bin\Debug\DaoGen_Tool.exe
    • 以下のように設定して、「DBに接続しテーブル一覧を取得する」ボタンを押してください。
      • データプロバイダを選択する : PostgreSQL Npgsql
      • 接続文字列 : 作成した PostgreSQL データベースへの接続文字列
    • うまくいけば、リストボックスに「shippers」というテーブルが表示されたと思います。 「shippers」を選択して、「列情報のロード」ボタンを押してください。
    • D 層自動生成ツールでファイルを自動生成する場合、主キー情報が必要になりますが、D 層自動生成ツールでは、PostgreSQL の主キー情報をロードしてくれません。 なので、手動で主キー情報を設定する必要があります。 「shippers」テーブルを選択して、「選択したテーブルの主キーを設定」ボタンを押してください。
    • 主キー情報の設定画面で、「001 : shipperid」にチェックを入れて、「閉じる」ボタンを押してください。
    • 「▼ D層定義情報を生成する ▼」ボタンを押してください。
    • 適当なところに、データベースのスキーマ情報を CSV として保存してください。
    • 「~ Dao・SQLファイルを生成する ~」ボタンを押してください。
    • 以下のように設定して、「- Dao・SQL、DTOファイルを生成する -」ボタンを押してください。
      • D 層定義情報ファイル : 先ほど生成した CSV ファイルのパス
      • ソース テンプレート ファイル : C:\root\files\tools\DGenTemplates
      • 出力ファイル : ファイルの出力先のフォルダパス

      ここがポイント!
      先ほどの手順で、データベースのスキーマ情報を CSV で保存すると、以下の 3 つのファイルが生成される。
        <指定した名前>.csv
        <指定した名前>_DBTypeInfo.csv
        <指定した名前>_DotNetTypeInfo.csv
      本手順で指定するのは、一番最初の<指定した名前>.csvである。

      また、必要に応じてその他の設定を実施する。その他の設定内容については、Open 棟梁の利用ガイドをご覧いただきたい。

    • 既定では、SQL ファイルは以下のフォルダに格納します。 このため、生成された SQL ファイル (.sql)、XML ファイル (.xml) を、以下のフォルダに移動してください。
      C:\root\files\resource\Sql
    • ここがポイント!
      D 層自動生成ツールを使用すると、拡張子が.sqlのファイルと、.xmlのファイルが生成される。 これは、静的なクエリを .sql ファイルに記述し、動的なクエリ (条件によって変わるクエリ) を .xml ファイルに記述するためである。 ともにデータベースへのクエリを記述するためのファイルであるため、上記のフォルダに移動する。

    • C:\root\files\resource\Sql\Daoshippers_S1_Insert.sql をエディターで開き、主キーの値をシーケンスから取得するように修正してください。
      INSERT INTO 
      "shippers"
      (
          "shipperid",
          "companyname",
          "phone"
      )
      VALUES
      (
          nextval('TS_ShipperID'),
          @companyname,
          @phone
      )
    • 同様に、C:\root\files\resource\Sql\Daoshippers_D1_Insert.xml も修正してください。
      INSERT INTO 
      "shippers"
      (
        <DELCMA>
          "shipperid",
          <INSCOL name="companyname">"companyname",</INSCOL>
          <INSCOL name="phone">"phone",</INSCOL>
        </DELCMA>
      )
      VALUES
      (
        <DELCMA>
          nextval('TS_ShipperID'),
          <IF>@companyname,<ELSE></ELSE></IF>
          <IF>@phone,<ELSE></ELSE></IF>
        </DELCMA>
      )
  • サンプルアプリケーションを修正する。
    ここでは、名前を修正した「GyomuApp」を修正していきます。
    • C:\root\programs\C#\Samples\WebApp_sample\GyomuApp\GyomuApp.sln を開きます
    • [App_Code]-[sample]-[Dao] を右クリックし、[追加]-[既存の項目] を選択してください。
    • ダイアログで、先ほど作成した Daoshippers.cs を選択します。すでに同じ名前のファイルがありますので、置き換えるかどうか聞かれますので、「はい」を選択してください
    • web.config または app.config のタグの接続文字列を、PostgreSQL のものに修正してください。
    • <connectionStrings>
        <add name="ConnectionString_SQL" 
             connectionString="PostgreSQL データベースへの接続文字列"/>
      </connectionStrings>
    • 既存のサンプルとは、クラス名やプロパティ名などで、大文字小文字が異なるものがありますので、一つ一つ修正していきます。
      (例) DaoShippers -> Daoshippers
    • ここがポイント!
      PostgreSQL 用に再生成した D 層クラスでビルドすると、「DaoShippers が見つかりません」というエラーが発生する。 これは、SQL Server 用に生成された D 層クラスと、PostgreSQL 用に生成された D 層クラスでは、生成されるクラス名やプロパティ名などの大文字小文字が異なるためである。
      (例)SQL Server 用に生成された D 層クラスは「DaoShippers」という名前で生成される。
        一方、PostgreSQL 用に生成された D 層クラスは「Daoshippers」という名前で生成される。("s" が小文字になっている)
      このため、このような大文字小文字を修正する作業が必要になる。

  • サンプルアプリケーションを実行し、動作を確認する。
    • サンプルアプリケーションを実行し、以下の URL にアクセスする。
      http://localhost:9999/Aspx/Start/menu.aspx
      • 「サンプル(全層結合テスト)」-「ノーマル」リンクを押してください。
      • 「個別、共通、自動生成のDao種別を選択」で、「自動生成Dao」を選択してください。
      • 画面下部の「件数取得」などのボタンを押して、動作を確認してください。
      • pgAdmin III などのツールを使って、PostgreSQL のデータが取得・修正されていることを確認してください。
      • C:\root\files\resource\Log フォルダーのログを確認し、期待する SQL が実行されていることを確認してください。

いかがでしたか? 大変な作業ですが、テンプレートのカスタマイズにより、多種多様なアーキテクチャへ対応させることができます。

この部分は、アプリケーションの開発基盤を作るところですから、とても大事なところです。 ここでミスると、アプリケーション開発プロジェクト自体が失敗するリスクもあります。 そこで、Open 棟梁のコミュニティメンバー各社のご協力により、有償サポートも行っています。 ぜひご活用ください!

Open棟梁の有償サポートの提供開始のお知らせ - OSSコンソーシアム
https://www.osscons.jp/jovs2kdvk-537/#_537

今回はここまでとします。 次回は、Open 棟梁の付属ツールを見ていこうと思います。お楽しみに!


13:42 | 投票する | 投票数(1) | コメント(0) | お知らせ