Java/Spring初心者による、Spring初心者のためのブログ

エンジニア歴1年未満の初心者による学習ブログ。自分も初心者だからこそ初心者目線で書き綴っています。

【Spring初心者向け】アノテーションの付与方法

記念すべき初回記事です!

 

アノテーションについてまとめます。

Spring始めたばかりの頃、筆者は、アノテーションがただのコメントと同じようなものだと思っていました(汗)

 

実際は非常に重要な役割を持っており、使いこなせないとかなーーりしんどいということを、現場入って3日目に気づきました。

気づきを踏まえ、初心者目線で丁寧に解説します。(間違いなどありましたらコメントください)

 

なお、アノテーションそのものの説明はいいから、付与方法だけ教えてくれ!っていう方は4.アノテーション付与のための設定方法にお進みください。

 

 

1.アノテーションって何?

 そもそもアノテーションって何?ってなりますよね。で、ググると、注釈とか出てくる。

でもSpringにおけるアノテーションは、単にコードを分かりやすくするための注釈・コメントに留まらず、プログラムに対して「自動的にこの作業してね」っていう命令みたいなものとして使われているようです。

その命令の内容は、どのアノテーションを使うかによって決まります。

 

イメージはこちら。見た目的には、「@」から始まる比較的短めの英語。

f:id:to_education:20190518083050p:plain

図1 アノテーションイメージ


この図だと、@NotNull というアノテーションが使われています。

@NotNullは、名称から何となくイメージできるかもしれませんが、入力時に「null(何も入力されていない)」のはダメ、すなわち入力必須項目だよっていうのを表しています。

 

2.具体例×2

@Controller

これを付与したクラスはMVCのコントローラ(※1)クラスとして扱うよ、っていうのを、プログラムに示すためのやつ。

(※1 コントローラとは…プログラムの指示出しリーダーみたいなやつだと思ってもらえればひとまずOKです。後日詳細記事執筆予定)

 

これが無いとき、プログラムからすると、どのクラスがコントローラなのか分からないため、プログラムが動かなくなったり、意図した動作にならなかったりします。

f:id:to_education:20190519121016p:plain

 

@RequestMapping

もう1つご紹介。

これは、クライアントからのリクエストに基づき、コントローラ内のどのメソッド処理を行うか決めるためのもの。

イメージとしてはこんな感じ↓

f:id:to_education:20190519123133p:plain

@RequestMappingを使うと、クライアント側からの要求と、その要求に対応するメソッドを結び付ける処理を、簡単にやってくれます。

 

その他にもたくさんありますが、ググれば多くヒットするので、気になる方は探してみてください。

 

3.アノテーションが使われる理由

 アノテーションとは何か、何となくイメージ出来たでしょうか?

ひとまず、アノテーションが、「この作業をしてほしい」を、プログラムに簡潔に伝える役割を持っていることを理解してもらえれば十分だと思います。

 

次に、そもそもアノテーションはなぜ使われているのか?どういうメリットがあるのか?、考えていきます。

 

実はアノテーションを使わずとも、処理の実装ができるものも多いようです。

ただ実装がとても難しくなったり、煩雑になったり、アノテーションを知らないと実務についていけなかったりと、「使わない」理由はなさそうです。

(時と場合によっては不要なのかもしれませんが、アノテーションとは?を知りたいと心者レベルのうちは、そこまで考えなくても良いはず(筆者は考えてな…ごにょごにょ))

 

では、アノテーションを使うことにどんなメリットがあるのか。2点ご紹介です。

  1. 実現したいことを、簡単に実装できる
  2. 簡潔で分かりやすく、誰がコードを書いても同じになる

 

1.実現したいことを、簡単に実装できる

先ほどの例にもありました。

「このクラスがコントローラだとプログラムに示したい!」⇒「@Controller」を付与して終わり

など。一目瞭然ですね。

 

2.簡潔で分かりやすく、誰がコードを書いても同じになる

これは最初に用いた@NotNull(必須項目とするためのアノテーション)で考えると分かりやすいです。

 

もしこれをアノテーションを使わずに実装するとどうなるか。

例えばこんな感じで実装できるかもしれません。(だいぶはしょってます)

f:id:to_education:20190519125343p:plain

そう。実装方法は1つではないのです。

しかし、実装者のやり方によってコードの書き方が異なると、チームなど複数人で開発をしているときに統一性が取れず、コードの可読性が落ちてしまいます。

では、アノテーションを使うとどうか。
@NotNullアノテーションは@NotNullアノテーションなので、実装者によって書き方が変わることはありません。見た目的にも分かりやすいですし、統一性が取れますね。

 

4.アノテーション付与のための設定方法

いよいよ、アノテーションの付与方法について見て行きます。

 

ここまでさんざん「@~さえつければ…」と書いてきてアレなんですが、

アノテーションを使うために、実は2つの作業が必要です。

 

作業1 インポート宣言

一番最初に@NotNullを用いてアノテーションを説明したとき、

実は上のほうにこんな記述が隠れていたのにお気づきでしょうか。

 import javax.validation.constraints.NotNull;

 

f:id:to_education:20190519130259p:plain

 

アノテーションはSpringが用意してくれているものですが、「このクラスでこのアノテーションを使えるようにして」を毎回宣言してあげないといけないんです。(この宣言をインポート宣言といいます)

 

でもやり方は意外と簡単。

使いたいアノテーションを書いた後、エラーを示す「×」マークと、アノテーションの下に赤の波線が出ているかと思います。

f:id:to_education:20190519132131p:plain

図6 アノテーションのインポート宣言方法1

この状態で、アノテーションにカーソルをあわせると、次の図のように、黄色い長方形に、エラーの解決方法候補がいくつか出てきます。

f:id:to_education:20190519132443p:plain

図7 アノテーションのインポート宣言方法1

おそらく1つ目に、「(付与したいアノテーションの名前)をインポートします 」
というような文言があるはずなので、それをクリック。

(出てこない場合(少なくとも初回は出ません)⇒作業2を先にやってください。)

 

すると、クラス宣言の上のところに、自動で宣言が追加されます。

またこの時、アノテーションについていたエラーマークと赤い波線は消えています。

f:id:to_education:20190519132952p:plain

図8 アノテーションの宣言方法3
 
作業2 依存ライブラリの追加

作業1をうまく機能させるために、前提としてやるべき作業を説明します。

"pom.xml"というファイル(Springプロジェクト作成時に、自動的に作成されています)に、設定を追加していきます。

f:id:to_education:20190519134645p:plain

図9 依存ライブラリの追加方法1

このpom.xmlファイルを開くと、<dependencies></dependencies>タグでくくられた箇所があります。そこに設定を追記していきます。

 

追記する内容ですが、適切な記述をネットから探してきて、コピペすることになります。内容の調べ方は以下。

 

追加したいアノテーションの名称と、"Maven Repository"を打ち込んでググり、以下のようなページを見つけてください。

(例では、@NotNull と、Maven Repositoryを打ち込んでググってみました)

f:id:to_education:20190519135418p:plain

図10

このページの真ん中あたりにある、Mavenでくくられた箇所にご注目ください。(図の赤枠の場所)

ここに書かれた内容をまるまる全部コピーします。

f:id:to_education:20190519140009p:plain

図⑪

コピーしたものを、先ほどの、pom.xmlファイルの<dependencies></dependencies>タグでくくられた箇所に貼り付けます。

 

f:id:to_education:20190519140324p:plain

図12

これでpom.xmlの設定作業は終わりです。(この設定作業を、「依存ライブラリの追加」といいます)

ただし、アノテーションは複数のグループ毎に分けられていて、そのグループ毎に同様の設定作業をする必要があります。(詳しくはまた後日、別の記事にて。ここではひとまず、作業1のインポート宣言がうまく行かない時、作業2をやってみれば良いんだと思ってもらえればOKです)

 

5.まとめ

アノテーションは、プログラムに作業してほしいことを簡潔に伝えるための有力な手段であり、

その付与を有効とするためには、pom.xmlでの設定を前提として、クラス内でのインポート宣言が必要であることを紹介しました。