@nqounetです。
「設定ファイルマネージャーを作ってみよう」シリーズの第1回です。
シリーズの概要
このシリーズでは、アプリケーションの設定を管理する「設定ファイルマネージャー」を作りながら、オブジェクト指向プログラミングの実践的なテクニックを学んでいきます。
全5回の連載を通じて、設定管理の基本から、複数の場所で設定を共有する際の課題とその解決策までを体験します。
想定読者
このシリーズは以下の方を対象としています。
- Perl入学式を卒業したばかりの方
- モダンなPerlでオブジェクト指向設計を実践したい方
まだMooの基本を学んでいない方は、「Mooで覚えるオブジェクト指向プログラミング」シリーズを先にご覧ください。
前提知識
このシリーズでは以下の知識を前提としています。
| 項目 | 内容 |
|---|---|
| Mooの基本 | has、new の使い方 |
| メソッド定義 | サブルーチンとしてのメソッド |
| Perl v5.36 | use v5.36; による signatures |
本記事のゴール
今回のゴールは、ハードコードされた設定値をクラスで管理できるようにすることです。
ミキさんからの相談
ある日、友人のミキさんから相談を受けました。
「アプリの設定をうまく管理したいんだけど、いい方法ないかな?今は設定値をスクリプトに直接書いてるんだけど…」
なるほど、設定管理ですね。よくある悩みです。まずは現状を確認してみましょう。
設定値を直接書いたスクリプト
ミキさんが見せてくれたスクリプトは、こんな感じでした。
| |
実行すると、以下のように表示されます。
| |
動いてはいますが、設定値がスクリプト内にバラバラに散らばっています。これでは、設定を変更したいときに大変です。
設定をクラスで管理しよう
設定値を1つのクラスにまとめてみましょう。Mooを使えば、シンプルに設定クラスを定義できます。
| |
実行結果は同じです。
| |
何が変わったのでしょうか?
Configクラスのポイント
作成したConfigクラスのポイントを見てみましょう。
設定値の集約
| |
設定値がConfigクラスの中に集約されました。どんな設定があるのか一目でわかります。
読み取り専用(ro)
is => 'ro'で読み取り専用にしています。設定値は一度決めたら変更しないことが多いので、ro(read-only)が適切です。
デフォルト値
default => sub { ... }でデフォルト値を設定しています。newするときに値を指定しなければ、このデフォルト値が使われます。
設定の上書き
デフォルト値は、newするときに上書きできます。
| |
第1回 完成コード
今回の完成コードは以下の通りです。
| |
まとめ
- ハードコードされた設定値をConfigクラスで管理するようにした
- Mooの
hasでアトリビュート(設定項目)を定義した is => 'ro'で読み取り専用にしたdefaultでデフォルト値を設定した
次回予告
ミキさんから次の相談がありました。
「設定値をコードに書くんじゃなくて、外部ファイルから読み込みたいんだけど…」
次回は、外部の設定ファイルを読み込む機能を追加します。INI形式のファイルを読み込むload_configメソッドを実装しましょう。

