結論
electronはChromeじゃなくてあくまでもChromium。
内容
electronでwebSpeechAPIを使ったアプリケーションを書いていました。
色々はしょりますが、こんな感じです。
const speech = new webkitSpeechRecognition();
speech.lang = 'ja-JP';
speech.onresult = event => {
const results = event.results;
if (results[0] && results[0][0]) {
const said = results[0][0].transcript.trim();
console.log(said);
}
};
しかし、途中から以下のようなエラーが発生しました。
SpeechRecognitionError {error: "network", message: "", type: "error" ...
ネットワークのエラー?エラーメッセージは空ですし何だかよくわからりません。
とりあえず、Chromeで同様のコードを実行。すると、普通に動きます。
一瞬、すわElectron固有の問題か、と思いましたが、少し前まで動いていたはずです。
調べると、ネットワークエラーはどうやらAPI制限のエラーらしいです。
参考
Web Speech APIはChromeから使う分には無制限だけど、ElectronはChromiumだから50リクエストだよということらしいです。
ChromiumからWebSpeecAPIを使うにはAPIを取得して設定するらしいですが、我らがElectronにもprocess.env
を見るとやはりGOOGLE_API_KEY
が設定されています。
electronのソースから確認できます。
まとめ
Chromeだと思ってelectronアプリケーションを書いているとハマることがあるよという話でした。
また、electronの音声認識アプリケーションは現状ちょっと厳しいのかなというのが私の結論です。
まあ音声認識アプリケーションにどの程度需要があるがわかりませんが。