質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

91.02%

  • Node.js

    1548questions

    Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

  • Visual Studio

    1486questions

    Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

VS2017だけでnode-gypによるコンパイルを成功させる方法

解決済

回答 1

投稿

  • 評価
  • クリップ 2
  • VIEW 542

raccy

score 15628

通常、Windowsでnode-gypによるコンパイルを行うには、コンパイル環境として次のどちらかが必要になります。

  • Visual Studio 2015 (Visual C++をオプションで選択)
  • Visual C++ 2015 Build Tools

※ windows-build-toolsでのインストールはVisual C++ 2015 Build Toolsを自動的にインストールするだけです。

ですが、現在、Visual Studio Community 2017(以下VS2017)を入れている環境であり、できれば他のバージョンのVisual Studioは入れたくありません(コンポーネントの管理が複数になるため)。VS2017ではVC++2015ツールセットをオプションでインストールすることができますので、これでなんとかできないかとかれこれ半年ほど試行錯誤してきましたが、未だにできていません。

ということで、VS2017のインストーラーであるVisual Studio Installerで入れられるものだけでnode-gypによるコンパイルができる環境にする方法は無いのでしょうか?

環境

Windows 10 Pro 1709 (つい先日まで1703でしたが、とくに変わってなかったです)

VS2017でインストールするコンポーネント

  • デスクトップ用の VC++ 2015.3 v140 ツールセット (x86、x64)
  • Python 2 (2.7.13) (32 ビット)
  • Python 2 (2.7.13) (64 ビット)
  • Windows 8.1 SDK

※ 関係あるのは上記だけだと思いますが、他にもC#やVC++2017などもインストールしています。
※ Pythonについては公式のパッケージやAnacondaのパッケージに変えてやったりもしましたが、できませんでした。

環境変数

GYP_MSVS_VERSION=2015

node_config

msvs_version = "2015"
python = (Pythonのパス)

※ pythonについては入れたときのPythonによって変えていました。

参考にした情報

https://github.com/npm/npm/issues/10421#issuecomment-336092786

VS2017のVC++2015のバッチのバグはなおっているという情報もあります。バッチをたたき、VCTargetsPathも設定して、「"C:\Microsoft.Cpp.Default.props"がみつかりません」は出なくなりましたが、違うエラーが出て、もう、よくわかりません。

その他「私はこれでうまくいった」という情報はnode関係のissuesやStackOverflowで見かけては、全て試してきまたつもりですが、一度も成功していません。その人の環境が詳しく書いていなくて、私の環境と何が違うのかがわかりません。


本当はなんとか自分で調べきってQiitaに記事にしようとしたのですが、ことごとく失敗に終わったために断念している状態です。

Win10 + VS2017 (VS2015や個別でVC++ Build Toolを入れていない)という環境で、node-gypを使ったコンパイルができているって方が居れば、ぜひ、どうやってセットアップしたかを教えてください。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+2

2017からインストールディレクトリ等がいろいろ変わりビルドツール側では今までの方法で2017に対応することができなくなったようです。
ですので、gypを2017に対応させる必要があります。
以前v8のビルドでgypで2017を使ってビルドできなかったので調べたときはそんな状態でした。
gypはやめてgnでビルドしたのでその後どうなったかは知りませんが、
https://github.com/nodejs/node-gyp/tree/master/gyp
を見ると全然更新されていないのでgypを更新してみたらどうでしょうか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/10/30 22:11

    VC++2017でコンパイルしたいわけでは無くて、VS2017で入るVC++2015でコンパイルをしたいのです。node-gypの処理は失敗するのですが、途中で自動作成されているプロジェクトファイルを手動で開いてVisual Studio上でコンパイルできることは確認できています。gypが未対応と言うより、いろいろなファイルのパスの問題だと持っているのですが、どこをどうすればなおるのか見つからないため、こうすればできたという事例がほしいということです。

    キャンセル

  • 2017/10/30 23:51

    @raccy 失敗しているのであれば、対応していないということです。gypのレポジトリを見ましたがgypが2017に対応したのは2017/04/16です。2017でいろいろ変わったのだから対応しないとMSBuildを見つけられないはずです。
    ですので、gypを2017に対応したものに変更するのは最低限必要な作業ではないでしょうか?

    キャンセル

  • 2017/10/30 23:59

    すいません。hmmmさんがいっている2017というのはVisual C++ 2017のことですか?Visual Stuido 2017のことですか?それとも両方ですか?ちょっと話が噛み合ってないような気がしまして。

    キャンセル

  • 2017/10/31 00:31

    あーかみ合っていない理由が分かりました。
    Visual Stuido 2017というよりはVS2017の付属のMsBuild.exeです。gypを使ってビルドをするのであれば、c++のコンパイラの前にMsBuildがどこにあるかを見つけられないといけません。
    それをクリアして初めて2015のツールセットを使ってビルドできるのか?という話になると思います。

    キャンセル

  • 2017/10/31 07:08

    ああなるほど。MsBuild.exeはgybに2015指定して普通に認識できていたので、VC++2015コンポーネントで一緒に入る物を使っていると思っていたのですが、違うのでしょうか?
    C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v140
    にあるものを認識していたのですが、これってVC++2015コンポーネント用では無かったという話だったのですか?

    キャンセル

  • 2017/10/31 11:11

    MsBuild.exeが認識できている?とのことで調べてみましたが、node-gyp側で対応が入っていました。https://github.com/nodejs/node-gyp/blob/master/lib/find-vs2017.js
    ただ現状の処理だとツールセットにv141が使用されるのでlib/configure.jsをmsbuild_toolsetで検索してv140に書き換えてください。それでnode-gyp configure --msvs_version=2017、node-gyp build --msvs_version=2017で2017のMSBuildでv140のツールセットを使用してビルドできました。

    キャンセル

  • 2017/10/31 21:24

    node-gyp側が対応が入っていたのですね。
    早速試そうと、仕方が無く入れていたVC++Build Tool 2015をアンインストールしてみようとしたのですが、別のバグでアンインストールできなくなって、すぐには試そうには無い状態です。ひとまず、hmmmさんはできたということで、完了としたいと思います。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 91.02%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Node.js

    1548questions

    Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

  • Visual Studio

    1486questions

    Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。