本記事ではリソースファイル・セッティングファイルの追加方法をご紹介しています。
マジックナンバーを集約して管理できるようになるので、開発では必須の作業になりますよ!
突然ですが問題です!
次のコードの『0.707』が何を意味しているか分かりますか?
private double Calculate(double value){ return value * 0.707; }
全く分からないっすね…
実は『1/√2』を意味しています!
先ほどのサンプルコードは『直角二等辺三角形の斜辺から1辺の長さを求めるメソッド』でした。
なので、実装した本人からすれば『0.707』は『1/√2』を意味していることが簡単に理解できるのですが…
他の人がこのコードを読むと、『0.707』の意味が全く分からなくなってしまうのです。
このように、実装した本人にしか分からない『直接実装された定数』をマジックナンバーと言います。
マジックナンバーがあるとコードを理解するのに時間がかかるので、チームで開発するときや他の人がメンテナンスをする可能性があるときは、基本的にマジックナンバーを使ってはいけないんです。
毎回、実装した本人に意味を聞かないといけないですからね!
たしかに、よろしくなさそうですね…
このような背景から定数をマジックナンバー(直接実装)にしてはいけないのですが…
プログラムを実装していと、定数を使いたくなる場面が必ず出てきます。
じゃあ、一体どうしたらいいんですか!
ファイルでまとめて管理すればいいんです!
気になるところへGO!
文字列の定数を管理するリソースファイル

マジックナンバーを管理するためによく使用するのがリソースファイルとセッティングファイルになります。
まずはリソースファイルのサンプルを見てみましょう!

リソースファイルは『名前・値・コメント』の列を持つ表形式のようなデータになります。
Excelみたいなイメージを持っていただければOKです。
使い方としては、名前に『英語』を、値に『表示させたい文字列』を入力する感じですね。
そうすると、名前を値に自動で置き換えてくれるので、マジックナンバーを管理できるツールとして使えます。
画像の例の場合は『Calculator』に『電卓』という値が入力されているので、Calculatorという文字列を使用すると『電卓』という文字に置き換えることができます。
なお、コメントは使わなくてもOKですが、名前に記号や略称を使用する場合は補足説明を入れておくといいですよ。
表示させる文字列を使用したいときにリソースファイルを使うと覚えておいてくださいね!
文字列以外はどうすればいいんですか…?
文字列以外はセッティングファイルを使いますよ!
数値や日付などの定数を管理するセッティングファイル

『文字列以外の定数』や『プログラムの途中で変更したい文字列定数』を使用したい場合は、セッティングファイルを使うのがオススメです。
次のようなファイルがセッティングファイルとなります。

リソースファイルと見比べると、コメントの代わりに『種類』『スコープ』が追加されているデータであることが、お分かりいただけると思います。
ここの『種類』で型式を指定することで、いろいろな型式のマジックナンバーを管理できるのです。
さっきの画像の例のように『System.DateTime・int・bool』などを選択すれば、日付・数値・フラグなどの定数をまとめることができます。
なお、『string』も選択できるので、プログラムの途中で変更したい文字列も登録することが可能です。
しかも値が型式に合っているかチェックもしてくれますよ!
それは便利ですね!
もう1つのスコープという項目は『値の変更可否を意味する』と思っていただければOKです。
『ユーザー』を選択すると、プログラムの途中やファイルの書き換えで値を変更できるようになりますし。
『アプリケーション』を選択すると書き換えが不可能になります。
変更しないマジックナンバーはアプリケーションにすると良いと思います!
了解です!
リソースファイルの追加方法

説明は以上になりますので、早速リソースファイルから追加していきましょう。
ソリューションエクスプローラーにあるプロジェクトを選択してから、『Alt』『Enter』を同時押ししてプロパティを開きます。
プロパティを開くショートカット『Alt』『Enter』の同時押しはよく使うので覚えておくのがオススメです!
そしたら、次の画像のように①『リソース』のタブを選択し、②『アセンブリリソースを作成する/開く』をクリックします。

クリックしたら、『Properties』というフォルダがプロジェクトに追加されていると思います。
その中の『Resources.resx』がリソースファイルです。
このファイルをダブルクリックすると表形式の画面が開くと思います。
ResourcesDesigner.csってファイルもありますよ…?
それは自動で作られるファイルなので、基本的にいじってはいけないファイルになります。
この方法でリソースファイルの作成はOKなのですが、WPFでリソースファイルを使う時に注意する点があります。
それは、アクセス修飾子をpublicに変更する必要があるということです。
そうしなければ、Viewのxamlファイルからリソースファイルを参照することができなくなるので、結局マジックナンバーを使うことになってしまいます。
なので、次の画像の③のプルダウンからpublicを選択して保存しておいてください。

注意画面が出てもOKを選択してくださいね!
セッティングファイルの追加方法

続いてはセッティングファイルの追加方法をご説明していきます。
やり方は、リソースファイルとほぼ同じです。
ソリューションエクスプローラーにあるプロジェクトを選択してから、『Alt』『Enter』を同時押ししてプロパティを開きます。
次の画面が開いたら、①『リソース』のタブを選択して、②『アプリケーション設定を作成する/開く』をクリックしてください。

この操作を行うと『Properties』フォルダに『Settings.settings』が追加されます。
これがセッティングファイルです。
きっと、ソリューションエクスプローラーは次の画像のようになっていると思います。

リソースファイルとセッティングファイルが同じフォルダに作られているはずです!
確認できました!
リソースファイルと同様に、Settings.Designer.csという自動生成されるファイルも追加されていると思います。
このファイルはビルド時に改変されてしまうので、なるべく変更しないようにしてくださいね。
リソースファイルとセッティングファイルをさらに追加する方法

基本的にリソースファイルとセッティングファイルは1つずつあればOKです。
ですが、規模が大きいWPFアプリを作成するときは、更にリソースファイルとセッティングファイルを追加することがあります。
例えば、ユーザーに表示するメッセージをまとめた『MessageResources』、エラーコードをまとめた『ErrorResoureces』などです。
セッティングファイルの場合は、スコープごとにファイルを分けることだってあります。
なので、追加する方法をご紹介しておきます。
まずは、『Properties』を選択して『Ctrl』『Shift』『A』を同時押ししてください。
『新しい項目の追加』の画面が表示されると思います。
このショートカットもよく使うので覚えておくとオススメです!

こちらの画面が表示されたら、下側の方に①『リソースファイル』 or 『設定ファイル』があるので、追加したいファイルを選択してください。
そして、②でファイル名を設定して、③『追加(A)』をクリックしましょう。
この方法で『MessageResources.resx』も追加しておいてください!
了解です!