Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Spring Bootという強すぎるフレームワークについて
Search
takayuki.miura
February 28, 2022
Technology
0
930
Spring Bootという強すぎるフレームワークについて
takayuki.miura
February 28, 2022
Tweet
Share
More Decks by takayuki.miura
See All by takayuki.miura
TerraformをやめてCDKでReStartしたあと、 CDKをやめてCDK for TerraformでReStartした話
tmiura0203
0
1.5k
急激なDB書き込みが行われるサービスをリビルドした話
tmiura0203
0
770
実際にリビルドを完遂してみて
tmiura0203
0
720
Other Decks in Technology
See All in Technology
アクセスピークを制するオートスケール再設計: 障害を乗り越えKEDAで実現したリソース管理の最適化
myamashii
1
670
microCMSではじめるAIライティング
himaratsu
0
150
Introduction to Bill One Development Engineer
sansan33
PRO
0
260
研究開発部メンバーの働き⽅ / Sansan R&D Profile
sansan33
PRO
3
18k
All About Sansan – for New Global Engineers
sansan33
PRO
1
1.2k
衛星運用をソフトウェアエンジニアに依頼したときにできあがるもの
sankichi92
1
1k
ABEMAの本番環境負荷試験への挑戦
mk2taiga
5
1.3k
Amplify Gen2から知るAWS CDK Toolkit Libraryの使い方/How to use the AWS CDK Toolkit Library as known from Amplify Gen2
fossamagna
1
350
Transformerを用いたアイテム間の 相互影響を考慮したレコメンドリスト生成
recruitengineers
PRO
2
440
LLM拡張解体新書/llm-extension-deep-dive
oracle4engineer
PRO
23
6.3k
【あのMCPって、どんな処理してるの?】 AWS CDKでの開発で便利なAWS MCP Servers特集
yoshimi0227
6
950
ロールが細分化された組織でSREは何をするか?
tgidgd
1
420
Featured
See All Featured
How to Ace a Technical Interview
jacobian
278
23k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.4k
Testing 201, or: Great Expectations
jmmastey
43
7.6k
Rebuilding a faster, lazier Slack
samanthasiow
83
9.1k
GraphQLの誤解/rethinking-graphql
sonatard
71
11k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
8
700
The Invisible Side of Design
smashingmag
301
51k
Designing for humans not robots
tammielis
253
25k
The Cost Of JavaScript in 2023
addyosmani
51
8.6k
Making the Leap to Tech Lead
cromwellryan
134
9.4k
RailsConf 2023
tenderlove
30
1.1k
The Cult of Friendly URLs
andyhume
79
6.5k
Transcript
4QSJOH#PPUͱ͍͏ ڧ͗͢ΔϑϨʔϜϫʔΫʹ͍ͭͯ エキサイト株式会社 三浦大幸
˞ݫີʹɺ4QSJOH#PPUͱͦΕʹؔ࿈͢Δٕज़ͷͰ͢
ࣗݾհ • エキサイト新卒6年目 • バックエンドエンジニアとして入社 • その後、フロント・iOSアプリ・AWSインフラ開発を経験 • PHPの開発経験が一番長いが、最近は主にJavaで開発中
https://twitter.com/miura0203
ΞδΣϯμ • Spring Bootとは? • Spring Bootのすごい所 • Spring
Bootの難しい所 • 最後に
4QSJOH#PPUͱʁ
4QSJOH#PPUͱʁ • Javaのフレームワーク • WebサイトやAPIはもちろん、バッチなども作ることができる • MavenやGradleで依存管理をする Spring Bootͱʁ
͍·͞Β+BWB 🤔
+BWBͱ͔ݹष͍ͷͰʜ • ʁ • ͔ΓͮΒ͍ʁ Spring Bootͱʁ
ࠓͷ+BWB 4QSJOH#PPUͳΒಡΈ͍͢ʂ Spring Bootͱʁ 4QSJOH#PPUͷྫ • ΞϊςʔγϣϯΛۦ͢Εɺॻ͖͘ ίʔυΛେ෯ʹΒ͢͜ͱ͕Ͱ͖ɺυϝ ΠϯίʔυʹྗͰ͖Δʂ •
ςετͳͲͷɺࠓͷ։ൃʹඞཁͳػೳ͕ ἧ͍ͬͯΔʂ
͍·͞Β+BWB 🤔
͍·ͦ͜+BWBʂ😎
4QSJOH#PPUͷ͍͢͝ॴ
%*͕ͱͯ؆୯ 4QSJOH#PPUͷ͍͢͝ॴ
%*ͷཧ໘ʜ -BSBWFMͷྫ *OUFSGBDFͱ*NQMFNFOUΛ࣮ %*ίϯςφʹొ ༻͍ͨ͠ΫϥεͷίϯετϥΫλͷ ҾͰఆٛ Spring
Bootͷ͍͢͝ॴ
%*ͷཧ໘ʜ -BSBWFMͷྫ • %*ొ͕ࡶʹͳΔ • ίϯετϥΫλͷهड़͕ࡶʹͳΔ ଞͷϑϨʔϜϫʔΫͰࣅͨΑ͏ͳݒ೦͕͋Δʜ Spring Bootͷ͍͢͝ॴ
%*͕ͱͯ؆୯ʂ 4QSJOH#PPUͷྫ *OUFSGBDFͱ*NQMFNFOUΛ࣮͠ɺ ΞϊςʔγϣϯΛఆٛ ༻͍ͨ͠ΫϥεͷϓϩύςΟʹɺΞϊ ςʔγϣϯͱҰॹʹఆٛ Spring Bootͷ͍͢͝ॴ
%*͕ͱͯ؆୯ʂ 4QSJOH#PPUͷྫ ϝϦοτ • %*ίϯςφͷొ͕γϯϓϧ • ίϯετϥΫλʹཏྻ͢Δඞཁ͕ͳ͘ɺ γϯϓϧ Spring Bootͷ͍͢͝ॴ
ϨΠϠ͝ͱͷΞΫηε੍ݶ͕Ͱ͖Δ 4QSJOH#PPUͷ͍͢͝ॴ ˞ݫີʹ(SBEMFͷػೳͰ͢
ϨΠϠ͝ͱʹΞΫηε੍ݶ͍ͨ͠ʜ $MFBO"SDIJUFDUVSFͷϨΠϠ ཧతʹɺӈਤͷΑ͏ʹ ϨΠϠؒͷΞΫηε੍ݶΛ͍ͨ͠ • ্͔ΒԼͷϨΠϠʹΞΫηεՄೳ • Լ͔Β্ͷϨΠϠʹΞΫηεෆՄ Spring Bootͷ͍͢͝ॴ
Controller Service Repository ΞΫηεՄೳ ΞΫηεෆՄ
ϨΠϠ͝ͱͷΞΫηε੍ݶ͕Ͱ͖Δʂ (SBEMFͷʮϚϧνϓϩδΣΫτʯͱ͍͏ػೳͰ ϨΠϠؒΞΫηε੍ݶΛ࣮ݱͰ͖Δ TFUUJOHTHSBEMFϑΝΠϧͰ αϒϓϩδΣΫτΛఆٛ CVJMEHSBEMFϑΝΠϧͰɺ αϒϓϩδΣΫτؒͷґଘΛఆٛ Spring
Bootͷ͍͢͝ॴ
σʔλΫϥε͕؆୯ʹ࡞ΕΔ 4QSJOH#PPUͷ͍͢͝ॴ ˞ݫີʹ-PNCPLͷػೳͰ͢
σʔλΫϥε͕ࡶʜ 1)1ͷྫ ΧϓηϧԽ͞ΕͨσʔλΫϥεΛ࡞Δʹɺ ҎԼ͕ඞཁ • QSJWBUFͳϓϩύςΟ • QVCMJDͳ HFUUFSTFUUFS •
*NNVUBCMFͳΒɺ TFUUFSͷΘΓʹ ίϯετϥΫλͰϓϩύςΟΛηοτ Spring Bootͷ͍͢͝ॴ
σʔλΫϥε͕؆୯ʹ࡞ΕΔʂ 4QSJOH#PPUͷྫ -PNCPLͱ͍͏ϥΠϒϥϦΛ͏͜ͱͰɺ ͔ͳΓγϯϓϧʹ࣮Ͱ͖Δ • !%BUBͰ .VUBCMFͳσʔλΫϥε • ࣗಈͰ HFUUFSTFUUFS͕͘
• ͞Βʹ !"DDFTTPSTΛ͚ͭΕɺ νΣʔϯͰఆٛͰ͖Δ • !7BMVFͰ *NNVUBCMFͳσʔλΫϥε • ࣗಈͰ HFUUFSίϯετϥΫλ͕͘ • ࣗಈͰϓϩύςΟʹ QSJWBUF͕͘ Spring Bootͷ͍͢͝ॴ
ͦΕҎ֎ʹͨ͘͞Μʂ • Envファイルに定義するような環境ごとのデータを、クラスに紐付けて取得し、DIして使用 できる • マルチプロジェクト機能を使って、簡単にモジュラモノリス構成を作れる • Spring BootではWebフロントサーバからバックエンドAPI、バッチまで作れるので、
ほぼ1サービスをそのプロジェクトのみで作ることができる • キャッシュ生成・取得、DBのトランザクション、データのJSON化やJSONのパースなど、面 倒な作業をアノテーションだけで実装することができる • などなど… Spring Bootͷ͍͢͝ॴ
4QSJOH#PPUͷ͍͠ॴ
ཪଆͷΈ͕ෳࡶ 4QSJOH#PPUͷ͍͠ॴ
ཪଆͷΈ͕ෳࡶ ͍Ζ͍Ζͳࣄ͕Ͱ͖ɺϥΠϒϥϦ๛ͳཪ ଆͷΈ͕ෳࡶͰɺ٧·Δͱղܾ͕େมͳ࣌ ͕͋Δ • ͓ଋతͳઃఆ͕ଟ͍ • ϚϧνϓϩδΣΫτ͏ϥΠϒϥϦͷΈ ߹ΘͤʹΑͬͯɺಛघͳઃఆ͕ඞཁͳ߹ ͕͋Δ
• %#3FEJTͷϛυϧΣΞͱͷଓΛΧε λϚΠζ͍ͨ͠߹ɺෳࡶͳઃఆ͕ඞཁʹͳ Δ • ͳͲͳͲʜ Spring Bootͷ͍͠ॴ
8FC্ͷݟͷϑΟϧλϦϯά͕ ͍͠ 4QSJOH#PPUͷ͍͠ॴ ˞ݫີʹ+BWB֤छϥΠϒϥϦؚΈ·͢
8FC্ͷݟͷϑΟϧλϦϯά͕͍͠ Spring Bootもそうだが、使われる各種ライブラリやJava自体も歴史が古く、いろいろな情報が Web上で出回ってしまっている • 過去のバージョンでは動いたが、今は使えないもの • 一見似ているが、実は異なるライブラリ •
依存管理システムであるMavenとGradleについて、欲しい方の情報が書かれていない • (しかもそのほとんどが英語) • などなど… Spring Bootͷ͍͠ॴ
(SBEMFͷ͍ํ͕͍͠ 4QSJOH#PPUͷ͍͠ॴ ˞ݫີʹ(SBEMFͷͰ͢
(SBEMFͷ͍ํ͕͍͠ (SBEMFͷઃఆɺଞͷґଘཧγεςϜʹൺɺ ෳࡶͳ͜ͱ͕Ͱ͖Δඇৗʹཧղ͕͍͠ͷ ͱͳͬͯ͠·͍ͬͯΔ • JNQMFNFOUBUJPOSVOUJNF0OMZ BQQMZ KBS • CVJMEHSBEMF
HSBEMFQSPQFSUJFT TFUUJOHTHSBEMF • (SBEMFλεΫͱʜʁ • ͳͲͳͲʜ Spring Bootͷ͍͠ॴ
ͦΕҎ֎ʹʜ • 先に挙げた点から、初期ラーニングコストはそれなりにある • Nullですぐエラーになるにも関わらず、Nullを安全に扱うのが難しい • ビルドに時間がかかる • などなど…
Spring Bootͷ͍͠ॴ
࠷ޙʹ
࠷ޙʹ 悪いところも色々書きましたが、それでもなお開発する上で有り余るメリットがあると考えて います。 また、JavaもSpring Bootも活発に更新されているので、いつか先程挙げたデメリットがなくなる 日も来るかもしれません。 ぜひ一度、Spring Bootに触ってみてください!