Processing.jsを使ってみる （３）

## はじめに

[前回](http://qiita.com/Souj/items/fe8aa34f1b1339a94427)はブラウザでProcessing.jsを試しました。今回は、Fx0でProcessing.jsを試してみたいと思います。[Fx0](http://au-fx.kddi.com/products/)はFirefox OSを搭載しているスマートフォンで、ブラウザで動作しているWebページをアプリとして動作させることができます。

<img src="https://qiita-image-store.s3.amazonaws.com/0/72852/66a35082-618e-2d8b-252c-aae38c60d4df.jpeg" width="40%">

## アプリ化する
Webアプリとして動作させるにはHTML/CSS/JavaScript等の他に以下の２ファイルが必要になります。アイコンファイルはなくてもFirefox OSデフォルトのアプリアイコンが使われますが、あったほうが見栄えがいいですね。

・[マニフェストファイル](https://developer.mozilla.org/ja/Apps/Manifest)
マニフェストファイルはアプリを格納するフォルダの直下に置く必要があります。

```manifest.webapp
{
  "name": "ProcessingJS",
  "description": "Processing.js demo",
  "type": "web",
  "launch_path": "/index.html",
  "locales": {
    "en-US": {
      "name": "ProcessingJS",
      "description": "Web app Processing.js demo" 
    }
  },
  "icons": {
    "128": "/icon128x128.png" 
  }
}
```

・[128×128pxのアイコン](https://developer.mozilla.org/ja/Apps/Manifest#icons)
アイコンはアプリを格納するフォルダ内の適当な場所に置いて、場所をマニフェストファイルで指定します。
アイコン（icon128x128.png）は[Inkscape](https://inkscape.org/ja/)で作成しました。

![icon128x128.png](https://qiita-image-store.s3.amazonaws.com/0/72852/1b2d2b79-af64-56f0-8302-1cfe95aca98a.png)


## Fx0でProcessing.jsを動かす
Processing.jsを使ったアプリを作成してFx0で動かします。Processing.jsは二つの方法で実装できるので両方とも試します。

1. Processingのみを使う方法
1. JavaScriptと共にProcessingを使う方法

### 1. Processingのみを使う方法

#### 1.1 アプリの実装について
 
**ファイル構成**

|ファイル名|内容|
|:--|:--|
|processing.js|processing.jsライブラリ|
|index.html|エントリポイントとなるhtmlファイル|
|processing.pde|processing言語で記述されているファイル|
|manifest.webapp|マニフェストファイル。上の「アプリ化する」にて作成したファイル。|
|icon128x128.png|128×128pxのアイコン。上の「アプリ化する」にて作成したファイル。|

**index.html**

[前回](http://qiita.com/Souj/items/fe8aa34f1b1339a94427)のWebページにて動作させたときからviewportの定義を追加しています。

```html
<!DOCTYPE html>
<html>
<head>
  <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1">
  <meta charset="utf-8">
  <title>Processing Demo</title>
<script src="./processing.js"></script>
</head>
<body>
  <canvas data-processing-sources="processing.pde"></canvas>
</body>
</html>
```

**processing.pde**

```
void setup() {
  size(200, 200);
  background(125);
  fill(255);
  noLoop();
}

void draw() {  
  text("Hello World!", 20, 20);
}
```

#### 1.2 アプリの実行について

作成したアプリをFirefoxに標準で搭載されているWebIDEを使ってFx0にインストールします。

WebIDEで
①[プロジェクト]→[パッケージ型アプリを開く]で作成したアプリを格納したフォルダを指定する
②上部の再生ボタンを押してアプリをインストールし実行します

![webide.png](https://qiita-image-store.s3.amazonaws.com/0/72852/8e46ff98-05b1-6750-1324-b595f2ea4969.png)

アプリを実行すると以下の画面が表示されます
<img src="https://qiita-image-store.s3.amazonaws.com/0/72852/5e066a49-a439-ec6c-864c-8b9e03c694e5.png" width="30%">

アプリのインストールが成功するとホーム画面にアイコンが追加され、以後はアイコンタップによりアプリの起動ができます。

![app_install.png](https://qiita-image-store.s3.amazonaws.com/0/72852/7cda8bd3-9fce-b06e-f201-9908171db6af.png)

### 2. JavaScriptと共にProcessingを使う方法

#### 2.1 アプリの実装について

**ファイル構成**

|ファイル名|内容|
|:--|:--|
|processing.js|processing.jsライブラリ|
|index.html|エントリポイントとなるhtmlファイル。今回はprocessing.jsを使うJavascriptコードもこのファイルに記述します。|
|manifest.webapp|マニフェストファイル。上の「アプリ化する」にて作成したファイル。|
|icon128x128.png|128×128pxのアイコン。上の「アプリ化する」にて作成したファイル。|

**index.html**

```html
<!DOCTYPE html>
<html>
<head>
  <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1">
  <meta charset="utf-8">
  <title>Processing Demo</title>
  <script src="./processing.js"></script>
</head>
<body>
  <canvas id="canvas" width="200" height="200"></canvas>

  <script>
  function sketchProc(processing) {
    processing.setup = function() {
      processing.size(200, 200);
      processing.background(125);
      processing.fill(255);
      processing.noLoop();
    }

    processing.draw = function() {
      processing.text("Hello World!", 20, 20);
    }
  }

  var canvas = document.getElementById("canvas");
  var p = new Processing(canvas, sketchProc);
</script>

</body>
</html>
```

#### 2.2 アプリの実行について

アプリの実行方法は1.2と同様で、実行時の画面も1.2と同様でした。
<img src="https://qiita-image-store.s3.amazonaws.com/0/72852/3ea592f5-f1de-a7fc-07ed-50a1ad8d75c1.png" width="30%">

## おわりに
[前回](http://qiita.com/Souj/items/fe8aa34f1b1339a94427)、ブラウザで動作させたProcessingのコードをアプリ化してFx0（Firefox OS）でも同様に動作することが確認できました。次回はもう少し凝ったサンプルを動かしたいと思います。

[Processing.jsを使ってみる](http://qiita.com/Souj/items/6729925a0145372e3e51)
[Processing.jsを使ってみる （２）](http://qiita.com/Souj/items/fe8aa34f1b1339a94427)
[Processing.jsを使ってみる （４）](http://qiita.com/Souj/items/958ada020d2fdda2d2e6)