チュートリアル: Spring サポート機能を見る
このチュートリアルでは、 チュートリアル: 最初の Spring アプリケーションを作成する を拡張して、コードの記述、Spring アプリケーションの分析、実行時の管理に IntelliJ IDEA がどのように役立つかを示します。 このチュートリアルは、Spring Initializr で生成された単純な Spring Boot Maven プロジェクトから開始することを前提としています。 Web アプリケーションを構築するための Spring Boot Starter Web 依存関係がすでにあるはずです。
このチュートリアルでは、以下をカバーするステップをガイドします。
Spring アプリケーションがリレーショナルデータを格納および取得できるようにする JPA および H2 の依存関係を追加します
コードを作成して確認する
アプリケーションを実行して HTTP リクエストを実行する
高度なヘルスモニタリングとエンドポイント分析のために Spring Boot アクチュエーターを追加
Spring Boot 開発ツールを追加して、アプリケーションの更新を高速化
JPA と H2 の依存関係を追加する
Spring Data JPA モジュールは、Java Persistence API(JPA) を使用したデータアクセスのサポートを提供します。
H2(英語) は、Java で記述された高速のインメモリ SQL データベースです。
プロジェクトのルートディレクトリにある pom.xml ファイルを開きます。

エディターで pom.xml ファイルを開いた状態で、 Alt+Insert を押して スターターの追加 を選択します。
開いたウィンドウで、 Spring Data JPA および H2 データベース の依存関係を選択します。
org.springframework.boot:spring-boot-starter-data-jpacom.h2database:h2
または、これらの依存関係を pom.xml に手動で追加できます。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> </dependency>ポップアップで
をクリックするか、 Ctrl+Shift+O を押して、更新されたプロジェクト構造を同期します。
データベースに格納される JPA エンティティを作成する
Spring アプリケーションのデータモデルを定義するには、JPA エンティティを作成します。 アプリケーションは、ID、名、姓を持つ Customer オブジェクトを作成して保存します。
src/main/java/com/example/springboottutorial に Customer.java ファイルを作成します。
プロジェクト ツールウィンドウで、 src/main/java/com/example/springboottutorial ディレクトリを選択し、メインメニューから を選択します(または Alt+Insert を押して Java クラス を選択します)。 クラス を選択し、クラスの名前
Customerを入力します。デフォルトのテンプレートを変更するか、次の Java コードに置き換えます。
package com.example.springboottutorial; import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; @Entity public class Customer { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Integer id; private String firstName; private String lastName; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } }@Entityアノテーションは、Customerクラスがデータベース内の対応するテーブルに変換する必要がある JPA エンティティであることを示します。 IntelliJ IDEA は、ガターのでそれを指定します。
@Idアノテーションは、idフィールドがオブジェクトの ID であることを示しています。 IntelliJ IDEA は、ガターのでそれを指定します。
@GeneratedValueは、ID が自動的に生成されるべきであることを JPA に伝えます。他のすべてのエンティティ属性 (この例では
firstNameおよびlastName) は、ガター内でで指定されます。 これを使用すると、 永続ビューで属性をすばやく開くことができます。
リポジトリインターフェースを作成する
Spring Data JPA は実行時にこのインターフェースからリポジトリ実装を作成します。
src/main/java/com/example/springboottutorial に CustomerRepository.java ファイルを作成します。
プロジェクト ツールウィンドウで、 src/main/java/com/example/springboottutorial ディレクトリを選択し、メインメニューから を選択します(または Alt+Insert を押して Java クラス を選択します)。 インターフェース を選択し、インターフェースの名前を入力します:
CustomerRepositoryデフォルトのテンプレートを変更するか、次の Java コードに置き換えます。
package com.example.springboottutorial; import org.springframework.data.repository.CrudRepository; public interface CustomerRepository extends CrudRepository<Customer, Integer> { Customer findCustomerById(Integer id); }このリポジトリは、
Customerエンティティと整数ID で動作します。 また、findCustomerById()メソッドも宣言します。 Spring Data JPA はこのメソッドのシグネチャーに基づいてクエリを派生し、指定された ID のCustomerオブジェクトを選択します。 他のメソッドを追加して、IntelliJ IDEA が利用可能な JPA エンティティ (この場合はCustomerクラス) に基づいて補完候補をどのように提供するかを確認できます。
Web コントローラーを作成する
コントローラーは、Spring アプリケーションの HTTP リクエストを処理します。 アプリケーションは /add エンドポイントを使用してデータベースに Customer オブジェクトを追加し、 /list エンドポイントを使用してデータベースからすべての Customer オブジェクトをフェッチし、 /find/{id} エンドポイントを使用して指定された ID の顧客を見つけます。
/src/main/java/com/example/springboottutorial/ に DemoController.java ファイルを作成します。
プロジェクト ツールウィンドウで、 /src/main/java/com/example/springboottutorial/ ディレクトリを選択し、メインメニューから を選択します(または Alt+Insert を押して Java クラス を選択します)。 クラス を選択し、クラスの名前
DemoControllerを入力します。デフォルトのテンプレートを変更するか、次の Java コードに置き換えます。
package com.example.springboottutorial; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @RestController public class DemoController { @Autowired private CustomerRepository customerRepository; @PostMapping("/add") public String addCustomer(@RequestParam String first, @RequestParam String last) { Customer customer = new Customer(); customer.setFirstName(first); customer.setLastName(last); customerRepository.save(customer); return "Added new customer to repo!"; } @GetMapping("/list") public Iterable<Customer> getCustomers() { return customerRepository.findAll(); } @GetMapping("/find/{id}") public Customer findCustomerById(@PathVariable Integer id) { return customerRepository.findCustomerById(id); } }各 Spring アノテーションの意味は次のとおりです。
@RestControllerアノテーションは、DemoControllerクラスをリクエストハンドラー(REST コントローラー)としてマークします。 IntelliJ IDEA は、ガター内のでこれを示します。クリックすると、対応する Spring bean 宣言へ移動できます。
@Autowiredアノテーションは Spring にcustomerRepositorybean の注入を指示します。これは リポジトリ インターフェース から実装されています。 IntelliJ IDEA は、ガター内のでこれを示します。クリックすると、対応する自動注入された依存関係へ移動できます。
@PostMapping("/add")アノテーションは、addCustomer()メソッドを/addの POST リクエストにマップします。@RequestParamアノテーションは、メソッドパラメーターを対応する Web リクエストパラメーターにマップします。@GetMapping("/list")アノテーションは、getCustomers()メソッドを/listの GET リクエストにマップします。@GetMapping("/find/{id}")アノテーションは、findCustomerById()メソッドを/find/{id}の GET リクエストにマップします。@PathVariableアノテーションは、id変数の代わりに、URL から対応するメソッドパラメーターに値をマッピングします。
IntelliJ IDEA は、ガター内の
で Web リクエストメソッドを示します。これをクリックすると、組み込みの HTTP クライアント で対応するリクエストを実行できます。
アプリケーションを実行してリクエストを実行する
Shift+F10 を押すか、 SpringBootTutorialApplication.java ファイルのガターにある
アイコンを使用してアプリケーションを実行します。
デフォルトでは、IntelliJ IDEA は実行中の Spring Boot アプリケーションを 実行ツールウィンドウに表示します。

コンソール タブには、Spring ログメッセージの出力が表示されます。 デフォルトでは、組み込みの Apache Tomcat サーバーはポート 8080 でリッスンしています。
Web ブラウザーを開き、 http://localhost:8080/list に移動します。 データベースに顧客がいないため、アプリケーションが空のリスト
[ ]で応答するはずです。顧客を追加するには、姓と名を指定するリクエストパラメーターを使用して、
/addエンドポイントに POST リクエストを送信する必要があります。 IntelliJ IDEA には、HTTP リクエストを作成および実行するための HTTP クライアントがエディターに組み込まれています。DemoController.java を開き、
addCustomer()メソッドの横のガターでをクリックします。
リクエストファイルで、次の POST リクエストを作成します。
### POST http://localhost:8080/add?first=Homer&last=Simpsonガターで
をクリックして、リクエストを実行します。
IntelliJ IDEA は 実行 ツールウィンドウを開き、要求と応答の両方を出力します。
POST http://localhost:8080/add?first=Homer&last=Simpson HTTP/1.1 200 Content-Type: text/plain;charset=UTF-8 Content-Length: 19 Date: Thu, 28 May 2020 08:10:30 GMT Keep-Alive: timeout=60 Connection: keep-alive Added new customer to repo! Response code: 200; Time: 217ms; Content length: 19 bytesHTTP リクエストファイルを再度開き、GET リクエストを作成してすべての顧客を取得します。
### GET http://localhost:8080/listIntelliJ IDEA は、リクエストメソッドと本文、場所、利用可能なエンドポイントの補完候補を提供します。

GET リクエストを実行して、すべての顧客を取得します。
GET http://localhost:8080/list HTTP/1.1 200 Content-Type: application/json Transfer-Encoding: chunked Date: Thu, 28 May 2020 08:23:05 GMT Keep-Alive: timeout=60 Connection: keep-alive [ { "id": 1, "firstName": "Homer", "lastName": "Simpson" } ] Response code: 200; Time: 171ms; Content length: 51 bytes
他の顧客を追加するには、より多くの POST リクエストを実行してみてください。 それぞれが一意の ID を取得します。 次に、GET リクエストを作成して実行し、特定の ID を持つ顧客を返します。 例:
Spring Boot アクチュエーターを追加
Spring Boot アクチュエーターは、アプリケーションの監視と管理に役立ついくつかのエンドポイントを追加します。 これにより、IntelliJ IDEA はアプリケーションのヘルス情報と実行時に利用可能なすべてのリクエストマッピングを公開できます。
プロジェクトのルートディレクトリにある pom.xml ファイルを開きます。
エディターで pom.xml ファイルを開いた状態で、 Alt+Insert を押して スターターの追加 を選択します。
開いた スターターの追加 ウィンドウで、 Spring Boot アクチュエーター 依存関係を選択します。

または、依存関係を手動で追加できます。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>ポップアップで
をクリックするか、 Ctrl+Shift+O を押して、更新されたプロジェクト構造を同期します。
または Ctrl+F5 を使用して Spring アプリケーションを再起動します。
ヘルス タブを開いて、アプリケーションのステータスを監視します。

マッピング タブを開いて、リクエストマッピングエンドポイントを操作します。

ライブラリによって提供されるエンドポイント (Spring Boot アクチュエーター自体など) を表示するには、
をクリックします。 エンドポイントパスをクリックして対応するリクエストを直接実行するか、HTTP リクエストファイルで生成して開き、必要に応じて変更して実行するか、GET リクエストの場合は Web ブラウザーでエンドポイント URL を開きます。
環境 タブを開いて、Spring 環境を表示します。
/actuator/envエンドポイントから取得されるこの情報には、アプリケーションプロパティや環境変数など、さまざまな構成ソースから利用可能なすべてのプロパティが含まれます。
詳細については、 環境 を参照してください。
Spring Boot 開発者ツールを追加
コードに変更を加えた場合、プロジェクト全体を再実行する必要があります。すべての依存関係を含めたアプリケーションを停止し、コードを再ビルドして新しいコードでアプリケーションを開始してください。 IntelliJ IDEA では、すべての外部ライブラリ コンテキストを再起動しなくても、Spring アプリケーションコンテキストだけを再起動する方法が提供されています。 これは、多くの依存関係を持つ大規模なプロジェクトで特に、デバッグやコードの微調整時に時間を節約できます。 実行中のアプリケーション内で静的リソースやテンプレート リソースも更新できます。
この機能は、 spring-boot-devtools モジュールに基づいています。
プロジェクトのルートディレクトリにある pom.xml ファイルを開きます。
エディターで pom.xml ファイルを開いた状態で、 Alt+Insert を押して スターターの追加 を選択します。
開いた スターターの追加 ウィンドウで、 Spring Boot DevTools 依存関係を選択します。
または、依存関係を手動で追加できます。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency>ポップアップで
をクリックするか、 Ctrl+Shift+O を押して、更新されたプロジェクト構造を同期します。
メインメニューで、 に移動し、 SpringBootTutorialApplication 構成を選択します。
オプションを変更(M) で、 '更新' アクション時(U) と フレーム切り替え時(F) の両方のオプションを クラスとリソースの更新 に設定し、 OK(O) をクリックして変更を適用します。
Spring アプリケーションを再起動します。
アプリケーションは同じように機能しますが、ソースコードまたはリソースに変更を加えるたびに、更新をトリガーできるようになりました。 メインメニューから Ctrl+F10 を選択するか、フォーカスを IntelliJ IDEA から別のアプリケーション(Web ブラウザーなど)に変更します。 これにより、アプリケーションのすべてのクラスとリソースが更新され、必要に応じてアプリケーションが再起動されます。
ホームページを変更する
アプリケーションの更新がどのように機能するかを示すために、ホームページで /add および /list HTTP エンドポイントを公開してみましょう。 ホームページの追加の詳細については、「ホームページを追加 」を参照してください。
/src/main/resources/static/index.html ファイルを開いて変更するか、次の HTML コードに置き換えます。
<!DOCTYPE HTML> <html> <head> <title>You first Spring application</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> </head> <body> <form action="/add" method="POST"> <p>Let's add a customer.</p> <div> <label for="firstName">First name:</label> <input name="first" id="firstName" value="Homer"> </div> <div> <label for="lastName">Last name:</label> <input name="last" id="lastName" value="Simpson"> </div> <div> <button>Add customer</button> </div> </form> <form action="/list" method="GET"> <button>List customers</button> </form> </body> </html>Web ブラウザーを開き、 http://localhost:8080/ に移動します。 必要に応じて、ページをリフレッシュして新しいホームページを表示します。

一部の顧客を追加してリストします。 http://localhost:8080/find/2 に HTTP リクエストを送信して、ID 2 の顧客を見つけることもできます。
index.html で HTML コードを変更してから、Web ブラウザーに切り替えて、ページをリフレッシュした後に変更を確認できます。
さらに進んで LiveReload をインストールすると、ブラウザーが自動的にリフレッシュされます。
生産性のヒント
すばやく Bean をインジェクション
IntelliJ IDEA は、Bean をすばやくインジェクションするためのさまざまな方法を提供します。これにより、アノテーション、フィールド、コンストラクターを手動で入力する必要がなくなります。
Spring コンポーネント内で、bean 名の入力を開始します。
必要な bean を取得するには、次のいずれかの方法を使用します。
Alt+Enter を押して、 「bean name」に一致する名前で依存関係を追加する を選択します。
bean 名の入力を開始し、「
.autowire」と入力して 後置補完テンプレートを呼び出します。 例:customで始まる Bean を検索するには、custom.autowireと入力します。
入力した名前が bean の名前と完全に一致する場合は、すぐに注入されます。 名前の一部分のみが一致する場合は、表示される Bean の選択 ウィンドウから必要な bean を選択できます。

クラスに @Autowire でアノテーションが付けられたフィールドがある場合、これにより新しい @Autowire フィールドが追加されます。 それ以外の場合は、対応するパラメーターをクラスコンストラクターに追加します。
または、 Alt+Insert を押して、 生成 コンテキストメニューからインジェクションタイプを選択することもできます: @Autowired 依存関係、 コンストラクター依存関係 、または Setter 依存関係。 上記の方法とは異なり、この方法では bean をインジェクションする方法を選択でき、Bean をフィルター処理しないため、すべてをプレビューできます。
安全な URL に移動する
Spring セキュリティを使用する場合は、認証されたユーザーのみ、または特定のロールを持つユーザーのみに URL へのアクセスを許可するなど、セキュリティルールを設定することができます。 IntelliJ IDEA は、セキュリティマッチャーから Spring コントローラーへ、およびコントローラーからセキュリティマッチャーへのナビゲーションを提供します。
Spring セキュリティマッチャーからコントローラーメソッドに移動するには、マッチャーの横にある
(5.8 より前の Spring セキュリティの
antMatchers、mvcMatchers、requestMatchers、Spring セキュリティ 5.8 以降のsecurityMatcher、または XML URL パターンなど) をクリックします。コントローラーのセキュリティ構成を確認するには (使用可能な場合はこの構成に移動します)、コントローラー URL の横にある
をクリックし、 URL のセキュリティ構成を表示 を選択します。

データベースへの接続をすばやく作成する
データベースツールおよび SQL プラグインを使用すると、IntelliJ IDEA で データベースに接続するを作成および管理できます。
Spring Boot プロジェクトでは、アプリケーションプロパティファイルから即座に作成できます。
application.properties または application.yml ファイルを開きます。 データソース関連のプロパティ (
spring.datasource.urlなど) が含まれている場合は、ガターにデータソースアイコンが表示されます。
をクリックします。 これにより、構成ファイルのデータに基づいてデータソースパラメーター (URL、ユーザー名、データベース名など) が入力されたデータソース作成フォームが開きます。
データソースがすでに構成されている場合は、代わりにデータソースアイコン
が表示されます。 これをクリックすると、 データベース ツールウィンドウでデータソースが開きます。

以下は、このアクションが利用できるデータベースのリストです。
Amazon Redshift
Apache Cassandra
Apache Derby
Couchbase
H2
HSQLDB
IBM Db2
MariaDB
Microsoft SQL Server
MongoDB
MySQL
Oracle データベース
PostgreSQL
Redis
SQLite
Sybase
データソースパラメーターの詳細については、「データソース 」を参照してください。
次は何ですか?
これは、Spring 開発のために IntelliJ IDEA によって提供されるすべての基本機能をカバーしています。 また、Spring アプリケーションの依存関係の概要について Spring ダイアグラム を確認し、対象となる Spring Boot 機能に関するより具体的な情報を読むこともできます。