Top Banner
Webアプリを Electronに乗せる 第9回 HTML5minutes! 〜triton-js〜
40

WebアプリをElectronに乗せる

Aug 08, 2015

Download

Technology

Hiroyuki Anai
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: WebアプリをElectronに乗せる

Webアプリを Electronに乗せる

第9回 HTML5minutes! 〜triton-js〜

Page 2: WebアプリをElectronに乗せる

@pirosikick

穴井 宏幸 リッチラボ株式会社 エンジニア

(ぴろしきっく)

Page 3: WebアプリをElectronに乗せる

提供

Page 4: WebアプリをElectronに乗せる

• Yahoo! JAPANの子会社

• 社内ハッカソン(HackDay)から誕生

• スマフォのリッチ広告

• http://www.advertimes.com/20150420/article189401/

Page 5: WebアプリをElectronに乗せる

今日の話すこと

Page 6: WebアプリをElectronに乗せる

• Electronのざっとした概要

• easy-video-mapping.comのElectron版を開発中

• 躓いたとこと、その解決法など。

Page 7: WebアプリをElectronに乗せる

Electronのロゴ

http://electron.atom.io/

Page 8: WebアプリをElectronに乗せる

• Github社製

• HTML・CSS・JSでデスクトップアプリが作れる

• Atom、Slack、Kobitoとかで採用

Page 9: WebアプリをElectronに乗せる
Page 10: WebアプリをElectronに乗せる

簡単なサンプル

Page 11: WebアプリをElectronに乗せる

Hello! World

Page 12: WebアプリをElectronに乗せる

index.html

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Hello! World</title> </head> <body> <h1>Hello! World</h1> </body> </html>

Page 13: WebアプリをElectronに乗せる

var app = require('app'); var BrowserWindow = require('browser-window');

// Report crashes to our server. require('crash-reporter').start();

var mainWindow = null;

// ready: Windowを作る準備が出来た時に呼ばれる app.on('ready', function() { // 800x600のWindowを生成しindex.htmlをロード mainWindow = new BrowserWindow({width: 800, height: 600}); mainWindow.loadUrl('file://' + __dirname + '/index.html');

// ウィンドウが閉じた時 mainWindow.on('closed', function() { mainWindow = null; }); });

// 全てのウィンドウが閉じた時 app.on('window-all-closed', function() { if (process.platform != 'darwin') app.quit(); });

main.js

Page 14: WebアプリをElectronに乗せる

package.json

{ "main": "main.js" }

Page 15: WebアプリをElectronに乗せる

Electronのバイナリをインストール

// Global npm install electron-prebuilt -g

// npm install electron-prebuilt --save-dev

Page 16: WebアプリをElectronに乗せる

起動

// Macの場合 $ ./node_modules/electron-prebuilt/dist/Electron.app/Contents/MacOS/Electron .

Page 17: WebアプリをElectronに乗せる

• メインプロセス(main.js)でBrowserWindowを作る

• BrowserWindowはブラウザなのでHTML/JS/CSSが動く

• ブラウザ側でNode.jsが動く

Page 18: WebアプリをElectronに乗せる

ブラウザ側で Node.jsのパッケージをrequireして実行できる

Page 19: WebアプリをElectronに乗せる

http://easy-video-mapping.com/

Page 20: WebアプリをElectronに乗せる

• WebGLでプロジェクションマッピング

• 画像・動画等を変形させてマッピングする

Page 21: WebアプリをElectronに乗せる
Page 22: WebアプリをElectronに乗せる

サーバサイド無しだし、ソースをコピーすれば そのまま動きそう!

Page 23: WebアプリをElectronに乗せる
Page 24: WebアプリをElectronに乗せる

jQueryがundefined

Page 25: WebアプリをElectronに乗せる

ElectronでjQueryがundefinedになる

Page 26: WebアプリをElectronに乗せる

• ブラウザにmodule.exportsが存在する

• jQueryがCommonJS経由でロードされたと勘違い

Page 27: WebアプリをElectronに乗せる

requireでロードして 自分でwindow.jQuery, window.$を定義する

<!-- <script src="lib/jquery.js"></script> --> <script> window.jQuery = window.$ = require('./lib/jquery'); </script>

※browserifyやwebpackでbundleする方が楽かも

Page 28: WebアプリをElectronに乗せる

skywayが動かない

Page 29: WebアプリをElectronに乗せる

http://nttcom.github.io/skyway/

Page 30: WebアプリをElectronに乗せる
Page 31: WebアプリをElectronに乗せる

• WebRTCのP2Pで動画取得

• WebGLのテクスチャとして利用する

Page 32: WebアプリをElectronに乗せる

• Electronからskaywayに接続できない。。。

Page 33: WebアプリをElectronに乗せる

Electronでskayway.ioを使う

Page 34: WebアプリをElectronに乗せる

• XHR・WebSocketのOriginヘッダーが「file://」になりskywayに弾かれる

• node.jsからOriginヘッダーを書き換えリクエスト

• skyway-peerjs-electron

Page 35: WebアプリをElectronに乗せる

デモ(時間があれば)

Page 36: WebアプリをElectronに乗せる

まとめ・その他

Page 37: WebアプリをElectronに乗せる

• サーバサイドが無ければElectronに乗せるのは楽

• XHRのOriginが「file://」になるので注意

• Node.jsのコードが動くので割りとなんでもできる

Page 38: WebアプリをElectronに乗せる

• 配布までにはまだまだ作業が必要

• Cmd+Cでコピーや、 を押下時にフルスクリーンなど、自分で実装する必要がある

Page 39: WebアプリをElectronに乗せる

提供

Page 40: WebアプリをElectronに乗せる

Thanks:)