カテゴリ: Spring 更新日: 2026/02/25

Spring Bootの@Valueアノテーションの使い方を完全解説!初心者でも理解できるSpELとプロパティの落とし穴

@Value の使いどころと落とし穴:SpEL/プレースホルダの基礎
@Value の使いどころと落とし穴:SpEL/プレースホルダの基礎

先生と生徒の会話形式で理解しよう

生徒

「Spring Bootで設定ファイルの値をクラスに読み込む方法ってあるんですか?」

先生

「はい、Spring Bootでは@Valueアノテーションを使えば、application.propertiesやapplication.ymlに記述した値を簡単に読み込むことができますよ。」

生徒

「でも、@Valueってちょっと複雑そうですね……SpELとかプレースホルダとか出てくるし……」

先生

「そのあたり、初心者でもわかるように丁寧に説明します!実は使いこなせばとても便利な機能なんです。」

1. @Valueアノテーションとは

1. @Valueアノテーションとは
1. @Valueアノテーションとは

@Valueアノテーションは、Spring FrameworkやSpring Bootでプロパティファイルに記述された設定値をクラスに注入(インジェクション)するための仕組みです。主にapplication.propertiesやapplication.ymlに定義された値を読み込んで使うことができます。

Spring Bootの設定やプロファイルを活用するうえで、@Valueの使い方は非常に重要です。例えば、APIキーやファイルパス、フラグなどを外部設定として読み込むことで、環境ごとの切り替えが容易になります。

2. 基本的な使い方(プレースホルダ)

2. 基本的な使い方(プレースホルダ)
2. 基本的な使い方(プレースホルダ)

もっとも基本的な使い方は、プレースホルダ形式でapplication.propertiesに書かれたキーを@Valueで読み込む形です。


app.name=SpringBootSample
app.version=1.0.0

@Component
public class AppInfo {

    @Value("${app.name}")
    private String appName;

    @Value("${app.version}")
    private String appVersion;

    public void printInfo() {
        System.out.println("アプリ名:" + appName);
        System.out.println("バージョン:" + appVersion);
    }
}

アプリ名:SpringBootSample
バージョン:1.0.0

このように、${キー名}の形式でプロパティを読み込むことができます。

3. SpEL(Spring Expression Language)の使い方

3. SpEL(Spring Expression Language)の使い方
3. SpEL(Spring Expression Language)の使い方

@Valueでは、単なるプレースホルダだけでなく、SpEL(スぺル:Spring Expression Language)も利用できます。SpELを使えば、式による値の加工や計算が可能です。


@Component
public class UserInfo {

    @Value("#{20 + 5}")
    private int age;

    @Value("#{systemProperties['user.name']}")
    private String userName;

    public void show() {
        System.out.println("年齢:" + age);
        System.out.println("ユーザー名:" + userName);
    }
}

年齢:25
ユーザー名:your_os_user_name

SpELでは、数値計算やシステムプロパティの参照、さらにはBeanのプロパティ値の参照なども可能になります。

4. デフォルト値の指定方法

4. デフォルト値の指定方法
4. デフォルト値の指定方法

@Valueでプロパティが見つからなかった場合に、アプリケーションが起動時にエラーになるのを防ぐには、デフォルト値を指定することが重要です。


@Value("${app.description:説明が未設定です}")
private String appDescription;

この例では、app.descriptionというプロパティが存在しない場合に、「説明が未設定です」という文字列が使われます。

5. 配列やリストの読み込み

5. 配列やリストの読み込み
5. 配列やリストの読み込み

カンマ区切りの値をリストとして読み込むことも可能です。これは、簡単な構成リストなどを扱いたいときに便利です。


app.languages=Java,Python,JavaScript

@Value("#{'${app.languages}'.split(',')}")
private List<String> languages;

注意点として、split(',')という形で明示的に分割する必要があります。

6. よくある落とし穴

6. よくある落とし穴
6. よくある落とし穴

Spring Boot初心者が@Valueを使う際に陥りやすい問題点を紹介します。

・プロパティが存在しない場合のエラー

デフォルト値を指定していない場合、プロパティが存在しないとアプリ起動時にIllegalArgumentExceptionが発生します。必ず:でデフォルトを用意しましょう。

・SpELとプレースホルダの混同

${...}はプレースホルダ、#{...}はSpELです。この2つは意味も処理のされ方も異なるので、混同しないようにしましょう。

・@Valueの型変換エラー

プロパティ値が指定の型に変換できない場合、例外が発生します。たとえば@Value("${app.port}")に対して、プロパティがabcdのような文字列だとint型に変換できません。

・Beanとして管理されていないと読み込まれない

@ValueはSpringのDI機能を使うため、対象クラスが@Componentや@ServiceなどでBean登録されている必要があります。

7. Spring Bootでのプロファイル活用と@Value

7. Spring Bootでのプロファイル活用と@Value
7. Spring Bootでのプロファイル活用と@Value

Spring Bootでは、プロファイル(dev、prodなど)を切り替えることで、異なる設定ファイルを使い分けることができます。プロファイルに応じた@Valueの切り替えも自動的に行われます。


# application-dev.properties
api.endpoint=https://dev-api.example.com

# application-prod.properties
api.endpoint=https://api.example.com

@Value("${api.endpoint}")
private String endpoint;

プロファイルは、application.propertiesや起動オプションで指定可能です。


spring.profiles.active=dev

8. @ConfigurationPropertiesとの使い分け

8. @ConfigurationPropertiesとの使い分け
8. @ConfigurationPropertiesとの使い分け

@Valueは単一の値を読み込むには便利ですが、多数の設定をまとめて扱いたい場合は、@ConfigurationPropertiesの方が適しています。


@Component
@ConfigurationProperties(prefix = "app")
public class AppProperties {
    private String name;
    private String version;

    // getter / setter
}

設定値が増えてくると、可読性や保守性の観点から@ConfigurationPropertiesの利用が推奨されます。

生成AIを基礎から学びたい方へ

ChatGPTなどの生成AIをこれから学びたい方に向けて、AIスキルアカデミーの口コミ・評判、料金、無料セミナーの内容を詳しくまとめています。

AIスキルアカデミーの口コミ・評判を詳しく見る
カテゴリの一覧へ
新着記事
New1
Java
JavaのassertFalseとは?JUnit5のAssertionsクラスを初心者向けにわかりやすく解説
新規投稿
New2
Thymeleaf
ThymeleafでDBから取得したデータを編集フォームの初期値にセットする方法!Entity連携を初心者向けに解説
新規投稿
New3
Spring
JavaのSpringで使う@FutureOrPresentアノテーションを完全ガイド!初心者でもわかる日付バリデーション
新規投稿
New4
Java
JavaのLocalDateクラスのgetMonthValueメソッド完全ガイド!初心者でもわかる数値で月を取得する方法
新規投稿
人気記事
No.1
Java&Spring記事人気No1
Servlet
JavaサーブレットのdoPostメソッドとは?初心者向けにやさしく解説!
No.2
Java&Spring記事人気No2
Servlet
JavaのHttpServletResponseクラスを初心者向けに徹底解説!
No.3
Java&Spring記事人気No3
Servlet
JavaのHttpServletRequestWrapperとgetSessionメソッドの使い方を徹底解説!初心者向けServletのセッション管理入門
No.4
Java&Spring記事人気No4
Servlet
JavaのServletExceptionクラスを初心者向けに徹底解説!
No.5
Java&Spring記事人気No5
Servlet
JavaのHttpSessionインターフェースとgetSessionContextメソッドを徹底解説!初心者でもわかるセッション管理の基本
No.6
Java&Spring記事人気No6
Java
JavaのStringクラスとlengthメソッドを完全解説!初心者でも理解できる文字列の長さ取得の使い方
No.7
Java&Spring記事人気No7
Servlet
JavaのHttpSessionAttributeListenerとattributeRemovedメソッドの使い方を徹底解説!初心者でもわかるセッション属性の削除と監視
No.8
Java&Spring記事人気No8
Java
Javaのクラスとインスタンス化、コンストラクタの使い方完全ガイド!初心者でもわかるオブジェクト指向の基礎