Javaフレームワークの紹介:SpringとSpring Boot

docs

今回はJavaの学習をさらに進めて、「フレームワーク」という強力なツールについて見ていこう。特にJavaの世界でデファクトスタンダードとなっているSpring Frameworkと、その上に構築されたSpring Bootに焦点を当てるよ。

フレームワークって何?

フレームワークと聞くと、「なんか難しそう…」と思うかもしれないけど、要は**「アプリ開発の型(ひな形)や共通部品をあらかじめ用意してくれたもの」**だと考えてみて。

たとえば、君が料理をするとしよう。

  • フレームワークなし: 材料を自分で用意して、イチから調理器具を準備して、手順も全部自分で考える。大変だよね。
  • フレームワークあり: レシピ本と、包丁やフライパン、お鍋など基本的な調理器具が一通り揃ったキッチンを借りるようなイメージ。材料をレシピ通りに切って、調理器具を使って指示された手順で進めれば、美味しい料理が簡単に作れる。

プログラミングの世界でも同じで、フレームワークを使えば、基本的な設定や共通して必要となる機能(データベース接続、セキュリティ、Web画面表示など)をイチから書く手間が省けるんだ。これにより、君はアプリの「本質的な機能」や「作りたいもの」に集中できるようになる。開発のスピードも格段にアップするし、品質も安定しやすいというメリットもあるよ。

JavaのWebアプリ開発を楽にするSpring Framework

JavaでWebアプリケーションを開発するとなったら、ほぼ間違いなく名前が挙がるのがSpring Framework(以下、Spring)だ。Springは、Javaのエンタープライズアプリケーション開発に広く利用されている、非常に高機能なフレームワークだよ。

Springがこんなに人気があるのには、いくつか理由がある。

1.「DI(依存性の注入)」という考え方: これはちょっと難しい話に聞こえるかもしれないけど、簡単に言うと「オブジェクト同士のつながりをSpringが管理してくれる」仕組みのこと。 例えば、ブログアプリで記事の保存機能を作るとしよう。記事を保存するためには、データベースに接続する「DB接続クラス」が必要だよね。

DIがない場合:

Java

class ArticleService { 
  private DBConnection dbConnection; 

  public ArticleService() { 
    this.dbConnection = new DBConnection(); // ArticleServiceの中でDBConnectionを直接作っている
  } 
  public void saveArticle(String title, String content) { 
    dbConnection.connect(); // 記事を保存する処理 
    dbConnection.disconnect(); 
  } 
}

この書き方だと、ArticleServiceは常にDBConnectionに依存してしまう。もし、データベースの種類が変わってOracleDBConnectionMySQLConnectionを使いたいとなると、ArticleServiceの中身を書き換えなきゃいけない。これは面倒だし、変更に弱いコードになってしまうんだ。

DIがある場合(Springの場合):

Java

class ArticleService { 
  private DBConnection dbConnection; // Springが後でDBConnectionを用意してくれる 

  // コンストラクタでDBConnectionを受け取る 
  public ArticleService(DBConnection dbConnection) { 
    this.dbConnection = dbConnection; 
  } 
  public void saveArticle(String title, String content) { 
    dbConnection.connect(); // 記事を保存する処理 
    dbConnection.disconnect();
  }
} 

// Springがこんな風にインスタンスを作って、ArticleServiceに渡してくれるイメージ 
// DBConnection dbConnection = new DBConnection(); // または new OracleDBConnection() 
// ArticleService articleService = new ArticleService(dbConnection);

Springは、必要なオブジェクト(この例だとDBConnection)を自動で作成して、それを利用したいオブジェクト(ArticleService)に渡してくれる。だから、ArticleService側は「どんなDBConnectionが来るか」を気にしなくて済む。これがDIの基本的な考え方で、コードの部品化やテストのしやすさにつながるんだ。

2. AOP(アスペクト指向プログラミング): これは、「ロギング(処理の記録)」「セキュリティチェック」「トランザクション管理(複数の処理を一連のまとまりとして扱う)」といった、多くの機能で共通して必要となる処理を、プログラムのあちこちに散らばらせることなく、一箇所にまとめて管理するための仕組みだよ。 イメージとしては、料理で「味見をする」という共通の作業を、どの料理を作る時でも必ず決まったタイミングで行うような感じ。コードがスッキリして、保守しやすくなるんだ。

3. 豊富な機能とエコシステム: Webアプリだけでなく、バッチ処理、データアクセス、セキュリティなど、様々な機能が提供されている。また、Springを中心に多くの関連プロジェクトが生まれていて、それらを組み合わせてどんな種類のアプリでも作ることができるんだ。

より早く開発を始められるSpring Boot

Spring Frameworkは高機能で便利なんだけど、最初に触る人にとっては「設定がちょっと複雑…」と感じるかもしれない。プロジェクトの規模が大きくなればなるほど、設定ファイルも増えて管理が大変になることもあるんだ。

そこで登場したのが、Spring Bootだ。

Spring Bootは、**「Spring Frameworkをもっと簡単に、素早く使い始めるためのツール」**だと考えると分かりやすいよ。Spring Bootは、開発者がすぐにアプリケーション開発に取りかかれるように、以下のような工夫がされているんだ。

  1. 「おまかせ」で設定してくれる(規約による設定): Spring Bootは、「この場合はこう使うのが一般的だよね」という**「規約(ルール)」**を多く持っている。これにより、開発者が手動で多くの設定を書かなくても、Spring Bootが自動で最適な設定を選んでくれるんだ。 たとえば、Webアプリを作るなら「Tomcat(Webサーバー)」が必要だけど、Spring BootはデフォルトでTomcatを内蔵していて、特別な設定なしでWebアプリを動かすことができる。
  2. スターターモジュール: Spring Bootには、「spring-boot-starter-web」「spring-boot-starter-data-jpa」のような**「スターター」**と呼ばれる便利な依存関係が用意されている。 例えるなら、料理で「中華料理セット」「イタリアンセット」みたいに、必要な材料や調味料、調理器具が一式セットになっているようなもの。これらを追加するだけで、Webアプリ開発に必要なライブラリや設定がまとめてプロジェクトに組み込まれるから、一つ一つ探して追加する手間が省けるんだ。

XML

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
</dependencies>

このように、必要なスターターを追加するだけで、関連するライブラリも自動的に読み込まれ、簡単に開発環境が整うんだ。

  1. 単独で実行可能(Executable Jar): Spring Bootで作成したアプリケーションは、一つにまとまった「実行可能なJARファイル」として出力できる。Javaの実行環境さえあれば、どこでもすぐに起動できるため、デプロイ(サーバーへの配置)もとても簡単になるんだ。

Spring BootでWebアプリの「Hello World」

実際にSpring Bootを使って、簡単なWebアプリを作ってみよう。ここではコードの雰囲気を感じてもらうのが目的なので、細かい設定は気にしなくて大丈夫。

Java

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

// これがSpring Bootアプリの開始点だよ!
@SpringBootApplication
@RestController // このクラスがWebのリクエストを受け付けるコントローラーだよとSpring Bootに教えてあげる
public class HelloWorldApplication {

    public static void main(String[] args) {
        // Spring Bootアプリケーションを起動するおまじない
        SpringApplication.run(HelloWorldApplication.class, args);
    }

    // HTTPのGETリクエストで "/" (ルートパス) にアクセスがあったら、このメソッドが実行されるよ
    @GetMapping("/")
    public String hello() {
        return "Hello, Spring Boot!"; // この文字列がWebブラウザに表示される
    }

    // 例えば、"/greeting" にアクセスがあったら "こんにちは!" と表示する
    @GetMapping("/greeting")
    public String greeting() {
        return "こんにちは!";
    }
}

このコードを書いて実行するだけで、Webブラウザからhttp://localhost:8080/にアクセスすると「Hello, Spring Boot!」と表示されるWebアプリケーションが完成するんだ!すごいでしょう?

Spring Bootを使えば、このように少ないコードでサッとWebアプリを立ち上げることができる。これが、Spring Bootが世界中の開発者に愛されている大きな理由の一つだよ。

まとめ

今回はJavaのフレームワーク、特にSpring FrameworkSpring Bootについて紹介したよ。

  • フレームワークは、アプリ開発の土台や共通部品を提供してくれる強力なツール。
  • Spring Frameworkは、DIやAOPといった強力な機能でJavaのエンタープライズ開発を支える。
  • Spring Bootは、Spring Frameworkをより簡単に、素早く使えるようにするためのツールで、少ない設定で開発を始められるのが魅力。

最初は難しく感じるかもしれないけど、フレームワークは君のプログラミングライフを劇的に楽にしてくれるもの。まずはSpring Bootから触ってみて、その便利さをぜひ体験してみてほしいな。


次回予告

今回の記事でSpring Bootの魅力は伝わったかな?次回は、Spring Bootを使って実際に簡単なWebアプリケーションを開発する手順を、具体的に解説していくよ。

楽しみに待っててね!

コメント

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