Electron と Ruby でネイティブアプリを作る方法 – 2 ボタンの配置時の落とし穴

概要

こんにちはアレクスです!

今回は「ボタン配置時の注意」というお話です。

詳しい解説は追記していくとしまして、
簡単に注意点を記載しておきます。

GUIには欠かせないボタンの落とし穴

続きを読む Electron と Ruby でネイティブアプリを作る方法 – 2 ボタンの配置時の落とし穴

Electron と Ruby でネイティブアプリを作る方法 – 1 標準出力随時受け取り

概要

こんにちは。アレクスです。
今回はですね。 Node.jsからrbファイルを実行して、
標準出力を受け取ることについて解説します。

長いこと中途半端に取り組み見て見ぬふりしていました問題が、
以外にもサクッ🍘と解決してしまいなんだか😦だったのですが、
落とし穴なポイントが有りましたので、公開いたします。

今回は超初期段階です、これから複雑な実装を行いますので、
また投稿したいと思います。

最終目的

Rubyで作ったプログラムをElectronから実行して、標準出力を受け取って、
画面に表示させたいですね。プログレスバーに反映できれば great!ですね。

イメージ
Rubyで進行状況のパーセンテージ計算 => 数値をstdout
Node.jsで受け取り => GUIのプログレスバーデザイン部分のwidthに随時反映

初期段階

まずは Node.js から外部コマンドで、簡単な Ruby コードを実行してみます。
エラーもどうなるか合わせてみてみます。



# coding: utf-8
Encoding.default_external = 'UTF-8'

begin

  5.times {
    print "HELLO WORLD!"
    sleep(0.5)
  }

  raise "ERROR"

rescue => ex
  print ex.class
  print ex.message
  print ex.backtrace
end


Node.js は以下のようにspawnを使います。


const spawn = require('child_process').spawn;
const ls = spawn('ruby', ['hello.rb']);

ls.stdout.on('data', (data) => {
  console.log(`stdout: ${data}`);
});

ls.stderr.on('data', (data) => {
  console.log(`stderr: ${data}`);
});

ls.on('close', (code) => {
  console.log(`child process exited with code ${code}`);
});


参考:Child Process Node.js v5.5.0 Manual & Documentation

でもはじめは実行してもうまく行かなかったんですよね😿

原因

原因は2つありました。

– Ruby側のstdoutp出ないとダメ
putsでもprintでも実験したらダメでした。
– ちゃんとターミナルでしてなかったのでダメ
Sublime Text3のビルドツールでやってました。

p以外でやった場合は、随時ではなく全て終わってから帰ってきますね。
SublimeText3のビルドツールでrunすると以下のエラーが出ました。


events.js:154
      throw er; // Unhandled 'error' event
      ^

Error: spawn ruby ENOENT
    at exports._errnoException (util.js:856:11)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:178:32)
    at onErrorNT (internal/child_process.js:344:16)
    at nextTickCallbackWith2Args (node.js:474:9)
    at process._tickCallback (node.js:388:17)
    at Function.Module.runMain (module.js:449:11)
    at startup (node.js:139:18)
    at node.js:999:3

以上、簡単ではございましたがご紹介でした。