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

PostgreSQL初心者がパッチを提案してからコミットされるまで(第20回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL初心者がパッチを提案してからコミットされるまで(第20回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQL初心者がパッチを提案してからコミットされるまで(第20回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL初心者がパッチを提案してからコミットされるまで(第20回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
よく聞くけど、「SharePoint リストの 5,000 件問題」ってなんなの?
よく聞くけど、「SharePoint リストの 5,000 件問題」ってなんなの?よく聞くけど、「SharePoint リストの 5,000 件問題」ってなんなの?
よく聞くけど、「SharePoint リストの 5,000 件問題」ってなんなの?Hirofumi Ota
 
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説増田 亨
 
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」Masahito Zembutsu
 
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチレガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ増田 亨
 
40歳過ぎてもエンジニアでいるためにやっていること
40歳過ぎてもエンジニアでいるためにやっていること40歳過ぎてもエンジニアでいるためにやっていること
40歳過ぎてもエンジニアでいるためにやっていることonozaty
 
今こそ知りたいSpring Web(Spring Fest 2020講演資料)
今こそ知りたいSpring Web(Spring Fest 2020講演資料)今こそ知りたいSpring Web(Spring Fest 2020講演資料)
今こそ知りたいSpring Web(Spring Fest 2020講演資料)NTT DATA Technology & Innovation
 
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5Takahiro YAMADA
 
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意Yoshitaka Kawashima
 
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)NTT DATA Technology & Innovation
 
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのかDDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのかKoichiro Matsuoka
 
株式会社コロプラ『GKE と Cloud Spanner が躍動するドラゴンクエストウォーク』第 9 回 Google Cloud INSIDE Game...
株式会社コロプラ『GKE と Cloud Spanner が躍動するドラゴンクエストウォーク』第 9 回 Google Cloud INSIDE Game...株式会社コロプラ『GKE と Cloud Spanner が躍動するドラゴンクエストウォーク』第 9 回 Google Cloud INSIDE Game...
株式会社コロプラ『GKE と Cloud Spanner が躍動するドラゴンクエストウォーク』第 9 回 Google Cloud INSIDE Game...Google Cloud Platform - Japan
 
PostgreSQL開発コミュニティに参加しよう! ~2022年版~(Open Source Conference 2022 Online/Kyoto 発...
PostgreSQL開発コミュニティに参加しよう! ~2022年版~(Open Source Conference 2022 Online/Kyoto 発...PostgreSQL開発コミュニティに参加しよう! ~2022年版~(Open Source Conference 2022 Online/Kyoto 発...
PostgreSQL開発コミュニティに参加しよう! ~2022年版~(Open Source Conference 2022 Online/Kyoto 発...NTT DATA Technology & Innovation
 
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!mosa siru
 
バッチは地味だが役に立つ
バッチは地味だが役に立つバッチは地味だが役に立つ
バッチは地味だが役に立つapkiban
 
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Masahito Zembutsu
 
コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線Motonori Shindo
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話Kumazaki Hiroki
 

What's hot (20)

PostgreSQL初心者がパッチを提案してからコミットされるまで(第20回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL初心者がパッチを提案してからコミットされるまで(第20回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQL初心者がパッチを提案してからコミットされるまで(第20回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL初心者がパッチを提案してからコミットされるまで(第20回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
よく聞くけど、「SharePoint リストの 5,000 件問題」ってなんなの?
よく聞くけど、「SharePoint リストの 5,000 件問題」ってなんなの?よく聞くけど、「SharePoint リストの 5,000 件問題」ってなんなの?
よく聞くけど、「SharePoint リストの 5,000 件問題」ってなんなの?
 
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
 
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」
 
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチレガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
 
40歳過ぎてもエンジニアでいるためにやっていること
40歳過ぎてもエンジニアでいるためにやっていること40歳過ぎてもエンジニアでいるためにやっていること
40歳過ぎてもエンジニアでいるためにやっていること
 
今こそ知りたいSpring Web(Spring Fest 2020講演資料)
今こそ知りたいSpring Web(Spring Fest 2020講演資料)今こそ知りたいSpring Web(Spring Fest 2020講演資料)
今こそ知りたいSpring Web(Spring Fest 2020講演資料)
 
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
 
NGINXをBFF (Backend for Frontend)として利用した話
NGINXをBFF (Backend for Frontend)として利用した話NGINXをBFF (Backend for Frontend)として利用した話
NGINXをBFF (Backend for Frontend)として利用した話
 
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
 
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
 
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのかDDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
 
株式会社コロプラ『GKE と Cloud Spanner が躍動するドラゴンクエストウォーク』第 9 回 Google Cloud INSIDE Game...
株式会社コロプラ『GKE と Cloud Spanner が躍動するドラゴンクエストウォーク』第 9 回 Google Cloud INSIDE Game...株式会社コロプラ『GKE と Cloud Spanner が躍動するドラゴンクエストウォーク』第 9 回 Google Cloud INSIDE Game...
株式会社コロプラ『GKE と Cloud Spanner が躍動するドラゴンクエストウォーク』第 9 回 Google Cloud INSIDE Game...
 
PostgreSQL開発コミュニティに参加しよう! ~2022年版~(Open Source Conference 2022 Online/Kyoto 発...
PostgreSQL開発コミュニティに参加しよう! ~2022年版~(Open Source Conference 2022 Online/Kyoto 発...PostgreSQL開発コミュニティに参加しよう! ~2022年版~(Open Source Conference 2022 Online/Kyoto 発...
PostgreSQL開発コミュニティに参加しよう! ~2022年版~(Open Source Conference 2022 Online/Kyoto 発...
 
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 
バッチは地味だが役に立つ
バッチは地味だが役に立つバッチは地味だが役に立つ
バッチは地味だが役に立つ
 
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編
 
コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
 

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
 
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢apkiban
 
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
 

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
 
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
 
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を活用して開発効率を上げる
 

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
 
Spring 5 でSpring Test のここが変わる
Spring 5 でSpring Test のここが変わるSpring 5 でSpring Test のここが変わる
Spring 5 でSpring Test のここが変わるapkiban
 

More from apkiban (9)

大規模・長期保守を見据えたエンタープライズ システム開発への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

論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 

Recently uploaded (12)

論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 

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