本連載は、Java言語やその文法は一通り理解しているが、「プログラマー」としては初心者、という方を対象とします。Javaコアパッケージを掘り下げることにより「プログラマーの常識」を身に付けられるように話を進めていきます。今回はプロパティファイルについて。もちろん、使ってますよね? ソースコードに設定情報をベタ書きすると、情報を書き換えるたびにコンパイルが必要ですしね。
今回は「プロパティファイル」の常識について、Java言語を通じて学んでいきます。
多くの場合、プロパティはプロパティファイルという物理的なファイルと関連付けられて私たちの前に現れます。プログラミング言語内では完結せずに外部の物理ファイルとのかかわりが強く出てくる話題であるため、初心者のうちはなかなかなじみにくい技術かもしれません。しかし、プログラミングにおいて重要ですので、しっかり習得してしまいましょう。
私たちがJava関連のソフトウェアを扱っていると、ファイルの拡張子が「.properties」となっているファイルを見掛けたり、あるいはその内容を編集することがあります。この「.properties」拡張子のテキストファイルが、プロパティファイルです(違う拡張子を付ける場合もありますが)。
テキストエディタなどを利用してプロパティファイルの中身を見てみると、下記のような内容が複数行にわたって記載されています。
|
このように、プロパティファイルには、1行ずつ=の形式で記載していくことで、おのおののキーに対応した値を設定できるようになっています。そして、設定した値はプログラムから読み込むことができるようになっています。
なお、残念なことに、Javaにおけるプロパティファイルの文字エンコーディングはISO 8859_1です。プロパティファイルについて、詳しくはJava APIリファレンスを参照してください。
あなたが基本的に日本語を扱う立場であれば、利用できる文字コードはISO/IEC 646(通称、ASCIIコード)の範囲に限定されているものと考えて差し支えないでしょう(これを克服するための方法については後述します)。
プロパティファイルに類似したものとして、Microsoft Windowsではファイル拡張子が「.ini」であるINIファイルやレジストリなどといったものが挙げられます。これらも外部で設定した値をプログラムに与えるための仕組みの1つなのです。
それでは次に、プロパティファイルは一体どのような目的で利用されているのか見ていきましょう。
プロパティファイルを用いると、各種「情報」をソースコード上からプロパティファイルへと追い出すことができます。情報をソースコードから追い出すことには、いくつかのメリットがあります。例えば、プロパティファイル上の内容を変更するだけで、ソースコードの再コンパイルなしに設定内容の変更をプログラムの動作に反映させることができます。
このため、現実的にはソースコードから外部に追い出しておきたい情報こそが、プロパティファイルに格納されるべき内容の候補となります。特によく利用されるものは、下記のものです(それ以外にもいろいろありますけれどもね……)。
例えば、動作環境に関する設定内容や利用者ごとの設定内容といったものは、ソフトウェアを開発している時点では、まだ決まっていません。あるいは、同じプログラムを異なった環境で動作させる必要もあるでしょう。
コンパイルされてjarファイル化されて、そして利用者の手に渡った後で、初めて設定内容が決定されるという場面を想像してください。このような場合に、プロパティファイルの設定内容によって、環境依存あるいは利用者依存の内容をプログラムに伝えて動作させることのメリットが出てくるのです。
また、メッセージ文字列や画面のメニューなどの文字列についても、ソースコードから追い出しておくと便利な場合があります。ソースコードを書く人と、メッセージ文字列やメニューなどの文字列の内容を決定したり変更したりする人が異なる場合に、ソースコードからそれらの情報が追い出されているとメリットが出る場合が多いのです。
さらに、それら文字列をプロパティファイル化しておくことによって、国際化プログラミング対応が実施しやすくなるという、副作用としてのメリットが得られます。
このように、プロパティファイルを活用すると、ソースコードを変えることなく、あるいは再コンパイルすることなく、プログラムの動作を変えることができるため、比較的多くの場面で利用される技術の1つとなっているのです。
なお、ソースコード上から情報を追い出す方法は、プロパティファイルを利用する以外に、XMLファイルやデータベースを利用するといった方法もあります。それぞれの方法には長所と短所があるため、実際には用途によって使い分けることが多くなります。
先ほど、Javaにおいてプロパティファイルの文字エンコーディングはISO 8859_1とお伝えしましたが、それ以外にもプロパティファイル固有の記入ルールが定められています。詳しくは、Java APIリファレンスを参照してください。
このような事情のため、単純には日本語を扱うことができません。日本語などISO 8859_1文字コード以外の文字を利用するためには、JDKにもコマンドで付属しているnative2asciiの処理を実施する必要があります。この処理を行うことにより、日本語などの文字をISO8859_1文字コードの範囲に収めることができます。
native2ascii処理には、いくつもの方法が提供されています。その中の数個を紹介します。
これ以外にも、さまざまな方法が提供されています。いずれか利用しやすい良い方法を選択して、プロパティファイルに日本語を含めることができるようにします。
さて次ページからは、Java言語からプロパティファイルを扱う方法を見てみます。Java言語からプロパティファイルを扱う方法は、歴史的な背景などのために2つのAPIが提供されています。
Copyright © ITmedia, Inc. All Rights Reserved.