Java目線でコンパイラの仕組みをのぞいてみよう!
プログラマーの常識をJavaで身につける (9)

コードから情報を追い出せ!
プロパティファイルの常識


株式会社 NTTデータ ビジネスブレインズ
伊賀敏樹
2007/11/29


本連載は、Java言語やその文法は一通り理解しているが、「プログラマー」としては初心者、という方を対象とします。Javaコアパッケージを掘り下げることにより「プログラマーの常識」を身に付けられるように話を進めていきます(編集部注:Java言語の基礎を学びたい読者は、連載「Eclipseではじめるプログラミング」や連載「いまから始めるJava」をご参照ください)。

今回の主な内容

「プロパティファイル」ってどんなもの?
プロパティファイルは何を目的としているのか?
プロパティにISO 8859_1以外の文字コードを使うには?
プロパティ操作の基本、java.util.Propertiesクラス
国際化にも対応、java.util.ResourceBundleクラス
ソースコードから「情報」を追い出そう!

 今回は「プロパティファイル」の常識について、Java言語を通じて学んでいきます。

 多くの場合、プロパティはプロパティファイルという物理的なファイルと関連付けられて私たちの前に現れます。プログラミング言語内では完結せずに外部の物理ファイルとのかかわりが強く出てくる話題であるため、初心者のうちはなかなかなじみにくい技術かもしれません。しかし、プログラミングにおいて重要ですので、しっかり習得してしまいましょう。

「プロパティファイル」ってどんなもの?

 私たちがJava関連のソフトウェアを扱っていると、ファイルの拡張子が「.properties」となっているファイルを見掛けたり、あるいはその内容を編集することがあります。この「.properties」拡張子のテキストファイルが、プロパティファイルです(違う拡張子を付ける場合もありますが)。

 テキストエディタなどを利用してプロパティファイルの中身を見てみると、下記のような内容が複数行にわたって記載されています。

dialog=Arial,ANSI_CHARSET

 このように、プロパティファイルには、1行ずつ<キー>=<値>の形式で記載していくことで、おのおののキーに対応した値を設定できるようになっています。そして、設定した値はプログラムから読み込むことができるようになっています。

プロパティファイルの文字エンコーディングはISO 8859_1

 なお、残念なことに、Javaにおけるプロパティファイルの文字エンコーディングはISO 8859_1です。プロパティファイルについて、詳しくはJava APIリファレンスを参照してください。

 あなたが基本的に日本語を扱う立場であれば、利用できる文字コードはISO/IEC 646(通称、ASCIIコード)の範囲に限定されているものと考えて差し支えないでしょう(これを克服するための方法については後述します)。

編集部注文字コード・文字エンコーディングについて詳しく知りたい読者は第6回記事をご参照ください。

INIファイルやレジストリもプロパティファイルの類似品

 プロパティファイルに類似したものとして、Microsoft Windowsではファイル拡張子が「.ini」であるINIファイルレジストリなどといったものが挙げられます。これらも外部で設定した値をプログラムに与えるための仕組みの1つなのです。

プロパティファイルは何を目的としているのか?

 それでは次に、プロパティファイルは一体どのような目的で利用されているのか見ていきましょう。

「情報」をソースコードから追い出す

 プロパティファイルを用いると、各種「情報」をソースコード上からプロパティファイルへと追い出すことができます。情報をソースコードから追い出すことには、いくつかのメリットがあります。例えば、プロパティファイル上の内容を変更するだけで、ソースコードの再コンパイルなしに設定内容の変更をプログラムの動作に反映させることができます

 このため、現実的にはソースコードから外部に追い出しておきたい情報こそが、プロパティファイルに格納されるべき内容の候補となります。特によく利用されるものは、下記のものです(それ以外にもいろいろありますけれどもね……)。

図1 プロパティファイルを用いて各種情報を外に出す
図1 プロパティファイルを用いて各種情報を外に出す

「情報」を追い出す メリット:その1

 例えば、動作環境に関する設定内容利用者ごとの設定内容といったものは、ソフトウェアを開発している時点では、まだ決まっていません。あるいは、同じプログラムを異なった環境で動作させる必要もあるでしょう。

 コンパイルされてjarファイル化されて、そして利用者の手に渡った後で、初めて設定内容が決定されるという場面を想像してください。このような場合に、プロパティファイルの設定内容によって、環境依存あるいは利用者依存の内容をプログラムに伝えて動作させることのメリットが出てくるのです。

「情報」を追い出す メリット:その2

 また、メッセージ文字列画面のメニューなどの文字列についても、ソースコードから追い出しておくと便利な場合があります。ソースコードを書く人と、メッセージ文字列やメニューなどの文字列の内容を決定したり変更したりする人が異なる場合に、ソースコードからそれらの情報が追い出されているとメリットが出る場合が多いのです。

「情報」を追い出す メリット:その3

 さらに、それら文字列をプロパティファイル化しておくことによって、国際化プログラミング対応が実施しやすくなるという、副作用としてのメリットが得られます。

編集部注国際化プログラミングについて詳しく知りたい読者は第5回記事をご参照ください。

 このように、プロパティファイルを活用すると、ソースコードを変えることなく、あるいは再コンパイルすることなく、プログラムの動作を変えることができるため、比較的多くの場面で利用される技術の1つとなっているのです。

「情報」はXMLファイルやデータベースにも追い出せる

 なお、ソースコード上から情報を追い出す方法は、プロパティファイルを利用する以外に、XMLファイルデータベースを利用するといった方法もあります。それぞれの方法には長所と短所があるため、実際には用途によって使い分けることが多くなります。

プロパティにISO 8859_1以外の文字コードを使うには?

 先ほど、Javaにおいてプロパティファイルの文字エンコーディングはISO 8859_1とお伝えしましたが、それ以外にもプロパティファイル固有の記入ルールが定められています。詳しくは、Java APIリファレンスを参照してください。

 このような事情のため、単純には日本語を扱うことができません。日本語などISO 8859_1文字コード以外の文字を利用するためには、JDKにもコマンドで付属しているnative2asciiの処理を実施する必要があります。この処理を行うことにより、日本語などの文字をISO8859_1文字コードの範囲に収めることができます。

native2ascii処理をする方法もイロイロある

 native2ascii処理には、いくつもの方法が提供されています。その中の数個を紹介します。

 これ以外にも、さまざまな方法が提供されています。いずれか利用しやすい良い方法を選択して、プロパティファイルに日本語を含めることができるようにします。

 さて次ページからは、Java言語からプロパティファイルを扱う方法を見てみます。Java言語からプロパティファイルを扱う方法は、歴史的な背景などのために2つのAPIが提供されています。

 
1-2-3

 Index
第9回 コードから情報を追い出せ! プロパティファイルの常識
Page1
「プロパティファイル」ってどんなもの?
プロパティファイルは何を目的としているのか?
プロパティにISO 8859_1以外の文字コードを使うには?
  Page2
プロパティ操作の基本、java.util.Propertiesクラス
  Page3
国際化にも対応、java.util.ResourceBundleクラス
ソースコードから「情報」を追い出そう!






Java Solution全記事一覧



TechTargetジャパン

Java Solution フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

キャリアアップ

- PR -
@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る
- PR -

お勧め求人情報

ホワイトペーパーTechTargetジャパン

@IT Sepcial
ソリューションFLASH