LastaFlute
Japanese page here.
[Lasta News] *2015/11/27
アーキテクチャ概念マップ作りました: アーキテクチャ概念マップ
- LastaFluteとは?
- LastaFluteのコード
- LastaFluteを動かしてみよう
- LastaFluteで新プロジェクト
- ☆ LastaFluteで実装してみよう ☆
- Thanks, Friends
LastaFluteとは?
Typesafe Web Framework for LeAn STArtup with DBFlute and Java8
リーンスタートアップ & インクリメンタル開発 のための、Java8前提のWebフレームワークです。
リズム&スピードプログラミング
スタートアップは、Trial & Error の繰り返しのため、身軽な開発環境が求められる。
- ホットデプロイ
- 再起動せずに、Actionクラスを修正してすぐに確認できる
- 起動が速い
- 再起動が必要になっても、ハイスピードの再起動
.........................................................思考のリズムを止めない!は、スピード になる
変化できるプログラミング
スタートアップは、要求の変化 の繰り返しのため、安全な仕組みが求められる。
- 徹底したタイプセーフ
- タイプセーフなAction実装、そして、ConditionBean
- 攻めのDB変更
- DBFluteフルパワー、そして、FreeGen
- 化け物のようなログ
- 困ったときに見たくなるようなログ
.........................................................安全!は、スピード になる
自然とそうなるプログラミング
スタートアップは、人的リソースも変化 の繰り返しのため、自然の力が求められる。
- 規約ベースAction
- URL = クラス名 + メソッド名: URLからクラスが探しやすい
- 少ない選択肢
- 不要な選択肢を省き、できる限り実装のブレを少なく
- デフォルトセット
- 一通り揃っている開発環境、コンフィグの仕組みからメールまで
.........................................................迷わない!は、スピード になる
LastaFluteのキャスト
LastaFluteのリポジトリ (License, Fork情報など)
ソースコードは、Githubにあります。License や Fork の情報などもこちらに記載されています。
Seasar や SAFlute を御存知の方へ
LastaFlute と SAFlute の違いを簡単にまとめています。
プロのための道具
LastaFluteは、決して万人向けのツールではありません。 問題解決のために必死に壁を乗り越えようとする プロのための道具 として存在しています。
それゆえ、敷居は少し高いです。(逆に、LastaFluteがこれらのスキルアップのきっかけになれば幸いです)
- コードリーディング
- フレームワークのソースが読めること
- Java8プログラミング
- Java8のコードが読め書きできること
- DBFluteパワー
- DBFluteを使いこなせること
作られた経緯はこちらスライド資料にて。参考までに。
Lastaライフの前に、ちょっとBreak
LastaFluteのコード
LastaFluteのポリシーを反映し、Actionクラスに様々な工夫が施されています。
Mapping Convention
- Request URL
- Action class + Execute method
Package Convention
- Application Package
- [your domain].app e.g. org.docksidestage.app
- Web Package
- [Application Root].web e.g. org.docksidestage.app.web
- Action's Package
- *you can use Action's prefix package
Example for HTML response style
e.g. Action for URL '/product/list/3' as HTML response @Java
@Execute
public HtmlResponse index(OptionalThing<Integer> pageNumber
, ProductSearchForm form) {
validate(form, messages -> (), () -> {
return asHtml(path_Product_ProductListJsp);
});
PagingResultBean<Product> page = productBhv.selectPage(cb -> {
cb.setupSelect_ProductStatus();
cb.query().setProductName_LikeSearch(form.productName, op -> op.likeContain());
cb.query().addOrderBy_ProductName_Asc();
cb.paging(getPagingPageSize(), pageNumber.orElse(1));
});
List<ProductRowBean> beans = page.mappingList(product -> {
return mappingToBean(product);
});
return asHtml(path_Product_ProductListJsp).renderWith(data -> {
data.register("beans", beans);
registerPagingNavi(data, page, form);
});
}
Example for JSON response style
e.g. Action for URL '/product/list/3' as JSON response @Java
@Execute
public JsonResponse<SearchPagingBean<ProductRowBean>> index(
OptionalThing<Integer> pageNumber
, ProductSearchBody body) {
validate(body, messages -> {});
ListResultBean<Product> page = productBhv.selectPage(cb -> {
cb.setupSelect_ProductStatus();
cb.query().setProductName_LikeSearch(form.productName, op -> op.likeContain());
cb.query().addOrderBy_ProductName_Asc();
cb.paging(getPagingPageSize(), pageNumber.orElse(1));
});
SearchPagingBean<ProductRowBean> bean = createPagingBean(page);
return asJson(bean);
}
LastaFluteを動かしてみよう
Quick Trial のための Example が用意されています。
サクッとシングルプロジェクト
シンプルに小さく、全貌を見たいのなら...
- git clone https://github.com/lastaflute/lastaflute-example-harbor.git
- *ReplaceSchema でテストDBを用意: dbflute_maihamadb/manage.sh(bat) の 0 番
- Eclipse や IntelliJ などを使って、Mavenプロジェクトとして Java8 でコンパイル
- HarborBootクラス (org.docksidestage.boot) の *main() メソッドを実行
- ブラウザで http://localhost:8090/harbor にアクセス (user:Pixy, pass:sea でログイン)
e.g. Quick Trial の ReplaceSchema @Java
// manageを叩いて、表示されたメニューから ReplaceSchema (0番) を選ぶ
...$ sh manage.sh
e.g. Quick Trial の main() メソッド @Java
public class HarborBoot {
public static void main(String[] args) {
new JettyBoot(8090, "/harbor").asDevelopment().bootAwait();
}
}
しっかりマルチプロジェクト
実践を想定したしっかり構成を見たいのなら...
https://github.com/lastaflute/lastaflute-example-maihama.git
LastaFluteで新プロジェクト
まず、大きく二つ...シングルプロジェクト?マルチプロジェクト?
シングルプロジェクトなら
まず、Quick Trial の lastaflute-example-harbor を clone して画面を起動します。 そして、StartupTest の domain と serviceName を修正して実行すると、harbor を元に新しいプロジェクトが作成されます。
マルチプロジェクトなら
まず、Quick Trial の lastaflute-example-maihama を clone して画面を起動します。 そして、StartupTest の domain と serviceName と appName を修正して実行すると、maihama を元に新しいプロジェクトが作成されます。
☆ LastaFluteで実装してみよう ☆
LastaFluteの実装チュートリアル
これから実装を始める人、実装しながら迷った人、そのためのページ。
実装で迷ったら、ここから探しましょう。ぜひブックマークを!
実装前に、ちょっとBreak
Thanks, Friends
公開許可を頂いている、LastaFluteの実績です。
- アットパーティー
- 宴会・パーティー予約サイト (JSON APIスタイル)
- U-NEXT<ユーネクスト>
- 映画,ドラマ,アニメ・・ 日本最大級の動画配信 (JSON APIスタイル)
- Clock It
- タスク管理&タイムマネジメントサービス (SAFluteからLastaに移行)
- Fess
- オープンソース全文検索サーバー (fess10よりLasta)
Lasta Di だけの利用もあります。
- Elasticsearch River Web
- Web Crawler for Elasticsearch
- S2Robot
- Web/FileSystem Crawler Library