Gatsby.jsを触ろうとして失敗した話(Windows10環境)

ReactベースのSSGを何かしら試したかったので、入門してみたいと思います。

※GatsbyがSSGかどうかはひとまず置いときます。

公式チュートリアルを読みながら進めていきます。

> yarn add gatsby-cli

……と言いつつ最初から違うことをやっていますが。nodeもyarnもgitも入っているのと、ひとまずテストなのでローカルインストールにしようと思ったのでグローバルオプションなしの上yarn addでインストールするという。

> gatsby --help
╔════════════════════════════════════════════════════════════════════════╗
║                                                                        ║
║   Gatsby collects anonymous usage analytics                            ║
║   to help improve Gatsby for all users.                                ║
║                                                                        ║
║   If you'd like to opt-out, you can use `gatsby telemetry --disable`   ║
║   To learn more, checkout https://gatsby.dev/telemetry                 ║
║                                                                        ║
╚════════════════════════════════════════════════════════════════════════╝
Usage: gatsby <command> [options]

## 略

入りましたね。

&gt; gatsby new hello-world https://github.com/gatsbyjs/gatsby-starter-hello-world

## 略

Done in xx.xxs.
info Initialising git in hello-world
Initialized empty Git repository in PATH/TO/DIRECTORY/hello-world/.git/
info Create initial git commit in hello-world
info
Your new Gatsby site has been successfully bootstrapped. Start developing it by
running:

  cd hello-world
  gatsby develop

終わりました。

> cd hello-world
> gatsby develop

さて、どうでしょうか。

> gatsby develop
child_process.js:122
  p.open(fd);
    ^

Error: EBADF: bad file descriptor, uv_pipe_open
    at Object._forkChild (child_process.js:122:5)
    at setupChildProcessIpcChannel (internal/bootstrap/pre_execution.js:329:30)
    at prepareMainThreadExecution (internal/bootstrap/pre_execution.js:54:3)
    at internal/main/run_main_module.js:7:1 {
  errno: -4083,
  code: 'EBADF',
  syscall: 'uv_pipe_open'
}

何……だと……。

調べてみるとこんなドキュメントが。Windowsは設定が必要だったのか……。PowerShellを管理者権限で実行して以下のコマンドを実行。

> npm install windows-build-tools -g                                                              npm WARN deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142
npm WARN lifecycle The node binary used for scripts is PATH\TO\DIRECTORY\bin\node.exe but npm is using PATH\TO\DIRECTORY\node.exe itself. Use the `--scripts-prepend-node-path` option to include the path for the node binary npm was executed with.

> windows-build-tools@5.2.2 postinstall PATH\TO\DIRECTORY\node_modules\windows-build-tools
> node ./dist/index.js



Downloading vs_BuildTools.exe
[>                                            ] 0.0% (0 B/s)
Downloaded vs_BuildTools.exe. Saved to PATH\TO\DIRECTORY\USERNAME\.windows-build-tools\vs_BuildTools.exe.

Starting installation...
Launched installers, now waiting for them to finish.
This will likely take some time - please be patient!

Status from the installers:
---------- Visual Studio Build Tools ----------
2020-06-14T15:57:20 : Verbose : [InstalledProductsProviderImpl]: Stream was closed
2020-06-14T15:57:20 : Verbose : [InstallerImpl]: Rpc connection was closed.
2020-06-14T15:57:20 : Verbose : [InstallerImpl]: Stream was closed
2020-06-14T15:57:20 : Verbose : [SetupUpdaterImpl]: Rpc connection was closed.
2020-06-14T15:57:20 : Verbose : [SetupUpdaterImpl]: Stream was closed
------------------- Python --------------------
Python 2.7.15 is already installed, not installing again.


Could not install Visual Studio Build Tools.
Please find more details in the log files, which can be found at
PATH\TO\DIRECTORY\USERNAME\.windows-build-tools

Skipping configuration: No configuration for Python or Visual Studio Build Tools required.

All done!

+ windows-build-tools@5.2.2
updated 1 package in 11.732s

失敗しました……。思えば、前に一度やったことあるのでそのせいかも。

> gatsby develop
child_process.js:122
  p.open(fd);
    ^

Error: EBADF: bad file descriptor, uv_pipe_open
    at Object._forkChild (child_process.js:122:5)
    at setupChildProcessIpcChannel (internal/bootstrap/pre_execution.js:329:30)
    at prepareMainThreadExecution (internal/bootstrap/pre_execution.js:54:3)
    at internal/main/run_main_module.js:7:1 {
  errno: -4083,
  code: 'EBADF',
  syscall: 'uv_pipe_open'
}

ダメですね……。

次はhttps://go.microsoft.com/fwlink/?LinkId=532606&clcid=0x409からVisual Studio Community 2015をダウンロードし、ドキュメントと同じ項目をチェックしてインストールしてみます。

Visual Studio Community 2015をダウンロード
Visual Studio Community 2015をダウンロード

Visual Studio Community 2015をダウンロードし、ドキュメントと同じ項目をチェックしてインストール
Visual Studio Community 2015をダウンロードし、ドキュメントと同じ項目をチェックしてインストール

しばらくかかってインストール完了。この状態でもう一度走らせてみます。

> gatsby develop
child_process.js:122
  p.open(fd);
    ^

Error: EBADF: bad file descriptor, uv_pipe_open
    at Object._forkChild (child_process.js:122:5)
    at setupChildProcessIpcChannel (internal/bootstrap/pre_execution.js:329:30)
    at prepareMainThreadExecution (internal/bootstrap/pre_execution.js:54:3)
    at internal/main/run_main_module.js:7:1 {
  errno: -4083,
  code: 'EBADF',
  syscall: 'uv_pipe_open'
}

変わらず。今日はここでタイムアップ。うーん、残念。

ちなみに、エラー文で検索して軽く眺めていると、他のECMAScript系のプロジェクトでもWindows環境で同様のエラーが起きるようなIssuesが複数見られました。

そのため、もしかしたらGatsby.js云々というより依存しているパッケージ・バージョンでWindowsだとダメなものがあるのかもしれません(未検証)。

参考

この記事を書いた人

アバター

アルム=バンド

フロントエンド・バックエンド・サーバエンジニア。LAMPやNodeからWP、Gulpを使ってejs,Scss,JSのコーディングまで一通り。たまにRasPiで遊んだり、趣味で開発したり。