LoginSignup
8
3

More than 3 years have passed since last update.

Laravelでjson形式の設定ファイルを設置する

Posted at

概要

Laravelでjson形式の設定ファイルを設置する最適な場所を探した結果こうなった、という紹介です。

要件

  • 関数などを使って簡単に設定にアクセスできる
  • 設定ファイルなので、ファイル自体の削除・書き込みがされない

結果的に、configにはjsonファイルを読み出す処理を書いて、別の場所にjsonファイルを設置しています。

これがベストな方法かはわかりませんが、以下の難点を避けて、要件を満たすことはできています。もっといい方法知ってるという方は、ご教示お願いします。

注:こうはしなかったという選択肢

configをjsonで書いておきたいっていうのはよくあると思うのですが、Laravelではヘルパー関数のconfig()で読み出せるのはPHP配列なので、単純にconfig以下にjsonファイルをおいてもうまく動作しません。

また、storageに設置して読み出すという方法もあり、ライブラリ( https://github.com/labkod/laravel-config )が作られたりしてしますが、storage以下のファイルはアプリケーション上から、編集・削除できるので設定ファイルを置きたくないです。(Storage::delete()とか)

解決法概要

  • config/json/以下にjsonファイルを設置
  • config/myconfig.json.phpを作成
  • 設定ファイルをリポジトリ管理したくない場合
    • .gitignoreに追記
    • config/json/myconfig.json.exampleを作成

解決法詳細

jsonファイル設置

$ mkdir config/json
$ mv /path/to/json/file config/json/myconfig.json

config/myconfig.json.phpを作成

condigファイルでjsonファイルを読みだし、デコードする処理を書きます。

config/myconfig.json.php
<?php
return json_decode(file_get_contents(__DIR__ . '/json/myconfig.json'), true);

以上の設定で、Laravelのヘルパー関数configを使って、設定の読み出しができます。ドット記法も使えちゃいます。

app/any_laravel_file.php
$config = config('myconfig.json');

設定ファイルをリポジトリ管理したくない場合

configには秘匿したい情報もあったりすると思うので、その場合は以下の手順でgit管理から外しておくといいと思います。

.gitignoreに追記

.gitignore
config/json/*.json

config/json/myconfig.json.exampleを作成

$ cp config/json/myconfig.json config/json/myconfig.json.example

秘匿したい情報を削除。
exampleファイルのみをgit管理すればOKでしょう。

課題

とりあえず、一つの設定ファイルにはこれで対応できます。
この後運用した結果、設定ファイルを置き忘れるなどの管理面での問題が出てくるかもしれませんが、その際はまた考えます。

8
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
3