これはなに
本当に初歩的な疑問でnode.jsのchild_process
なんかでRubyのプロセスを起動させたいみたいなときにnode.jsのスクリプトで使っていた環境変数はRubyのスクリプトにでも適用されるのかみたいなところを実験してみた。
.env
HOGE=HOGEHOGE
PIYO=PIYOPIYO
app.coffee
require('dotenv').load()
exec = require('child_process')
console.log "--- NODE ---"
console.log "HOGE=#{process.env.HOGE}"
console.log "PIYO=#{process.env.PIYO}"
console.log ""+exec('ruby app.rb')
app.rb
puts "--- RUBY ---"
puts "HOGE=#{ENV['HOGE']}"
puts "PIYO=#{ENV['PIYO']}"
結論
引き継いでくれる
$ coffee app.coffee
--- NODE ---
HOGE=HOGEHOGE
PIYO=PIYOPIYO
-- RUBY ---
HOGE=HOGEHOGE
PIYO=PIYOPIYO
環境変数 - Wikipedia
親プロセスから子プロセスに複製されて継承される。 すなわち、子プロセスで環境を変更しない限り、子プロセスの環境は親プロセスのそれと同一の内容である。 また、子プロセスが自分の環境に対して行った変更は、親プロセスの環境に影響しない。
そりゃそうだみたいな印象で、Rubyでさらにdotenv
を噛ませようとしていたがコードの行数が減った。