LoginSignup
4
3

More than 5 years have passed since last update.

@wakufactory さんの MarkDownDiagram を Electron で起動するようにしてみた

Last updated at Posted at 2016-08-13

@wakufactory さんの MarkDownDiagram は、Chrome、Safari や Firefox があれば、ローカルでブラウザのみで動作します。(Internet Explorer 11 では動作せず。)

職場の都合上、自由にブラウザをインストールできないため展開するだけで使える electron 化をしたかったので試してみました。

筆者の環境

Fork とブランチ作成

誠に勝手ながら、repository を Fork させていただき、use-electron というブランチを切りました。

yasumichi/MarkDownDiagram at use-electron

そしてローカルに clone して当該ブランチをチェックアウトしました。

$ git clone https://github.com/yasumichi/MarkDownDiagram.git (実際には SSH アクセス)
$ git checkout -b use-electron origin/use-electron

.gitignore の作成

Node.js を使用するにあたり、node_modules ディレクトリ以下などを git に無視してもらうために gitignore/Node.gitignore at master · github/gitignoreから、 .gitignore を拝借してきました。

$ git add .gitignore
$ git commit -m "message..."

npm 初期化

例のごとく、

$ npm init

package.json を作成しました。(個人的に最初からエディタで書くのは気が進まない :sweat_smile: )

name の入力時にデフォルト値を使用しようとすると

name: (MarkdownDiagram)
Sorry, name can no longer contain capital letters.

というように name に大文字は使えないよ、と怒られたので markdown_diagram にしました。

entry point は、js/main.js としました。

必要な node_modules の install

electron-prebuilt と electron-packager をプロジェクトローカルにインストールしました。

$ npm install --save-dev electron-prebuilt
$ npm install --save-dev electron-packager

メインプロセスの作成

先ほど、entry point に指定した js/main.js を作成しました。

単純に BrowserWindow を生成して、 index.html を読み込むだけだとダイアグラム部分が描画されませんでした。

View -> Toggle Developer Tools で開発者ツールを呼び出し、Console を確認すると以下のメッセージが出力されていました。

Uncaught ReferenceError: $ is not defined

jQuery がうまく認識できていないようです。

@pirosikick さんのElectronでjQueryがundefinedになるによるとレンダラプロセス側(index.html)で jQuery の読み込み方を変えるという方法も提示されていたのですが、これをやってしまうと普通にブラウザで開いた時に逆にダイアグラムが描画できなくなってしまいました。

メインプロセス側JSでBrowserWindowをインスタンス化する時のオプションに'node-integration': falseを追加する の方を試してみましたが、うまく行きません。

再度、本家の FAQ を確認してみることにしました。

I can not use jQuery/RequireJS/Meteor/AngularJS in Electron. の節を確認すると当時と作法が若干、変わってしまったようです。

// In the main process.
const {BrowserWindow} = require('electron')
let win = new BrowserWindow({
  webPreferences: {
    nodeIntegration: false
  }
})

上記のように nodeIntegration オプションが、webPreferences オプションの一部(?)になったようです。(個人的には、メソッドの最後に ; を付けないと落ち着かない… :sweat_smile: )

これで electron を使用した際もブラウザで読み込んだ際も問題なく、ダイアグラムが描画されるようになりました。

起動確認

$ ./node_modules/.bin/electron .

上記コマンドで起動確認をします。package.json の scripts に以下の様に記述を追加すると $ npm start でも起動できるようになります。

   "scripts": {
+    "start": "electron .",
     "test": "echo \"Error: no test specified\" && exit 1" 
   },

GitHub への反映

以下の手順で GitHub のリモートブランチへ反映しました。

$ git add js/main.js package.json
$ git commit -m "add files using electron"
$ git push

パッケージ作成例

以下は、Windows 32bit 環境向けにパッケージを作成する例です。(Linux 環境の場合、wineが必要です。)--pruneオプションにより、開発時にのみ必要な node_modules を含まないようにできます。

$ ./node_modules/.bin/electron-packager --platform=win32 --arch=ia32 --prune --asar=true --out=releases .

上記コマンドにより、 releases/markdown_diagram-win32-ia32 以下にパッケージが展開されます。アーカイブはされないので必要に応じ、zip などで圧縮してください。

:warning: 今の所、リリースパッケージは公開していません。

参考リンク(まとめ)

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3