LastaFlute

Japanese page here.

[Lasta News] *2015/11/27
アーキテクチャ概念マップ作りました: アーキテクチャ概念マップ

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のキャスト

LastaFluteのリポジトリ (License, Fork情報など)

ソースコードは、Githubにあります。License や Fork の情報などもこちらに記載されています。

Seasar や SAFlute を御存知の方へ

LastaFlute と SAFlute の違いを簡単にまとめています。

プロのための道具

LastaFluteは、決して万人向けのツールではありません。 問題解決のために必死に壁を乗り越えようとする プロのための道具 として存在しています。

それゆえ、敷居は少し高いです。(逆に、LastaFluteがこれらのスキルアップのきっかけになれば幸いです)

コードリーディング
フレームワークのソースが読めること
Java8プログラミング
Java8のコードが読め書きできること
DBFluteパワー
DBFluteを使いこなせること

作られた経緯はこちらスライド資料にて。参考までに。

Lastaライフの前に、ちょっとBreak

Brick Lasta

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 が用意されています。

サクッとシングルプロジェクト

シンプルに小さく、全貌を見たいのなら...

  1. git clone https://github.com/lastaflute/lastaflute-example-harbor.git
  2. *ReplaceSchema でテストDBを用意: dbflute_maihamadb/manage.sh(bat) の 0 番
  3. Eclipse や IntelliJ などを使って、Mavenプロジェクトとして Java8 でコンパイル
  4. HarborBootクラス (org.docksidestage.boot) の *main() メソッドを実行
  5. ブラウザで 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

Grate Lasta

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