S-JIS[2021-11-03] 変更履歴

Asakusaアプリケーション開発手順メモ

Asakusa Frameworkを使ったアプリケーションを作っていく手順と構成のメモ。


概要

Asakusaアプリケーション(Asakusa Frameworkを使ったアプリケーション)を一から実装する際に、必要となる設定があるのでまとめてみた。

前提は以下のようなもの。

開発環境は、Eclipseプラグイン(Shafu)が提供されているので、Eclipseを使うのが便利。
最初の一人がAsakusaプロジェクトを作ってGitにコミットし、他の開発メンバーがGitでチェックアウトするのが良いと思う。
この場合、各開発メンバーの開発用PCにEclipseとShafuをインストールする。


実行環境の構築はまた別。
運用環境の構築


開発環境構築

Asakusa FrameworkはGradlebuild.gradle)で環境を構築できるようになっている。

しかしShafu(Eclipseプラグイン)が提供されているので、Eclipseで開発環境を構築し開発するのが便利だと思う。
(Shafuも内部ではGradleのコマンドを実行している)

それと、拙作DMDL EditorX(Eclipseプラグイン)もインストールしておいた方が断然便利。

  1. Eclipseを開発用PCにインストールする。
  2. ShafuをEclipseにインストールする。
  3. DMDL EditorXをEclipseにインストールする。

Asakusaプロジェクトの新規作成

Shafuを使って、Asakusaプロジェクト(Eclipseの新規プロジェクト)を作成する。

  1. Shafuでテンプレートを選択して新規プロジェクトを作成する。
  2. build.gradleのgroupを修正する。
  3. Eclipseのプロジェクト情報を再構築する。

Shafuを使ってAsakusaプロジェクトを作る場合、プロジェクトのテンプレートを指定する。(テンプレートからプロジェクト構成が作られる)
テンプレートは、AsakusaFWのバージョンと実行基盤によって分かれている。

AsakusaFWのバージョンは、2021年時点ではAsakusa Framework 0.10.4が最新なので、それを使うのが良いだろう。
(バージョンを後から変えるにはマイグレーション作業が必要となる場合があり、面倒)

実行基盤は、2021年時点ではSparkM3BPの二択だろう。
これは後から簡単に変えられる(追加も混在も出来る)ので、どちらもでいい。


Asakusaプロジェクトをテンプレートから作成すると、build.gradleが用意されている。
その中のgroupが、AsakusaFWでクラスを生成したときのパッケージ名になるので、これは一番最初に変えておく。
(後からパッケージ名を変えるのはかなり面倒なので)

Asakusaプロジェクト/build.gradle:

group 'com.example'

これを変更したら、Eclipseのプロジェクト情報を再構築する必要がある。


それと、個人的にはEclipseのソースコードのフォーマッターを修正したい。
インデントをスペース4個にするのと、1行が長いときに折り返す文字数(デフォルト120)を増やす。

フォーマッターはエクスポートすることが出来るので、エクスポートしたxmlファイルもGit管理下に置き、開発メンバー全員で同じフォーマッターを使用する。


Gitの初期設定

作成したAsakusaプロジェクトをGitで管理するようにする。

cd Asakusaプロジェクトのディレクトリー
git init

.gitignoreを作り、不要なファイルを除外するようにしておく。

Asakusaプロジェクト/.gitignore:

.gradle/
/bin/
build
.project
.classpath
.factorypath
.settings

.gradleは、Gradleの設定が入っているディレクトリー。それぞれの環境で再構築するので、Git管理は不要。
binは、Eclipse上でコンパイルした際のclassファイルが出力されるディレクトリー。
buildは、Asakusaアプリをビルドした結果が出力されるディレクトリー。
.project, .classpath, .factorypath, .settingsはEclipseの設定。それぞれの環境で生成しなおすので、Git管理は不要。


Asakusaプロジェクトのインポート

既にGitで管理されているAsakusaプロジェクトは、以下の手順でEclipseにインポートする。

  1. GitでAsakusaプロジェクトをチェックアウトする。
  2. ShafuでEclipseにプロジェクトをインポートする。

DMDLの作成

Asakusaアプリケーションの開発は、データモデル(クラス)を作らないと始まらない。
データモデルクラスはDMDLで生成する。

DMDLは拡張子dmdlのテキストファイルに記述する。
dmdlファイルを置く場所は「Asakusaプロジェクト/src/main/dmdl/」だが、その直下にファイルを置いていくと大量になるので、サブディレクトリーを作るべき。

Asakusaアプリの開発としてよくあるのが、RDBMSを使った既存システムをAsakusaFWに置き換えていく形だと思う。
その場合、ひとつのテーブル(やビュー)がひとつのデータモデルになるだろう。
dmdlファイル内には複数のデータモデルを書けるが、ひとつのDBスキーマをひとつのdmdlファイルにして中に複数テーブル(データモデル)を書くと、ファイルが膨大なサイズになってしまう。
複数の開発者が同じdmdlファイルに新テーブルを追加して競合することも多いので(特に開発序盤は)、DBスキーマ毎にサブディレクトリーを作り、テーブル毎にdmdlファイルを作る方が良いと思う。

また、テーブルのデータモデルとは別にアプリケーションの中間データを扱うためのデータモデルを定義するので、それもテーブル用と分けた方がいい。
他にも、データ受け渡し用のcsvファイル等があるなら、それも別ディレクトリーにした方がいいだろう。

すると、以下のような感じのディレクトリー構成となる。

ちなみに、データモデル名には英小文字と数字(とアンダースコア)しか使えないが、dmdlファイル名には日本語も使える。
(とはいえ、Git管理上で日本語ファイル名を使うのは不安があるが(苦笑))


DMDL(データモデル)は、namespaceという属性を使ってサブパッケージ名(Javaのクラスが生成されるときのパッケージ名の一部)を指定することが出来る。
dmdlファイルを置いたサブディレクトリー名を指定しておくのが良いと思う。

例:Asakusaプロジェクト/src/main/dmdl/app/batch1/batch1-1.dmdl:

"バッチ1のデータモデル"
@namespace(value = app.batch1)
batch1_tmp1 = {
    〜
};

RDBのテーブル用のDMDLを書くのは、実業務ではテーブル数やカラム数が多いので、かなり大変。

実業務ではテーブル定義をExcelで管理していることが多いだろうから、Excelからテーブル用のdmdlファイルを生成する方が楽だと思う。


DMDLのコンパイル(dmdlファイルからクラスを生成する)


Operator・FlowPart・JobFlow・Batchのパッケージ構成

DMDLを書いてデータモデルクラスを生成したら、次はOperatorクラスを記述する。
そのOperatorのメソッドを使ってFlowPartやJobFlowを記述し、最後にBatchを記述する。
JobFlowを記述する際にはImporter/Exporterも作っておく必要がある。

Operator・FlowPart・JobFlow・Importer/Exporter・BatchはJavaのクラスなので、パッケージ構成を考える必要がある。
(Javaのパッケージ構成は大昔(Strutsの時代)から悩みの種で、大きくは、クラスの種類毎に分ける・アプリケーションの単位(機能)毎に分けるの2種類が考えられる)
AsakusaFWではクラスの種類毎にパッケージを分けるのが主流なようだ。(AsakusaFWのサンプルプロジェクトがそういう構成になっている)

ただ、サンプルプロジェクトではImporter/ExporterがJobFlowと同じパッケージの下に入っていて、これでは数が増えたときに分かりにくいので、Importer/Exporter用のパッケージを作るべきだと思う。
サンプルプロジェクトに倣えばImporter/ExporterのパッケージはJobFlowの下の位置になるべきかもしれないが、JobFlowと同列の位置でもいいかもしれない。

すると、以下のような感じのディレクトリー・パッケージ構成になるんじゃないかと思う。

flowpartやoperatorの下はバッチ毎にパッケージを分けているが、jobflowは分けていない。
ほとんどの場合は1バッチにつきジョブフローは1つなので、jobflowのパッケージを分けるのはあまり必要が無いと思う。

port(Importer/Exporter用のパッケージ)の下は、DMDLのディレクトリー構成と同様の構成にするのが分かりやすいのではないかと思う。


AsakusaFW目次へ戻る / 技術メモへ戻る
メールの送信先:ひしだま