47
49

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Node.jsAdvent Calendar 2014

Day 5

atom-shellを雑に使って任意のnodeスクリプトが実行可能なアプリケーションとして配布する

Last updated at Posted at 2014-12-05

この記事は Node.js Advent Calendar 2014 - Qiita の5日目です。

atom-shellを使って、nodeつかった「アプリケーション」 -- そう、そのブラウザとかと同じような実行環境ですよ -- で配布する方法を紹介します。

今日紹介する方法は、チーム内でエンジニアじゃない人に渡してボタン押して実行してもらう、みたいなのを意図してます。

使えればいいという記事であって、この手続きで作ったものをプロダクションで配布したりとかはしないでください。

1. AtomShellをダウンロードして作業ディレクトリを作る

Resources/app以下にディレクトリを作ってそこで作業します。

ダウンロードはここから最新のやつを https://github.com/atom/atom-shell/releases

$ mkdir -p ~/Downloads/Atom.app/Contents/Resources/app
$ cd ~/Downloads/Atom.app/Contents/Resources/app
$ npm init

Macだと Atom.app/Contents/Resources/app ですが、Windowsだと Atom/resources/app になります。

2. AtomShell用のおまじないをする

$ npm init で雑にpackage.json生成

package.jsonのmainで main.js を指定。

次にAtomShellを起動させるための main.jsを書く。最小構成でこんな感じ。

var app = require('app');
var BrowserWindow = require('browser-window');
app.on('ready', function() {
  var mainWindow = new BrowserWindow({width: 800, height: 600});
  mainWindow.loadUrl('file://' + __dirname + '/index.html');
});

おまじないと思ってもらって大丈夫。ここはまだnode領域です。これはウィンドウサーバーみたいなもんです。

ここで同ディレクトリに 空のindex.htmlを作ってAtom.appを実行してみてください。起動出来ましたか?

こんなディレクトリ構成になってるはずです。

app/
  - package.json
  - main.js
  - index.html

確認したら Cmd+Q で終了してください

3. index.html でやりたいことを書く

この生成されたウィンドウ、npmのモジュールならなんでも呼べます。一部例外ありますが、まあ動きます。

たとえばnpmからexpressいれて実行してみます。

package.jsonのあるとこでいつものやつをうちます

npm install express

じゃあこれをウィンドウ側から読んでみましょう

<html>
<head>
<script>
var express = require('express');
function startServer(){
  var app = express.createServer();
  app.get('/', function(req, res){
    res.send('Hello World');
  });
  app.listen(3000);
}

</script>
</head>
<body>

<button onClick='startServer'>Start Server!</button>

</body>
</html>

ブラウザの中からexpressでサーバーを起動しています。主従関係が逆転したこの背徳感、堪らないですね。

この中から外部スクリプトを呼びたい場合、scriptタグで読んでもいいですが、ローカルパスへのrequireでも呼べます。つまりはなんでもアリです。

node-webkitと違って、細かいコンテキストポリシーありません。

注意点

ネイティブモジュールに依存する場合は、そのプラットフォームでビルド(npm install)する必要があります。WindowsならWindows, MacならMac.

それさえ守れば逆に言えばなんでもできます。

詳しく原理知りたい人は atom-shell/docs at master · atom/atom-shell

を読んでください。

次は n0bisuke さんです

47
49
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
47
49

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?