Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
アジェンダ
 はじめに
 Javaの冗長コード
 Lombokを使った冗長コードの排除
 Lombokを使ってBuilderを追加
 Maven依存関係
 IntelliJのPlugin
 まとめ
はじめに
 ここでは、Javaの冗長コードを排除するLombokを説明する
https://projectlombok.org/
Javaの冗長コード
 Javaの昔から抱える問題に「冗長コード」がある。
たとえば、以下のようなフィールドがあったとする。
/** productテーブルのEntity */
public class Product {
/** 商品コード...
Javaの冗長コード (1つ目)
 フィールドはprivate宣言が原則なので、
そのフィールドにアクセスするsetter/getterを書くのが冗長。
/** productテーブルのEntity */
public class Produ...
Javaの冗長コード (2つ目)
 コンストラクタを書くのが冗長。
/** productテーブルのEntity */
public class Product {
/** 商品コード */
private Integer productCo...
Javaの冗長コード (3つ目)
 クラスの文字列表現を返すtoStringメソッドを書くのが冗長。
/** productテーブルのEntity */
public class Product {
/** 商品コード */
private ...
Javaの冗長コード (4つ目)
 各フィールドが等価かを返すequalsメソッドを書くのが冗長。
/** productテーブルのEntity */
public class Product {
/** 商品コード */
private I...
Javaの冗長コード (5つ目)
 各フィールドの値に応じたハッシュ値を返す
hashCodeメソッドを書くのが冗長。
/** productテーブルのEntity */
public class Product {
/** 商品コード */...
Lombokを使った冗長コードの排除
 これら冗長コードを、Lombokを使って排除する。
/** productテーブルのEntity */
public class Product {
/** 商品コード */
private Integ...
Lombokを使った冗長コードの排除
 getter/setter、toString、
equals、hashCodeメソッドの追加
/** productテーブルのEntity */
@Data
public class Product {...
Lombokを使った冗長コードの排除
 デフォルトコンストラクタの追加
/** productテーブルのEntity */
@Data
@NoArgsConstructor
public class Product {
/** 商品コード *...
Lombokを使った冗長コードの排除
 フィールド初期化用コンストラクタの追加
/** productテーブルのEntity */
@Data
@NoArgsConstructor
@AllArgsConstructor
public cla...
Lombokを使った冗長コードの排除
 以上
/** productテーブルのEntity */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Product {
/** ...
Lombokを使ってBuilderを追加
 Bulderを追加する。
/** productテーブルのEntity */
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public...
Lombokを使ってBuilderを追加
 Bulderを使う。
Product product = Product.builder()
.productCode(1)
.productName(“ガム”)
.build(); 任意のフィール...
Maven依存関係
 Maven依存関係に下記を追加する。
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifa...
IntelliJのPlugin
 IntelliJのPluginを追加する。
設定画面を開いて
「Plugins」を選択 キーワードに
「lombok」を入力
リストに出ない場合は
「Browse」をクリック
IntelliJのPlugin
 IntelliJのPluginを追加する。
「Lombok Plugin」を選択
ダウンロードと
インストールをする
IntelliJのPlugin
 IntelliJのPluginを追加する。
IntelliJを
再起動して完了
まとめ
 Lombokを使って定型的なコードをなるべく排除し、
それで浮いた時間を使って本来やるべき実装に集中しましょう。
Lombokのススメ
Upcoming SlideShare
Loading in …5
×

Lombokのススメ

Lombokの簡単な使い方

  • Login to see the comments

Lombokのススメ

  1. 1. アジェンダ  はじめに  Javaの冗長コード  Lombokを使った冗長コードの排除  Lombokを使ってBuilderを追加  Maven依存関係  IntelliJのPlugin  まとめ
  2. 2. はじめに  ここでは、Javaの冗長コードを排除するLombokを説明する https://projectlombok.org/
  3. 3. Javaの冗長コード  Javaの昔から抱える問題に「冗長コード」がある。 たとえば、以下のようなフィールドがあったとする。 /** productテーブルのEntity */ public class Product { /** 商品コード */ private Integer productCode; /** 商品名 */ private String productName; } フィールド宣言はprivateが原則
  4. 4. Javaの冗長コード (1つ目)  フィールドはprivate宣言が原則なので、 そのフィールドにアクセスするsetter/getterを書くのが冗長。 /** productテーブルのEntity */ public class Product { /** 商品コード */ private Integer productCode; /** 商品名 */ private String productName; /** 商品コードの取得 */ public Integer getProductCode() { return productCode } /** 商品コードの設定 */ public void setProductCode(Integer productCode ) { this.productCode = productCode } } フィールドごとに setter/getterを書く
  5. 5. Javaの冗長コード (2つ目)  コンストラクタを書くのが冗長。 /** productテーブルのEntity */ public class Product { /** 商品コード */ private Integer productCode; /** 商品名 */ private String productName; /** デフォルトコンストラクタ */ public Product() { } /** フィールド初期化をするコンストラクタ */ public Product(Integer productCode, String productName) { this.productCode = productCode; this.productName = productName; } } デフォルトコンストラクタ以外に、 フィールド初期化用コンストラクタを書く
  6. 6. Javaの冗長コード (3つ目)  クラスの文字列表現を返すtoStringメソッドを書くのが冗長。 /** productテーブルのEntity */ public class Product { /** 商品コード */ private Integer productCode; /** 商品名 */ private String productName; /** クラスの文字列表現 */ public String toString() { StringBuilder sb = new StringBuilder(); sb.append(“productCode:”).append(productCode); sb.append(“ productName:”).append(productName); return sb.toString(); } } フィールドの内容を 文字列にして返却する
  7. 7. Javaの冗長コード (4つ目)  各フィールドが等価かを返すequalsメソッドを書くのが冗長。 /** productテーブルのEntity */ public class Product { /** 商品コード */ private Integer productCode; /** 商品名 */ private String productName; /** 等価かを返す */ public boolean equals(Object o) { if (!(o instanceof Product)) { return false; } Product p = (Product)o; if ((this.productCode != null && p.productCode == null) || (this.productCode == null && p.productCode != null) || ・・・ 以下略 同じクラスかのチェック フィールド1つずつ、 nullチェック、値チェックをする
  8. 8. Javaの冗長コード (5つ目)  各フィールドの値に応じたハッシュ値を返す hashCodeメソッドを書くのが冗長。 /** productテーブルのEntity */ public class Product { /** 商品コード */ private Integer productCode; /** 商品名 */ private String productName; /** ハッシュ価を返す */ public int hashCode() { ・・・ 以下略
  9. 9. Lombokを使った冗長コードの排除  これら冗長コードを、Lombokを使って排除する。 /** productテーブルのEntity */ public class Product { /** 商品コード */ private Integer productCode; /** 商品名 */ private String productName; }
  10. 10. Lombokを使った冗長コードの排除  getter/setter、toString、 equals、hashCodeメソッドの追加 /** productテーブルのEntity */ @Data public class Product { /** 商品コード */ private Integer productCode; /** 商品名 */ private String productName; } @Dataアノテーションを付ける
  11. 11. Lombokを使った冗長コードの排除  デフォルトコンストラクタの追加 /** productテーブルのEntity */ @Data @NoArgsConstructor public class Product { /** 商品コード */ private Integer productCode; /** 商品名 */ private String productName; } @NoArgsConstructor アノテーションを付ける
  12. 12. Lombokを使った冗長コードの排除  フィールド初期化用コンストラクタの追加 /** productテーブルのEntity */ @Data @NoArgsConstructor @AllArgsConstructor public class Product { /** 商品コード */ private Integer productCode; /** 商品名 */ private String productName; } @ AllArgsConstructor アノテーションを付ける
  13. 13. Lombokを使った冗長コードの排除  以上 /** productテーブルのEntity */ @Data @NoArgsConstructor @AllArgsConstructor public class Product { /** 商品コード */ private Integer productCode; /** 商品名 */ private String productName; }
  14. 14. Lombokを使ってBuilderを追加  Bulderを追加する。 /** productテーブルのEntity */ @Data @NoArgsConstructor @AllArgsConstructor @Builder public class Product { /** 商品コード */ private Integer productCode; /** 商品名 */ private String productName; }
  15. 15. Lombokを使ってBuilderを追加  Bulderを使う。 Product product = Product.builder() .productCode(1) .productName(“ガム”) .build(); 任意のフィールドのみを初期化した インスタンスを作成できる
  16. 16. Maven依存関係  Maven依存関係に下記を追加する。 <dependencies> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.14.0</version> <scope>provided</scope> </dependency> </dependencies>
  17. 17. IntelliJのPlugin  IntelliJのPluginを追加する。 設定画面を開いて 「Plugins」を選択 キーワードに 「lombok」を入力 リストに出ない場合は 「Browse」をクリック
  18. 18. IntelliJのPlugin  IntelliJのPluginを追加する。 「Lombok Plugin」を選択 ダウンロードと インストールをする
  19. 19. IntelliJのPlugin  IntelliJのPluginを追加する。 IntelliJを 再起動して完了
  20. 20. まとめ  Lombokを使って定型的なコードをなるべく排除し、 それで浮いた時間を使って本来やるべき実装に集中しましょう。

×