<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Spring-Boot on よ〜んの雑記</title><link>https://mu7889yoon.github.io/tags/spring-boot/</link><description>Recent content in Spring-Boot on よ〜んの雑記</description><generator>Hugo</generator><language>ja-jp</language><lastBuildDate>Thu, 13 Aug 2026 14:06:10 +0900</lastBuildDate><atom:link href="https://mu7889yoon.github.io/tags/spring-boot/index.xml" rel="self" type="application/rss+xml"/><item><title>Java未経験エンジニアなので、Spring Bootとやらに触れてみる</title><link>https://mu7889yoon.github.io/posts/getting-start-with-spring-boot/</link><pubDate>Thu, 13 Aug 2026 14:06:10 +0900</pubDate><guid>https://mu7889yoon.github.io/posts/getting-start-with-spring-boot/</guid><description>&lt;p&gt;Spring BootをMaster Boot RecordとかGRUBの類だと思っていたよ〜んです。&lt;/p&gt;
&lt;p&gt;Javaを書いたことはありませんが、まぁPHPみたいなクラス型の言語でしょ、という軽いノリで進めていきます。&lt;/p&gt;
&lt;p&gt;よく聞くDIやレイヤードアーキテクチャがコード上で何をしているのかも読んでいきます。&lt;/p&gt;
&lt;h2 id="環境構築"&gt;環境構築&lt;a class="headline-hash" href="#%e7%92%b0%e5%a2%83%e6%a7%8b%e7%af%89" aria-label="「環境構築」見出しへのリンク"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;開発環境にはDocker Composeを使います。&lt;/p&gt;
&lt;p&gt;やはり手こずるのが環境構築。初めての言語、初めてのフレームワークぐらい手でやった方がいいです。（辛面白いので）&lt;/p&gt;
&lt;p&gt;とか思っていましたが、便利そうなWebツールがありました。&lt;/p&gt;
&lt;p&gt;Spring Initializrです。&lt;/p&gt;
&lt;p&gt;参考 &lt;a href="https://start.spring.io/"&gt;Spring Initializr&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;今回の設定 &lt;a href="https://start.spring.io/#!type=maven-project&amp;amp;language=java&amp;amp;platformVersion=4.1.0&amp;amp;packaging=jar&amp;amp;configurationFileFormat=properties&amp;amp;jvmVersion=26&amp;amp;groupId=com.example&amp;amp;artifactId=todo&amp;amp;packageName=com.example.todo&amp;amp;dependencies=web,data-jpa,validation,postgresql,flyway,actuator,devtools"&gt;Spring Initializr&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;ここら辺の開発者体験はいいですね。&lt;/p&gt;
&lt;h3 id="pomxml-is-何者なのか"&gt;&lt;code&gt;pom.xml&lt;/code&gt; is 何者なのか&lt;a class="headline-hash" href="#pomxml-is-%e4%bd%95%e8%80%85%e3%81%aa%e3%81%ae%e3%81%8b" aria-label="「pom.xml is 何者なのか」見出しへのリンク"&gt;#&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;pom.xml&lt;/code&gt;がパッケージ管理をしているっぽいですね。&lt;/p&gt;
&lt;p&gt;可愛いファイル名とか思っていましたが、POMは &lt;strong&gt;Project Object Model&lt;/strong&gt; の略でした、なかなかイカついすね。&lt;/p&gt;
&lt;p&gt;JavaScriptでいう&lt;code&gt;package.json&lt;/code&gt;に近い立ち位置ですが、依存関係だけでなくビルド方法なども含めてMavenがプロジェクトを管理するファイルということらしいです。&lt;/p&gt;
&lt;p&gt;まっさらな状態から始める場合は、先にSpring Initializrで&lt;code&gt;pom.xml&lt;/code&gt;、&lt;code&gt;mvnw&lt;/code&gt;、&lt;code&gt;src/&lt;/code&gt;などを生成し、その後にDocker環境を作るのが分かりやすそうです。&lt;/p&gt;
&lt;h3 id="起動してみる"&gt;起動してみる&lt;a class="headline-hash" href="#%e8%b5%b7%e5%8b%95%e3%81%97%e3%81%a6%e3%81%bf%e3%82%8b" aria-label="「起動してみる」見出しへのリンク"&gt;#&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;app&lt;/code&gt;ディレクトリで起動します。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;docker compose up
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;最初にアクセスしたときは、Whitelabel Error Pageが出ました。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://mu7889yoon.github.io/images/019ffb7e-4bd0-7716-a6c1-e12fac143ce9.png" alt=""&gt;&lt;/p&gt;
&lt;p&gt;これはアプリケーションが落ちているのではなく、&lt;code&gt;/&lt;/code&gt;に対応するControllerもHTMLもまだないための404でした。&lt;/p&gt;
&lt;p&gt;Actuatorのヘルスチェックを見ると、Spring Boot自体は起動しています。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://mu7889yoon.github.io/images/019ffb7e-5788-7fc5-bbaa-2d553ea25a45.png" alt=""&gt;&lt;/p&gt;
&lt;h2 id="todoアプリの仕様"&gt;Todoアプリの仕様&lt;a class="headline-hash" href="#todo%e3%82%a2%e3%83%97%e3%83%aa%e3%81%ae%e4%bb%95%e6%a7%98" aria-label="「Todoアプリの仕様」見出しへのリンク"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Webアプリケーション界のHello World、超シンプルなTodoアプリケーションを作ります。&lt;/p&gt;
&lt;p&gt;Todoの登録、取得、更新、削除と、未完了・完了の切り替えができれば一旦完成とします。&lt;/p&gt;
&lt;p&gt;APIはこの形です。&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Method&lt;/th&gt;
					&lt;th&gt;Path&lt;/th&gt;
					&lt;th&gt;用途&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;POST&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;/api/todos&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Todoを登録する&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;GET&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;/api/todos&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Todoを一覧表示する&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;GET&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;/api/todos/{id}&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Todoを1件取得する&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;PUT&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;/api/todos/{id}&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;タイトルなどを更新する&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;PATCH&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;/api/todos/{id}/status&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;完了・未完了を切り替える&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;DELETE&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;/api/todos/{id}&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Todoを削除する&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="レイヤードアーキテクチャで分ける"&gt;レイヤードアーキテクチャで分ける&lt;a class="headline-hash" href="#%e3%83%ac%e3%82%a4%e3%83%a4%e3%83%bc%e3%83%89%e3%82%a2%e3%83%bc%e3%82%ad%e3%83%86%e3%82%af%e3%83%81%e3%83%a3%e3%81%a7%e5%88%86%e3%81%91%e3%82%8b" aria-label="「レイヤードアーキテクチャで分ける」見出しへのリンク"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;アーキテクチャは、あるあるのレイヤードアーキテクチャで組みます。（まぁClean Architectureが好みなのですが）&lt;/p&gt;</description></item></channel></rss>