Electron(+Vue.js)で外部アプリの進捗を表示する

最近はElectronでデスクトップアプリ作ってるのだが、どうしても他の言語で作られたアプリを呼び出さにゃいかん感じになった。大抵の言語で外部プロセスを呼び出す仕組みはあるものだけれど、Node.jsの場合は「child_process」とかいうモジュールを読み込んでくればそれっぽい事が実現できるらしい。

まあ外部アプリを呼び出すだけなら良いのだけど、その外部アプリが結構重い処理をやってるので、バックグラウンドで動いてるかどうかをElectron側で表示したい。ということは、外部アプリが標準出力に出している内容を何らかの手段でフックして、そいつをリアルタイム表示すればよさそう。というわけで、絶賛お勉強中のVue.jsと組み合わせて試してみた。

標準出力できる環境ならどの言語でも行けると思うのだが、今回Electronから呼び出す対象アプリはC#なのでConsole.WriteLine()で標準出力しといた。このサンプルは何も処理しないニートプログラムなのだが、とりま0.1秒ごとに進捗を1%進める感じに。

そのまま出力するとElectron側で受ける時に文字化けするので、標準出力の文字エンコードをUTF-8にしておく必要がある。まあ、マルチバイト文字を出さなければたぶん関係ないんだろうけども。

いろいろ調べたところ、外部アプリを起動してリアルタイムで標準出力を受け取るには spawn() が良いらしい。spawnってなんやねんと思って調べたら、どうやら「生まれる」的な意味があるらしい。たしかにMMOだとかFPSだとかのゲームでも「リスポーン」とかいうからね。リスキルは鬼畜の所業。

まあ、そんなこんなでspawn()で取得したオブジェクトを使って色々なイベントを設定してやれば、それっぽく動いてくれる。めでたしめでたし。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)