50578
## 質問

以下のjsファイルをnodeコマンドで実行しても、標準出力に"start"と表示されませんでした。  
なぜでしょうか？

```

    const debug = require('debug')('puppeteer-loadtest');
    process.env.DEBUG = "puppeteer-loadtest";
    debug('start');
    
```

上記ファイルを実行する前に、コマンドで環境変数を設定`set DEBUG=puppeteer-loadtest`した場合、標準出力に`puppeteer-
loadtest start +0ms`と表示されました。  
`process.env.DEBUG = "puppeteer-
loadtest";`で環境変数は設定されていると考えているので、なぜ標準出力に"start"が表示されないのかが疑問です。

## 環境

  * node v10.13.0

## 補足

以下のモジュールを使ったときに、標準出力にデバッグ情報が出力が出なかったので、ここで質問しました。  
<https://github.com/svenkatreddy/puppeteer-loadtest>
CC BY-SA 4.0
2018-11-22T19:42:17.230
50548
2018-11-23T20:12:26.307
2018-11-23T00:31:49.073
19110
19524
question
javascript node.js
debugモジュールで標準出力に表示されないのはなぜ？（`process.env.DEBUG`で環境変数を設定しているつもりなんだけど）
確かに`process.env.DEBUG = "puppeteer-
loadtest";`で環境変数DEBUGを設定できるのですが、その例ではDEBUGを設定するのが遅すぎます。

というのも、`DEBUG`の値が読み込まれるのはdebugオブジェクトを作ったとき、すなわち`const debug =
require('debug')('puppeteer-
loadtest');`が実行されたときだからです。（[ソースコードでいうとここです。](https://github.com/visionmedia/debug/blob/7ef8b417a86941372074f749019b9f439a1f6ef6/src/common.js#L259)）

ですから、それよりも更に前に`process.env.DEBUG`を設定することでちゃんと"start"と表示されます。

```

    process.env.DEBUG = "puppeteer-loadtest";
    const debug = require('debug')('puppeteer-loadtest');
    debug('start');
    
```

とはいえ、常に`process.env.DEBUG`を一番最初に設定するのは現実的ではないかと思います。あとからデバッグログを有効化するには、`process.env.DEBUG`を使うのではなく別の方法があります。

以下のように[`enable`メソッド](https://www.npmjs.com/package/debug#set-
dynamically)を用いることであとからデバッグログを有効化できます。下の例を試すと"start"と表示されるかと思います。（`enable`メソッドを利用するために`require('debug')`の結果を別の変数`createDebug`に入れています。）

```

    const createDebug = require('debug');
    const debug = createDebug('puppeteer-loadtest');
    createDebug.enable('pupeteer-loadtest');
    debug('start');
    
```
CC BY-SA 4.0
2018-11-23T20:12:26.307
50578
2018-11-23T20:12:26.307
30079
50548
answer