SlideShare a Scribd company logo
1 of 84
Download to read offline
© 2019 NTT DATA Corporation
2019/11/15 日本Springユーザ会主催 Spring One 2019報告会
株式会社NTTデータ システム技術本部 齊加匠
Spring Initializrをハックする
-カスタマイズを通してその内部実装を覗く
© 2019 NTT DATA Corporation 2
{
“name”: {
“ja”: “齊加匠”,
”en”: “SAIKA TAKUMI”,
},
“company”: “NTTDATA”,
“favorites”: [“Arch Linux”, “Golang”, “Neovim”],
“github”: “takumi34”,
“twitter”: “@Untergrund_idol”,
“blog”: “takumi34.github.io”,
}
自己紹介
© 2019 NTT DATA Corporation 3
現地での写真
NTTデータの出展ブース
© 2019 NTT DATA Corporation 4
話すこと
Spring Initializrの
カスタマイズについて
© 2019 NTT DATA Corporation 5
「Creating “The Second Best Place on the Internet”
with Spring Initializr」
Stéphane Nicoll
https://content.pivotal.io/slides/creating-the-second-best-place-on-the-internet-
with-spring-initializr
https://github.com/snicoll/demo-custom-initializr
聴講したセッション
© 2019 NTT DATA Corporation 6
1.軽い紹介
2.歴史
3.カスタマイズ
もくじ
© 2019 NTT DATA Corportion 7
第一部
© 2019 NTT DATA Corporation 8
Spring Initializr
© 2019 NTT DATA Corporation 9
Web, IDE, CLIなどのクライアントから
Spring Bootのプロジェクトを
生成できるツール
Spring Initializr
© 2019 NTT DATA Corporation 10
WEB UI
https://start.spring.io/
© 2019 NTT DATA Corporation 11
start.spring.io
https://github.com/spring-io/start.spring.io
© 2019 NTT DATA Corporation 12
Initializr
https://github.com/spring-io/initializr
© 2019 NTT DATA Corporation 13
Spring Initializr
の軽い説明
© 2019 NTT DATA Corporation 14
例
© 2019 NTT DATA Corporation 17
Webだと
© 2019 NTT DATA Corporation 18
https://start.spring.io/
© 2019 NTT DATA Corporation 19
コマンドライン
でも出来る
© 2019 NTT DATA Corporation 20
➜ curl https://start.spring.io/starter.tgz -d dependencies=web | tar -xzvf –
➜ tree
.
├── HELP.md
├── mvnw
├── mvnw.cmd
├── pom.xml
└── src
├── main
│ ├── java
│ │ └── com
│ │ └── example
│ │ └── demo
│ │ └── DemoApplication.java
│ └── resources
│ ├── application.properties
│ ├── static
│ └── templates
└── test
└── java
└── com
└── example
└── demo
└── DemoApplicationTests.java
14 directories, 7 files
Curlだと
© 2019 NTT DATA Corporation 23
IDEでも出来る
© 2019 NTT DATA Corporation 24
IntelliJ IDEA Ultimateだと
© 2019 NTT DATA Corporation 25
ちなみに
Spring Boot CLIでも
© 2019 NTT DATA Corporation 27
ここまでは
ちょっとした紹介
© 2019 NTT DATA Corportion 28
第二部
© 2019 NTT DATA Corporation 29
歴史
© 2019 NTT DATA Corporation 30
2013誕生
© 2019 NTT DATA Corporation 33
Initializr
e
© 2019 NTT DATA Corporation 34
Initializr
© 2019 NTT DATA Corporation 36
最初は簡単なgroovy script
https://content.pivotal.io/slides/creating-the-second-best-place-on-the-internet-with-spring-initializr
© 2019 NTT DATA Corporation 37
• Terminal Support
– Spring Boot CLI (March 2014)
– CURL, HTTP (Jan 2015)
• IDE
– STS, IntelliJ IDEA (March 2015)
– Netbeans (May 2016)
– VSCode (Jan 2018)
Supportの広がり
© 2019 NTT DATA Corporation 41
Spring Initializr
の凄さ
© 2019 NTT DATA Corporation 42
Spring Bootの
エコシステムを
形成
© 2019 NTT DATA Corporation 43
一か月で世界で
1M以上の
ダウンロード
© 2019 NTT DATA Corporation 44
すごい!
© 2019 NTT DATA Corportion 50
第三部
© 2019 NTT DATA Corporation 51
カスタマイズの
話
© 2019 NTT DATA Corporation 52
そもそもカスタマイズし
て何がうれしい?
© 2019 NTT DATA Corporation 53
例えば
こんなことが出来る
© 2019 NTT DATA Corporation 54
• UIの変更
• パッケージのオプションの変更
• デフォルトの依存関係の変更
• 3rd partyの依存関係の追加
• .gitignoreの変更やREADMEの追加
など
カスタマイズの例
© 2019 NTT DATA Corporation 56
実際に
カスタマイズして
いる事例
© 2019 NTT DATA Corporation 57
https://github.com/ssherwood/presentations/blob/master/springone-2016/easy-
microservices/initializr-guide.adoc
↑内容はちょっと古い
https://www.slideshare.net/SpringCentral/easy-consumption-of-microservices
Spring One 2016の発表
© 2019 NTT DATA Corporation 59
まずはInitializr
の中身見てみる
© 2019 NTT DATA Corporation 60
https://github.com/spring-io/initializr
© 2019 NTT DATA Corporation 64
旧 新(2019年2月から)
https://spring.io/blog/2019/02/20/what-s-new-with-spring-initializr
© 2019 NTT DATA Corporation 65
複雑になってる
© 2019 NTT DATA Corporation 66
なんで?
© 2019 NTT DATA Corporation 67
時は2017年に遡る
https://github.com/spring-io/initializr/issues/340
© 2019 NTT DATA Corporation 68
今までもInitializrをカスタマイズす
ることは可能だった
© 2019 NTT DATA Corporation 69
しかし、libraryをforkして変更しな
ければならなかった
© 2019 NTT DATA Corporation 71
2019年10月に
Spring Initializr 0.8.0がリリースされた
© 2019 NTT DATA Corporation 72
Spring Initializr 0.8 brings a complete rewrite of the project
generation API with dedicated abstractions for common assets of
JVM-based projects.
(中略)
This should make the creation of a custom instance easier than
ever!
Spring Initializr 0.8.0リリースの目玉
https://spring.io/blog/2019/10/14/spring-initializr-0-8-0-available-now
© 2019 NTT DATA Corporation 74
• BuildCustomizer to add dependencies, plugins
or other configuration items
• ProjectContributor, a high-level hook-point to
add assets to a directory structure
https://spring.io/blog/2019/02/20/what-s-new-with-spring-initializr
新たに追加されたAPI
© 2019 NTT DATA Corporation 77
これがあると何
がうれしい?
© 2019 NTT DATA Corporation 78
実際に自分
で使ってカスタ
マイズしてみた
© 2019 NTT DATA Corporation 79
セッションとは
違うカスタマイ
ズ
© 2019 NTT DATA Corporation 80
まずは
依存関係に追記
© 2019 NTT DATA Corporation 82
dependencies {
implementation ("org.springframework.boot:spring-boot-starter-web“)
implementation("io.spring.initializr:initializr-web")
implementation("io.spring.initializr:initializr-generator-spring")
}
dependencyManagement {
imports {
mavenBom "io.spring.initializr:initializr-bom:0.8.0.RELEASE"
}
}
build.gradle
© 2019 NTT DATA Corporation 83
dependencies {
implementation ("org.springframework.boot:spring-boot-starter-web“)
implementation("io.spring.initializr:initializr-web")
implementation("io.spring.initializr:initializr-generator-spring")
}
dependencyManagement {
imports {
mavenBom "io.spring.initializr:initializr-bom:0.8.0.RELEASE"
}
}
build.gradle
BOM(a Bill of Materials)
© 2019 NTT DATA Corporation 85
これでlocalhost:8080ア
クセスすると
© 2019 NTT DATA Corporation 86
jsonが出る
© 2019 NTT DATA Corporation 88
IntelliJ IDEAなどでlocalhost:8080にアクセスするとやりやすい
© 2019 NTT DATA Corporation 89
次は
BuildCustomizer
ProjectContributer
を使ってみる
© 2019 NTT DATA Corporation 90
io.spring.initializr.generator.project.ProjectGenerationConfiguration=\
com.chika.custominitializr.contributer.SampleProjectGenerationConfiguration
spring.factoriesにパス記載
© 2019 NTT DATA Corporation 91
io.spring.initializr.generator.project.ProjectGenerationConfiguration=\
com.chika.custominitializr.contributer.SampleProjectGenerationConfiguration
spring.factoriesにパス記載
自動でコンポーネントスキャンされるわけじゃないの
で、spring.factoriesで登録する必要あり
© 2019 NTT DATA Corporation 92
@ProjectGenerationConfiguration
public class SampleProjectGenerationConfiguration {
@Bean
public BannerContributor bannerContributor() {
return new BannerContributor();
}
@Bean
public BuildCustomizer<MavenBuild> devtoolsContributor () {
return (build) -> build.dependencies().add("devtools",
"org.springframework.boot","spring-boot-devtools", DependencyScope.COMPILE);
}
}
デフォルトの依存関係をカスタマイズ
© 2019 NTT DATA Corporation 93
@ProjectGenerationConfiguration
public class SampleProjectGenerationConfiguration {
@Bean
public BannerContributor bannerContributor() {
return new BannerContributor();
}
@Bean
public BuildCustomizer<MavenBuild> devtoolsContributor () {
return (build) -> build.dependencies().add("devtools",
"org.springframework.boot","spring-boot-devtools", DependencyScope.COMPILE);
}
}
デフォルトの依存関係をカスタマイズ
このアノテーション
© 2019 NTT DATA Corporation 94
@ProjectGenerationConfiguration
public class SampleProjectGenerationConfiguration {
@Bean
public BannerContributor bannerContributor() {
return new BannerContributor();
}
@Bean
public BuildCustomizer<MavenBuild> devtoolsContributor () {
return (build) -> build.dependencies().add("devtools",
"org.springframework.boot","spring-boot-devtools", DependencyScope.COMPILE);
}
}
デフォルトの依存関係をカスタマイズ
このアノテーション
依存関係に
devtoolsを追加
© 2019 NTT DATA Corporation 95
実際に
プロジェクトを
生成すると
© 2019 NTT DATA Corporation 96
pom.xmlが変更されている
© 2019 NTT DATA Corporation 97
起動バナーをカスタマイズ
public class BannerContributor implements ProjectContributor {
public void contribute(Path projectRoot) throws IOException {
Path bannerDirectory = projectRoot
.resolve("src/main/resources");
Files.createDirectories(bannerDirectory);
Path file =Files.createFile(bannerDirectory.resolve("banner.txt"));
try (PrintWriter writer = new PrintWriter(Files.newBufferedWriter(file))) {
writer.println(
" _____ _ _ _ ¥n" +
" / ____| | | (_) | | ¥n" +
" | | | |__ _ | | __ __ _ ¥n" +
" | | | '_ ¥¥ | | | |/ / / _` |¥n" +
" | |____ | | | | | | | < | (_| |¥n" +
" ¥¥_____| |_| |_| |_| |_|¥¥_¥¥ ¥¥__,_|¥n"
);
}
}
}
© 2019 NTT DATA Corporation 98
実際に
プロジェクトを
生成すると
© 2019 NTT DATA Corporation 99
起動バナーが変更されている
© 2019 NTT DATA Corporation 101
他にも
© 2019 NTT DATA Corporation 103
例えばapplication.ymlに
こう書くと
© 2019 NTT DATA Corporation 104
initializr:
dependencies:
- name: Web
content:
- name: Web
id: web
description: webだよ!!!
types:
- name: Maven Project
id: maven-project
description: mvn
tags:
build: maven
format: project
default: true
action: /starter.zip
application.yml
packagings:
- name: Jar
id: jar
default: true
javaVersions:
- id: 11
default: true
languages:
- name: Java
id: java
default: true
- name: Kotlin
id: kotlin
default: false
group-id:
value: org.chika
© 2019 NTT DATA Corporation 105
initializr:
dependencies:
- name: Web
content:
- name: Web
id: web
description: webだよ!!!
types:
- name: Maven Project
id: maven-project
description: mvn
tags:
build: maven
format: project
default: true
action: /starter.zip
application.yml
packagings:
- name: Jar
id: jar
default: true
javaVersions:
- id: 11
default: true
languages:
- name: Java
id: java
default: true
- name: Kotlin
id: kotlin
default: false
group-id:
value: org.chika
Descriptio
nを変更
Defaultも
変えられる
initializrの
namespace
で指定
chika
になってる
© 2019 NTT DATA Corporation 106
STSでプロジェクトを生成しようとすると
© 2019 NTT DATA Corporation 107
STSでプロジェクトを生成しようとすると
Discriptionが
変更されてる
© 2019 NTT DATA Corporation 113
とりあえず
やってみたい方
© 2019 NTT DATA Corporation 115
https://github.com/spring-io/initializr/tree/master/initializr-service-sample
© 2019 NTT DATA Corporation 116
簡単に試せる
© 2019 NTT DATA Corporation 118
Spring Initializr凄い!
まとめ
© 2019 NTT DATA Corporation 119
カスタマイズやってみよ
う!
まとめ
© 2019 NTT DATA Corporation 120
https://github.com/takumi34/custom-spring-initializr
今回使ったコードはここに格納しています
© 2019 NTT DATA Corporation

More Related Content

What's hot

Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)NTT DATA Technology & Innovation
 
PHPからgoへの移行で分かったこと
PHPからgoへの移行で分かったことPHPからgoへの移行で分かったこと
PHPからgoへの移行で分かったことgree_tech
 
Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)
Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)
Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)NTT DATA Technology & Innovation
 
単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介AdvancedTechNight
 
ぱぱっと理解するSpring Cloudの基本
ぱぱっと理解するSpring Cloudの基本ぱぱっと理解するSpring Cloudの基本
ぱぱっと理解するSpring Cloudの基本kazuki kumagai
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean ArchitectureAtsushi Nakamura
 
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)NTT DATA Technology & Innovation
 
DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!kwatch
 
これからSpringを使う開発者が知っておくべきこと
これからSpringを使う開発者が知っておくべきことこれからSpringを使う開発者が知っておくべきこと
これからSpringを使う開発者が知っておくべきこと土岐 孝平
 
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチマイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ増田 亨
 
シリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのかシリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのかAtsushi Nakada
 
オープンソースのAPIゲートウェイ Kong ご紹介
オープンソースのAPIゲートウェイ Kong ご紹介 オープンソースのAPIゲートウェイ Kong ご紹介
オープンソースのAPIゲートウェイ Kong ご紹介 briscola-tokyo
 
Spring integration概要
Spring integration概要Spring integration概要
Spring integration概要kuroiwa
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織Takafumi ONAKA
 
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話Daichi Koike
 

What's hot (20)

Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
 
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajpAt least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
 
Helidon 概要
Helidon 概要Helidon 概要
Helidon 概要
 
PHPからgoへの移行で分かったこと
PHPからgoへの移行で分かったことPHPからgoへの移行で分かったこと
PHPからgoへの移行で分かったこと
 
Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)
Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)
Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)
 
分散トレーシング技術について(Open tracingやjaeger)
分散トレーシング技術について(Open tracingやjaeger)分散トレーシング技術について(Open tracingやjaeger)
分散トレーシング技術について(Open tracingやjaeger)
 
単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介
 
ぱぱっと理解するSpring Cloudの基本
ぱぱっと理解するSpring Cloudの基本ぱぱっと理解するSpring Cloudの基本
ぱぱっと理解するSpring Cloudの基本
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
 
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
 
DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!
 
これからSpringを使う開発者が知っておくべきこと
これからSpringを使う開発者が知っておくべきことこれからSpringを使う開発者が知っておくべきこと
これからSpringを使う開発者が知っておくべきこと
 
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチマイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ
 
シリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのかシリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのか
 
オープンソースのAPIゲートウェイ Kong ご紹介
オープンソースのAPIゲートウェイ Kong ご紹介 オープンソースのAPIゲートウェイ Kong ご紹介
オープンソースのAPIゲートウェイ Kong ご紹介
 
Spring integration概要
Spring integration概要Spring integration概要
Spring integration概要
 
NGINXをBFF (Backend for Frontend)として利用した話
NGINXをBFF (Backend for Frontend)として利用した話NGINXをBFF (Backend for Frontend)として利用した話
NGINXをBFF (Backend for Frontend)として利用した話
 
Spring tools4
Spring tools4Spring tools4
Spring tools4
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
 
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
 

Similar to Spring Initializrをハックする-カスタマイズを通してその内部実装を覗く

Spark+AI Summit Europe 2019 セッションハイライト(Spark Meetup Tokyo #2 講演資料)
Spark+AI Summit Europe 2019 セッションハイライト(Spark Meetup Tokyo #2 講演資料)Spark+AI Summit Europe 2019 セッションハイライト(Spark Meetup Tokyo #2 講演資料)
Spark+AI Summit Europe 2019 セッションハイライト(Spark Meetup Tokyo #2 講演資料)NTT DATA Technology & Innovation
 
NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...
NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...
NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...NTT DATA Technology & Innovation
 
"Up" with vagrant and docker
"Up" with vagrant and docker"Up" with vagrant and docker
"Up" with vagrant and dockerHiroshi Miura
 
CData Sync × Google BigQuery 3ステップで各データソースとのデータ連携を実現
CData Sync × Google BigQuery  3ステップで各データソースとのデータ連携を実現CData Sync × Google BigQuery  3ステップで各データソースとのデータ連携を実現
CData Sync × Google BigQuery 3ステップで各データソースとのデータ連携を実現CData Software Japan
 
Azure の App Center でアプリの 使用状況を分析する
Azure の App Center でアプリの 使用状況を分析するAzure の App Center でアプリの 使用状況を分析する
Azure の App Center でアプリの 使用状況を分析するYusuke Kojima
 
さくらのIoT Platformを使ってみよう ~Developers in KOBE編~
さくらのIoT Platformを使ってみよう ~Developers in KOBE編~さくらのIoT Platformを使ってみよう ~Developers in KOBE編~
さくらのIoT Platformを使ってみよう ~Developers in KOBE編~法林浩之
 
さくらのIoT Platformを使ってみよう ~OSC大阪編~
さくらのIoT Platformを使ってみよう ~OSC大阪編~さくらのIoT Platformを使ってみよう ~OSC大阪編~
さくらのIoT Platformを使ってみよう ~OSC大阪編~法林浩之
 
20160527_06_Azure Certified for IoT for 共創ラボ
20160527_06_Azure Certified for IoT for 共創ラボ20160527_06_Azure Certified for IoT for 共創ラボ
20160527_06_Azure Certified for IoT for 共創ラボIoTビジネス共創ラボ
 
de:code2018 登壇資料
de:code2018 登壇資料de:code2018 登壇資料
de:code2018 登壇資料Hiroshi Senga
 
Tokyo H2O.ai Meetup#2 by Iida
Tokyo H2O.ai Meetup#2 by IidaTokyo H2O.ai Meetup#2 by Iida
Tokyo H2O.ai Meetup#2 by IidaHidenori Fujioka
 
OSC 2020 Fukuoka IT運用自動化を支援する「運用レコメンドプラットフォーム」実現の舞台裏
OSC 2020 Fukuoka IT運用自動化を支援する「運用レコメンドプラットフォーム」実現の舞台裏OSC 2020 Fukuoka IT運用自動化を支援する「運用レコメンドプラットフォーム」実現の舞台裏
OSC 2020 Fukuoka IT運用自動化を支援する「運用レコメンドプラットフォーム」実現の舞台裏Daisuke Ikeda
 
Azure のApp Center でアプリの 使用状況を分析する
Azure のApp Center でアプリの 使用状況を分析するAzure のApp Center でアプリの 使用状況を分析する
Azure のApp Center でアプリの 使用状況を分析するYusuke Kojima
 
MLOps NYC 2019 and Strata Data Conference NY 2019 report nttdata
MLOps NYC 2019 and Strata Data Conference NY 2019 report nttdataMLOps NYC 2019 and Strata Data Conference NY 2019 report nttdata
MLOps NYC 2019 and Strata Data Conference NY 2019 report nttdataNTT DATA Technology & Innovation
 
Excel × Google BigQuery CData Driver で BigQuery とのデータ連携を実現
Excel × Google BigQuery  CData Driver で BigQuery とのデータ連携を実現Excel × Google BigQuery  CData Driver で BigQuery とのデータ連携を実現
Excel × Google BigQuery CData Driver で BigQuery とのデータ連携を実現CData Software Japan
 
まだプログラム手で書いて消耗してるの?~入出力例からプログラムを自動生成する技術~(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019...
まだプログラム手で書いて消耗してるの?~入出力例からプログラムを自動生成する技術~(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019...まだプログラム手で書いて消耗してるの?~入出力例からプログラムを自動生成する技術~(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019...
まだプログラム手で書いて消耗してるの?~入出力例からプログラムを自動生成する技術~(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019...NTT DATA Technology & Innovation
 
TypeScript製フレームワーク「Nest」のご紹介
TypeScript製フレームワーク「Nest」のご紹介TypeScript製フレームワーク「Nest」のご紹介
TypeScript製フレームワーク「Nest」のご紹介bitbank, Inc. Tokyo, Japan
 
Rancherを活用して開発効率を上げる
Rancherを活用して開発効率を上げるRancherを活用して開発効率を上げる
Rancherを活用して開発効率を上げるMichitaka Terada
 
kintoneのデータをSQLで操作!? ~Drivers/Gateway/Sync 徹底比較~
kintoneのデータをSQLで操作!? ~Drivers/Gateway/Sync 徹底比較~kintoneのデータをSQLで操作!? ~Drivers/Gateway/Sync 徹底比較~
kintoneのデータをSQLで操作!? ~Drivers/Gateway/Sync 徹底比較~CData Software Japan
 

Similar to Spring Initializrをハックする-カスタマイズを通してその内部実装を覗く (20)

Spark+AI Summit Europe 2019 セッションハイライト(Spark Meetup Tokyo #2 講演資料)
Spark+AI Summit Europe 2019 セッションハイライト(Spark Meetup Tokyo #2 講演資料)Spark+AI Summit Europe 2019 セッションハイライト(Spark Meetup Tokyo #2 講演資料)
Spark+AI Summit Europe 2019 セッションハイライト(Spark Meetup Tokyo #2 講演資料)
 
NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...
NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...
NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...
 
Aws summit tokyo 2016
Aws summit tokyo 2016Aws summit tokyo 2016
Aws summit tokyo 2016
 
"Up" with vagrant and docker
"Up" with vagrant and docker"Up" with vagrant and docker
"Up" with vagrant and docker
 
CData Sync × Google BigQuery 3ステップで各データソースとのデータ連携を実現
CData Sync × Google BigQuery  3ステップで各データソースとのデータ連携を実現CData Sync × Google BigQuery  3ステップで各データソースとのデータ連携を実現
CData Sync × Google BigQuery 3ステップで各データソースとのデータ連携を実現
 
Azure の App Center でアプリの 使用状況を分析する
Azure の App Center でアプリの 使用状況を分析するAzure の App Center でアプリの 使用状況を分析する
Azure の App Center でアプリの 使用状況を分析する
 
さくらのIoT Platformを使ってみよう ~Developers in KOBE編~
さくらのIoT Platformを使ってみよう ~Developers in KOBE編~さくらのIoT Platformを使ってみよう ~Developers in KOBE編~
さくらのIoT Platformを使ってみよう ~Developers in KOBE編~
 
さくらのIoT Platformを使ってみよう ~OSC大阪編~
さくらのIoT Platformを使ってみよう ~OSC大阪編~さくらのIoT Platformを使ってみよう ~OSC大阪編~
さくらのIoT Platformを使ってみよう ~OSC大阪編~
 
20160527_06_Azure Certified for IoT for 共創ラボ
20160527_06_Azure Certified for IoT for 共創ラボ20160527_06_Azure Certified for IoT for 共創ラボ
20160527_06_Azure Certified for IoT for 共創ラボ
 
de:code2018 登壇資料
de:code2018 登壇資料de:code2018 登壇資料
de:code2018 登壇資料
 
Tokyo H2O.ai Meetup#2 by Iida
Tokyo H2O.ai Meetup#2 by IidaTokyo H2O.ai Meetup#2 by Iida
Tokyo H2O.ai Meetup#2 by Iida
 
OSC 2020 Fukuoka IT運用自動化を支援する「運用レコメンドプラットフォーム」実現の舞台裏
OSC 2020 Fukuoka IT運用自動化を支援する「運用レコメンドプラットフォーム」実現の舞台裏OSC 2020 Fukuoka IT運用自動化を支援する「運用レコメンドプラットフォーム」実現の舞台裏
OSC 2020 Fukuoka IT運用自動化を支援する「運用レコメンドプラットフォーム」実現の舞台裏
 
Azure のApp Center でアプリの 使用状況を分析する
Azure のApp Center でアプリの 使用状況を分析するAzure のApp Center でアプリの 使用状況を分析する
Azure のApp Center でアプリの 使用状況を分析する
 
MLOps NYC 2019 and Strata Data Conference NY 2019 report nttdata
MLOps NYC 2019 and Strata Data Conference NY 2019 report nttdataMLOps NYC 2019 and Strata Data Conference NY 2019 report nttdata
MLOps NYC 2019 and Strata Data Conference NY 2019 report nttdata
 
Excel × Google BigQuery CData Driver で BigQuery とのデータ連携を実現
Excel × Google BigQuery  CData Driver で BigQuery とのデータ連携を実現Excel × Google BigQuery  CData Driver で BigQuery とのデータ連携を実現
Excel × Google BigQuery CData Driver で BigQuery とのデータ連携を実現
 
Accel series 2015_summer
Accel series 2015_summerAccel series 2015_summer
Accel series 2015_summer
 
まだプログラム手で書いて消耗してるの?~入出力例からプログラムを自動生成する技術~(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019...
まだプログラム手で書いて消耗してるの?~入出力例からプログラムを自動生成する技術~(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019...まだプログラム手で書いて消耗してるの?~入出力例からプログラムを自動生成する技術~(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019...
まだプログラム手で書いて消耗してるの?~入出力例からプログラムを自動生成する技術~(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019...
 
TypeScript製フレームワーク「Nest」のご紹介
TypeScript製フレームワーク「Nest」のご紹介TypeScript製フレームワーク「Nest」のご紹介
TypeScript製フレームワーク「Nest」のご紹介
 
Rancherを活用して開発効率を上げる
Rancherを活用して開発効率を上げるRancherを活用して開発効率を上げる
Rancherを活用して開発効率を上げる
 
kintoneのデータをSQLで操作!? ~Drivers/Gateway/Sync 徹底比較~
kintoneのデータをSQLで操作!? ~Drivers/Gateway/Sync 徹底比較~kintoneのデータをSQLで操作!? ~Drivers/Gateway/Sync 徹底比較~
kintoneのデータをSQLで操作!? ~Drivers/Gateway/Sync 徹底比較~
 

More from apkiban

大規模・長期保守を見据えたエンタープライズ システム開発へのSpring Frameworkの適用
大規模・長期保守を見据えたエンタープライズシステム開発へのSpring Frameworkの適用大規模・長期保守を見据えたエンタープライズシステム開発へのSpring Frameworkの適用
大規模・長期保守を見据えたエンタープライズ システム開発へのSpring Frameworkの適用apkiban
 
What happens in Spring Cloud Netflix
What happens in Spring Cloud NetflixWhat happens in Spring Cloud Netflix
What happens in Spring Cloud Netflixapkiban
 
SpringOne Platform 2018 全体報告
SpringOne Platform 2018 全体報告SpringOne Platform 2018 全体報告
SpringOne Platform 2018 全体報告apkiban
 
新しいTERASOLUNA Batch Frameworkとは
新しいTERASOLUNA Batch Frameworkとは新しいTERASOLUNA Batch Frameworkとは
新しいTERASOLUNA Batch Frameworkとはapkiban
 
Javaエンジニアに知ってほしい、Springの教科書「TERASOLUNA」
Javaエンジニアに知ってほしい、Springの教科書「TERASOLUNA」Javaエンジニアに知ってほしい、Springの教科書「TERASOLUNA」
Javaエンジニアに知ってほしい、Springの教科書「TERASOLUNA」 apkiban
 
TERASOLUNA Framework on the Spring IO Platform
TERASOLUNA Framework on the Spring IO PlatformTERASOLUNA Framework on the Spring IO Platform
TERASOLUNA Framework on the Spring IO Platformapkiban
 
Application Re-Architecture Technology ~ StrutsからSpring MVCへ ~
Application Re-Architecture Technology ~ StrutsからSpring MVCへ ~Application Re-Architecture Technology ~ StrutsからSpring MVCへ ~
Application Re-Architecture Technology ~ StrutsからSpring MVCへ ~apkiban
 
脆弱性の探し方 ~発見と対応のノウハウ in NTTDATA~
脆弱性の探し方 ~発見と対応のノウハウ in NTTDATA~脆弱性の探し方 ~発見と対応のノウハウ in NTTDATA~
脆弱性の探し方 ~発見と対応のノウハウ in NTTDATA~apkiban
 
バッチは地味だが役に立つ
バッチは地味だが役に立つバッチは地味だが役に立つ
バッチは地味だが役に立つapkiban
 
Spring 5 でSpring Test のここが変わる
Spring 5 でSpring Test のここが変わるSpring 5 でSpring Test のここが変わる
Spring 5 でSpring Test のここが変わるapkiban
 

More from apkiban (10)

大規模・長期保守を見据えたエンタープライズ システム開発へのSpring Frameworkの適用
大規模・長期保守を見据えたエンタープライズシステム開発へのSpring Frameworkの適用大規模・長期保守を見据えたエンタープライズシステム開発へのSpring Frameworkの適用
大規模・長期保守を見据えたエンタープライズ システム開発へのSpring Frameworkの適用
 
What happens in Spring Cloud Netflix
What happens in Spring Cloud NetflixWhat happens in Spring Cloud Netflix
What happens in Spring Cloud Netflix
 
SpringOne Platform 2018 全体報告
SpringOne Platform 2018 全体報告SpringOne Platform 2018 全体報告
SpringOne Platform 2018 全体報告
 
新しいTERASOLUNA Batch Frameworkとは
新しいTERASOLUNA Batch Frameworkとは新しいTERASOLUNA Batch Frameworkとは
新しいTERASOLUNA Batch Frameworkとは
 
Javaエンジニアに知ってほしい、Springの教科書「TERASOLUNA」
Javaエンジニアに知ってほしい、Springの教科書「TERASOLUNA」Javaエンジニアに知ってほしい、Springの教科書「TERASOLUNA」
Javaエンジニアに知ってほしい、Springの教科書「TERASOLUNA」
 
TERASOLUNA Framework on the Spring IO Platform
TERASOLUNA Framework on the Spring IO PlatformTERASOLUNA Framework on the Spring IO Platform
TERASOLUNA Framework on the Spring IO Platform
 
Application Re-Architecture Technology ~ StrutsからSpring MVCへ ~
Application Re-Architecture Technology ~ StrutsからSpring MVCへ ~Application Re-Architecture Technology ~ StrutsからSpring MVCへ ~
Application Re-Architecture Technology ~ StrutsからSpring MVCへ ~
 
脆弱性の探し方 ~発見と対応のノウハウ in NTTDATA~
脆弱性の探し方 ~発見と対応のノウハウ in NTTDATA~脆弱性の探し方 ~発見と対応のノウハウ in NTTDATA~
脆弱性の探し方 ~発見と対応のノウハウ in NTTDATA~
 
バッチは地味だが役に立つ
バッチは地味だが役に立つバッチは地味だが役に立つ
バッチは地味だが役に立つ
 
Spring 5 でSpring Test のここが変わる
Spring 5 でSpring Test のここが変わるSpring 5 でSpring Test のここが変わる
Spring 5 でSpring Test のここが変わる
 

Recently uploaded

新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Hiroshi Tomioka
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 

Recently uploaded (11)

新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 

Spring Initializrをハックする-カスタマイズを通してその内部実装を覗く

  • 1. © 2019 NTT DATA Corporation 2019/11/15 日本Springユーザ会主催 Spring One 2019報告会 株式会社NTTデータ システム技術本部 齊加匠 Spring Initializrをハックする -カスタマイズを通してその内部実装を覗く
  • 2. © 2019 NTT DATA Corporation 2 { “name”: { “ja”: “齊加匠”, ”en”: “SAIKA TAKUMI”, }, “company”: “NTTDATA”, “favorites”: [“Arch Linux”, “Golang”, “Neovim”], “github”: “takumi34”, “twitter”: “@Untergrund_idol”, “blog”: “takumi34.github.io”, } 自己紹介
  • 3. © 2019 NTT DATA Corporation 3 現地での写真 NTTデータの出展ブース
  • 4. © 2019 NTT DATA Corporation 4 話すこと Spring Initializrの カスタマイズについて
  • 5. © 2019 NTT DATA Corporation 5 「Creating “The Second Best Place on the Internet” with Spring Initializr」 Stéphane Nicoll https://content.pivotal.io/slides/creating-the-second-best-place-on-the-internet- with-spring-initializr https://github.com/snicoll/demo-custom-initializr 聴講したセッション
  • 6. © 2019 NTT DATA Corporation 6 1.軽い紹介 2.歴史 3.カスタマイズ もくじ
  • 7. © 2019 NTT DATA Corportion 7 第一部
  • 8. © 2019 NTT DATA Corporation 8 Spring Initializr
  • 9. © 2019 NTT DATA Corporation 9 Web, IDE, CLIなどのクライアントから Spring Bootのプロジェクトを 生成できるツール Spring Initializr
  • 10. © 2019 NTT DATA Corporation 10 WEB UI https://start.spring.io/
  • 11. © 2019 NTT DATA Corporation 11 start.spring.io https://github.com/spring-io/start.spring.io
  • 12. © 2019 NTT DATA Corporation 12 Initializr https://github.com/spring-io/initializr
  • 13. © 2019 NTT DATA Corporation 13 Spring Initializr の軽い説明
  • 14. © 2019 NTT DATA Corporation 14 例
  • 15. © 2019 NTT DATA Corporation 17 Webだと
  • 16. © 2019 NTT DATA Corporation 18 https://start.spring.io/
  • 17. © 2019 NTT DATA Corporation 19 コマンドライン でも出来る
  • 18. © 2019 NTT DATA Corporation 20 ➜ curl https://start.spring.io/starter.tgz -d dependencies=web | tar -xzvf – ➜ tree . ├── HELP.md ├── mvnw ├── mvnw.cmd ├── pom.xml └── src ├── main │ ├── java │ │ └── com │ │ └── example │ │ └── demo │ │ └── DemoApplication.java │ └── resources │ ├── application.properties │ ├── static │ └── templates └── test └── java └── com └── example └── demo └── DemoApplicationTests.java 14 directories, 7 files Curlだと
  • 19. © 2019 NTT DATA Corporation 23 IDEでも出来る
  • 20. © 2019 NTT DATA Corporation 24 IntelliJ IDEA Ultimateだと
  • 21. © 2019 NTT DATA Corporation 25 ちなみに Spring Boot CLIでも
  • 22. © 2019 NTT DATA Corporation 27 ここまでは ちょっとした紹介
  • 23. © 2019 NTT DATA Corportion 28 第二部
  • 24. © 2019 NTT DATA Corporation 29 歴史
  • 25. © 2019 NTT DATA Corporation 30 2013誕生
  • 26. © 2019 NTT DATA Corporation 33 Initializr e
  • 27. © 2019 NTT DATA Corporation 34 Initializr
  • 28. © 2019 NTT DATA Corporation 36 最初は簡単なgroovy script https://content.pivotal.io/slides/creating-the-second-best-place-on-the-internet-with-spring-initializr
  • 29. © 2019 NTT DATA Corporation 37 • Terminal Support – Spring Boot CLI (March 2014) – CURL, HTTP (Jan 2015) • IDE – STS, IntelliJ IDEA (March 2015) – Netbeans (May 2016) – VSCode (Jan 2018) Supportの広がり
  • 30. © 2019 NTT DATA Corporation 41 Spring Initializr の凄さ
  • 31. © 2019 NTT DATA Corporation 42 Spring Bootの エコシステムを 形成
  • 32. © 2019 NTT DATA Corporation 43 一か月で世界で 1M以上の ダウンロード
  • 33. © 2019 NTT DATA Corporation 44 すごい!
  • 34. © 2019 NTT DATA Corportion 50 第三部
  • 35. © 2019 NTT DATA Corporation 51 カスタマイズの 話
  • 36. © 2019 NTT DATA Corporation 52 そもそもカスタマイズし て何がうれしい?
  • 37. © 2019 NTT DATA Corporation 53 例えば こんなことが出来る
  • 38. © 2019 NTT DATA Corporation 54 • UIの変更 • パッケージのオプションの変更 • デフォルトの依存関係の変更 • 3rd partyの依存関係の追加 • .gitignoreの変更やREADMEの追加 など カスタマイズの例
  • 39. © 2019 NTT DATA Corporation 56 実際に カスタマイズして いる事例
  • 40. © 2019 NTT DATA Corporation 57 https://github.com/ssherwood/presentations/blob/master/springone-2016/easy- microservices/initializr-guide.adoc ↑内容はちょっと古い https://www.slideshare.net/SpringCentral/easy-consumption-of-microservices Spring One 2016の発表
  • 41. © 2019 NTT DATA Corporation 59 まずはInitializr の中身見てみる
  • 42. © 2019 NTT DATA Corporation 60 https://github.com/spring-io/initializr
  • 43. © 2019 NTT DATA Corporation 64 旧 新(2019年2月から) https://spring.io/blog/2019/02/20/what-s-new-with-spring-initializr
  • 44. © 2019 NTT DATA Corporation 65 複雑になってる
  • 45. © 2019 NTT DATA Corporation 66 なんで?
  • 46. © 2019 NTT DATA Corporation 67 時は2017年に遡る https://github.com/spring-io/initializr/issues/340
  • 47. © 2019 NTT DATA Corporation 68 今までもInitializrをカスタマイズす ることは可能だった
  • 48. © 2019 NTT DATA Corporation 69 しかし、libraryをforkして変更しな ければならなかった
  • 49. © 2019 NTT DATA Corporation 71 2019年10月に Spring Initializr 0.8.0がリリースされた
  • 50. © 2019 NTT DATA Corporation 72 Spring Initializr 0.8 brings a complete rewrite of the project generation API with dedicated abstractions for common assets of JVM-based projects. (中略) This should make the creation of a custom instance easier than ever! Spring Initializr 0.8.0リリースの目玉 https://spring.io/blog/2019/10/14/spring-initializr-0-8-0-available-now
  • 51. © 2019 NTT DATA Corporation 74 • BuildCustomizer to add dependencies, plugins or other configuration items • ProjectContributor, a high-level hook-point to add assets to a directory structure https://spring.io/blog/2019/02/20/what-s-new-with-spring-initializr 新たに追加されたAPI
  • 52. © 2019 NTT DATA Corporation 77 これがあると何 がうれしい?
  • 53. © 2019 NTT DATA Corporation 78 実際に自分 で使ってカスタ マイズしてみた
  • 54. © 2019 NTT DATA Corporation 79 セッションとは 違うカスタマイ ズ
  • 55. © 2019 NTT DATA Corporation 80 まずは 依存関係に追記
  • 56. © 2019 NTT DATA Corporation 82 dependencies { implementation ("org.springframework.boot:spring-boot-starter-web“) implementation("io.spring.initializr:initializr-web") implementation("io.spring.initializr:initializr-generator-spring") } dependencyManagement { imports { mavenBom "io.spring.initializr:initializr-bom:0.8.0.RELEASE" } } build.gradle
  • 57. © 2019 NTT DATA Corporation 83 dependencies { implementation ("org.springframework.boot:spring-boot-starter-web“) implementation("io.spring.initializr:initializr-web") implementation("io.spring.initializr:initializr-generator-spring") } dependencyManagement { imports { mavenBom "io.spring.initializr:initializr-bom:0.8.0.RELEASE" } } build.gradle BOM(a Bill of Materials)
  • 58. © 2019 NTT DATA Corporation 85 これでlocalhost:8080ア クセスすると
  • 59. © 2019 NTT DATA Corporation 86 jsonが出る
  • 60. © 2019 NTT DATA Corporation 88 IntelliJ IDEAなどでlocalhost:8080にアクセスするとやりやすい
  • 61. © 2019 NTT DATA Corporation 89 次は BuildCustomizer ProjectContributer を使ってみる
  • 62. © 2019 NTT DATA Corporation 90 io.spring.initializr.generator.project.ProjectGenerationConfiguration=\ com.chika.custominitializr.contributer.SampleProjectGenerationConfiguration spring.factoriesにパス記載
  • 63. © 2019 NTT DATA Corporation 91 io.spring.initializr.generator.project.ProjectGenerationConfiguration=\ com.chika.custominitializr.contributer.SampleProjectGenerationConfiguration spring.factoriesにパス記載 自動でコンポーネントスキャンされるわけじゃないの で、spring.factoriesで登録する必要あり
  • 64. © 2019 NTT DATA Corporation 92 @ProjectGenerationConfiguration public class SampleProjectGenerationConfiguration { @Bean public BannerContributor bannerContributor() { return new BannerContributor(); } @Bean public BuildCustomizer<MavenBuild> devtoolsContributor () { return (build) -> build.dependencies().add("devtools", "org.springframework.boot","spring-boot-devtools", DependencyScope.COMPILE); } } デフォルトの依存関係をカスタマイズ
  • 65. © 2019 NTT DATA Corporation 93 @ProjectGenerationConfiguration public class SampleProjectGenerationConfiguration { @Bean public BannerContributor bannerContributor() { return new BannerContributor(); } @Bean public BuildCustomizer<MavenBuild> devtoolsContributor () { return (build) -> build.dependencies().add("devtools", "org.springframework.boot","spring-boot-devtools", DependencyScope.COMPILE); } } デフォルトの依存関係をカスタマイズ このアノテーション
  • 66. © 2019 NTT DATA Corporation 94 @ProjectGenerationConfiguration public class SampleProjectGenerationConfiguration { @Bean public BannerContributor bannerContributor() { return new BannerContributor(); } @Bean public BuildCustomizer<MavenBuild> devtoolsContributor () { return (build) -> build.dependencies().add("devtools", "org.springframework.boot","spring-boot-devtools", DependencyScope.COMPILE); } } デフォルトの依存関係をカスタマイズ このアノテーション 依存関係に devtoolsを追加
  • 67. © 2019 NTT DATA Corporation 95 実際に プロジェクトを 生成すると
  • 68. © 2019 NTT DATA Corporation 96 pom.xmlが変更されている
  • 69. © 2019 NTT DATA Corporation 97 起動バナーをカスタマイズ public class BannerContributor implements ProjectContributor { public void contribute(Path projectRoot) throws IOException { Path bannerDirectory = projectRoot .resolve("src/main/resources"); Files.createDirectories(bannerDirectory); Path file =Files.createFile(bannerDirectory.resolve("banner.txt")); try (PrintWriter writer = new PrintWriter(Files.newBufferedWriter(file))) { writer.println( " _____ _ _ _ ¥n" + " / ____| | | (_) | | ¥n" + " | | | |__ _ | | __ __ _ ¥n" + " | | | '_ ¥¥ | | | |/ / / _` |¥n" + " | |____ | | | | | | | < | (_| |¥n" + " ¥¥_____| |_| |_| |_| |_|¥¥_¥¥ ¥¥__,_|¥n" ); } } }
  • 70. © 2019 NTT DATA Corporation 98 実際に プロジェクトを 生成すると
  • 71. © 2019 NTT DATA Corporation 99 起動バナーが変更されている
  • 72. © 2019 NTT DATA Corporation 101 他にも
  • 73. © 2019 NTT DATA Corporation 103 例えばapplication.ymlに こう書くと
  • 74. © 2019 NTT DATA Corporation 104 initializr: dependencies: - name: Web content: - name: Web id: web description: webだよ!!! types: - name: Maven Project id: maven-project description: mvn tags: build: maven format: project default: true action: /starter.zip application.yml packagings: - name: Jar id: jar default: true javaVersions: - id: 11 default: true languages: - name: Java id: java default: true - name: Kotlin id: kotlin default: false group-id: value: org.chika
  • 75. © 2019 NTT DATA Corporation 105 initializr: dependencies: - name: Web content: - name: Web id: web description: webだよ!!! types: - name: Maven Project id: maven-project description: mvn tags: build: maven format: project default: true action: /starter.zip application.yml packagings: - name: Jar id: jar default: true javaVersions: - id: 11 default: true languages: - name: Java id: java default: true - name: Kotlin id: kotlin default: false group-id: value: org.chika Descriptio nを変更 Defaultも 変えられる initializrの namespace で指定 chika になってる
  • 76. © 2019 NTT DATA Corporation 106 STSでプロジェクトを生成しようとすると
  • 77. © 2019 NTT DATA Corporation 107 STSでプロジェクトを生成しようとすると Discriptionが 変更されてる
  • 78. © 2019 NTT DATA Corporation 113 とりあえず やってみたい方
  • 79. © 2019 NTT DATA Corporation 115 https://github.com/spring-io/initializr/tree/master/initializr-service-sample
  • 80. © 2019 NTT DATA Corporation 116 簡単に試せる
  • 81. © 2019 NTT DATA Corporation 118 Spring Initializr凄い! まとめ
  • 82. © 2019 NTT DATA Corporation 119 カスタマイズやってみよ う! まとめ
  • 83. © 2019 NTT DATA Corporation 120 https://github.com/takumi34/custom-spring-initializr 今回使ったコードはここに格納しています
  • 84. © 2019 NTT DATA Corporation