Node.jsとJXAでMacのアプリが起動中かどうか調べる

AppleScriptでもいいですが、JXAだとワンライナーで完結していい感じです。


isAppRunning.js

const promisify = require("util").promisify;

const exec = require("child_process").exec;
const execp = promisify(exec);

const appName = "Slack";

(async () => {
const { stdout } = await execp(
`osascript -l JavaScript -e "Application('${appName}').running()"`
);
console.log({ stdout });
})();


注意点としては、返り値がBooleanっぽいけどStringだと言うことです。

上の書き方だと {stdout: 'true\n'}のような感じになります。

これ対策がよくわからなかった。

他にもいい方法があったらぜひ。調べてもあんまり見つからないんですよね。

たぶんSwiftが使えればもっとつおくなれる。