Springの概要とプロジェクト作成

Springとは

システム開発やソフトウェア開発では、エンジニアの開発作業を支える「フレームワーク」が数多く存在します。
フレームワークとは、システムやアプリケーションの開発をサポートするためのソフトウェアの骨組みです。骨組みが決まっている分、必要最低限のプログラムを書くだけでシステムやアプリを作ることができ、ソフトウェア開発工数の短縮やコスト削減ができます。
PHPにおける「Laravel」やPythonにおける「Flask」など、その数はプログラミング言語の数だけ無数に存在すると言っても過言ではありません。

本マニュアルではJavaのフレームワークとして「Spring Framewrok」、中でも「Spring Boot」環境でのコーディングを学習していきます。

Spring FrameworkとSpring Boot

Spring Framework(単にSpringとも呼ぶ)は、2004年にリリースされて以来、世界中で広く支持されているオープンソースのフレームワークです。柔軟性が高いため、万能型のフレームワークとも評されています。高い拡張性と保守性、再利用性を備えているため、Webシステムの開発にも適しており、大規模な開発プロジェクトでも多く採用されています。
Spring Frameworkは、例えるならば「フレームワークの集合体」で、数多くのプロジェクト(複数のプログラムを機能やアプリケーションとしてまとめたもの≒モジュール=部品)によって構築されています。作りたいシステムによってプロジェクトを選択・使い分けることができます。

Spring Frameworkは豊富なフレームワークによって幅広い開発力を実現している反面、選択肢が多すぎるがゆえに「機能の使い分けが困難」といったデメリットがあります。これは複数のフレームワークを組み合わせて使用するうえで、環境構築のための設定が複雑化してしまうためです。

この欠点を解消するために作られたのがSpring Bootです。主な機能として、複数のフレームワークを使用する際に発生する設定などを可能な限り自動設定する機能が搭載されています。このほか、プログラムのコードが簡略化できるアノテーション(注釈)が記述できる点も特徴です。Spring bootは、Spring MVCと呼ばれる別のフレームワークの仕様を踏襲して作られており、Spring Frameworkを構成するフレームワークの1つとして組み込まれています。
参考サイト:Java Spring Boot とは – Spring Boot の概要 | Microsoft Azure

Springの基礎知識

以下は今後あえて意識するタイミングは少ないと思いますが、頭の片隅に知識として押さえておいてください。

DI(Dependency Injection:依存性注入)

Javaのプログラム同士が「使う側」「使われる側」という関係性を持つとき、このことを「依存関係」と言います。もし、使われる側クラスに修正が入った場合、使う側クラスにも修正を入れなければなりません。SpringにおけるDIとは、オブジェクト間の依存関係を解決するための仕組みです。簡単に言うと、DIはオブジェクトが自分で他のオブジェクトを作成したり管理したりするのではなく、外部(通常はSpringのDIコンテナ)から必要なオブジェクトを「注入(inject)」してもらうという考え方です。DIを使うことで、コードが柔軟になり、変更に強く、テストしやすくなります。

AOP(Aspect Oriented Programming:アスペクト指向プログラミング)

様々なオブジェクトに散在する共通処理を抜き出してまとめて管理する仕組みのことです。メインロジックにあたる「中心的関心事」と、実現したい機能の本質ではないものの品質・保守の観点で必要になるもの(データベース接続後の例外処理やログ出力処理など)「横断的関心事」に分け、「横断的関心事」をまとめて管理することで、共有処理を統一化できる、コードの可読性が上がる、開発効率が上がるといった利点が得られます。

STS(Spring Tool Suite)

STSとは、Spring 公式のツールで、Eclipse ベースの統合開発環境IDEとして単体でインストールしたり、プラグインとして Eclipse に追加することができます。Springアプリケーションの開発をしやすくするための機能が組み込まれているので、生産性が向上します。このマニュアルでは既にプラグインとして組み込まれた状態になっています。

ビルドツール

ビルドとは「要求された実行環境で動作できる形式にアプリケーションやライブラリを組み立てる」ことで、ビルドツールは「専用の設定ファイルにビルドの情報を記述することで、必要なライブラリやファイル・フォルダなどをすべて自動的に作成し、コンパイルなど各種の処理を行なってくれるツール」です。Spring Bootでは「Maven」と「Gradle」がプラグインとして提供されており、本マニュアルではMavenを利用します。Mavenでは、pom.xmlというファイルに記述すると、外部サイトで集中管理されているJARのダウンロード、ライブラリを管理・アップデートまで自動で行ってくれます。
参考:Maven(Apache Maven)とは

Spring Bootのプロジェクト作成

さっそくSpring Bootプロジェクトを作成していきましょう!
Eclipseを含むいくつかの統合開発環境では、Spring Bootプロジェクトを簡単に作成できるSpring Initializrが導入されていますので、これを使用して作成します。

Eclipse上で ファイル>新規>Spring スターター・プロジェクト(Spring Initializr) をクリック


下記のウインドウでは作成するプロジェクトの設定をしていきます。
・「名前」「成果物」には、「spring-○○」(○○は自分の苗字)を入力
・「グループ」「パッケージ」に、「com.cmps.spring」を入力
・「タイプ」がMaven、「Javaバージョン」が17であることを確認
上記ができたら「次へ」をクリック


次の画面は「Dependencies」の設定を行う画面です。このプロジェクトで使用するフレームワークやライブラリなどを選択する画面です。
下記のように選択し、「選択済み」欄に表示される内容が画像と同じになったら「完了」をクリックします。


下図のようにパッケージ・エクスプローラー上にプロジェクトが表示されれば問題ありません。

pom.xmlとは
Mavenで作成したプロジェクトのビルド内容を設定するファイル」です。
今回「Dependencies」で選択したライブラリはこのファイルの中に記述されています。

後からフレームワークやライブラリを追加することも可能で、今後の単元でも順次追加します。
このファイルの存在は頭の片隅に覚えておきましょう。

参考サイト:POMファイルの構成と記述方法を1から

サンプルプログラムの作成

作成したプロジェクトが問題なく実行できるか確認するために、サンプルのプログラムを作成して確認してみましょう!

パッケージ、クラスの作成

ここではControllerファイルを作成していきます。

まず、「src/main/java」フォルダ内の「com.cmps.spring」パッケージで右クリックし
新規>パッケージ をクリック


新規Javaパッケージウィンドウが開くので、
「名前」に「.controller」を足して「com.cmps.spring.controller」にして、完了をクリック


作成した「com.cmps.spring.controller」パッケージ上で右クリックし
新規>クラス をクリック


「パッケージ」が「com.cmps.spring.controller」であることを確認してから
「名前」に「HelloController」を入力し、「完了」をクリック

「HelloController.java」が作成できました。


作成したHelloController.javaに、下記の内容を記載(追記)します。

package com.cmps.spring.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    /**
     * 「/hello」へアクセスした場合の出力
     */
    @GetMapping("/hello")
    public String helloWorld() {
        // 文字列を返す
        return "Hello, Spring Boot World!";
    }
}

記述内容を簡単に解説します。
@RestControllerアノテーションは、このクラスがRestControllerであることを示します。
RestControllerは、簡単に言うとJSONやXMLなどのデータを返すもので、今回のメソッドは文字列を返しています。

@GetMappingというアノテーションを付与することにより、
GET送信で「/hello」にアクセスすると、helloWorldメソッド(@GetMapping直下のハンドラーメソッド)が実行されます。
このアノテーションは@Controllerや@RestController内のメソッドに対して指定します。
GetMapping (Spring Framework API) – Javadoc

プログラムの実行

Spring Bootプロジェクトを実行するには、
パッケージ・エクスプローラー上で
プロジェクト名を右クリック>実行>Spring Bootアプリケーション をクリック


下記のように、エラーメッセージが特に出ず、
最後に「Started ○○Application in …」というメッセージが出ていれば問題なく実行できています。
(○○はプロジェクト名)

さっそくURLにアクセスしてみましょう!
URL:http://localhost:8080/hello

下記のように表示できたでしょうか。メソッドの返り値に指定した文字列が、ブラウザ上に表示されています。

上記のリンクをクリックする以外にも、
ブラウザのアドレスバーに直接「localhost:8080/hello」を入力することでも、同様にアクセスできます。

プログラムの停止

Spring Bootのアプリケーションを停止したい場合は、ツールバーまたはコンソール上部に表示されている停止ボタンをクリックすると止めることができます。
停止した状態で先ほどのURLにアクセスすると、アクセスできなくなっていることが確認できるでしょう。

プログラムの起動と停止

Spring Bootのアプリケーション起動・停止するための他の操作方法として「Bootダッシュボード」ビューが有用です。
Eclipseで 「ウィンドウ」>「ビューの表示」>B「ootダッシュボード」 を選択することで表示できます。
(Bootダッシュボードが表示されていなければ、その他から検索可能)

Springプロジェクトのみを一覧で表示でき、プロジェクトを右クリックして、起動・停止を行うことができます。

プログラムの更新について

アプリケーションを実行している状態でControllerなどのファイルを一部変更して保存すると、コンソールメッセージが次々に出力されるでしょう。
これはプロジェクト作成時に導入した「Spring Boot Dev tools」の機能で、Javaプログラムを更新するとプロジェクト全体を更新してくれます。これにより、手動で再起動をかけなくても最新の状態がアプリケーションに反映されます。

*コンソールメッセージに最後の「Started ○○Application in …」が出て止まってから、ブラウザを更新するようにしてください。

アプリの起動構成について(@SpringBootApplication)

アプリの起動時に「Started ○○Application in …」(○○はプロジェクト名)というメッセージについてもう少し掘り下げて解説します。

上記の「○○Application」というのは、src/main/java内の「com.cmps.spring」パッケージ直下にあるクラスです。クラス自体は以下のように短い記述ですが、このクラス(=@SpringBootApplicationアノテーションを持つクラス)こそが、Spring Bootアプリケーションの起動を担当する中心的なクラスなのです。
Javaにおけるmainメソッドにあたります。

アプリケーション起動からHTTPリクエストの処理まで

※HTTPリクエスト、レスポンスと言う言葉が出てきますが、次の単元で説明します。ここでは簡単に
リクエストを「サイトのURLに飛ぶリンクをクリックする操作」、
レスポンスを「リンク先のページがブラウザ上に表示されること」といったイメージでとらえてください。

アプリケーションの起動

Spring Bootアプリケーションは、@SpringBootApplicationアノテーションが付けられたクラスのmainメソッドから起動します。
mainメソッド内のSpringApplication.run()メソッドが、アプリケーションのセットアップやコンポーネントの自動構成を行います。

①main() メソッドが実行
→SpringApplication.run() が呼ばれる
→アプリケーションコンテキストを構築
→自動構成(Auto-Configuration)、必要なコンポーネント(Bean)の登録

②Webサーバー(Tomcat等)が起動
→HTTPリクエストの受け付け開始
☆アプリの起動時に「Started ○○Application in …」が出るのはこのタイミング

HTTPリクエストの処理

Spring Bootに組み込みのWebサーバーがHTTPリクエストを処理し、コントローラがビジネスロジックをサービス層に依頼して、レスポンスを返します。

③コントローラがHTTPリクエストを処理
④コントローラがサービス層に処理を依頼
→サービス層がビジネスロジックを実行、結果をコントローラに返す
⑤HTTPレスポンスをクライアントに返す

Spring Bootで開発する上で、
@SpringBootApplicationによりアプリが起動されること、
アプリを起動して初めてブラウザの要求に対して処理が返せること、
上記の流れ については押さえておきましょう!

作成したSpringのプロジェクトについても、Git管理を行います。
「Git」の単元の「リモートリポジトリ作成」に習って、初回コミット・コラボレーターの招待まで実施してください。
 ・GitHub上のリモートリポジトリ名は、プロジェクト名と同じ「spring-○○」

タイトルとURLをコピーしました