【JHipster和訳】 Creating an entity

  • このエントリーをはてなブックマークに追加

はじめに

JHipsterの勉強を兼ねて以下のページを和訳したものです。
自分の理解用なので結構な意訳なので注意してください。
https://www.jhipster.tech/creating-an-entity/

Introduction

アプリケーションを作成したら、次にエンティティを作成しましょう
例としてBookとAuthorエンティティを作るとすると
以下の作成が必要になります。
  • データベースのテーブル
  • Liquibase(データベースのマイニングツール)の変更履歴
  • JPAエンティティ
  • Spring Data Repository
  • Spring MVC Rest Controller( CRUD用メソッド含む)
  • Angular Router および ComponentとService
  • HTML
  • Integrationテスト
  • パフォーマンステスト
もし複数のEntityである場合、リレーションも必要になるでしょう、
この場合さらに
  • データベース外部キー
  • リレーションを管理するためのJavaScriptおよびHTML
entity sub generatorは必要なすべてのファイルを作成してくれ、
かつフロントエンドのCRUDも提供してくれます。
sub generatorは以下のコマンドで実行します
オプションについては以下のコマンドで参照することができます 各オプションについて
  • --table-name <table_name> – デフォルトではJhipsterはentity名からテーブル名を生成しますが、もしentityと異なる名前を使用したい場合はこのオプションで指定
  • --angular-suffix <suffix> – Angularルートに独自のsuffixを入れたい場合はこのオプションで指定
  • --client-root-folder <folder-name> – フロントエンドのrootフォルダ モノリシックアプリとマイクロサービスアプリのデフォルトは空
  • --regenerate – 作成済みのentityを再生成します。(質問なし)
  • --skip-server – クライアントサイドコードのみ生成します
  • --skip-client – サーバーサイドコードのみ生成します
  • --db – サーバーサイドコードの生成をスキップした際にDBを指定します。 それ以外の場合では効果はありません。

JHipster UML and JDL Studio

コマンドラインでJHipsterでどうやってentityを作るのかはわかったと思いますが、GUIツールのほうがわかりやすくていいという方もいると思います。
そういった場合、2つの方法があります
  • JHipster UML – UMLエディタが使用できます
  • JDL Studio – ドメインを記述するための独自言語であるJDLを使ってentityやリレーションシップ を作成するためのJHipsterのオンラインツール
もしJDL Studioを使用する場合 jhipster import-jdl your-jdl-file.jh コマンドでJDLファイルからentityを作成できます
もし JDLインポートした際に、entityを再生成したくないのであれば--json-only オプションでentityの作成をスキップされ.jhipsterフォルダにjsonファイルが格納されます デフォルトではimport-jdl はentityの変更のみ再生成しますが、もしすべてのentityを再生成したいのであれば、--force オプションを付けてください。ただしこの場合、entityファイルのローカル変更は全て上書きされてしまうので注意してください。 もし import-jdlではなくJHipsterUMLを使いたい場合はnpm install -g jhipster-uml でインストールを行い、その後jhipster-uml yourFileName.jhを実行してください

Entity fields

各entityには好きなだけfieldを追加することができます。 あなたはフィールド名とタイプを入力する必要があり、 JHipsterはそこからAngularのHTMLからLiquibaseのチェンジログまで、必要なコードと設定を全て生成します。 これらのフィールドには使用している技術で予約済みのキーワードを含めることはできません。例えば、MySQLを使用する場合
  • Javaの予約語は使用できません(コンパイルできない)
  • MySQLの予約語は使用できません(データベーススキーマの更新でエラーになる)

Field types

JHipsterでは多くのフィールドタイプをサポートしています。 データベースの型はその種類(Oracle, Cassandra…etc)に依存するため、JHipsterではJava型を使用します、そしてそこから正しいデータベースアクセスコードを生成するのがJHipsterの強みの一つです。
  • String – デフォルトのサイズはバックエンドで採用している基盤によります(JPAを使っている場合は 255) 。また、validationのルールは変更できます
  • Integer
  • Long
  • Float
  • Double
  • BigDecimal – java.math.BigDecimal, 正確な計算をしたい場合(財務運用等)
  • LocalDate – java.time.LocalDate, Javaで正確な日時管理をしたいときに
  • Instant – java.time.Instant, timestampを使いたいときに
  • ZoneDateTime – java.time.ZonedDateTime, タイムゾーンのあるdatetimeを扱いたいときに(カレンダーの予定等) 注意点として、タイムゾーンはRESTでも永続化もサポートされていないので、Instantを使ったほうがよいでしょう
  • Boolean
  • Enumeration – JavaのEnum, もしこのタイプを設定した場合, sub-generatorからどんな値が必要なのか尋ねられます。
  • Blob – バイナリデータを保存するためのオブジェクト, このタイプを設定した場合、sub-generatorからバイナリデータ, 画像データ, CLOBかを尋ねられます。画像については特にAngular側でユーザーに表示するための処理がされます

Validation

Validationは各フィールド毎に設定できます。
フィールドタイプに応じたValidationオプションが利用できます Validationは以下のものが自動生成されます
  • AngularまたはReactを使用したクライアントサイドのValidationコード
  • [Bean Validation](http://beanvalidation.org/)を使用したJavaドメインオブジェクト
Bean Validationはドメインオブジェクトの以下のケースで自動的に検証を行います
  • Spring MVC REST Controller(@Validアノテーション使用)
  • Hibernate/JPA (entityを保存する前に自動的に検証される)
Validationの情報は、データベースのカラムの正確なデータを生成するのにも使用されます。
  • Required フィールドは not nullに設定する
  • Uniqueフィールドはunique制約を設定する
  • フィールドの最大長はカラムの長さを同値に設定する
Validationにはいくつか制約があります。
  • Angular、React、BeanValidationの全てのオプションをサポートしているわけではありません。クライアント側とサーバー側で共通するもののみです
  • 正規表現パターンはJavaとJavaScriptで同じ動作をするわけではありません。そのため、設定する場合は片方を微調整する必要があるかもしれません
  • JHipsterは一般的なentityに対しての単体テストを生成します。その際にあなたが必要なValidationルールの情報はないため、生成されたテストがエラーとなることも起こり得ます。その場合は単体テストで使用しているサンプル値を更新してテストをパスするようにする必要があります

Entity relationships

EntityのリレーションシップはSQLでのみ利用可能です これは非常に複雑なテーマなので下記のドキュメントページを参照してください Managing relationships.

Generating a separate service class for your business logic

独立したServiceクラスを持つことで、Spring Rest Controllerを直接使うだけにし、複雑なロジックを集約することができます。 サービス層を持つ(interfaceの有無にかかわらず)ことでDTOを使用することが可能になります。 詳しくは Spring service sub-generatorに記載されていますので、目を通すことをおすすめします。

Data Transfer Objects (DTOs)

デフォルトではJHipster entityはDTOを使いませんが、オプションで作成することができます。
もしサービス層を使用する場合は Using DTOsを確認してください

Filtering

オプションでentityがSQLデータベースに保存する際にフィルタリングをすることができます。以下のドキュメントを参照してください Filtering your entities.

Pagination

もしCassandraを使用してアプリケーションを作成した場合はページネーションは機能しないので注意してください。 もちろん今後のアップデートによって対応される予定です。
ページネーションは GitHubAPIのthe Link header を使用しています。 JHipsterはEntityが生成された時に次の4つのページネーションオプションからサーバー側(Spring MVC REST)とクライアント側(Angular/React)の両方でカスタマイズされたコードを生成します

Updating an existing entity

entityの設定は.jhipster フォルダ内のjsonファイルに保存されています。 そのため、もし既存のentity名を使用してsub-generatorを起動した場合は内容を更新または再生成することができます 既存のentityに対してsub-generatorを実行するときは「
Do you want to update the entity? This will replace the existing files for this entity, all your custom code will be overwritten 」と尋ねられるので、以下の中から回答を選択してください
  • Yes, re generate the entity – entityを再生成します。sub-generatorを実行する際に--regenerateオプションを指定することでスキップ可能です
  • Yes, add more fields and relationships – フィールドおよびリレーションシップの追加のための質問が展開されます
  • Yes, remove fields and relationships– entityから既存のフィールドやリレーションシップを削除するための質問が展開されます
  • No, exit – 何の変更もせずにsub-generatorを終了します
以下のような理由でentityを更新したいケースがあると思います
  • 既存のentityに対し、フィールドおよびリレーションシップを追加 or 削除したい
  • entityを元の状態にリセットしたい
  • JHipsterをUpdateし、新しいテンプレートでentityを生成したい
  • .jsonファイルを更新した場合(フォーマットはsub-generatorが尋ねた質問に非常に近いので、それほど複雑ではありません)
  • .jsonファイルをコピー&ペーストして、コピー元と似た新しいentityを作りたい
TIP: 全てのentityを一度に再生成するのに以下のコマンドが使えます(ファイルが変更された時に質問するようにしたい場合は--forceを削除してください)
  • Linux & Mac: for f in ls .jhipster; do jhipster entity ${f%.*} --force ; done
  • Windows: for %f in (.jhipster/*) do jhipster entity %~nf --force
  • このエントリーをはてなブックマークに追加

SNSでもご購読できます。

コメントを残す

*