Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
8
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

@akameco

electronにおけるコマンドライン引数の位置とパーサ

electronで起動する場合と、ビルドしたアプリでは引数の位置が変わる。

Electron で起動する場合

$ electron . 引数...

パッケージで起動する場合

$ sample-app 引数...

これは以下の記事で言及されている。

SeaPig 開発中の困ったメモ - Qiita

以前書いたアプリでは開発環境の場合のみ、引数を2つにするようにし、それをminimistでパースして使っていた。

const minimist = require('minimist');
const args = minimist(process.argv.slice(process.env.NODE_ENV === 'development' ? 2 : 1));

ただ、パースだけしても--versionとか--helpとか基本的な処理を毎回書きたくないので、electron用のコマンドラインヘルパを作成した。

akameco/electron-args: CLI helper for electron

インストール

$ npm install --save electron-args

使い方

以下の例はコマンドラインの引数でqiitaかgithubのユーザページを開くサンプル。

'use strict';
const electron = require('electron');
const parseArgs = require('electron-args');

const cli = parseArgs(`
    sample-app

    open github or qiita

    Usage
      $ sample-app [path]

    Options
      --help       show help
      --version    show version
      --github,-g  open github [Default: true]
      --qiita,-q   open qiita [Default: false]

    Examples
      $ sample-app akameco
      $ sample-app akameco --qiita
`, {
    alias: {
        h: 'help',
        q: 'qiita',
        g: 'github'
    },
    default: {
        qiita: false,
        github: true
    }
});

console.log(cli.flags);
console.log(cli.input[0]);

if (!cli.input[0]) {
    console.log('input required');
    process.exit(1);
}

electron.app.on('ready', () => {
    const win = new electron.BrowserWindow({width: 800, height: 600});
    const target = cli.flags.qiita ? 'https://qiita.com/' : 'https://github.com/';
    win.loadURL(target + cli.input[0]);
});

戻り値のオブジェクト

input: フラグなしの入力
flags: フラグ
help: ヘルプのテスト。--helpで出力してアプリを終了する。

electronもしくはelectron-prebuildから起動されているかで引数の数を調整。

パーサはminimist。第二引数はminimistのオプションなので、defaultaliasを設定可能。

--versionとすれば、electronのアプリのapp.getVersion()で得られるバージョンを出力する。

あとは、jsなので基本的にキャメルケースがうれしいので、--fuga-hogeみたいなのをfugaHogeと得られる。

注意点

app.on('ready')より前に書くこと。
electronが起動してしまうと出力が奪われて、console.logがターミナルに出力されない。

参考

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
8
Help us understand the problem. What are the problem?