Javaテンプレートエンジンにおけるプロパティアクセスの仕組みとJavaBeansの規則

こんにちは。ゆうせいです。

新人研修中に受講者から以下の質問をいただきました。

${k.message}のところでフィールドのmessageを呼び出すために勝手にgetMessageメソッドを使っているのか、getMessageメソッドを使うにはgetを取りMを小文字にするというルールがあるのかどちらなのか分からなかったです。

今回はこの質問に答えたいと思います。

JavaBeansの命名規則

Javaの世界には、JavaBeansと呼ばれる部品作成の標準的なルールが存在します。この標準ルールでは、クラスが持つデータ(フィールド)を直接外部から操作させず、必ず専用の窓口(メソッド)を経由してデータのやり取りを行います。

データを取得する窓口の役割を果たすメソッドには、厳密な名前の付け方があります。フィールド名の先頭を大文字にし、その前にgetをつけるという規則です。フィールド名がmessageであれば、窓口となるメソッド名はgetMessageとなります。

この仕組みは、銀行のシステムに例えることができます。フィールドは銀行の金庫であり、利用者が外部から直接触れることはできません。データを取り出すには、getから始まる名前を持つ窓口の担当者にお願いする必要があります。窓口の命名規則を統一することで、システム全体が安全かつ整理された状態を保ちます。

テンプレートエンジンの翻訳機能

質問にある${k.message}という書き方は、JSPやThymeleafなどのテンプレートエンジンと呼ばれる機能で使われます。テンプレートエンジンは、雛形となる文書にデータを流し込むための仕組みです。

テンプレートエンジンは、${k.message}という記述を見つけると、内部で自動的にkというオブジェクトのgetMessageメソッドを探して実行します。つまり、新人エンジニアの方が推測した通り、テンプレートエンジン側がJavaBeansの規則に従って、自動的に変換処理を行っています。

メリット

HTMLファイルの中に${k.getMessage()}というプログラム特有の書き方が混ざるよりも、${k.message}と書く方が、画面のデザインを担当するウェブデザイナーにとって読みやすく、直感的に理解しやすいという事実があります。

デメリット

JavaBeansの命名規則から外れた名前をつけてしまうと、テンプレートエンジンがメソッドを見つけられず、エラーが発生します。たとえば、メソッド名を小文字のmから始まるgetmessageにしてしまうと、${k.message}という呼び出しは失敗します。

今後の学習ステップ

プロパティアクセスの仕組みを深く理解し、実務で活用するためには、以下の順序で学習を進める手順が有効です。

  1. JavaBeansの基本仕様を学ぶクラスのフィールドを隠蔽し、取得用と設定用の窓口を設けるという基本的な設計原則を確認します。
  2. 命名規則の例外を把握する真偽値(trueまたはfalse)を扱う場合、getではなくisを使用する規則があるため、メソッド名の違いを整理します。
  3. 意図的なエラーを発生させて動作を確認する手元の開発環境で、あえて命名規則に違反したメソッド名を作成し、テンプレートエンジンがどのようなエラーを出力するかを観察します。

セイ・コンサルティング・グループでは新人エンジニア研修のアシスタント講師を募集しています。

投稿者プロフィール

山崎講師
山崎講師代表取締役
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。

学生時代は趣味と実益を兼ねてリゾートバイトにいそしむ。長野県白馬村に始まり、志賀高原でのスキーインストラクター、沖縄石垣島、北海道トマム。高じてオーストラリアのゴールドコーストでツアーガイドなど。現在は野菜作りにはまっている。