4QSJOH#PPUͱ͍͏ڧ͗͢ΔϑϨʔϜϫʔΫʹ͍ͭͯエキサイト株式会社 三浦大幸
View Slide
˞ݫີʹɺ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ͱʁ
ࠓͷ+BWB4QSJOH#PPUͳΒಡΈ͍͢ʂSpring Bootͱʁ4QSJOH#PPUͷྫ• ΞϊςʔγϣϯΛۦ͢Εɺॻ͖͘ίʔυΛେ෯ʹΒ͢͜ͱ͕Ͱ͖ɺυϝΠϯίʔυʹྗͰ͖Δʂ• ςετͳͲͷɺࠓͷ։ൃʹඞཁͳػೳ͕ἧ͍ͬͯΔʂ
͍·ͦ͜+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ͷ͍͢͝ॴControllerServiceRepositoryΞΫηεՄೳΞΫηεෆՄ
ϨΠϠ͝ͱͷΞΫηε੍ݶ͕Ͱ͖Δʂ(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 BQQMZKBS• CVJMEHSBEMF HSBEMFQSPQFSUJFT TFUUJOHTHSBEMF • (SBEMFλεΫͱʜʁ• ͳͲͳͲʜSpring Bootͷ͍͠ॴ
ͦΕҎ֎ʹʜ• 先に挙げた点から、初期ラーニングコストはそれなりにある• Nullですぐエラーになるにも関わらず、Nullを安全に扱うのが難しい• ビルドに時間がかかる• などなど…Spring Bootͷ͍͠ॴ
࠷ޙʹ
࠷ޙʹ悪いところも色々書きましたが、それでもなお開発する上で有り余るメリットがあると考えています。また、JavaもSpring Bootも活発に更新されているので、いつか先程挙げたデメリットがなくなる日も来るかもしれません。ぜひ一度、Spring Bootに触ってみてください!