[[JHIPSTER一覧]] *** 目次 [#s90f7b0e] #contents * はじめに [#a6f92448] jhipsterでなにが、うれしいかというと、 クラス図をJDLという簡易な設定さえ書けば、 一応動作する画面が、できるということだと思う。 リレーションとかも、考慮済みのテンプレートが、いい感じに、頑張ってくれる。 でも、すでに、自分のプロジェクトのひな型ができている場合がある。 成果物として、望まれているのは、自分のプロジェクトの形式に沿ったコード だったりする。 そうなるとひな形のほうを修正したい。 * JDLからのパラメータ [#y48f88a2] JDLからのパラメータは、どのように拾えるのか。 ** テンプレートファイル [#scf5c772] テンプレートは、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'); * テンプレートのソースコードを読んで、テンプレートの書き方を逆引きにしてみる [#s8b46879] yoのテンプレートの書き方だけでは、役不足だ。JDL言語で簡易に書いた、 クラス図の情報が、どのように、テンプレートの引数にわたってくるのかが、知りたいよね? だから、テンプレートファイルをみて、解析してみるとする。 とりあえず、エンティティまわりをみてみたいので、下記のファイルを観察してみるとする。 EntityRepository.java.ejs ** コメントの書き方 [#w45c20e8] <%# -%> ** パッケージ名 [#v8c39201] package <%=packageName%>.repository; ** エンティティクラス名 [#u1109869] テーブル名とかに使用 <%=asEntity(entityClass)%> または <%=entityClass%> ** 多対多の場合 [#vf1b04ac] <%_ if (fieldsContainOwnerManyToMany) { _%> <%_ } _%> ** データベースの種類がsqlの場合 [#m61c4897] <%_ if (databaseType === 'mongodb') { _%> <%_ } _%> ** 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が定義されているかどうかチェック [#ra656797] for (idx in relationships) { if (typeof relationships[idx].javadoc != 'undefined') { } } ** フィールドでループ [#d9159b14] <% for (idx in fields) { } _%> ** フィールドの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としたときのメッセージの場所 [#z81bf26d] たまたま、みつけたから、メモしておこう。 node_modules\generator-jhipster\generators\entity\prompts.js にある。 * 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を調べる必要がありそうです。