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

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

新規登録して質問してみよう
ただいま回答率
87.20%
npm

npmは、Node Packaged Modulesの略。Node.jsのライブラリ・パッケージを管理できるツールです。様々なモジュールを簡単にインストールでき、自分でモジュールを作成し公開する際にも使用できます。

Node.js

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

解決済

Node.jsむけBLEライブラリnoble実行で「Error: Cannot find module 'xpc-connection'」が出る。

OKstyle-Tokyo
OKstyle-Tokyo

総合スコア16

npm

npmは、Node Packaged Modulesの略。Node.jsのライブラリ・パッケージを管理できるツールです。様々なモジュールを簡単にインストールでき、自分でモジュールを作成し公開する際にも使用できます。

Node.js

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

2回答

1評価

1クリップ

476閲覧

投稿2019/01/22 14:04

前提・実現したいこと

MacBook Air (11-inch, Early 2015,)OS X Yosemiteバーション10.10.5でBLEデータを受け取るセントラルにしようとしています。
① Node.jsをnode.jsの本家サイトからダウンロード
② nobleのインストール
③ 下記「実行したソースコードの「app.js」ファイルを作成
④ BLEデータの受け取りができるか、Node.jsむけBLEライブラリのnobleを使用したapp.jsファイルをターミナルで実行しました。
そうしたところ以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

Nakamu-no-MacBook-Air-8:ble_central nakamu$ node app.js internal/modules/cjs/loader.js:583 throw err; ^ Error: Cannot find module 'xpc-connection' at Function.Module._resolveFilename (internal/modules/cjs/loader.js:581:15) at Function.Module._load (internal/modules/cjs/loader.js:507:25) at Module.require (internal/modules/cjs/loader.js:637:17) at require (internal/modules/cjs/helpers.js:22:18) at Object.<anonymous> (/Users/nakamu/Desktop/ble_central/node_modules/noble/lib/mac/yosemite.js:7:21) at Module._compile (internal/modules/cjs/loader.js:689:30) at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10) at Module.load (internal/modules/cjs/loader.js:599:32) at tryModuleLoad (internal/modules/cjs/loader.js:538:12) at Function.Module._load (internal/modules/cjs/loader.js:530:3)

実行したソースコード

Node.js

'use strict'; const noble = require('noble'); const serviceuuid = `a6ad91bd376e465f8c6c460fd3e15038`; const charauuid = `80d881a61ab347f08c752c31eac31f43`; //キャラクタリスティックにアクセスしてデータやりとり const accessChara = (chara) => { console.log('-----Start GATT Access-----') chara.notify(true, (err) => { if (err) { console.log('listen notif error', err) } else { console.log('listen notif') } }); chara.on('data', (data, isNotif) => { const jsonStr = data.toString('utf-8'); const jsonData = JSON.parse(jsonStr); console.log(jsonData); }); } //discovered BLE device const discovered = (peripheral) => { console.log(`BLE Device Found: ${peripheral.advertisement.localName}(${peripheral.uuid}) RSSI${peripheral.rssi}`); if(peripheral.advertisement.localName === 'SAKETAMU'){ noble.stopScanning(); console.log('device found'); console.log(`service discover...`); peripheral.connect(error => { if (error) { console.log("connection error:", error) } else { console.log("device connected"); } peripheral.discoverServices([],(err, services) => { if (error) { console.log("discover service error", error) } console.log('discover service'); services.forEach(service => { if(service.uuid === serviceuuid){ service.discoverCharacteristics([], (error, charas) => { console.log('discover chara'); charas.forEach(chara => { if(chara.uuid === charauuid){ console.log("found chara: ", chara.uuid) accessChara(chara); } }); }); } }); }); }); } } //BLE scan start const scanStart = () => { noble.startScanning(); noble.on('discover', discovered); } if(noble.state === 'poweredOn'){ scanStart(); }else{ noble.on('stateChange', scanStart);

試したこと

① 最初、nobleのインストールもできていなかったのか

Error: Cannot find module 'noble' at Function.Module._resolveFilename (internal/modules/cjs/loader.js:581:15) at Function.Module._load (internal/modules/cjs/loader.js:507:25) at Module.require (internal/modules/cjs/loader.js:637:17) at require (internal/modules/cjs/helpers.js:22:18) at Object.<anonymous> (/Users/nakamu/Desktop/app.js:3:15) at Module._compile (internal/modules/cjs/loader.js:689:30) at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10) at Module.load (internal/modules/cjs/loader.js:599:32) at tryModuleLoad (internal/modules/cjs/loader.js:538:12) at Function.Module._load (internal/modules/cjs/loader.js:530:3)

のエラーがでいたので

mkdir ble_central cd ble_central touch app.js npm init -y npm i --save noble

でインストールし直しました。

インストールする過程で下記メッセージも出ていました(^^;;

Nakamu-no-MacBook-Air-8:ble_central nakamu$ npm i --save noble > xpc-connection@0.1.4 install /Users/nakamu/Desktop/ble_central/node_modules/xpc-connection > node-gyp rebuild gyp ERR! configure error gyp ERR! stack Error: Command failed: /Users/nakamu/anaconda/bin/python -c import sys; print "%s.%s.%s" % sys.version_info[:3]; gyp ERR! stack File "<string>", line 1 gyp ERR! stack import sys; print "%s.%s.%s" % sys.version_info[:3]; gyp ERR! stack ^ gyp ERR! stack SyntaxError: invalid syntax gyp ERR! stack gyp ERR! stack at ChildProcess.exithandler (child_process.js:294:12) gyp ERR! stack at ChildProcess.emit (events.js:182:13) gyp ERR! stack at maybeClose (internal/child_process.js:962:16) gyp ERR! stack at Socket.stream.socket.on (internal/child_process.js:381:11) gyp ERR! stack at Socket.emit (events.js:182:13) gyp ERR! stack at Pipe._handle.close (net.js:610:12) gyp ERR! System Darwin 14.5.0 gyp ERR! command "/usr/local/bin/node" "/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild" gyp ERR! cwd /Users/nakamu/Desktop/ble_central/node_modules/xpc-connection gyp ERR! node -v v10.15.0 gyp ERR! node-gyp -v v3.8.0 gyp ERR! not ok npm notice created a lockfile as package-lock.json. You should commit this file. npm WARN ble_central@1.0.0 No description npm WARN ble_central@1.0.0 No repository field. npm WARN optional SKIPPING OPTIONAL DEPENDENCY: bluetooth-hci-socket@0.5.1 (node_modules/bluetooth-hci-socket): npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for bluetooth-hci-socket@0.5.1: wanted {"os":"linux,android,win32","arch":"any"} (current: {"os":"darwin","arch":"x64"}) npm WARN optional SKIPPING OPTIONAL DEPENDENCY: xpc-connection@0.1.4 (node_modules/xpc-connection): npm WARN optional SKIPPING OPTIONAL DEPENDENCY: xpc-connection@0.1.4 install: `node-gyp rebuild` npm WARN optional SKIPPING OPTIONAL DEPENDENCY: Exit status 1 + noble@1.9.1 added 4 packages from 4 contributors and audited 107 packages in 8.094s found 3 low severity vulnerabilities run `npm audit fix` to fix them, or `npm audit` for details

② app.jsを実行したら上記「発生している問題・エラーメッセージ」に記載のエラーが発生

エラーメッセージの中にある「xpc-connection」は
OS X Lionから採用されたXPCサービスだと他のサイトなどに書き込みがありました。
ということは、Yosemiteから最新バージョンにアップデートすると解決されるのかなど
アドバイスいただけると助かります。
スペックの低いMacBook Airのため、できればYosemiteのままで解決できると助かります。

補足情報(FW/ツールのバージョンなど)

Node.js バージョン v10.15.0

わかりづらくて申し訳ありませんが宜しくお願い致しますm(_ _)m

良い質問の評価を上げる

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

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

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

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

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

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

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

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

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

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

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

npm

npmは、Node Packaged Modulesの略。Node.jsのライブラリ・パッケージを管理できるツールです。様々なモジュールを簡単にインストールでき、自分でモジュールを作成し公開する際にも使用できます。

Node.js

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