SlideShare uma empresa Scribd logo
1 de 14
lombokについて
平成28年4月 社内発表
今日やる事
 lombok?
 lombok導入
 よく使うアノテーション1(@Value 、@Data、@Getter、@Setter)+デモ
 よく使うアノテーション2(@NonNull)+デモ
 よく使うアノテーション3(@Builder)+デモ
 メリット・デメリット
 まとめ
lombok?
 ロンボック、もしくはロンボクと読む。
 Javaのボイラープレートコード(定型的に書かれるよくあるコード)を自動で生
成してくれるライブラリ
 Javaのコーディングにおける冗長性をある程度軽減してくれる。
→あくまである程度。
lombok導入
※ここではIDE(Eclipse)への導入を想定しています。
1.公式サイトからjarファイルをDLする。
→公式サイトURL:https://projectlombok.org/
2.DLしたjarファイルを実行(ダブルクリックでOK)し、IDEの実行ファイルが存
在するフォルダを選択する。
3.Install/Updateボタンを押してインストール実行する。
よく使うアノテーション1
(@Data、@Value、@Getter、@Setter)
 @Data
 クラス内で宣言された全フィールドのアクセサ自動生成
 toString、equals、hashCodeの自動生成
 @Value
 クラス内で宣言された全フィールドのゲッター自動生成
 クラス内で宣言された全フィールドを引数にしたコンストラクタ自動生成
 クラス内で宣言された全フィールドにprivate finalを自動で付与
 toString、equals、hashCodeの自動生成
 @Getter、@Setter
 付与したフィールドに対応したゲッター、セッターの自動生成
@Data
public class Sample{
private Integer value1;
private Integer value2;
public Integer getValue1(){
}
public void setValue1 (Integer value1) {
}
public Integer getValue2(){
}
public void setValue2 (Integer value2) {
}
public boolean equals (Object obj) {
}
public int hashCode () {
}
public String toString () {
}
}
@Data
public class Sample{
private Integer value1;
private Integer value2;
}
・フィールドはprivateが原則の為、
アクセサが必要
・toString、hashCode、equalsもほ
ぼ同じ内容を毎度書く
・見通しが悪くなる
・@Dataを使用する事で左のコー
ドと同等のものを以下のコード量
で実現可能
@Value
public class Sample{
private final Integer value1;
private final Integer value2;
public sample(Integer value1, Integer
value2){
}
public Integer getValue1(){
}
public Integer getValue2(){
}
public boolean equals (Object obj) {
}
public int hashCode () {
}
public String toString () {
}
}
@Value
public class Sample{
Integer value1;
Integer value2;
}
・イミュータブルなクラスを書く
場合、getterメソッドと全フィー
ルドを引数としたコンストラクタ
を書く必要があるが、これも毎度
同じ
・@Valueを使用する事で左のコー
ドと同等のものを以下のコード量
で実現可能
・private final は自動的に付与さ
れる為、漏れがなくなる。
@Getter、@Setter
@Getter
public class Sample{
private Integer value1;
private Integer value2;
}
@Setter
public class Sample{
private Integer value1;
private Integer value2;
}
・Getterのみ、Setterのみ使いた
い場合に使用出来る。
よく使うアノテーション2(@NonNull)
 @NonNull
 付与したフィールドを非Nullとして扱う。
@NonNull
public class Sample{
private Integer value1;
private Integer value2;
public void setValue1(Integer value1){
if(value1 == null){
throw new NullPointerException();
}
}
}
・Null値を不許可にする場合、
Setter内でチェックを行うように
する事が多い。
@Data
public class Sample{
@NonNull
private Integer value1;
private Integer value2;
}
・@Dataや@Value、@Setterなどと
組み合わせてNul不許可設定がアノ
テーションで指定出来る
よく使うアノテーション3(@Builder)
 @Builder
 付与したクラスのBuilderを自動生成する。
@Builder
@Data
@Builder
public class Sample{
private Integer value1;
private Integer value2;
}
public class Main{
public static void main (String[] args) {
Sample sa = Sample.builder()
.value1(1)
.value2(2)
.build();
}
}
・インスタンス生成を任せる
Builderクラスを自動的に作成出来
る。
・Builderクラスにインスタンス生
成を任せる事で初期化を安全にか
つ簡易に出来る
メリット・デメリット
 メリット
 コーディングにおける冗長性をなくす。
 生産性が上がる。
 コードの見通しがよくなる。
 バグを埋め込む可能性が減る。
 使ってて楽しい。
 デメリット
 魔法に見える。
 知らない人が保守等でソースを見た時に混乱してしまう。
 スキルレベルバラバラの環境で使うのは厳しい。
まとめ
 Javaのボイラープレートコード(定型的に書かれるよくあるコード)を自動的に
補完してくれるライブラリがlombok
 プロジェクトへの導入は要検討
 開発が良くても保守の人達が分からないというパターンもある。
 開発メンバーがそのまま保守に入れるのなら使ってみてもいいかもしれない。
 もしくはきちんと引き継げる場合も使える?
 個人でコーディングする場合は必須(にした方がいい)
 あくまで個人的な意見。

Mais conteúdo relacionado

Mais procurados

翻訳支援ツールの紹介
翻訳支援ツールの紹介翻訳支援ツールの紹介
翻訳支援ツールの紹介
Self Employed
 
まめフラスコで遊ぼう
まめフラスコで遊ぼうまめフラスコで遊ぼう
まめフラスコで遊ぼう
libpanda
 

Mais procurados (10)

Xcode 7で始めるCI
Xcode 7で始めるCIXcode 7で始めるCI
Xcode 7で始めるCI
 
きつねさんでもわかる Firefox OS コードリーディング入門
きつねさんでもわかる Firefox OS コードリーディング入門きつねさんでもわかる Firefox OS コードリーディング入門
きつねさんでもわかる Firefox OS コードリーディング入門
 
Androidのリカバリシステム (Androidのシステムアップデート)
Androidのリカバリシステム (Androidのシステムアップデート)Androidのリカバリシステム (Androidのシステムアップデート)
Androidのリカバリシステム (Androidのシステムアップデート)
 
SendGridサンプルの紹介
SendGridサンプルの紹介SendGridサンプルの紹介
SendGridサンプルの紹介
 
インフラエンジニアのためのプレゼン技術
インフラエンジニアのためのプレゼン技術インフラエンジニアのためのプレゼン技術
インフラエンジニアのためのプレゼン技術
 
TDD Boot Camp Tokyo for c++ 2014-01 デモ用資料
TDD Boot Camp Tokyo for c++ 2014-01 デモ用資料TDD Boot Camp Tokyo for c++ 2014-01 デモ用資料
TDD Boot Camp Tokyo for c++ 2014-01 デモ用資料
 
Router chat for np
Router chat for npRouter chat for np
Router chat for np
 
剣と魔法のログレス(PC版)の自慢と課題
剣と魔法のログレス(PC版)の自慢と課題剣と魔法のログレス(PC版)の自慢と課題
剣と魔法のログレス(PC版)の自慢と課題
 
翻訳支援ツールの紹介
翻訳支援ツールの紹介翻訳支援ツールの紹介
翻訳支援ツールの紹介
 
まめフラスコで遊ぼう
まめフラスコで遊ぼうまめフラスコで遊ぼう
まめフラスコで遊ぼう
 

Semelhante a 20160422_lombokについて

DLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングDLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミング
terurou
 
[20130624]最近の開発環境について話してみる sakata
[20130624]最近の開発環境について話してみる sakata[20130624]最近の開発環境について話してみる sakata
[20130624]最近の開発環境について話してみる sakata
VOYAGE GROUP
 
XMLpro 1回目 環境導入
XMLpro 1回目 環境導入XMLpro 1回目 環境導入
XMLpro 1回目 環境導入
XMLProJ2014
 
Python東海GAEやってみた
Python東海GAEやってみたPython東海GAEやってみた
Python東海GAEやってみた
Mori Shingo
 

Semelhante a 20160422_lombokについて (20)

Lombok ハンズオン
Lombok ハンズオンLombok ハンズオン
Lombok ハンズオン
 
LibreOffice を Windows 上でビルドする UPDATE2
LibreOffice を Windows 上でビルドする UPDATE2LibreOffice を Windows 上でビルドする UPDATE2
LibreOffice を Windows 上でビルドする UPDATE2
 
インフラ運用管理ツールとGolang OSS運用管理勉強会LT
インフラ運用管理ツールとGolang OSS運用管理勉強会LTインフラ運用管理ツールとGolang OSS運用管理勉強会LT
インフラ運用管理ツールとGolang OSS運用管理勉強会LT
 
Mongo dbを知ろう devlove関西
Mongo dbを知ろう   devlove関西Mongo dbを知ろう   devlove関西
Mongo dbを知ろう devlove関西
 
XPagesDay2013 【B-4】 Dojo 徹底解剖! ~ XPages で Dojo を有効活用するには ~
XPagesDay2013 【B-4】 Dojo 徹底解剖! ~ XPages で Dojo を有効活用するには ~XPagesDay2013 【B-4】 Dojo 徹底解剖! ~ XPages で Dojo を有効活用するには ~
XPagesDay2013 【B-4】 Dojo 徹底解剖! ~ XPages で Dojo を有効活用するには ~
 
DLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングDLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミング
 
[20130624]最近の開発環境について話してみる sakata
[20130624]最近の開発環境について話してみる sakata[20130624]最近の開発環境について話してみる sakata
[20130624]最近の開発環境について話してみる sakata
 
XMLpro 1回目 環境導入
XMLpro 1回目 環境導入XMLpro 1回目 環境導入
XMLpro 1回目 環境導入
 
Debug Hacks - 第4回つくらぐ勉強会
Debug Hacks - 第4回つくらぐ勉強会Debug Hacks - 第4回つくらぐ勉強会
Debug Hacks - 第4回つくらぐ勉強会
 
Android4.2徹底解剖!
Android4.2徹底解剖!Android4.2徹底解剖!
Android4.2徹底解剖!
 
What's new in 4.0 of LibreOffice / LibreOffice 4.0の新機能
What's new in 4.0 of LibreOffice / LibreOffice 4.0の新機能What's new in 4.0 of LibreOffice / LibreOffice 4.0の新機能
What's new in 4.0 of LibreOffice / LibreOffice 4.0の新機能
 
Driverについて
DriverについてDriverについて
Driverについて
 
プロ文.com 勉強会 Phase 1
プロ文.com 勉強会 Phase 1プロ文.com 勉強会 Phase 1
プロ文.com 勉強会 Phase 1
 
LibreOfficeをビルドしてみよう(Windows)
LibreOfficeをビルドしてみよう(Windows)LibreOfficeをビルドしてみよう(Windows)
LibreOfficeをビルドしてみよう(Windows)
 
ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜
ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜
ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜
 
Python東海GAEやってみた
Python東海GAEやってみたPython東海GAEやってみた
Python東海GAEやってみた
 
Dockerで開発環境をデリバる
Dockerで開発環境をデリバるDockerで開発環境をデリバる
Dockerで開発環境をデリバる
 
LibreOfficeをWindows上でビルドする
LibreOfficeをWindows上でビルドするLibreOfficeをWindows上でビルドする
LibreOfficeをWindows上でビルドする
 
Code igniterを初めて使うときにはまった4つのポイント
Code igniterを初めて使うときにはまった4つのポイントCode igniterを初めて使うときにはまった4つのポイント
Code igniterを初めて使うときにはまった4つのポイント
 
Scalaでのプログラム開発
Scalaでのプログラム開発Scalaでのプログラム開発
Scalaでのプログラム開発
 

20160422_lombokについて