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