以前、「PostmanとNewmanを使って複数のAPIを連続して実行させる」という記事を書きましたが、久し振りにローカル実行してみたら以下のエラーに遭遇しました。

1 2 3 4 5 6 7 8 9 10 | $ npm run hoge.js _tls_wrap.js:547 self._destroySSL(); ^ TypeError: Cannot read property '_destroySSL' of undefined at Timeout.destroySSL [as _onTimeout] (_tls_wrap.js:547:8) at listOnTimeout (internal/timers.js:531:17) at processTimers (internal/timers.js:475:7) |
「_destroySSL」ってなんだろうと思いながら調べてみると、同様のケースに陥っている人がいるようです。
今回はこの問題の解決方法について調べていきたいと思います。
原因はNode.jsのバージョン
以下の Git の Issue 投稿を見てみると、似たような現象が発生しています。
Did you encounter this recently, or has this bug always been there: after upgrading to Node v12.3.0
投稿の通り、Node のバージョンを 12 にアップグレードした後に発生しているとのこと。
これに対して、別の Issue で、Node のバージョン 10 で試してみてとの内容が投稿されています。
nvm 使えば簡単に Node のバージョンが切り替えられるよと。
For now, can you try using Newman in Node v10 (nvm is a great tool to switch between Node versions)? We’ll fix this as soon as possible!
根本的な解決方法ではないですが、この投稿が 2 ヶ月くらい前ということを考えると、最新の Newman でもまだ解決されていないようです。
ちなみに手元の newman のバージョンは 4.1.0 なので、こちらのバージョンアップは先に試して確認しておきたいですね。
2019 年 8 月 19 日現在、最新バージョンは 4.5.4 のようです。
またチェンジログ(Change Log)を確認してみると、4.5.0 の時に修正されているような記載がありました。
Fixed a bug that caused fetching collection from HTTPS URL crashes on Node v12
newmanのアップデート
では早速、newman のバージョンアップを行います。
1 2 3 4 5 | $ npm update newman + newman@4.5.4 added 12 packages from 9 contributors, removed 6 packages, updated 27 packages and audited 388 packages in 11.175s found 0 vulnerabilities |
どうやら、最新バージョンに問題なく更新されたようです。
1 2 3 | $ npm ls --depth=0 | grep 'newman' newman@4.5.4 |
では、この状態で目的のプログラムを実行してみましょう。
ダメですね・・・
よくよく見てみると、4.5.0 のリリースが 5 月、そして先ほどの投稿が 6 月なので、4.5.0 で直ってないってことですね・・・。
仕方ないので Node.js のバージョン 10 を入れてみましょう。
nvmのインストール
まずは Node.js の 10 と 12 が共存できるように nvm をインストールします。
最新バージョンは v0.34.0 となっています。
ドキュメント通り設定を進めていきます。
1 2 3 4 5 6 7 | $ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash $ source ~/.bash_profile $ nvm --version 0.34.0 |
では、インストール可能な Node.js のバージョン 10 系を探します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | $ nvm ls-remote | grep 'v10.' v10.0.0 v10.1.0 v10.2.0 v10.2.1 v10.3.0 v10.4.0 v10.4.1 v10.5.0 v10.6.0 v10.7.0 v10.8.0 v10.9.0 v10.10.0 v10.11.0 v10.12.0 v10.13.0 (LTS: Dubnium) v10.14.0 (LTS: Dubnium) v10.14.1 (LTS: Dubnium) v10.14.2 (LTS: Dubnium) v10.15.0 (LTS: Dubnium) v10.15.1 (LTS: Dubnium) v10.15.2 (LTS: Dubnium) v10.15.3 (LTS: Dubnium) v10.16.0 (LTS: Dubnium) v10.16.1 (LTS: Dubnium) v10.16.2 (LTS: Dubnium) v10.16.3 (Latest LTS: Dubnium) |
LTS かつ Latest なのが v10.16.3 なのでこれにしましょう。
1 2 3 4 5 6 7 8 9 | $ nvm install v10.16.3 Downloading and installing node v10.16.3... Downloading https://nodejs.org/dist/v10.16.3/node-v10.16.3-darwin-x64.tar.xz... ######################################################################## 100.0% Computing checksum with shasum -a 256 Checksums matched! Now using node v10.16.3 (npm v6.9.0) Creating default alias: default -> v10.16.3 |
問題なくインストールされたようなので確認します。
現状は nvm で管理しているバージョンが v10.16.3 しかないので、これがデフォルトとなっています。
1 2 3 4 5 6 7 | $ nvm ls -> v10.16.3 system default -> v10.16.3 node -> stable (-> v10.16.3) (default) stable -> 10.16 (-> v10.16.3) (default) |
試しに v12 も入れておきますか。
1 2 3 4 5 6 7 8 | $ nvm ls v10.16.3 -> v12.8.1 system default -> v10.16.3 node -> stable (-> v12.8.1) (default) stable -> 12.8 (-> v12.8.1) (default) |
今回は v10 を使いたいので、切り替えておきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | $ nvm use 10.16.3 Now using node v10.16.3 (npm v6.9.0) $ nvm ls -> v10.16.3 v12.8.1 system default -> v10.16.3 node -> stable (-> v12.8.1) (default) stable -> 12.8 (-> v12.8.1) (default) $ node --version v10.16.3 |
では、これで改めてプログラムの実行です。
問題なくいけました。めでたし、めでたし?
やはり v12 だとエラーになるので、根本解決を待ちたいですね。
1 | $ nvm use 12.8.1 |