SlideShare a Scribd company logo
JSUG 2015
Spring in Summer 夏なのにSpring 菊池 陽一
菊池 陽一
Github: yo1000
hatena: Yoichi-KIKUCHI
Spring 歴: 5年
2007.04

中堅 SIer 新卒入社
2009.12

社内標準フレームワーク開発

Spring Framework との出会い
2011.04
社内標準フレームワーク更新
2012.08
リクルート入社 (ニジボックス)
2013.07
リクルートライフスタイル転籍
MARQREL、HOTPEPPER で
Spring 適用を模索
みなさん
Spring どんなふうに
使っていますか?
• 社内標準
• 受託案件
• 自社プロダクト
• ベンダプロダクト
• 日曜プロダクト
• 社内標準
• 受託案件
• 自社プロダクト
• ベンダプロダクト
• 日曜プロダクト
• 社内標準
• 受託案件
• 自社プロダクト
• ベンダプロダクト
• 日曜プロダクト
• 社内標準
• 受託案件
• 自社プロダクト
• ベンダプロダクト
• 日曜プロダクト
• 社内標準
• 受託案件
• 自社プロダクト
• ベンダプロダクト
• 日曜プロダクト
• 社内標準
• 受託案件
• 自社プロダクト
• ベンダプロダクト
• 日曜プロダクト
なんにでも
適用できますよね
(とくにバックエンドシステムでは)
非常に多機能かつ
柔軟に設計されている
Spring ならでは
Java をメインに
システム構築して
いるのであれば
Spring を
選ばない手はない
むしろ
Spring に非ずんば
Java に非ず
現在 それくらい
採用の広がっている
実感があります
たとえば Atlassian
Confluence では
ランタイムオブジェクトの管理に
Spring を使用している
たとえば JetBrains
TeamCity では
独自拡張した Spring
コンテナを使用している
たとえば JetBrains
サードパーティ製

フルスタックフレームワークで
IntelliJ のデフォルトサポートが
あるのは Spring のみ!
現在 国外のみならず
国内でも広く認知され
採用に至っている
そんな Spring ですが
実際の業務適用に
ついてはというと...
いままさに仕掛中!とか

これからやりたい!とか
そこで これまでの
5年すこしで感じた
Spring についての
あれこれをご紹介
株式会社リクルートライフスタイル
菊池 陽一
株式会社リクルートライフスタイル
菊池 陽一
2007.04

中堅 SIer 新卒入社
2009.12

社内標準フレームワーク開発

Spring Framework との出会い
2011.04
社内標準フレームワーク更新
2012.08
リクルート入社 (ニジボックス)
2013.07
リクルートライフスタイル転籍
MARQREL、HOTPEPPER で
Spring の適用を模索
2007.11

Spring Framework 2.5
2009.12

Spring Framework 3.0
2011.12

Spring Framework 3.1
2013.12
Spring Framework 4.0
略歴
2007.04

中堅 SIer 新卒入社
2009.12

社内標準フレームワーク開発

Spring Framework との出会い
2011.04
社内標準フレームワーク更新
2012.08
リクルート入社 (ニジボックス)
2013.07
リクルートライフスタイル転籍
MARQREL、HOTPEPPER で
Spring の適用を模索
2007.11

Spring Framework 2.5
2009.12

Spring Framework 3.0
2011.12

Spring Framework 3.1
2013.12
Spring Framework 4.0
略歴
バッドノウハウ収集期
2007.04

中堅 SIer 新卒入社
2009.12

社内標準フレームワーク開発

Spring Framework との出会い
2011.04
社内標準フレームワーク更新
2012.08
リクルート入社 (ニジボックス)
2013.07
リクルートライフスタイル転籍
MARQREL、HOTPEPPER で
Spring の適用を模索
2007.11

Spring Framework 2.5
2009.12

Spring Framework 3.0
2011.12

Spring Framework 3.1
2013.12
Spring Framework 4.0
略歴
ベタープラクティス実践期
バッドノウハウ収集期
当時そんなつもりは全くありませんでしたが
振り返ってみるとバッドノウハウが多かった...
社内標準フレームワーク開発
● Spring Framework 3.0 GA ベース
● MVC フレームワークには Wicket を採用
● サービスレイヤ以下を自社開発
• ビジネスプロセスをテンプレートパターン

により実装
• bean 定義でサービス同士を相互に呼び出せるよ
うな仕組みを作りこんでいた
社内標準フレームワーク開発
● Spring Framework 3.0 GA ベース
● MVC フレームワークには Wicket を採用
● サービスレイヤ以下を自社開発
• ビジネスプロセスをテンプレートパターン

により実装
• bean 定義でサービス同士を相互に呼び出せるよ
うな仕組みを作りこんでいた
Good!
社内標準フレームワーク開発
● Spring Framework 3.0 GA ベース
● MVC フレームワークには Wicket を採用
● サービスレイヤ以下を自社開発
• ビジネスプロセスをテンプレートパターン

により実装
• bean 定義でサービス同士を相互に呼び出せるよ
うな仕組みを作りこんでいた
Good!
Bad!!
社内標準フレームワーク開発
● Spring Framework 3.0 GA ベース
● MVC フレームワークには Wicket を採用
● サービスレイヤ以下を自社開発
• ビジネスプロセスをテンプレートパターン

により実装
• bean 定義でサービス同士を相互に呼び出せるよ
うな仕組みを作りこんでいた
Good!
Bad!!
Bad!!
何が良くなかったのか
一般的な
Spring Project
Controller
Service
Repository
Template
Spring Framework
Aspect J
View
Controller
Service
Repository
Template
Spring Framework
Aspect J
View
Controller
Service
Repository
Template
Spring Framework
Aspect J
View
Request
Controller
Service
Repository
Template
Spring Framework
Aspect J
View
Controller
Service
Repository
Template
Spring Framework
Aspect J
View
Controller
Service
Repository
Template
Spring Framework
Aspect J
View
Request
社内標準としていた
フレームワーク
InHouse
Service
Spring Framework
Aspect J
Wicket
Controller
View
DB Access
Business
Requirements
InHouse
Service
Spring Framework
Aspect J
Wicket
Controller
View
DB Access
Business
Requirements
MVC フレームワークを
Wicket に固定していた
Wicket
Controller
View
InHouse
Service
Spring Framework
Aspect J
Wicket
Controller
View
DB Access
Business
Requirements
MVC フレームワークを
Wicket に固定していた
Wicket
Controller
View
Bad!!
InHouse
Service
Spring Framework
Aspect J
Wicket
Controller
View
DB Access
Business
Requirements
MVC フレームワークを
Wicket に固定していた
Wicket
Controller
View
Bad!!
進化し続けるフロント技術や
これに伴う要件に応えるため
せめて View は柔軟に
変更可能であるべき
Better
事実として
View を取りまく
フレームワークは
変化し続けている
Servlet + JSP
Struts + JSP
Struts + Velocity
Struts2 + FreeMaker
Spring MVC + FreeMaker
Spring MVC + Thymeleaf
バッドノウハウ.1
• 適用する MVC Framework を制限してしまった
• 制限して、同じものを繰り返し使わせることで

確実にナレッジは蓄積しやすくなるが、

要件に応えられないのであれば意味は無い
• あるべき姿は柔軟に選択可能な状態
• そのうえで選択肢となりうるフレームワークの

特徴やメリット/デメリット/ナレッジなどが

事前に展開されているとより良い
InHouse
Service
Spring Framework
Aspect J
Wicket
Controller
View
DB Access
Business
Requirements
InHouse
Service
Spring Framework
Aspect J
Wicket
Controller
View
DB Access
Business
Requirements
Service レイヤ以降の本来の構成を無視して
テンプレートパターンを適用
InHouse
Service DB Access
Business
Requirements
InHouse
Service
Spring Framework
Aspect J
Wicket
Controller
View
DB Access
Business
Requirements
Service レイヤ以降の本来の構成を無視して
テンプレートパターンを適用
InHouse
Service DB Access
Business
Requirements
Bad!!
InHouse
Service
Spring Framework
Aspect J
Wicket
Controller
View
DB Access
Business
Requirements
Service レイヤ以降の本来の構成を無視して
テンプレートパターンを適用
InHouse
Service DB Access
Business
Requirements
Bad!!
コンポーネントごとの
DI を意識した上で
適切に責務分割を行い
疎な状態を維持する Better
適切な責務分割とは?
Spring には
都合の良いことに

各種コンポーネント
アノテーションが
用意されている
@Controller
@Service
@Repository
@Component
@Configuration
etc...
Controller
Service
Repository
Template
Spring Framework
Aspect J
View
@Controller
@Service
@Repository@Component
@Configuration
これに倣うだけで
適切に責務は
分割される
本当に適切?
基準は?
テストがしやすいか
バッドノウハウ.2
• DI を無視して適切な責務分割を行っていなかった
• テンプレートパターンは有用な

デザインパターンのひとつだが、

どんな規模でも有効に作用するとは限らない
• 適切な責務分割を意識する
• Spring の場合、都合の良いことに、責務を

各種コンポーネントアノテーションで

定義しておりこれに倣うだけで適切な分割が働く
社内標準フレームワーク開発
● Spring Framework 3.1 GA ベース
● MVC フレームワークには Struts2 を採用
● サービスレイヤ以下を自社開発
• テンプレートパターンによる実装
• bean 定義でサービス同士を相互に呼び出せるよ
うな仕組みを実装
第2弾
社内標準フレームワーク開発
● Spring Framework 3.1 GA ベース
● MVC フレームワークには Struts2 を採用
● サービスレイヤ以下を自社開発
• テンプレートパターンによる実装
• bean 定義でサービス同士を相互に呼び出せるよ
うな仕組みを実装
Good!
Bad!!
Bad!!
第2弾
良くなかった
ポイントはほぼ同じ
なので 割愛
その後
転職して
新たな環境へと移り...
実はしばらくの間

Spring を適用する
機会に恵まれなかった
そんな中
目にしてきたものは
オレオレ
フレームワーク
リクルートでの開発事情
● ニジボックス (2012-2013)
• カードエンジンと呼ばれるソシャゲ開発用の

プロジェクトテンプレートが用意されていた
• PHP によるオレオレフレームワーク
● リクルートライフスタイル (2013-)
• R2 と呼ばれる Seasar2 + SAStruts ベースの

オレオレフレームワーク
• 前職で作ってきたものと同じ臭いを感じた
リクルートでの開発事情
● ニジボックス (2012-2013)
• カードエンジンと呼ばれるソシャゲ開発用の

プロジェクトテンプレートが用意されていた
• PHP によるオレオレフレームワーク
● リクルートライフスタイル (2013-)
• R2 と呼ばれる Seasar2 + SAStruts ベースの

オレオレフレームワーク
• 前職で作ってきたものと同じ臭いを感じた
Bad!!
リクルートでの開発事情
● ニジボックス (2012-2013)
• カードエンジンと呼ばれるソシャゲ開発用の

プロジェクトテンプレートが用意されていた
• PHP によるオレオレフレームワーク
● リクルートライフスタイル (2013-)
• R2 と呼ばれる Seasar2 + SAStruts ベースの

オレオレフレームワーク
• 前職で作ってきたものと同じ臭いを感じた
Bad!!
Bad!!
中途入社したわたしは
非常に苦労しました
オレオレ
フレームワークに
ありがちな多くの事象が
現場で発生していた
整備不足の
ドキュメント
(ネットで引いても もちろん見つからない)
フレームワークに
縛られるインフラ
(セキュリティリスクに対するコスト増を招く)
使用可能な
技術が限定的
(新たな技術を取り入れるにはトンチが必要)
フレームワークのクセ
を把握していることが
仕事になる
(クセというか不具合というか...)
なんでこんなことすら
できないの!??
Spring なら30分で
解決するのに...!
そんなものに
あふれていた
こう 思うに至る
  オレオレ
フレームワーク 
ダメ。ゼッタイ。
やめましょう
バッドノウハウ収集期

      まとめ
● Spring を使用する上で、

周辺アーキテクチャに縛りを加えてはいけない
● Spring のレイヤデザイン (Controller/Service/
Repository/Template) を無視してはいけない
● 作り方に制限が加わるような

独自の作り込みをおこなってはいけない
バッドノウハウ収集期

      まとめ
● Spring を使用する上で、

周辺アーキテクチャに縛りを加えてはいけない
● Spring のレイヤデザイン (Controller/Service/
Repository/Template) を無視してはいけない
● 作り方に制限が加わるような

独自の作り込みをおこなってはいけない
過度な独自仕様の作りこみや
オレオレフレームワーク
の開発を行ってはいけない
株式会社リクルートライフスタイル
菊池 陽一
株式会社リクルートライフスタイル
菊池 陽一
2007.04

中堅 SIer 新卒入社
2009.12

社内標準フレームワーク開発

Spring Framework との出会い
2011.04
社内標準フレームワーク更新
2012.08
リクルート入社 (ニジボックス)
2013.07
リクルートライフスタイル転籍
MARQREL、HOTPEPPER で
Spring の適用を模索
2007.11

Spring Framework 2.5
2009.12

Spring Framework 3.0
2011.12

Spring Framework 3.1
2013.12
Spring Framework 4.0
略歴
2007.04

中堅 SIer 新卒入社
2009.12

社内標準フレームワーク開発

Spring Framework との出会い
2011.04
社内標準フレームワーク更新
2012.08
リクルート入社 (ニジボックス)
2013.07
リクルートライフスタイル転籍
MARQREL、HOTPEPPER で
Spring の適用を模索
2007.11

Spring Framework 2.5
2009.12

Spring Framework 3.0
2011.12

Spring Framework 3.1
2013.12
Spring Framework 4.0
略歴
ベタープラクティス実践期
ベタープラクティス実践記
ベタープラクティス実践記
ベタープラクティス実践記
?
ベタープラクティス実践記
エンドレスに改善しつづけたいので
あえて「ベスト」という言葉は使用していません
これまで集めた
バッドノウハウを
もとに より良い
使い方を考えてみる
集まったバッドノウハウたち
● Spring を使用する上で、

周辺アーキテクチャに縛りを加えてはいけない
● Spring のレイヤデザイン (Controller/Service/
Repository/Template) を無視してはいけない
● 作り方に制限が加わるような

独自の作り込みをおこなってはいけない
集まったバッドノウハウたち
● Spring を使用する上で、

周辺アーキテクチャに縛りを加えてはいけない
● Spring のレイヤデザイン (Controller/Service/
Repository/Template) を無視してはいけない
● 作り方に制限が加わるような

独自の作り込みをおこなってはいけない
Spring を使用する上で、

周辺アーキテクチャに縛りを加えてはいけない
Spring を使用する上で、

周辺アーキテクチャに縛りを加えてはいけない
どうするべきか
Spring を使用する上で、

周辺アーキテクチャに縛りを加えてはいけない
どうするべきか
>> Spring では、HTML や JSP などの他、

レスポンス可能なあらゆるものを

Controller が返却できることを意識する
Spring を使用する上で、

周辺アーキテクチャに縛りを加えてはいけない
より具体的には...
Spring を使用する上で、

周辺アーキテクチャに縛りを加えてはいけない
より具体的には...
>> Spring MVC を採用し、さまざまな View
へ対応可能にしておく。RestController
を使用してフロントを完全分離する (バック
エンドシステムの API 化を促進する)
Spring を使用する上で、

周辺アーキテクチャに縛りを加えてはいけない
@Controller

@RequestMapping("employees")

public class EmployeeController {

@RequestMapping(produces = "text/html")
public String getHtml() { return "employee"; }



@RequestMapping(produces = "application/json", consumes = ..)

@ResponseBody

public String getJson() { return new Employee("Yoichi", "RLS", 30); }
@RequestMapping(produces = "application/xml", consumes = ..)

@ResponseBody

public String getXml() { return new Employee("Yoichi", "RLS", 30); }
}
Spring を使用する上で、

周辺アーキテクチャに縛りを加えてはいけない
@Controller

@RequestMapping("employees")

public class EmployeeController {

@RequestMapping(produces = "text/html")
public String getHtml() { return "employee"; }



@RequestMapping(produces = "application/json", consumes = ..)

@ResponseBody

public String getJson() { return new Employee("Yoichi", "RLS", 30); }
@RequestMapping(produces = "application/xml", consumes = ..)

@ResponseBody

public String getXml() { return new Employee("Yoichi", "RLS", 30); }
}
扱うデータは同じ
Spring を使用する上で、

周辺アーキテクチャに縛りを加えてはいけない
@Controller

@RequestMapping("employees")

public class EmployeeController {

@RequestMapping(produces = "text/html")
public String getHtml() { return "employee"; }



@RequestMapping(produces = "application/json", consumes = ..)

@ResponseBody

public String getJson() { return new Employee("Yoichi", "RLS", 30); }
@RequestMapping(produces = "application/xml", consumes = ..)

@ResponseBody

public String getXml() { return new Employee("Yoichi", "RLS", 30); }
}
扱うデータは同じ
表現の方法が異なる
Spring を使用する上で、

周辺アーキテクチャに縛りを加えてはいけない
どうするべきか
>> Spring では、HTML や JSP などの他、

レスポンス可能なあらゆるものを

Controller が返却できることを意識する
Spring を使用する上で、

周辺アーキテクチャに縛りを加えてはいけない
どうするべきか
>> Spring では、HTML や JSP などの他、

レスポンス可能なあらゆるものを

Controller が返却できることを意識する
>> Spring では、RDB の他、スキーマレス
DB、ファイル、API、などあらゆる外部リ
ソースを永続化レイヤで扱うことを意識する
Spring を使用する上で、

周辺アーキテクチャに縛りを加えてはいけない
より具体的には...
>> Spring MVC を採用し、さまざまな View
へ対応可能にしておく。RestController
を使用してフロントを完全分離する (バック
エンドシステムの API 化を促進する)
Spring を使用する上で、

周辺アーキテクチャに縛りを加えてはいけない
より具体的には...
>> Spring MVC を採用し、さまざまな View
へ対応可能にしておく。RestController
を使用してフロントを完全分離する (バック
エンドシステムの API 化を促進する)
>> Repository レイヤを抽象化してどのよう
な外部リソースへも切替可能にしておく
Spring を使用する上で、

周辺アーキテクチャに縛りを加えてはいけない
public interface EmployeeRepository {

Employee getItem();

}

@Repository @Primary
public class EmployeeJdbcRepository implements EmployeeRepos.. {}

@Repository
public class EmployeeMongoRepository implements EmployeeRep.. {}
@Service
public class EmployeeService {
@Autowired
public EmployeeService(EmployeeRepository employeeRepository) {}
}
Spring を使用する上で、

周辺アーキテクチャに縛りを加えてはいけない
public interface EmployeeRepository {

Employee getItem();

}

@Repository @Primary
public class EmployeeJdbcRepository implements EmployeeRepos.. {}

@Repository
public class EmployeeMongoRepository implements EmployeeRep.. {}
@Service
public class EmployeeService {
@Autowired
public EmployeeService(EmployeeRepository employeeRepository) {}
}
Serviceが見るのは
interface
Spring を使用する上で、

周辺アーキテクチャに縛りを加えてはいけない
public interface EmployeeRepository {

Employee getItem();

}

@Repository @Primary
public class EmployeeJdbcRepository implements EmployeeRepos.. {}

@Repository
public class EmployeeMongoRepository implements EmployeeRep.. {}
@Service
public class EmployeeService {
@Autowired
public EmployeeService(EmployeeRepository employeeRepository) {}
}
Serviceが見るのは
interface
Primary 側が DI される
@Bean + @ConditionalOn 等の利用でより柔軟に
集まったバッドノウハウたち
● Spring を使用する上で、

周辺アーキテクチャに縛りを加えてはいけない
● Spring のレイヤデザイン (Controller/Service/
Repository/Template) を無視してはいけない
● 作り方に制限が加わるような

独自の作り込みをおこなってはいけない
Spring のレイヤデザイン (Controller/Service/
Repository/Template) を無視してはいけない
Spring のレイヤデザイン (Controller/Service/
Repository/Template) を無視してはいけない
どうするべきか
Spring のレイヤデザイン (Controller/Service/
Repository/Template) を無視してはいけない
どうするべきか
>> Spring のレイヤデザインに従い、

適切に責務分割を行うことを意識して、

各レイヤが疎な状態を維持できるように

注意して設計・実装を行う

Spring のレイヤデザイン (Controller/Service/
Repository/Template) を無視してはいけない
より具体的には...
Spring のレイヤデザイン (Controller/Service/
Repository/Template) を無視してはいけない
より具体的には...
>> @Controller
→ URL と View、Service の紐付けを表現
Spring のレイヤデザイン (Controller/Service/
Repository/Template) を無視してはいけない
より具体的には...
>> @Controller
→ URL と View、Service の紐付けを表現
>> @Service
→ 業務プロセスを表現
Spring のレイヤデザイン (Controller/Service/
Repository/Template) を無視してはいけない
より具体的には...
>> @Controller
→ URL と View、Service の紐付けを表現
>> @Service
→ 業務プロセスを表現
>> @Repository
→ 外部リソースアクセスを表現
Controller
Service
Repository
Template
Spring Framework
Aspect J
View
@Controller
@Service
@Repository@Component
@Configuration
集まったバッドノウハウたち
● Spring を使用する上で、

周辺アーキテクチャに縛りを加えてはいけない
● Spring のレイヤデザイン (Controller/Service/
Repository/Template) を無視してはいけない
● 作り方に制限が加わるような

独自の作り込みをおこなってはいけない
作り方に制限が加わるような

独自の作り込みをおこなってはいけない
作り方に制限が加わるような

独自の作り込みをおこなってはいけない
どうするべきか
作り方に制限が加わるような

独自の作り込みをおこなってはいけない
どうするべきか
>> Spring をなるべくそのまま使いましょう

これに限ります
作り方に制限が加わるような

独自の作り込みをおこなってはいけない
より具体的には...
作り方に制限が加わるような

独自の作り込みをおこなってはいけない
より具体的には...
>> Spring をベースにライブラリを

追加していく形で製品を作り上げる
作り方に制限が加わるような

独自の作り込みをおこなってはいけない
より具体的には...
>> Spring をベースにライブラリを

追加していく形で製品を作り上げる
>> 独自の作りこみを行う場合は、

コア機能に影響を与えないよう

着脱可能な実装を意識する

(プラグイン/アドオンのようなイメージで)
@Aspect @Component

public class ResponseWrapperAdvice {

@Around("execution(* com.yo1000.controller.*.*(..)) && "

+ "@annotation(..annotation.RequestMapping)")

public Object appendPrefix(ProceedingJoinPoint joinPoint) throws .. {
Object ret = joinPoint.proceed();
if (ret instanceof Employee) {

Employee emp = (Employee) ret;

emp.setName(emp.isMale() ? ("Mr. " + emp.getName())
: "Ms. " + emp.getName());
}
return ret;
}
}
作り方に制限が加わるような

独自の作り込みをおこなってはいけない
@Aspect @Component

public class ResponseWrapperAdvice {

@Around("execution(* com.yo1000.controller.*.*(..)) && "

+ "@annotation(..annotation.RequestMapping)")

public Object appendPrefix(ProceedingJoinPoint joinPoint) throws .. {
Object ret = joinPoint.proceed();
if (ret instanceof Employee) {

Employee emp = (Employee) ret;

emp.setName(emp.isMale() ? ("Mr. " + emp.getName())
: "Ms. " + emp.getName());
}
return ret;
}
}
作り方に制限が加わるような

独自の作り込みをおこなってはいけない
AOP を使用
@Aspect @Component

public class ResponseWrapperAdvice {

@Around("execution(* com.yo1000.controller.*.*(..)) && "

+ "@annotation(..annotation.RequestMapping)")

public Object appendPrefix(ProceedingJoinPoint joinPoint) throws .. {
Object ret = joinPoint.proceed();
if (ret instanceof Employee) {

Employee emp = (Employee) ret;

emp.setName(emp.isMale() ? ("Mr. " + emp.getName())
: "Ms. " + emp.getName());
}
return ret;
}
}
作り方に制限が加わるような

独自の作り込みをおこなってはいけない
AOP を使用
指定したメソッドパターン、

アノテーションパターンの処理に割り込む
ベタープラクティス実践記

      まとめ
● Spring MVC を使用した上で Microservices のよ
うな設計を意識してシステム間依存をなるべく疎な
状態に保つ (API 化、Repository の抽象化)
● Spring のレイヤデザイン (Controller/Service/
Repository/Template) に従った実装を意識する
● 独自の作り込みが発生する場合は、プラグイン的な
実装を心がける (Bad: 継承/Better: AOP)
ベタープラクティス実践記

      まとめ
● Spring MVC を使用した上で Microservices のよ
うな設計を意識してシステム間依存をなるべく疎な
状態に保つ (Repository の抽象化)
● Spring のレイヤデザイン (Controller/Service/
Repository/Template) をに従う
● 独自の作り込みが発生する場合は、プラグイン的な
実装を心がける (Bad: 継承/Better: AOP)
SpringFramework
の理解を深めましょう
株式会社リクルートライフスタイル
菊池 陽一
おわりに
バッドノウハウ収集期

      まとめ
● Spring を使用する上で、

周辺アーキテクチャに縛りを加えてはいけない
● Spring のレイヤデザイン (Controller/Service/
Repository/Template) を無視してはいけない
● 作り方に制限が加わるような

独自の作り込みをおこなってはいけない
過度な独自仕様の作りこみや
オレオレフレームワーク
の開発を行ってはいけない
ベタープラクティス実践記

      まとめ
● Spring MVC を使用した上で Microservices のよ
うな設計を意識してシステム間依存をなるべく疎な
状態に保つ (Repository の抽象化)
● Spring のレイヤデザイン (Controller/Service/
Repository/Template) をに従う
● 独自の作り込みが発生する場合は、プラグイン的な
実装を心がける (Bad: 継承/Better: AOP)
SpringFramework
の理解を深めましょう
おわりに
最終的な着地としては、わりと一般的なお話になってしまい
ました。ですが、Springは進化を続けています。今回お話し
た内容もいつ覆るかはわかりません。

わたしも5年前にSpringに触れ始めた頃には、現在の
SpringBootのような非常に簡単かつパワフルな機能が出てく
るとは思ってもいませんでした。そういう意味でも、わたし
自身もSpringの進化を引き続き追いかけて行きたいと思いま
す!
Appendix
vis
• KPI VISualizer
• システムに、時間と値の二軸表現可能な結果を返す
SQL を登録することで、これを動的にグラフ化し
て表示してくれるもの。
• Spring Boot を使用したプロジェクト。
• https://github.com/yo1000/vis
bluefairy
• Docker Web Client
• Docker Remote API をプロパティに設定して起動
すると、Docker イメージの閲覧や、コンテナの起
動が行える Web Client。
• Spring Boot を使用したプロジェクト。
• https://github.com/yo1000/bluefairy
dbspock
• spock ライクに DBUnit を使用できるようにした
ライブラリ
• Groovy を使用したプロジェクト。
• https://github.com/yo1000/dbspock
<dependencies>
<dependency>
<groupId>com.yo1000</groupId>
<artifactId>dbspock</artifactId>
<version>0.1.2.RELEASE</version>
</dependency>
</dependencies>
<repositories>
<repository>
<id>com.yo1000</id>
<name>yo1000 maven repository</name>
<url>http://yo1000.github.io/maven/</url>
</repository>
</repositories>
dbspock
class	
 RepositorySpec	
 extends	
 Specification	
 {	
 
	
 	
 	
 	
 def	
 "DBSpockTest"()	
 {	
 
	
 	
 	
 	
 	
 	
 	
 	
 setup:	
 
	
 	
 	
 	
 	
 	
 	
 	
 def	
 tester	
 =	
 new	
 DataSourceDatabaseTester(dataSource)	
 
	
 	
 	
 	
 	
 	
 	
 	
 def	
 data	
 =	
 {	
 
	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 _cols_	
 'SHOP_ID'	
 |	
 'SHOP_NAME'	
 	
 	
 	
 	
 |	
 'SHOP_CREATED'	
 
	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 shop	
 	
 	
 'SP-1'	
 	
 	
 	
 |	
 'BURGER	
 KING'	
 	
 	
 |	
 '2015-04-01'	
 
	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 shop	
 	
 	
 'SP-2'	
 	
 	
 	
 |	
 'RANDYS	
 DONUTS'	
 |	
 '2015-04-01'	
 
	
 	
 	
 	
 	
 	
 	
 	
 }	
 
	
 	
 	
 	
 	
 	
 	
 	
 def	
 flatxml	
 =	
 {	
 
	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 data.call()	
 
	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 data.build()	
 
	
 	
 	
 	
 	
 	
 	
 	
 }	
 
	
 	
 	
 	
 	
 	
 	
 	
 data.delegate	
 =	
 new	
 SpockLikeFlatXmlBuilder()	
 
	
 	
 	
 	
 	
 	
 	
 	
 tester.dataSet	
 =	
 new	
 FlatXmlDataSet(new	
 StringReader(flatxml.call()))	
 
	
 	
 	
 	
 	
 	
 	
 	
 tester.onSetup()	
 
	
 	
 	
 	
 	
 	
 	
 	
 expect:	
 
	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 ...
dbspock

More Related Content

What's hot

Lineにおけるspring frameworkの活用
Lineにおけるspring frameworkの活用Lineにおけるspring frameworkの活用
Lineにおけるspring frameworkの活用
Tokuhiro Matsuno
 
ほんとうに便利だった業務で使えるJava SE8新機能(JJUG CCC 2015 Spring)
ほんとうに便利だった業務で使えるJava SE8新機能(JJUG CCC 2015 Spring)ほんとうに便利だった業務で使えるJava SE8新機能(JJUG CCC 2015 Spring)
ほんとうに便利だった業務で使えるJava SE8新機能(JJUG CCC 2015 Spring)
Yuuki Fukuda
 
Seasar2で作った俺たちのサービスの今
Seasar2で作った俺たちのサービスの今Seasar2で作った俺たちのサービスの今
Seasar2で作った俺たちのサービスの今
Koichi Sakata
 
これから始めるSpringのwebアプリケーション
これから始めるSpringのwebアプリケーションこれから始めるSpringのwebアプリケーション
これから始めるSpringのwebアプリケーション
土岐 孝平
 
Grails 3.0先取り!? Spring Boot入門ハンズオン #jggug_boot
Grails 3.0先取り!? Spring Boot入門ハンズオン #jggug_bootGrails 3.0先取り!? Spring Boot入門ハンズオン #jggug_boot
Grails 3.0先取り!? Spring Boot入門ハンズオン #jggug_boot
Toshiaki Maki
 
こんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツールこんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツール
dcubeio
 
Spring I/O 2017での拡張のお話
Spring I/O 2017での拡張のお話Spring I/O 2017での拡張のお話
Spring I/O 2017での拡張のお話
Alisa Sasaki
 
Java8移行から始めた技術的負債との戦い(jjug ccc 2015 fall)
Java8移行から始めた技術的負債との戦い(jjug ccc 2015 fall)Java8移行から始めた技術的負債との戦い(jjug ccc 2015 fall)
Java8移行から始めた技術的負債との戦い(jjug ccc 2015 fall)
sogdice
 
Spring Bootで変わる Javaアプリ開発! #jsug
Spring Bootで変わる Javaアプリ開発! #jsugSpring Bootで変わる Javaアプリ開発! #jsug
Spring Bootで変わる Javaアプリ開発! #jsug
Toshiaki Maki
 
おれおれブログシステムにServiceWorkerを導入してみた #serviceworker
おれおれブログシステムにServiceWorkerを導入してみた #serviceworkerおれおれブログシステムにServiceWorkerを導入してみた #serviceworker
おれおれブログシステムにServiceWorkerを導入してみた #serviceworker
Toshiaki Maki
 
Consumer Driven Contractsで REST API/マイクロサービスをテスト #m3tech
Consumer Driven Contractsで REST API/マイクロサービスをテスト #m3techConsumer Driven Contractsで REST API/マイクロサービスをテスト #m3tech
Consumer Driven Contractsで REST API/マイクロサービスをテスト #m3tech
Toshiaki Maki
 
Spring oneを経験してよりよいwebサービスを作るために僕らが取り組むこと(document編)(SpringRESTDocs)
Spring oneを経験してよりよいwebサービスを作るために僕らが取り組むこと(document編)(SpringRESTDocs)Spring oneを経験してよりよいwebサービスを作るために僕らが取り組むこと(document編)(SpringRESTDocs)
Spring oneを経験してよりよいwebサービスを作るために僕らが取り組むこと(document編)(SpringRESTDocs)
Takahiro Fujii
 
Jsug 20160422 slides
Jsug 20160422 slidesJsug 20160422 slides
Jsug 20160422 slides
Yuichi Hasegawa
 
プログラム組んだら負け!実はHTML/CSSだけでできること2015夏
プログラム組んだら負け!実はHTML/CSSだけでできること2015夏プログラム組んだら負け!実はHTML/CSSだけでできること2015夏
プログラム組んだら負け!実はHTML/CSSだけでできること2015夏
Yusuke Hirao
 
13_B_5 Who is a architect?
13_B_5 Who is a architect?13_B_5 Who is a architect?
13_B_5 Who is a architect?
Atsushi Fukui
 
Spring4とSpring Bootで作る次世代Springアプリケーション #jjug #jsug
Spring4とSpring Bootで作る次世代Springアプリケーション #jjug #jsugSpring4とSpring Bootで作る次世代Springアプリケーション #jjug #jsug
Spring4とSpring Bootで作る次世代Springアプリケーション #jjug #jsugToshiaki Maki
 
20141116 jjug ccc_2014_keynote1_public
20141116 jjug ccc_2014_keynote1_public20141116 jjug ccc_2014_keynote1_public
20141116 jjug ccc_2014_keynote1_public
Yoshiharu Hashimoto
 
【Camphor ×サイボウズ】selenium勉強会
【Camphor ×サイボウズ】selenium勉強会【Camphor ×サイボウズ】selenium勉強会
【Camphor ×サイボウズ】selenium勉強会
Yuki Okada
 
クラウド時代だからSpring-Retryフレームワーク
クラウド時代だからSpring-Retryフレームワーククラウド時代だからSpring-Retryフレームワーク
クラウド時代だからSpring-Retryフレームワーク
Y Watanabe
 
SeleniumIDEとSelenium WebDriver × Node.js Seleniumで業務効率化する15分
SeleniumIDEとSelenium WebDriver × Node.js Seleniumで業務効率化する15分SeleniumIDEとSelenium WebDriver × Node.js Seleniumで業務効率化する15分
SeleniumIDEとSelenium WebDriver × Node.js Seleniumで業務効率化する15分
松田 千尋
 

What's hot (20)

Lineにおけるspring frameworkの活用
Lineにおけるspring frameworkの活用Lineにおけるspring frameworkの活用
Lineにおけるspring frameworkの活用
 
ほんとうに便利だった業務で使えるJava SE8新機能(JJUG CCC 2015 Spring)
ほんとうに便利だった業務で使えるJava SE8新機能(JJUG CCC 2015 Spring)ほんとうに便利だった業務で使えるJava SE8新機能(JJUG CCC 2015 Spring)
ほんとうに便利だった業務で使えるJava SE8新機能(JJUG CCC 2015 Spring)
 
Seasar2で作った俺たちのサービスの今
Seasar2で作った俺たちのサービスの今Seasar2で作った俺たちのサービスの今
Seasar2で作った俺たちのサービスの今
 
これから始めるSpringのwebアプリケーション
これから始めるSpringのwebアプリケーションこれから始めるSpringのwebアプリケーション
これから始めるSpringのwebアプリケーション
 
Grails 3.0先取り!? Spring Boot入門ハンズオン #jggug_boot
Grails 3.0先取り!? Spring Boot入門ハンズオン #jggug_bootGrails 3.0先取り!? Spring Boot入門ハンズオン #jggug_boot
Grails 3.0先取り!? Spring Boot入門ハンズオン #jggug_boot
 
こんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツールこんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツール
 
Spring I/O 2017での拡張のお話
Spring I/O 2017での拡張のお話Spring I/O 2017での拡張のお話
Spring I/O 2017での拡張のお話
 
Java8移行から始めた技術的負債との戦い(jjug ccc 2015 fall)
Java8移行から始めた技術的負債との戦い(jjug ccc 2015 fall)Java8移行から始めた技術的負債との戦い(jjug ccc 2015 fall)
Java8移行から始めた技術的負債との戦い(jjug ccc 2015 fall)
 
Spring Bootで変わる Javaアプリ開発! #jsug
Spring Bootで変わる Javaアプリ開発! #jsugSpring Bootで変わる Javaアプリ開発! #jsug
Spring Bootで変わる Javaアプリ開発! #jsug
 
おれおれブログシステムにServiceWorkerを導入してみた #serviceworker
おれおれブログシステムにServiceWorkerを導入してみた #serviceworkerおれおれブログシステムにServiceWorkerを導入してみた #serviceworker
おれおれブログシステムにServiceWorkerを導入してみた #serviceworker
 
Consumer Driven Contractsで REST API/マイクロサービスをテスト #m3tech
Consumer Driven Contractsで REST API/マイクロサービスをテスト #m3techConsumer Driven Contractsで REST API/マイクロサービスをテスト #m3tech
Consumer Driven Contractsで REST API/マイクロサービスをテスト #m3tech
 
Spring oneを経験してよりよいwebサービスを作るために僕らが取り組むこと(document編)(SpringRESTDocs)
Spring oneを経験してよりよいwebサービスを作るために僕らが取り組むこと(document編)(SpringRESTDocs)Spring oneを経験してよりよいwebサービスを作るために僕らが取り組むこと(document編)(SpringRESTDocs)
Spring oneを経験してよりよいwebサービスを作るために僕らが取り組むこと(document編)(SpringRESTDocs)
 
Jsug 20160422 slides
Jsug 20160422 slidesJsug 20160422 slides
Jsug 20160422 slides
 
プログラム組んだら負け!実はHTML/CSSだけでできること2015夏
プログラム組んだら負け!実はHTML/CSSだけでできること2015夏プログラム組んだら負け!実はHTML/CSSだけでできること2015夏
プログラム組んだら負け!実はHTML/CSSだけでできること2015夏
 
13_B_5 Who is a architect?
13_B_5 Who is a architect?13_B_5 Who is a architect?
13_B_5 Who is a architect?
 
Spring4とSpring Bootで作る次世代Springアプリケーション #jjug #jsug
Spring4とSpring Bootで作る次世代Springアプリケーション #jjug #jsugSpring4とSpring Bootで作る次世代Springアプリケーション #jjug #jsug
Spring4とSpring Bootで作る次世代Springアプリケーション #jjug #jsug
 
20141116 jjug ccc_2014_keynote1_public
20141116 jjug ccc_2014_keynote1_public20141116 jjug ccc_2014_keynote1_public
20141116 jjug ccc_2014_keynote1_public
 
【Camphor ×サイボウズ】selenium勉強会
【Camphor ×サイボウズ】selenium勉強会【Camphor ×サイボウズ】selenium勉強会
【Camphor ×サイボウズ】selenium勉強会
 
クラウド時代だからSpring-Retryフレームワーク
クラウド時代だからSpring-Retryフレームワーククラウド時代だからSpring-Retryフレームワーク
クラウド時代だからSpring-Retryフレームワーク
 
SeleniumIDEとSelenium WebDriver × Node.js Seleniumで業務効率化する15分
SeleniumIDEとSelenium WebDriver × Node.js Seleniumで業務効率化する15分SeleniumIDEとSelenium WebDriver × Node.js Seleniumで業務効率化する15分
SeleniumIDEとSelenium WebDriver × Node.js Seleniumで業務効率化する15分
 

Similar to Jsug2015 summer spring適用におけるバッドノウハウとベタープラクティス

いるけどないからつくってみたよ高速モバイルプッシュ配信くん #cmdevio
いるけどないからつくってみたよ高速モバイルプッシュ配信くん #cmdevioいるけどないからつくってみたよ高速モバイルプッシュ配信くん #cmdevio
いるけどないからつくってみたよ高速モバイルプッシュ配信くん #cmdevio
fd0
 
スキトラ Spring + mybatis
スキトラ Spring + mybatisスキトラ Spring + mybatis
スキトラ Spring + mybatis
小川 昌吾
 
SpringOne Platform 2018 全体報告
SpringOne Platform 2018 全体報告SpringOne Platform 2018 全体報告
SpringOne Platform 2018 全体報告
Takuya Iwatsuka
 
SpringOne Platform 2018 全体報告
SpringOne Platform 2018 全体報告SpringOne Platform 2018 全体報告
SpringOne Platform 2018 全体報告
apkiban
 
アジャイル開発&TFS導入
アジャイル開発&TFS導入アジャイル開発&TFS導入
アジャイル開発&TFS導入
You&I
 
Pivotal Trackerでアジャイルなプロジェクト管理
Pivotal Trackerでアジャイルなプロジェクト管理Pivotal Trackerでアジャイルなプロジェクト管理
Pivotal Trackerでアジャイルなプロジェクト管理
You&I
 
ユーザー企業における標準化のあり方 : QCon Tokyo 2010
ユーザー企業における標準化のあり方 : QCon Tokyo 2010ユーザー企業における標準化のあり方 : QCon Tokyo 2010
ユーザー企業における標準化のあり方 : QCon Tokyo 2010
Yusuke Suzuki
 
Agile Japan 2010 「変化を受け入れるアジャイルなプロジェクトマネジメントと現場 &lt;ツール・環境篇>」
Agile Japan 2010 「変化を受け入れるアジャイルなプロジェクトマネジメントと現場 &lt;ツール・環境篇>」Agile Japan 2010 「変化を受け入れるアジャイルなプロジェクトマネジメントと現場 &lt;ツール・環境篇>」
Agile Japan 2010 「変化を受け入れるアジャイルなプロジェクトマネジメントと現場 &lt;ツール・環境篇>」
Yusuke Suzuki
 
業務システムで使うSpring Dynamic Modules
業務システムで使うSpring Dynamic Modules業務システムで使うSpring Dynamic Modules
業務システムで使うSpring Dynamic ModulesHiroki Kondo
 
Device Farm を使ったスマホアプリの自動テスト
Device Farm を使ったスマホアプリの自動テストDevice Farm を使ったスマホアプリの自動テスト
Device Farm を使ったスマホアプリの自動テスト
健一 辰濱
 
イノベーションスプリント2011 infragisticsにおける世界分散アジャイル開発事例~ communication matters ~
イノベーションスプリント2011 infragisticsにおける世界分散アジャイル開発事例~ communication matters ~イノベーションスプリント2011 infragisticsにおける世界分散アジャイル開発事例~ communication matters ~
イノベーションスプリント2011 infragisticsにおける世界分散アジャイル開発事例~ communication matters ~InnovationSprint2011
 
Lightning componentとlightning design system
Lightning componentとlightning design systemLightning componentとlightning design system
Lightning componentとlightning design system
Noriko Iwai
 
ぱぱっと理解するSpring Cloudの基本
ぱぱっと理解するSpring Cloudの基本ぱぱっと理解するSpring Cloudの基本
ぱぱっと理解するSpring Cloudの基本
kazuki kumagai
 
サイドプロジェクトで使う Azure DevOps
サイドプロジェクトで使う Azure DevOpsサイドプロジェクトで使う Azure DevOps
サイドプロジェクトで使う Azure DevOps
Shuhei Eda
 
Google Cloud Platformでソーシャルゲームを1本出してみた!
Google Cloud Platformでソーシャルゲームを1本出してみた!Google Cloud Platformでソーシャルゲームを1本出してみた!
Google Cloud Platformでソーシャルゲームを1本出してみた!
Hasegawa Yusuke
 
最近のSpringFramework2013 #jjug #jsug #SpringFramework
最近のSpringFramework2013 #jjug #jsug #SpringFramework最近のSpringFramework2013 #jjug #jsug #SpringFramework
最近のSpringFramework2013 #jjug #jsug #SpringFrameworkToshiaki Maki
 
アジャイルソフトウェア開発の道具箱
アジャイルソフトウェア開発の道具箱アジャイルソフトウェア開発の道具箱
アジャイルソフトウェア開発の道具箱
Koichi ITO
 
実戦Scala
実戦Scala実戦Scala
実戦Scala
Yuto Suzuki
 
JaSST'16 Tokyo モバイルセッション
JaSST'16 Tokyo モバイルセッションJaSST'16 Tokyo モバイルセッション
JaSST'16 Tokyo モバイルセッション
mirer
 
Spring知っておきたい
Spring知っておきたいSpring知っておきたい
Spring知っておきたい
Yuichi Hasegawa
 

Similar to Jsug2015 summer spring適用におけるバッドノウハウとベタープラクティス (20)

いるけどないからつくってみたよ高速モバイルプッシュ配信くん #cmdevio
いるけどないからつくってみたよ高速モバイルプッシュ配信くん #cmdevioいるけどないからつくってみたよ高速モバイルプッシュ配信くん #cmdevio
いるけどないからつくってみたよ高速モバイルプッシュ配信くん #cmdevio
 
スキトラ Spring + mybatis
スキトラ Spring + mybatisスキトラ Spring + mybatis
スキトラ Spring + mybatis
 
SpringOne Platform 2018 全体報告
SpringOne Platform 2018 全体報告SpringOne Platform 2018 全体報告
SpringOne Platform 2018 全体報告
 
SpringOne Platform 2018 全体報告
SpringOne Platform 2018 全体報告SpringOne Platform 2018 全体報告
SpringOne Platform 2018 全体報告
 
アジャイル開発&TFS導入
アジャイル開発&TFS導入アジャイル開発&TFS導入
アジャイル開発&TFS導入
 
Pivotal Trackerでアジャイルなプロジェクト管理
Pivotal Trackerでアジャイルなプロジェクト管理Pivotal Trackerでアジャイルなプロジェクト管理
Pivotal Trackerでアジャイルなプロジェクト管理
 
ユーザー企業における標準化のあり方 : QCon Tokyo 2010
ユーザー企業における標準化のあり方 : QCon Tokyo 2010ユーザー企業における標準化のあり方 : QCon Tokyo 2010
ユーザー企業における標準化のあり方 : QCon Tokyo 2010
 
Agile Japan 2010 「変化を受け入れるアジャイルなプロジェクトマネジメントと現場 &lt;ツール・環境篇>」
Agile Japan 2010 「変化を受け入れるアジャイルなプロジェクトマネジメントと現場 &lt;ツール・環境篇>」Agile Japan 2010 「変化を受け入れるアジャイルなプロジェクトマネジメントと現場 &lt;ツール・環境篇>」
Agile Japan 2010 「変化を受け入れるアジャイルなプロジェクトマネジメントと現場 &lt;ツール・環境篇>」
 
業務システムで使うSpring Dynamic Modules
業務システムで使うSpring Dynamic Modules業務システムで使うSpring Dynamic Modules
業務システムで使うSpring Dynamic Modules
 
Device Farm を使ったスマホアプリの自動テスト
Device Farm を使ったスマホアプリの自動テストDevice Farm を使ったスマホアプリの自動テスト
Device Farm を使ったスマホアプリの自動テスト
 
イノベーションスプリント2011 infragisticsにおける世界分散アジャイル開発事例~ communication matters ~
イノベーションスプリント2011 infragisticsにおける世界分散アジャイル開発事例~ communication matters ~イノベーションスプリント2011 infragisticsにおける世界分散アジャイル開発事例~ communication matters ~
イノベーションスプリント2011 infragisticsにおける世界分散アジャイル開発事例~ communication matters ~
 
Lightning componentとlightning design system
Lightning componentとlightning design systemLightning componentとlightning design system
Lightning componentとlightning design system
 
ぱぱっと理解するSpring Cloudの基本
ぱぱっと理解するSpring Cloudの基本ぱぱっと理解するSpring Cloudの基本
ぱぱっと理解するSpring Cloudの基本
 
サイドプロジェクトで使う Azure DevOps
サイドプロジェクトで使う Azure DevOpsサイドプロジェクトで使う Azure DevOps
サイドプロジェクトで使う Azure DevOps
 
Google Cloud Platformでソーシャルゲームを1本出してみた!
Google Cloud Platformでソーシャルゲームを1本出してみた!Google Cloud Platformでソーシャルゲームを1本出してみた!
Google Cloud Platformでソーシャルゲームを1本出してみた!
 
最近のSpringFramework2013 #jjug #jsug #SpringFramework
最近のSpringFramework2013 #jjug #jsug #SpringFramework最近のSpringFramework2013 #jjug #jsug #SpringFramework
最近のSpringFramework2013 #jjug #jsug #SpringFramework
 
アジャイルソフトウェア開発の道具箱
アジャイルソフトウェア開発の道具箱アジャイルソフトウェア開発の道具箱
アジャイルソフトウェア開発の道具箱
 
実戦Scala
実戦Scala実戦Scala
実戦Scala
 
JaSST'16 Tokyo モバイルセッション
JaSST'16 Tokyo モバイルセッションJaSST'16 Tokyo モバイルセッション
JaSST'16 Tokyo モバイルセッション
 
Spring知っておきたい
Spring知っておきたいSpring知っておきたい
Spring知っておきたい
 

Recently uploaded

MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
iPride Co., Ltd.
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
Sony - Neural Network Libraries
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
harmonylab
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
CRI Japan, Inc.
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
Matsushita Laboratory
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
Toru Tamaki
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
Fukuoka Institute of Technology
 
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
atsushi061452
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
Yuuitirou528 default
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
NTT DATA Technology & Innovation
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
yassun7010
 

Recently uploaded (16)

MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
 
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
 

Jsug2015 summer spring適用におけるバッドノウハウとベタープラクティス