Mojoliciousでの設定ファイル(Configプラグイン)の使い方とか一例を解説する

Mojoliciousでの設定ファイル(Config)の使い方とか一例をまとめていくよ。

Mojolicious::Plugin::Configとは?

Mojolicious::Plugin::Configとは、Mojolicious(以下、mojo)に最初から入っているプラグインの一種で、設定ファイルを簡単に使えるようにしてくれるものです。

で、プラグインはWordPressのプラグインみたいに、簡単にアプリの拡張ができるヤツのことです。

参考:Mojolicious::Plugins · yuki-kimoto/mojolicious-guides-japanese Wiki

Mojolicious::Plugin::Configの使い方

mojoのconfigの使い方は、説明するよりも下記の例を見た方がわかりやすいです。以下の例では、./lib/Sample.pm内でdefaultとしてのconfigを定義しています。

package Sample;
use Mojo::Base 'Mojolicious';

# This method will run once at server start
sub startup {
    my $app = shift;

    # Load configuration from hash returned by config file
    my $config = $app->plugin(
        'Config' => {
            default => {
                dbn      => 'mysql',
                username => 'tarou',
            }
        }
    );

実際にconfigでセットした値は、 controllerやmodelで使うことになるでしょう。

実際には、以下のように使えます。

sub signup {
    my $c     = shift;
    print $c->app->config->{db};
.
.
}

mojoでは最初のstartupメソッド内でappオブジェクトに関する設定ができますが、そのappオブジェクトはcontrollerオブジェクトにattribute(javascriptで言うプロパティ)として渡されます。

なので、$c->appとすることでappオブジェクトをcontroller内で呼び出すことができ、そしてapp->config->{db}とすることでconfigで設定した値を取り出すことができるのです。

Configにファイルを渡す方法

上記では、Configに直に設定を書いていましたが、実際は/etc/db.confみたいな設定ファイル用のディレクトリを作っておいて、そこにconfigを定義したいですよね。

例えば、以下のようなディレクトリ構成だとしましょう。

/Sample
   /etc
      db.conf
   /lib
      Sample.pm

上記の場合だと、/etc/db.confには以下のように書いておきます。

{
    db => {
        database => "sampledb",
        hostname => "localhost",
        user     => "root",
        password => "password",
    },
}

そして、上記のconfigファイルを呼び出すためには、/lib/Sample.pm内では以下のように書けばOKです。

package Sample;
use Mojo::Base 'Mojolicious';
use FindBin;

# This method will run once at server start
sub startup {
    my $app = shift;

    # Load configuration from hash returned by config file
    my $config = $app->plugin(
        'Config' => {
            file => "$FindBin::Bin/../etc/db.conf",
        }
    );

上記のコードの変更点は、

  • FindBinモジュールを使っていること
  • Config内の記述がfile => "$FindBin::Bin/../etc/db.conf",となっていること

の2点ですが、1つ目のFindBinモジュールは$FindBin::Binと書くことで、現在実行されているスクリプトのディレクトリを格納してくれます。mojoを使う時は/script/sampleファイルを呼び出すことになるので、$FindBin::Binには大体sample/scriptのような値が入ります。

$FindBin::Bin/../etc/db.conf"の中にある..ですが、これはディレクトリを1つ下げると言う意味です。linuxでもcd ..みたいな使い方をしますね。

2つ目のfile => "$FindBin::Bin/../etc/db.conf",の記述ですが、これはvalueとして設定したファイルを読み込み、configを作ってくれるものです。今回の例では、$app->{db}->{hostname}のような感じでconfig内の設定を呼び出すことができます。

mojoのConfigは、他にも細々した使い道がありますが、それは公式ドキュメントを見ることをお勧めします。

参考:Mojolicious::Plugin::Config - Perl-ish configuration plugin