EclipseのSpring Bootで廃止メソッドの警告が出るのはどういうとき?新人エンジニア向けに解説
こんにちは。ゆうせいです。
今回は、EclipseでSpring Bootアプリを開発しているときに出る「廃止メソッドの警告」について解説します。
JavaやSpring Bootを学んでいると、Eclipse上でメソッド名に横線が引かれたり、黄色い警告マークが出たりすることがあります。
たとえば、次のような警告です。
The method xxx() from the type Xxx is deprecated
日本語にすると、「Xxx型のxxx()メソッドは非推奨です」という意味です。
ここでいう「廃止メソッド」とは、正確には「非推奨メソッド」と考えるとよいです。
今すぐ使えないわけではありません。
ただし、「今後は使わないほうがよい」「将来のバージョンで削除されるかもしれない」「代わりの新しい書き方を使ってください」というサインです。
Javaの@Deprecated注釈は、使うことが推奨されないプログラム要素を示します。OracleのJava APIドキュメントでも、@Deprecatedが付いた要素を非推奨でないコードから使用またはオーバーライドすると、コンパイラが警告を出すと説明されています。
廃止メソッドの警告はエラーではない
まず大事なのは、廃止メソッドの警告は、基本的にはエラーではないということです。
エラーなら、プログラムがコンパイルできなかったり、起動できなかったりします。
一方、警告は「動くけれど注意してね」という合図です。
| 種類 | 意味 | プログラムは動くか |
|---|---|---|
| エラー | 文法や参照に問題があり、コンパイルできない | 動かない |
| 警告 | 今は動くが、直したほうがよい可能性がある | 動くことが多い |
| 廃止メソッド警告 | 古いAPIや将来削除予定のAPIを使っている | 動くことが多い |
高校生にもわかるようにたとえるなら、廃止メソッドの警告は、道路標識の「この先、道幅が狭くなります」に近いです。
今すぐ通れないわけではありません。
でも、そのまま進むと将来困るかもしれません。
だから、早めに別の安全な道へ移りましょう、という意味です。
Eclipseで廃止メソッド警告が出る仕組み
Eclipseには、Javaコードをチェックするコンパイラ機能があります。
このコンパイラは、文法エラーだけでなく、使わない変数、型の不一致、非推奨APIの使用なども警告として表示します。
EclipseのJavaコンパイラ設定では、Java > Compiler > Errors/Warningsで、各種エラーや警告の扱いを設定できます。Eclipse公式ヘルプでも、この画面でErrors/Warningsの設定を行うと説明されています。
つまり、Eclipseが勝手に怒っているのではありません。
JavaやSpring Bootのライブラリ側で「このメソッドは非推奨です」と印が付いており、Eclipseがその印を見つけて警告してくれています。
先生が赤ペンで「この書き方は古いよ」と教えてくれているようなものです。
廃止メソッド警告が出る代表的な場面
EclipseのSpring Boot開発で廃止メソッド警告が出る場面は、主に次のようなときです。
| 場面 | 内容 |
|---|---|
| 古いサンプルコードを使ったとき | 昔のSpring BootやSpring Securityの書き方をコピーした |
| Spring Bootのバージョンを上げたとき | 以前は普通だったメソッドが新バージョンで非推奨になった |
| Javaの古いAPIを使ったとき | Date系や古いコンストラクタなどを使った |
| ライブラリ側が新しい書き方へ移行中のとき | 将来削除予定のAPIに@Deprecatedが付いた |
| チュートリアルが古いとき | ネット記事のコードが現在のSpring Bootに合っていない |
特にSpring Bootでは、バージョンアップによって推奨される書き方が変わることがあります。
そのため、古いブログ記事や古い教材をそのままコピーすると、Eclipseで警告が出ることがあります。
そもそも@Deprecatedとは何か
@Deprecatedは、Javaの注釈、つまりアノテーションの1つです。
アノテーションとは、クラスやメソッドに付ける目印です。
@Overrideや@Autowiredの仲間だと考えるとわかりやすいでしょう。
たとえば、次のようなメソッドがあったとします。
public class SampleService {
@Deprecated
public void oldMethod() {
System.out.println("古い処理です。");
}
public void newMethod() {
System.out.println("新しい処理です。");
}
}oldMethod()には@Deprecatedが付いています。
このメソッドを別の場所から呼び出すと、Eclipseが警告を出します。
SampleService service = new SampleService(); service.oldMethod();
このコードは動くかもしれません。
しかし、Eclipseは「oldMethod()は非推奨ですよ」と教えてくれます。
@Deprecatedには、sinceとforRemovalという情報を付けられます。Oracleの説明では、sinceは非推奨になったバージョンを示し、forRemoval=trueは将来のリリースで削除される可能性があることを示します。
廃止メソッドには段階がある
廃止メソッドと聞くと、すぐ消えるように感じるかもしれません。
しかし、実際には段階があります。
| 段階 | 意味 | 対応の急ぎ度 |
|---|---|---|
| 非推奨 | 今後は使わないほうがよい | 中 |
| 代替APIあり | 新しい書き方が用意されている | 高 |
| forRemoval=true | 将来削除される予定がある | かなり高い |
| 削除済み | 新しいバージョンでは存在しない | コンパイルエラーになる |
たとえるなら、学校の部室が「今は使えるけれど、来年度から取り壊し予定です」と言われているようなものです。
今日の練習はできます。
でも、来年度も同じ部室を使う前提で計画を立てるのは危険ですよね。
非推奨メソッドも同じです。
Spring Bootで廃止メソッド警告が出る理由
Spring Bootで廃止メソッド警告が出るのは、Spring Bootや関連ライブラリが進化しているからです。
より安全な書き方。
よりわかりやすい書き方。
新しいJavaバージョンに合った書き方。
設定の仕組みの変更。
セキュリティ上の考え方の変更。
こうした理由で、古いAPIが非推奨になります。
Spring BootのAPIドキュメントにもDeprecated List、つまり非推奨APIの一覧があります。現在のSpring Boot APIにも、非推奨のクラス、メソッド、コンストラクタなどが一覧化されています。
つまり、廃止メソッド警告は、あなたのコードが完全に間違っているという意味ではありません。
「その書き方は古くなってきています。新しい書き方へ移行しましょう」というメッセージです。
古いネット記事を見たときに警告が出やすい
新人エンジニアがよく遭遇するのが、古いネット記事のコードをコピーしたときの警告です。
Spring BootやSpring Securityはバージョンによって書き方が変わることがあります。
たとえば、昔のSpring SecurityではWebSecurityConfigurerAdapterを継承する書き方がよく使われていました。
しかし、現在のSpring Securityでは、SecurityFilterChainのBeanを公開する構成が一般的です。Spring Securityの現在のAPIドキュメントでも、多くの場合はEnableWebSecurityとSecurityFilterChain Beanを使うと説明されています。
古い書き方のイメージです。
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest().authenticated();
}
}現在の考え方に近い書き方のイメージです。
@Configuration
public class SecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(auth -> auth
.anyRequest().authenticated()
)
.formLogin(form -> form
.permitAll()
);
return http.build();
}
}このように、古いチュートリアルでは動いていたコードでも、今の環境では警告が出ることがあります。
ネット記事を読むときは、記事の公開日、Spring Bootのバージョン、Spring Securityのバージョンを必ず確認しましょう。
廃止メソッド警告が出てもすぐ直さなくてよい場合
警告が出たからといって、必ずその場で直さなければならないわけではありません。
次のような場合は、優先度を見て対応します。
| 状況 | 対応 |
|---|---|
| 学習用の小さなサンプル | まず動きを理解し、あとで新しい書き方を確認する |
| すぐ消える予定がない非推奨 | 修正計画を立てる |
| 業務に影響しないテストコード | 優先度を下げてもよい場合がある |
| ライブラリ内部の警告 | 自分のコードで直せるか確認する |
ただし、次の場合は早めに対応したほうがよいです。
| 状況 | 理由 |
|---|---|
| forRemoval=trueが付いている | 将来削除予定の可能性があるため |
| Spring Bootのメジャーバージョンアップ前 | 移行時にコンパイルエラーになる可能性があるため |
| セキュリティ関連API | 古い書き方が安全でない場合があるため |
| 大量に同じ警告が出ている | 後回しにすると修正コストが大きくなるため |
廃止メソッド警告は、火災報知器というより、健康診断の注意項目です。
今すぐ倒れるわけではありません。
でも、放置すると将来大きな問題になるかもしれません。
Eclipseで警告を確認する方法
Eclipseでは、廃止メソッド警告をいくつかの場所で確認できます。
| 場所 | 確認できること |
|---|---|
| エディタ上の黄色い波線 | どのメソッドが警告対象か |
| 左側の黄色い警告マーク | 警告が出ている行 |
| Problemsビュー | プロジェクト内の警告一覧 |
| マウスホバー | 警告メッセージの詳細 |
| Javadoc表示 | 代替メソッドの説明 |
まずは、警告が出ているメソッドにマウスを乗せてください。
すると、Eclipseが「このメソッドはdeprecatedです」と教えてくれます。
場合によっては、代わりに使うべきメソッドや説明がJavadocに書かれています。
警告を見たら、すぐ消そうとするのではなく、まず意味を読みましょう。
廃止メソッド警告の調べ方
廃止メソッドの警告が出たら、次の順番で調べます。
| 順番 | やること | 目的 |
|---|---|---|
| 1 | 警告が出ているメソッド名を確認する | 何が古いのか特定する |
| 2 | マウスホバーで警告文を読む | Eclipseの説明を見る |
| 3 | Open Declarationでメソッド定義を見る | @DeprecatedやJavadocを確認する |
| 4 | Javadocで代替APIを探す | 新しい書き方を見つける |
| 5 | Spring公式ドキュメントを確認する | 正しい移行方法を知る |
| 6 | 小さく修正して動作確認する | 変更による影響を確認する |
ここで大事なのは、警告文を読まずに@SuppressWarningsで消さないことです。
警告は邪魔者ではありません。
将来のバグを防ぐヒントです。
@SuppressWarningsで警告を消してよいのか
Javaには、@SuppressWarningsという警告を抑制するアノテーションがあります。
Eclipse公式ヘルプでも、@SuppressWarningsを使うと、コンパイル警告を局所的に無効化できると説明されています。
たとえば、次のように書くことがあります。
@SuppressWarnings("deprecation")
public void sample() {
oldMethod();
}この書き方をすると、deprecation、つまり非推奨API使用の警告を抑えられます。
しかし、新人エンジニアには基本的におすすめしません。
なぜなら、根本原因を直していないからです。
| 対応 | 意味 | おすすめ度 |
|---|---|---|
| 代替APIに置き換える | 新しい正しい書き方に直す | 高い |
| 理由をコメントして一時的に抑制する | 事情がある場合だけ使う | 中 |
| 何も考えずSuppressWarningsする | 警告を見えなくするだけ | 低い |
@SuppressWarningsは、部屋の火災報知器がうるさいから電池を抜くようなものです。
本当に誤報ならよい場合もあります。
でも、火元を確認せずに電池を抜くのは危険です。
自分で作ったメソッドに@Deprecatedを付ける場合
廃止メソッドは、Spring BootやJava標準APIだけの話ではありません。
自分のプロジェクトでも、古いメソッドに@Deprecatedを付けることがあります。
たとえば、古い検索メソッドを残しながら、新しい検索メソッドへ移行したい場合です。
public class CarService {
@Deprecated(since = "1.2", forRemoval = true)
public List<CarDto> searchOld(String keyword) {
return searchByCondition(keyword, null, null);
}
public List<CarDto> searchByCondition(String keyword, Integer minPrice, Integer maxPrice) {
// 新しい検索処理
return new ArrayList<>();
}
}このようにしておくと、チーム内の他の開発者がsearchOld()を使ったときに警告が出ます。
つまり、@Deprecatedは「この道は古いので、次から新しい道を使ってください」と伝えるための目印でもあります。
廃止メソッド警告のよくある誤解
| 誤解 | 正しい理解 |
|---|---|
| 警告が出たらすぐ動かない | 警告だけなら動くことが多い |
| Eclipseの設定がおかしい | 多くの場合、API側に@Deprecatedが付いている |
| 黄色い警告は全部無視してよい | 将来の不具合や移行コストにつながる |
| SuppressWarningsすれば解決 | 警告を隠しただけで根本解決ではない |
| 古い記事のコードが必ず悪い | 当時は正しかったが、現在の推奨と違う場合がある |
廃止メソッド警告は、開発者を困らせるためのものではありません。
むしろ、将来困らないように早めに知らせてくれる親切な仕組みです。
実務での対応方針
実務では、廃止メソッド警告に対して次のように対応するとよいです。
| 状況 | 対応方針 |
|---|---|
| 新規開発中 | できるだけ新しいAPIに置き換える |
| 学習中 | まず警告理由を理解し、代替コードを確認する |
| 既存システム保守中 | 影響範囲を見て計画的に修正する |
| バージョンアップ前 | 優先的に非推奨APIを洗い出す |
| 短期的に修正できない | 理由をコメントし、チケット化する |
特に、Spring Bootのバージョンアップ前には廃止メソッド警告を軽視しないでください。
警告だったものが、新しいバージョンでは削除され、コンパイルエラーになることがあります。
「昨日まで動いていたのに、バージョンを上げたら動かない」という状況は、非推奨APIを放置したときに起きやすいです。
新人エンジニアが警告を見たときのチェックリスト
Eclipseで廃止メソッド警告を見つけたら、次のチェックリストを使ってください。
| チェック | 確認内容 |
|---|---|
| 警告箇所 | どのクラス、どのメソッドか |
| 警告文 | deprecatedと書かれているか |
| 代替API | Javadocに代わりのメソッドが書かれているか |
| 削除予定 | forRemoval=trueか |
| 使用バージョン | Spring BootやJavaのバージョンはいくつか |
| ネット記事の日付 | 古い記事を参考にしていないか |
| 影響範囲 | 同じメソッドを何か所で使っているか |
| 対応方針 | 今直すか、後で計画的に直すか |
警告を見たら、まず「なぜ警告が出ているのか」を読む。
次に「代わりに何を使うのか」を調べる。
最後に「今すぐ直すべきか」を判断する。
この3段階で考えましょう。
まとめ
EclipseのSpring Boot開発で廃止メソッドの警告が出るのは、主に「@Deprecatedが付いた古いAPIを使っているとき」です。
Javaでは、@Deprecatedが付いた要素を通常のコードから使うと、コンパイラが警告を出します。Eclipseはその警告をエディタ上やProblemsビューに表示してくれます。
| ポイント | 内容 |
|---|---|
| 廃止メソッド警告の意味 | 今後は使わないほうがよいAPIを使っている |
| すぐエラーになるか | 警告だけなら動くことが多い |
| なぜ出るか | 古いAPI、古い教材、バージョンアップ、将来削除予定APIを使っているため |
| どう調べるか | 警告文、Javadoc、代替API、公式ドキュメントを見る |
| どう対応するか | 基本は新しいAPIへ置き換える |
一言でまとめるなら、廃止メソッド警告は「今は動くけれど、将来のために新しい書き方へ移行しましょう」というお知らせです。
新人エンジニアは、警告を見たらすぐに怖がる必要はありません。
でも、無視し続けてもいけません。
まず警告文を読み、メソッドのJavadocを見て、代替メソッドを探しましょう。
今後の学習では、@Deprecated、Javadoc、EclipseのProblemsビュー、Spring BootのAPIドキュメント、バージョンアップ時の移行ガイドを順番に学ぶとよいです。警告は敵ではありません。未来の自分を助けるメッセージだと思って、丁寧に読んでください!
セイ・コンサルティング・グループでは新人エンジニア研修のアシスタント講師を募集しています。
投稿者プロフィール


