Jhipster テンプレート改造
jhipsterでなにが、うれしいかというと、 クラス図をJDLという簡易な設定さえ、書けば、 一応動作する画面が、できるということだと思う。
でも、すでに、自分のプロジェクトのひな型ができている場合がある。
成果物として、望まれているのは、自分のプロジェクトの形式に沿ったコード だったりする。
そうなるとひな形のほうを修正したい。
自分用にソースコードを修正する。
JDLからのパラメータは、どのように拾えるのか。
テンプレートファイル テンプレートは、yoというツールを使っていると思う。 JDLをyoで使える形式に変換するのが、JHIPSTERだとすると、テンプレートから、変数を引っ張ってくればいいんじゃなかろうか。
generator-jhipster-vuejs は、node_modulesフォルダに、格納されている さらにその配下の、generatorフォルダを、今回解析してみようと思う。
node_moduleフォルダにある、generatorフォルダが怪しいと思っておこう。
どうやら、jhipsterのコマンドは、 アプリフォルダ/node_moduless/generator-jhipster/cli の commands.js ファイルに記載があった。
ただし、ここから、どこかに行くというわけでは、ない。 モジュール側が、リスナーしているようだ。 例えば、import-jdl というコマンドの場合、次のファイルが、このコマンドを待ち構えるモジュールとして作られている。 import-jdl.js
たぶん、次の文が、リスナーの実装っぽい。確認してないけど。。。GREPしたらここしか、import-jdlの文言含んでなかった。
const statistics = require('../generators/statistics');
statistics.sendSubGenEvent?('generator', 'import-jdl');
# テンプレートのソースコードを読んで、テンプレートの書き方を逆引きにしてみる
yoのテンプレートの書き方だけでは、役不足だ。JDL言語で簡易に書いた、
クラス図の情報が、どのように、テンプレートの引数にわたってくるのかが、知りたいよね?
だから、テンプレートファイルをみて、解析してみるとする。
とりあえず、エンティティまわりをみてみたいので、下記のファイルを観察してみるとする。
EntityRepository?.java.ejs
## コメントの書き方
<%# -%>
## パッケージ名
package <%=packageName%>.repository;
## エンティティクラス名 テーブル名とかに使用
<%=asEntity(entityClass)%>
または
<%=entityClass%>
## 多対多の場合
<%_ if (fieldsContainOwnerManyToMany) { _%> <%_ } _%>
## データベースの種類がsqlの場合
<%_ if (databaseType === 'mongodb') { _%> <%_ } _%>
## SQLのselect句
select <%= entityInstance %>
## リレーションしてる文だけ必要なループ
<% for (idx in relationships) { if (relationships[idx].relationshipType === 'many-to-many' && relationships[idx].ownerSide === true) { %> left join fetch <%=entityInstance%>.<%=relationships[idx].relationshipFieldNamePlural%><%} }%>",
### リレーションのjavadocが定義されているかどうかチェック
for (idx in relationships) { if (typeof relationships[idx].javadoc != 'undefined') { } }
## フィールドでループ
<% for (idx in fields) { } _%>
### フィールドのjavadocが定義されているかどうかチェック
for (idx in fields) { if (typeof fields[idx].javadoc != 'undefined') { } }
## 未確認の引数
fieldsContainBlob importJsonIgnoreProperties importApiModelProperty
importJsonIgnore fieldsContainUUID
prodDatabaseType hasTextBlob validation searchEngine
fieldsContainBigDecimal
■jhipster entityとしたときのメッセージの場所 たまたま、みつけたから、メモしておこう。
node_modules\generator-jhipster\generators\entity\prompts.js
にある。
■JDLのインポートメソッド jhiCore.JDLImporter のimportメソッド でパースされているようです。