Startup as Multi-Project

スタートアップの概要

Exampleを元にして、新しいプチBlankプロジェクトを作ります。

ここでは、複数のWebアプリケーションが存在するサービスを想定します。

将来においても、絶対に一つしか作らないというような場合は、 こちらではなく、シングルプロジェクト構成の方のスタートアップをオススメします。(あとで構成変更するのは大変なので)

スタートアップの手順

流れは以下のような感じです。

  1. Exampleプロジェクトを準備
  2. ドメインとサービス名を決める
  3. プチBlankプロジェクトを作成する
  4. とりあえず動かしてみましょう
  5. #change_it_first で検索
  6. DB設計、そして自動生成
  7. #change_it で検索

1. Exampleプロジェクトを準備

マルチプロジェクトのExampleである、maihama を clone します。

プロジェクト
maihama
Gitリポジトリ
https://github.com/lastaflute/lastaflute-example-maihama.git

2. ドメインとサービス名を決める

新しく作るサービスの、ドメインとサービス名、そして、最初の一つ目のアプリ名を決めます。

例えば、LastaFluteのExampleプロジェクトであれば、このようになっています。

ドメイン
docksidestage.org
サービス名
maihama
アプリ名
dockside, hangar, orleans, showbase

あとで直すのは大変なので、慎重に決めてください。

ただ、開発を始める時点では、ドメインもサービス名もまだ決まってないこともあるでしょう。 そのときは、いわゆるコードネーム、内部向けのプロジェクト名を付けるほかないでしょう。

3. プチBlankプロジェクトを作成する

ドメイン、サービス、アプリ名を書き換え

以下のどちらか、アプリで採用するスタイルに該当する方を選びます。

dockside
サーバーサイドでHTMLを戻す HTMLスタイル
hangar
サーバーサイドはJSONを戻す JSON APIスタイル
showbase
"JSON APIスタイル" かつ RESTful APIスタイル

そして、該当するアプリプロジェクトの StartupTest.java にて、ドメインとサービス名と "最初の一つ目のアプリ名" の値を書き換えます。(ここでは、まずは一つ目のアプリの環境だけ作ります)

※LastaJobが入っている orleans のスタートアップは用意されていませんので、Jobアプリを作るのであれば上記のどれかを選びつつ LastaJob の環境を付け足していきましょう。(orleansアプリを参考に)

StartupTestを実行

そして、そのクラスのJUnitのテストを実行します。すると、Exampleプロジェクトと同じ階層のディレクトリに、 指定されたドメインとサービス名の新しいプチBlankプロジェクトが作成されます。

開発用workspaceでセットアップ

それを、開発用のworkspaceに移動して、Eclipseなどで import して、コンパイルしましょう。

Eclipseで新しい workspace であれば、もろもろの workspace の設定をしておきましょう。 Java Editor Templates も、この時点で設定しておきましょう。

開発環境の構築 | LastaFluteの実装チュートリアル

説明のために、例えば...

この後の説明では、新しいドメインは dancingdb.org, サービス名は showdance, 最初の一つ目のアプリ名を overthewaves と仮定します。

たとえばドメイン
dancingdb.org
たとえばサービス名
showdance
たとえばアプリ名
overthewaves

4. とりあえず動かしてみましょう

データベースはMySQL?

もし、別のデータベースであれば、動かすのはいったん飛ばして、次のステップに進みましょう。 MySQLの環境がすでにあるのであれば、いったんMySQLで動く環境を作ってから変更するとよいでしょう。 (修正すべきファイルは何か?など、後のステップで登場します)

まずは ReplaceSchema

まずは ReplaceSchema, テーブルはExampleのままですが、新しいスキーマ名で作成されます。

そして、Bootクラスでmain()実行

そして、OverthewavesBootというクラスの main() を実行すると、Jettyが起動します。 起動ログの最後に表示される url をブラウザからアクセスしてみましょう。ひとまず、何かしら画面が表示されればOKです。

5. #change_it_first で検索

プロジェクト全体を、#change_it_first で grep します。

これは、プロジェクト環境を作ったときに真っ先に直すべき箇所に記載されています。 その部分のソースコードをよく読み、自分のプロジェクトではどうするかしっかり考えて直しましょう。

直したときは、#change_it_first コメントを #changed とかに修正しておくとよいでしょう。 あとで何を直して何を保留したのかがわからなくなってしまうので。

ここでは、代表的なものを紹介します。

セキュリティ設定

パスワードやCookieなどの暗号化のための秘密鍵を設定します。

ShowdanceFwAssistantDirectorクラスにて、InvertibleCryptographerを構築している箇所が 二箇所 あります。 それぞれに、アルゴリズムと秘密鍵を設定します。秘密鍵をどこから持ってくるか、どう定義するかはご自由に。

アルゴリズム次第で、秘密鍵の形式が違います。正常に Cipher を起動できるか CipherSetupTest というテストクラスでデフォルトで用意されていますので、こちらで確認するとよいでしょう。

アプリ種別情報

OverthewavesBaseActionクラスにて、APP_TYPE と USER_TYPE を定義します。

APP_TYPE
アプリの種別、mythicaなら MYC など三文字(推奨)のコード
USER_TYPE
ログインユーザの種別、会員(member)なら M など一文字(推奨)のコード

これらは、共通カラムやログなどで利用されます。 間違っていてもアプリの動作に影響はほとんどありませんが、運用時のトレース情報として重宝します。 また、これらの値をアプリで独自に利用してもよいでしょう。

Boot情報

OverthewavesBootクラスにて、アプリのポート番号やコンテキストパスを調整します。

もちろん、デフォルトのままでよければ、そのままでOKです。

6. DB設計、そして自動生成

もし、DBを MySQL から別のDBMSに変更するなら

以下の設定ファイルを修正します。

basicInfoMap.dfprop
databaseプロパティ
databaseInfoMap.dfprop
JDBC接続情報
maihama_env.properties
JDBC接続情報
pom.xml
dependenciesのJDBCドライバ
.erm (ERMaster-bなら)
ERFluteの対象データベース
littleAdjustmentMap.dfprop
cursorSelectFetchSizeプロパティ (DBMSに合わせる or 無効化)
replaceSchemaMap.dfprop
additionalUserMapプロパティ (DBMSに合わせる or 無効化)
replace-schema-00-system.sql
create database の DDL (DBMSに合わせる or ファイル削除)

最初のDB設計

DB設計します。

とはいっても、全部いっきにやるのではなく、開発の第一歩が踏める程度の最低限のシンプルなものだけにしましょう。 暫定のテーブルでもOKです。あとで直して再自動生成してしまえばいいだけなので。

最初の自動生成

できたら、DBFluteで自動生成をして、アプリに適用させます。 コンパイルエラーになるところは適宜アプリにフィットさせていきましょう。さあ、ここから開発の始まりです。

7. もし、Java15以降なら Rhino を

もしJava15以上であれば、FreeGenの実行時に "JavaScript Engineが見つからなかった" エラーが発生するはずです。 (Java15より、NashornがJava本体から外れたことによる影響です)

manageタスクで 31 (sai) を実行してから、もう一度 FreeGen を実行してみてください。

8. アプリにフィットさせていく

ひたすらフィット

ここからは、動かしながら気付いた点をひたすらアプリにフィットさせていきます。

#change_it で検索

今度は、#change_it で検索してみます。

自動生成でコンパイルエラーになった時点で、すでに直しているところもあるかもしれませんが、 すぐに修正しなくてもいいけど、いつかはちゃんとアプリにフィットさせないといけない場所に記載されています。

こちらも、#change_it_first のときと同様に、直したら #changed とかに修正しておくとよいでしょう。 直したけど、まだ後で調整が必要(かも)というときは、(Eclipseなら _to => ctrl+space で補完して)todoコメントを入れましょう。

Bon voyage

ExampleのデフォルトのままでOKか、現場フィットが必要かどうか、わからないところはたくさんあります。 Trial & Error をしながらフィットさせていってください。

ユーザーの方のブログをご紹介

実際に業務で LastaFlute を利用されていた方が素敵なブログを書いてくださっているのでご紹介します。 ありがとうございます!(リンクの承諾も頂いています)

スタートアップ以外の話題も書いてくださっています。