LastaFluteのEclipseコード補完

どう打ち込めばいい?

もし補完テンプレートが設定されていなければ、まず設定しましょう。

補完文字列を打ってcontrol+space補完

エディター上で補完文字列を打ってcontrol+space補完すると、コードが補完されます。

e.g. DBFluteオリジナルの_llの補完テンプレート @Java
memberBhv.selectList(_ll) // _ll, control+space, enter
 ↓↓↓
memberBhv.selectList([var] -> {
    [var].[object]
})

補完文字列の階層構造

(ある程度)補完文字列に階層構造があるので、何をしたいのか?を狙って打ち込んできましょう。

_lad...
DIフィールドの補完 :: e.g. _ladany, _ladconfig, _ladreq, ...
_laex...
Executeメソッドの補完 :: e.g. _laexhtml, _laexjson
_lap...
プロパティフィールドの補完 :: e.g. _laprop, _lapvalidclass, ...
_latostring
BeanのtoString()の補完 :: Form/Body, Resultクラスなどにて
_lav...
バリデーションの補完 :: e.g. _lavclienterr, _lavmessages, ...

Action開発者にオススメ補完3つ!

jfluteが思う「少なくともこれだけは使いこなして欲しい」と思う補完は...

_ladany
DIフィールドの補完 :: @Resource付きのprivateフィールド
_laprop
プロパティフィールドの補完 :: publicプロパティの補完
_latostring
BeanのtoString()の補完 :: Form/Body, Resultクラスなどにて

DIフィールドの補完 (_lad...)

任意のDIフィールド (_ladany) ★★★

_ladany (LAstaFlute の Di の ANYthing)

e.g. 任意のDIフィールドを補完 @Java
public class SeaAction extends HarborBaseAction {

    _lada... // control+space, enterどーん!

 ↓↓↓

    @Resource
    private [component] anything;

_lad系の一番上に出てくるので、_ladだけで補完してenterでもOKです。

とにかくこれだけでも覚えていれば、DIフィールドの宣言がだいぶ楽になるでしょう。

LastaFluteコンポーネントのDIフィールド (_lad...)

LastaFluteが提供しているコンポーネントを狙って補完できます。(なんとかManagerは大体揃ってます)

_ladasync
AsyncManager
_ladconf
[App]Config ▲▲ (e.g. コンフィグ値を取得するとき)
_ladcookie
CookieManager
_ladjob
JobManager
_ladjson
JsonManager
_ladmessage
MessageManager
_ladpostbox
Postbox ▲ (e.g. メールを送信するとき)
_ladprimcipher
PrimaryCipher ▲
_ladrequest
RequestManager ▲
_ladresponse
ResponseManager
_ladsession
SessionManager
_ladtemplate
TemplateManager
_ladtime
TimeManager ▲▲▲ (e.g. 現在日時を取得するとき)
_ladtransaction
TransactionStage ▲ (e.g. トランザクションを発行するとき)

▲マークは、業務クラスの実装でもよく使うかもしれないコンポーネントなので、知っておくと良いでしょう。 また、一個一個覚えてなくも補完できるということだけ知っておけば、必要になったときに補完からManagerクラスを探すことができます。 (この補完テンプレートがちょっとしたドキュメントになります)

Executeメソッドの補完 (_laex...)

Execute Method で HtmlResponse (_laexhtml)

_laexhtml (LAstaFlute の EXecute Method の HTMLResponse)

e.g. HtmlResponseのExecuteMethodを補完 @Java
public class SeaAction extends HarborBaseAction {

    _laexh... // control+space, enterどーん!

 ↓↓↓

    @Execute
    public HtmlResponse [method](Integer [object]Id, [form]Form form) {
        return asHtml(path_[object]);
    }
    // []部分がtabで移動して入力できる箇所、後は要件に合わせて好きなように調整

Execute Method で JsonResponse (_laexjson)

_laexjson (LAstaFlute の EXecute Method の JSONResponse)

e.g. JsonResponseのExecuteMethodを補完 @Java
public class SeaAction extends HarborBaseAction {

    _laexj... // control+space, enterどーん!

 ↓↓↓

    @Execute
    public JsonResponse<[result]> [method](Integer [object]Id, [body]Body body) {
        return asJson([result]);
    }
    // []部分がtabで移動して入力できる箇所、後は要件に合わせて好きなように調整

プロパティフィールドの補完 (_lap...)

publicプロパティのフィールド (_laprop)

_laprop (LAstaFlute の (Public) PROPerty)

e.g. publicプロパティのフィールドを補完 @Java
public class SeaResult {

    _lapr... // control+space, enterどーん!

 ↓↓↓

    /** [xxx_property_description_xxx] e.g. [xxx_example_value_xxx] */
    @Required
    public [xxx_PropertyType_xxx] [xxx_propertyName_xxx];

    // []部分がtabで移動して入力できる箇所 (JavaDoc内も同様)
    // デフォルトで@Requiredになるが、必須じゃなければ削除してOK

JavaDocコメントも補完され、e.g.デフォルト値の欄もあるので、ぜひ書いていきましょう。

補完後に修正抜けあっても目立つように、変数部分にxxxを付けています。

@ValidなPartクラスのフィールド (_lapvalidclass)

_lapvalidclass (LAstaFlute の Property の VALID CLASS)

e.g. @ValidなPartクラスのフィールドを補完 @Java
public class SeaResult {

    _lapvalidcl... // control+space, enterどーん!

 ↓↓↓

    /** [xxx_object_description_xxx] */
    @Required
    @Valid
    public [xxx_PartName_xxxPart] [xxx_partName_xxx];

    /**
     * @author jflute
     */
    public static class [xxx_PartName_xxx]Part {

        /** [xxx_property_description_xxx] e.g. [xxx_example_value_xxx] */
        @Required
        public [xxx_PropertyType_xxx] [xxx_propertyName_xxx];
    }

    // []部分がtabで移動して入力できる箇所 (JavaDoc内も同様)
    // デフォルトで@Requiredになるが、必須じゃなければ削除してOK

補完なしで定義するとなるとかなり面倒な構成ですが、特にJSONクラスでは定義することも多いと思われるので、覚えておくと良いでしょう。

@ValidなPartクラスのListフィールド (_lapvalidlist)

_lapvalidlist (LAstaFlute の Property の VALID LIST)

e.g. @ValidなPartクラスのListフィールドを補完 @Java
public class SeaResult {

    _lapvalidli... // control+space, enterどーん!

 ↓↓↓

    /** [xxx_list_description_xxx] */
    @NotNull
    @Valid
    public List<[xxx_PartName_xxxPart]> [xxx_partListName_xxx];

    /**
     * @author jflute
     */
    public static class [xxx_PartName_xxx]Part {

        /** [xxx_property_description_xxx] e.g. [xxx_example_value_xxx] */
        @Required
        public [xxx_PropertyType_xxx] [xxx_propertyName_xxx];
    }

    // []部分がtabで移動して入力できる箇所 (JavaDoc内も同様)
    // デフォルトで@Requiredになるが、必須じゃなければ削除してOK

こちらもJSONクラスではおなじみの構成なので、覚えておくと良いでしょう。

BeanのtoString()の補完 (_latostring)

_latostring (LAstaFlute の TOSTRING)

e.g. toString()を補完、Form,Body,ResultなどのBeanクラスにて @Java
public class SeaResult {

    ...

    _lato... // control+space, enterどーん!

 ↓↓↓

    @Override
    public String toString() {
        return Lato.string(this);
    }

Form,Body,Resultなどの入れ物クラスに付けましょう。 何かとデバッグログで出力される機会があります。中のデータを出力しておくことで、デバッグに役立つことが多々あります。

外側クラスだけに付けておけば、ネストしたクラスの内容も一緒に出力されます。

Beanの実装デザイン - 気軽なtoString()

バリデーションの補完 (_lav...)

クライアントエラーのgroups属性 (_lavclienterr)

_lavclienterr (LAstaFlute の Validation の CLIENTERRor)

e.g. バリデーションアノテーションのクライアントエラーのgroup属性を補完 @Java
public class SeaResult {

    @Required(_lavcli...) // control+space, enterどーん!
    public String sea;

 ↓↓↓

    @Required(groups = ClientError.class)
    public String sea;

システム項目のバリデーションアノテーションに付けるお決まりのgroups属性を補完できます。

見通しのValidation - システム項目は groups=ClientError.class

(ただ、特に汎用的なJSON APIだとバリデーションエラーなのかクライアントエラーなのか区別せずに実装することも多いので、ちょっとレアな機能かもしれません)

validate()のmoreValidationLambda (_lavmessages)

_lavmessages (LAstaFlute の Validation の CLIENTERRor)

e.g. バリデーションメソッドのmoreValidationLambdaを補完 @Java
@Execute
public JsonResponse<SeaResult> index(SeaBody body) {
    validateApi(body, moreValidationLambda) // 引数名が補完されて...
}

 ↓↓↓

@Execute
public JsonResponse<SeaResult> index(SeaBody body) {
    validateApi(body, _lavme...) // control+space, enterどーん!
}

 ↓↓↓

@Execute
public JsonResponse<SeaResult> index(SeaBody body) {
    validateApi(body, messages -> {}); // セミコロン入れておしまい...?
}

 ↓↓↓

@Execute
public JsonResponse<SeaResult> index(SeaBody body) {
    validateApi(body, messages -> { // moreValidateするなら改行入れて続きを
         _lavmore... // 次の補完に続く
    });
}

手打ちで引数名を意識してLambdaを書くのはわりと大変なので、補完できるとスムーズに書けます。

2. Action で validate() を呼ぶ

validate()のmoreValidationLambda続き (_lavmorevalidate)

_lavmorevalidate (LAstaFlute の Validation の MOREVALIDATE)

e.g. バリデーションのmoreValidationLambdaのmoreValidate()を補完 @Java
@Execute
public JsonResponse<SeaResult> index(SeaBody body) {
    validateApi(body, messages -> {
         _lavmore... // control+space, enterどーん!
    });
}

 ↓↓↓

@Execute
public JsonResponse<SeaResult> index(SeaBody body) {
    validateApi(body, messages -> {
         moreValidate([localVar], messages) // localVarは form か body に
    });
}

 ↓↓↓

@Execute
public JsonResponse<SeaResult> index(SeaBody body) {
    validateApi(body, messages -> {
         moreValidate(body, messages) // command+1 で Create method
    });
}

private void moreValidate(SeaBody body, HangarMessages messages) {
    // command+1から生成されるメソッド、ここで実装の続きを
}

お決まりのmoreValidate()メソッドの生成、先にメソッド呼び出しを補完してから、Eclipse標準のcommand+1補完でメソッドを作成すると良いでしょう。

3. Lambdaで、もっとValidation

validate()のvalidationErrorLambda (_lavreterrorhtml)

_lavreterrorhtml (LAstaFlute の Validation の RETurn ERROR HTML)

e.g. バリデーションのvalidationErrorLambdaのasHtml()を補完 @Java
@Execute
public HtmlResponse index(SeaForm form) {
    validate(form, messages -> {}, validationErrorLambda) // 引数名が補完されて...
}

 ↓↓↓

@Execute
public HtmlResponse index(SeaForm form) {
    validate(form, messages -> {}, _lavret...) // control+space, enterどーん!
}

 ↓↓↓

@Execute
public HtmlResponse index(SeaForm form) {
    validate(form, messages -> {}, () -> {
         return asHtml([path_]); // すぐ control+space で path_ の続きを補完
    });  // セミコロンも忘れずに
}

HtmlResponseのときのお決まりのasHtml()呼び出し、ぜひ補完で実装しましょう。

2. Action で validate() を呼ぶ

補完テンプレートの環境構築

DBFluteの補完テンプレートxml

DBFluteの補完テンプレートを入れましょう。 (ワークスペースの設定なので、workspaceディレクトリごとに設定作業する必要があります)

LastaFluteプロジェクトであれば、プロジェクト直下もしくは[app]-baseプロジェクトの etc/tools/eclipse 配下に、java-editor-templates.xml が置いてあります。

e.g. Eclipseのエディターテンプレートのxmlファイル @Directory
[app]-base
 |-...
 |-etc
 |  |-tools
 |  |  |-eclipse
 |  |  |  |-code-formatter-profile.xml
 |  |  |  |-java-editor-templates.xml

このファイルを、まるごと入れ替え方式 で import しましょう。

まるごと入れ替え方式のやり方

importするテンプレートファイルに標準テンプレートも含まれてる場合は、まるごと入れ替え方式で取り込みます。 DBFluteの補完テンプレートは、基本的にこの方式を想定しています。

まず、メニューの Preferences の Java - Editor - Templates で設定画面を開きます。

Eclipse EditorTemplates Settings Example

既存のテンプレートを何か一つ選択して、(Macなら)command+A で全選択します(全選択できればやり方は何でもOK)。 そして、全選択した状態で Remove を押すと既存のテンプレートがすべて消えるので、その状態で Import... を押して、ファイル選択ダイアログでimport対象のxmlファイルを選択します。

Eclipse EditorTemplates Settings Import Whole

期待されているテンプレートが設定されたことを確認して Apply すれば完了です。試しに近くのクラスで補完をしてみましょう。