1. トップ
  2. アプリ開発
  3. 「AOP(アスペクト指向プログラミング)」とは?Springフレームワークで使ってみよう

「AOP(アスペクト指向プログラミング)」とは?Springフレームワークで使ってみよう

「AOP」とは、アスペクト指向プログラミングのことです。有名なWebフレームワークであるSpringでも使うことができるため、「実際にどのような手法なのかあらためてチェックしておきたい」という方も多いのではないでしょうか?今回は、AOPの基本概要やメリット、Springフレームワークを使用した実例について解説します。

AOP:Aspect Oriented Programming(アスペクト指向プログラミング)とは?

「AOP」とは、Aspect Oriented Programmingの略称で、直訳するとアスペクト指向プログラミングのことです。プログラミングに用いられる手法の概念を意味します。

具体的には、あらゆるオブジェクトに散在する共通処理を抜き出し、それを一つにまとめて管理できるようにする手法及び概念のことです。オブジェクト指向プログラミングを拡張した概念になります。

共通処理の例として挙げられるのが、ログ出力です。AOPではない場合、ロギング処理のコードがあらゆるところに横断して存在します。基本的に、ログ出力は頻繁に行うものであり、ロギングを行うことで、プログラムの処理の流れを正確に捉えられるため、非常に重要です。

しかし、ログ出力したいところにその都度メソッドを置いて実行する必要があるため、同じコードが散見されます。この問題を解決するのが、AOPです。AOPは、ログ出力のような共通の処理を抽出して必要な箇所に注入してくれるため、その都度メソッドの処理を書く必要がなくなります。

AOPのイメージ

アスペクト指向とオブジェクト指向の違いは、処理を実行するタイミングで、インスタンスの生成やメソッドの呼び出しが必要かどうかという点です。オブジェクト指向プログラミングにおいても、共通処理をクラスで管理することができます。しかし、そのクラスで定義したメソッドを実行するためには、クラスのインスタンス化、メソッドの呼び出しをしなければなりません。
例えば、ログ出力をする場合、ログクラスをインスタンス化し、ログ出力メソッドを呼び出す必要があります。

一方、アスペクト指向は、メソッドが実行される前や実行後の共通処理を、事前に記述しておくことが可能です。クラスのインスタンス化は必要なく、事前にハンドラーで設定をしておけば実行されます。クラスやメソッドに関係なく、共通処理を実行できるので、非常に便利というわけです。

 

AOPの具体例をご紹介!

AOPの具体例は、プログラミング言語とフレームワークから見ることができます。どのような言語で実装することができるのか、どのようなフレームワークに採用されているのかチェックしていきましょう。

AOPが実装できるプログラミング言語の具体例

AOPが実装できるプログラミング言語としては、下記のようなものが挙げられます。

  • Java
  • Ruby
  • Smaltalk
  • C++

オブジェクト指向を拡張した手法になるため、本来ある言語でAOPを実装できるように、拡張版として使われるケースが多いです。例えば、Javaを拡張したものとしてAspectJやAspectWerkz、dynaop、C++はAspectC++、RubyはAspectRが有名です。

なお、これらの言語の中で、もっともAOPの実装に用いられているのがJavaです。

AOPを採用しているフレームワーク

AOPは、フレームワークにも採用されています。AOPのフレームワークとして有名なのが、Spring FrameworkやSeasar2です。

Spring Frameworkは、Javaを使用したWeb開発ができるフレームワークになります。Webフレームワークの中でも非常に有名です。

一方、Seasar2は、日本で開発・提供されているフレームワークとして知られています。オープンソースとなっており、無料で利用することが可能です。

 

AOPを使うメリットとは?

AOPを使用することは、開発や保守において大きなメリットをもたらします。具体的なメリットについて詳しくチェックしていきましょう。

共通処理に統一性を持たせられる

1つ目のメリットは、統一した共通処理を実現できることです。プログラムに対して後から統一した処理を加えることができます。チーム開発をする際、異なる処理を記述してしまうケースは珍しくありません。AOPを利用すれば、そのような自体を避けることができるため、トラブルを回避できるでしょう。

また、統一されることで、可読性が向上することもメリットといえます。共通処理を省くことができるため、コードがスッキリとした印象になります。これにより、コードが見やすくなるため、チーム開発時の作業効率が大幅に向上するでしょう。また、保守・管理がしやすいため、メンテナンス性に優れている点も大きなメリットです。

AOPのメリット

既存概念のメリットは維持される

2つ目のメリットは、既存概念のメリットは維持されることです。AOPは、オブジェクト指向プログラミングの概念における、共通処理の問題を解決した形になります。つまり、本来持つオブジェクト指向のメリットは受け継がれるのです。問題点を修正しつつ、カスタマイズ性や再利用性の向上、分業化、独立性などの本来持つメリットは維持されるので、非常に便利です。

コードの記述量が少なくなる

3つ目のメリットは、コードの記述量が少なくなることです。共通処理は、アスペクトに任せられるため、さまざまなメソッド等で使用する処理の大部分を省くことができます。これにより、エンジニアは共通処理以外の実装に集中することができるため、開発効率を大幅に向上させられるでしょう。

 

AOPを使う前に知っておきたい用語を解説!

AOPを実装する上で大切な用語の意味をご紹介します。関連用語の知識を身につけることで、AOPのさらなる理解に役立てられるため、この機会に覚えておくのがおすすめです。

ジョインポイント

ジョインポイントとは、共通処理を注入する部分のことです。メソッドのコール時、アプリケーション実行中の特定地点を意味します。前処理から後処理の間までの範囲を指し示し、どこに注入するのかが決められた場所(ポイント)がジョインポイントです。

アドバイス

アドバイスとは、共通処理を意味します。例えば、ログの出力や例外処理などの共通処理がアドバイスです。

AOPの用語を理解

ポイントカット

ポイントカットとは、アドバイスをどのような条件で入れるのかという、“注入する条件のこと”を意味します。例えば、前処理や後処理、前後の両方などが挙げられるでしょう。

アドバイサー

アドバイザーとは、アスペクトのモジュール化のことです。アドバイスとポイントカットを兼ね備えたクラスを意味します。

インターセプタ

インターセプタとは、メソッドの前後で任意の処理を実行させることができる機能のことです。通常は、インターセプタクラスを継承して使用し、インターセプタを実装します。

プロキシ

プロキシとは、それぞれの処理の関連付けを行うために、動的クラスを拡張する仕組みのことです。AOPを実現するために必要なものとなります。

ターゲット

ターゲットとは、ジョインポイントが持つインスタンスのことです。ターゲットが1つ以上のインターフェースを実装しているときにプロキシが使用されます。

 

SpringフレームワークでAOPを使ってみよう

Springフレームワークを使用して、AOP実装のチュートリアルをご紹介します。特定のURLにアクセスしたときに、Webページにログを出力するようにAOPで実装します。

pom.xmlの設定

AOPを使用するためには、pom.xmlにライブラリを使用することを宣言しなければなりません。そのため、projectタグ内に下記を追加してください。

AOPの実装

次に、AOPを実装します。Tutorial.Javaを作成し、処理後にログ出力されるようにコードを追加してください。

コントローラーファイルの実装

最後に、コントローラーファイルを作成します。作成後に、localhost:8080/aoptestにアクセスするとwebページにログが出力されるでしょう。

 

今回は、AOPの概要やメリット、Springフレームワークを使用した実装方法について解説しました。AOPは、いわばオブジェクト指向プログラミングのよいところを残し、問題点を解決した万能なプログラミング手法及び概念です。特に、Javaを使用したWebアプリケーション開発を行う際に取り入られることが多いので、Javaを使用したWeb開発をすることが多い方は、この機会に習得してみてはいかがでしょうか。

 

エンジニアに役立つ目的別講座

Pythonの基本~応用をマスター

現役シリコンバレーエンジニアが教えるPython 3 入門 + 応用 +アメリカのシリコンバレー流コードスタイル
現役シリコンバレーエンジニアが教えるPython 3 入門 + 応用 +アメリカのシリコンバレー流コードスタイル

現役シリコンバレーエンジニアが教えるPython入門講座。Python3の基本を取得できます。

Webサイトのコーディングができるように

ウェブ開発入門完全攻略コース - プログラミング をはじめて学び創れる人へ!未経験から現場で使える開発スキルを習得!
ウェブ開発入門完全攻略コース - プログラミング をはじめて学び創れる人へ!未経験から現場で使える開発スキルを習得!

HTML, CSS, Bootstrap, JavaScript, MySQL, Ruby, Ruby on Rails, AWS Cloud9, Git, GitHubを用いたWebアプリケーション開発の方法を総合的に学べます。

AWSを基礎から学ぶ

これだけでOK! AWS 認定ソリューションアーキテクト – アソシエイト試験突破講座(SAA-C02試験対応版)
これだけでOK! AWS 認定ソリューションアーキテクト – アソシエイト試験突破講座(SAA-C02試験対応版)

AWSの基本資格「AWS 認定ソリューションアーキテクト – アソシエイト試験」を合格を目指し、そのための知識や経験を獲得できるように!

ITプロジェクトの資料作成はお任せ!

手を動かして学ぶITプロジェクトの資料作成!システム開発のドキュメンテーション技術と成果物テンプレート
手を動かして学ぶITプロジェクトの資料作成!システム開発のドキュメンテーション技術と成果物テンプレート

ITプロジェクトの資料作成を学べる人気講座。フェーズ毎に、どんな資料を作ればいいのか悩んでいる人におすすめ。