Nodeプロジェクトで設定を動的に保存するnpm-storeを作りました。
モチベーション
そもそも、単純に値を保存するだけならnpm configがあります。静的な設定ならpackage.json
に書けばそれで済みます。しかし、package.json
に書く場合はリポジトリに保管する必要があるため、開発者全員が同じ設定値を参照してしまうという問題があります。
それなら、npm config set
を使って動的に設定値を保存できればすべては解決・・・といきたかったのですが、この場合は設定値がプロジェクトを飛び越えて全プロジェクト共通の値として保存されてしまいます。
$ npm config set foo 1
$ cat ~/.npmrc
foo=1
これではプロジェクト間で同じ名前の設定を作ると混線してしまうので、プロジェクト単位に設定値を保存できる何かが欲しい!という訳で作成することにしました。
使い方
保存
$ node_modules/.bin/store set foo 1
取得
$ node_modules/.bin/store get foo
1
削除
$ node_modules/.bin/store delete foo
npmからの呼び出し
"scripts": {
"store": "store set foo 1"
}
一応、コマンドラインからの呼び出し方も書きましたが、基本的にはnpmで実行する想定です。
"scripts": {
"store": "echo 1 | store set foo"
}
上記のような形でコマンドの実行結果を特定のキーで保存します。
使い道
とはいえ、動的に設定を保存したいみたいなことは、そうそうないです。(むしろそんな要望が出たら設計を疑った方が良いレベル)
それじゃあ自分は何でそんなものを作ったの?という所でいうと
AWS Lambdaで開発するさいにCfnを実行して、その結果を保持したいからです。
例えばCfnで作成したリソースを設定ファイルに保存したり、開発者一人につきCfnで作成する環境を一つに制限したり、作成した環境を削除するためにStackIdを保存しておきたいみたいな用途ですね。
たぶん、こういった開発用のインフラ構築関連だと需要はありそうだなと思います。単純なビルドベースでは絶対に使わないというか使っていたら怒るレベルだと思いますが。
おわりに
取り敢えず作って、モチベーションを晒してみましたが実際はどうなんでしょうね?
インフラ構築関連で使うにしても、もっと他にやり方がありそうな気もします。
何か良いやりかたご存知の方がいらしたら、ぜひ教えてください。