Node.js 環境変数の設定
こんにちは、皆さん!
今回はNode.jsで安全に環境変数を設定する方法について紹介していきたいと思います。
- トピック:
環境変数とは?
簡単に言いますと、外部から与えられるデータのことです。直接コードの中ではそのものを書かずに他のファイルからそれを読み取ります。
なぜ環境変数を使うのか?
なぜ環境変数を安全に保護しないといけないのか?
どうやって安全にキープするのか?
process.env.API_KEY
env
の後に環境変数の名前をつければアクセスできます。
ローカルでは他のファイルに保存しておけば、アクセスできます。このファイルに関してはgitignore
しっかりとオンラインにシェアされないように
プロダクション、つまり、オンラインでは例えば、Herokuならconfig
に環境変数を保存すれば他人には見られないので安全にキープできます。
では、試してみましょう!!
おススメはそのコードをダウンロードして、この記事通りに見て、そして、ローカルやHerokuで試してみることです。
まず、コードの構造について少し説明します。
config
ディレクトリーの中にあるのが環境変数を管理する部分です。prod.js
がプロダクション、test.js
がテスト、dev.js
がローカルという形でそれぞれがそれぞれの環境の変数を管理しています。次に
index.js
ファイルで環境に応じてどのファイルのデータを返すかを決めます。
if (process.env.NODE_ENV === 'production') { module.exports = require('./prod'); } else if (process.env.NODE_ENV === 'test') { module.exports = require('./test'); } else { module.exports = require('./dev'); }
ここにあるように環境ごとにそれぞれの変数を管理しているファイルを返すのです。
あとは.gitignore
の方でローカルとテスト環境の変数が外部に漏れないようにフィルターするだけ
# モジュールはわざわざプッシュする必要はない node_modules # ローカルとテスト環境の環境変数はGithubに表示されないようにします config/dev.js config/test.js
以上で環境変数の設定は完了。そしたら、server.js
で実際にどう使うかを見てみましょう!
ここではMongooseを使う際のURLを環境変数を使い、各環境で違うデータベースにアクセスできるようにします。
まず、ローカルとテスト環境のデータベースのURLを設定します。
// dev.js module.exports = { DB_URI: "mongodb://localhost:27017/environment-variables-app" }
//test.js module.exports = { DB_URI: "mongodb://localhost:27017/environment-variables-app-test" }
次にプロダクションの方の変数も定義したいのですが、プロダクションではサーバー側の設定から環境変数がパスされてきます。例えば、Herokuでこのアプリケーションを使うのなら、そこで、変数の名前をDB_URI
とし、実際のURLを入れ、下記のようにその変数にアクセスします。
// prod.js module.exports = { DB_URI: process.env.DB_URI }
これならGithubに載せても他人から情報を盗まれませんね!
では、いよいよserver.js
内のコードを見ていきましょう!
まず、外部から必要なものをインポートしてきます。このとき、require('./config')
となっていてディレクトリーをインポートしようとしているように見えるが、実はindex.js
を認識して、そこにたどり着いているのです。
次にconst url = config.DB_URI;
で環境変数にアクセスし、MongoDBのURLを取得します。
そして、最後にサーバーをスタートします。
const express = require('express'); const mongoose = require('mongoose'); const config = require('./config'); const url = config.DB_URI; const port = process.env.PORT || 8080; // MongoDBデータベースに接続 mongoose.connect(url, function (err, res) { if (err) { console.log ('ERROR connecting to: ' + url + '. ' + err); } else { console.log ('Succeeded connected to: ' + url); } }); // サーバーをスタートする const app = express(); app.get('/', (req, res) => res.send('Hello World!')) app.listen(port, () => console.log(`Example app listening on port ${port}!`))
実際にこのサーバーをスタートすれば、コンソールで実際にどのMongoDBのサーバーに接続したかが見れます。
では、次はHerokuでどうやって設定するかです。
まずはHerokuのconfigを確認してみましょう!
$ heroku config
すると、まだ何も入れてないので、空の状態です。
HerokuでMongoDBを使おうとすると、mLabというアドオンを入れる必要があるので、それを入れてみましょう!
追加した後にもう一度heroku config
とやると、今足したmLabのURLが見れるはずです。
MONGODB_URI: mongodb://heroku_3636wvfr:ka9cqpra6f4r8g3gfk8n2la4bs@ds255797.mlab.com:55797/heroku_3636wvfr
こんな感じで出てくるのだが、今のアプリではDB_URI
という環境変数でアクセスしているので、環境変数をこの名前で新たに追加しましょう!!
下記のコマンドを入力して、configに環境変数を追加しましょう!
$ heroku config:set DB_URI=mongodb://heroku_3636wvfr:ka9cqpra6f4r8g3gfk8n2la4bs@ds255797.mlab.com:55797/heroku_3636wvfr
後ろの部分はご自身のMongoDBのURLを入れてくださいね!
ここで、またコマンドでconfigを開くと、
DB_URI: mongodb://heroku_3636wvfr:ka9cqpra6f4r8g3gfk8n2la4bs@ds255797.mlab.com:55797/heroku_3636wvfr
この内容が追加されています。
これでHerokuのサイト上でもアクセスできるようになります!!
まとめ
僕もはじめはこんなに簡単に設定できるのかと感心しました。
みなさんの役に立つことを願います!
では、また次回まで✌
記事更新はツイッターで告知するので、ツイッターの方でもフォローお願いします!
twitter.com