Pebble 3.x を取り巻く開発環境


http://developer.getpebble.com/

いろいろ増えてきたのでまとめてみる。

## 用語

|用語|説明|
|:--|:--|
|Pebble Classic|初代のPebble、Pebble Steel, プラットフォーム名は **aplite**|
|Pebble Time|カラー対応したPebble Time, Pebble Time Steel, プラットフォーム名は **basalt**、SDK 3以上が必要|
|Pebble Time Round|丸型のPebble Time, プラットフォーム名は **chalk**、SDK 3.6以上が必要|
|Pebble 2|Pebble (Cassic)の後継、プラットフォーム名は **diorite**、SDK 4以上が必要|
|Time 2|カラー対応したPebble Timeの後継、プラットフォーム名は **emery**|
|Pebble Watchapp|Pebble本体側で実行するアプリ、iOS/Android側のスマホアプリPebble appを使ってPebbleにインストールする。時計のような機能が限定されたものはWatchfaceと呼ばれる|
|Pebble (mobile) app|[AppStore](https://itunes.apple.com/us/app/pebble-smartwatch/id592012721?ls=1&mt=8), [Google Play](https://play.google.com/store/apps/details?id=com.getpebble.android)で配布されている公式のiOS/Androidアプリ、接続するPebbleやインストールするPebble Watchappを管理する、開発中のPebble Watchappをインストールするためにはデベロッパーモードを有効にしておく必要がある|
|Pebble C|Pebble Watchappの開発でつかう
|Pebble.js|Pebble WatchappをJavascriptで記述できるフレームワーク|
|Simplyjs|簡単なPebble WatchappをJavascriptで記述できるフレームワーク|
|Companion Apps|Pebble Watchappと連動するiOS/Androidアプリ、開発者がPebbleKitを使って作成する|
|PebbleKit|iOS/Android側でPebble Watchappと連携するCompanion Appsを実装するためのSDK|
|PebbleKit JS|PebbleKitのJavascript版、スクリプトはPebble mobile appが取り出し実行する|
|CloudPebble|クラウド上のPebble Watchappの開発環境|
|Pebble appstore|Pebble Watchappのアプリストア|
|Pebble Developer Portal|Pebble appstoreで公開しているWatchappを開発者が管理するサイト|

## Pebble(Smartwatch)側

### Pebble C

* Pebble WatchappをC言語で実装する、Pebble 1.0からあるベースの開発環境
* 基本的にPebble SDKと言えばこれを指すと考えて良いと思われる
* Windows, Mac OS X, Linuxプラートフォームの[SDK/toolchain](http://developer.getpebble.com/sdk/)が公開されている(Python依存)
 * Mac OS XはHomebrewでインストールできる
 * 各プラットフォームのエミュレータが用意されている
* SDKをインストールしなくてもブラウザ上で開発できるClouldPebbleがある
* Pebble ClassicでPebble SDK 3.0以上でビルドしたWatchappを実行するにはFirmwareが2.9以上が必要
 * Pebble ClassicのFirmware 3.xがリリースされTimelineなどがサポートされた、これに対応するにはPebble SDK 3.8以上が必要
* C言語なので機種ごとに依存する対応は ``#ifdef`` で分岐する

### Pebble.js

https://github.com/pebble/pebblejs/

* Simplejsからの派生プロダクト
* Pebble WatchappをJavascriptで実装するためのツールチェイン
* ベータ版(2015/12時点)
* ClouldPebbleからも利用できる
* Pebble SDKを使って開発する場合は https://github.com/pebble/pebblejs/ のプロジェクトをforkして``src/js/app.js``を変更して使うことができる

### Simplyjs

http://simplyjs.io/

* シンプルなPebble WatchappをJavascriptで実装するためのツールチェイン
* 0.3ではテキスト表示や、バイブレーションなどが実行できる
 * 表示するテキストの位置などはだいたい決まっており自由なユーザインタフェースは実装できない
* 派生プロダクトのPebble.jsがあるため、もう機能追加はされないと思われる

### Rocky.js

https://pebble.github.io/rockyjs/

* Pebble FirmwareにJavascript Runtimeを載せようとするプロジェクト
* Pebble.js/SimplyjsはjavascriptのプログラムからPebble Watchappバイナリファイルを作成するプロダクトであるのに対して、Rocky.jsはjavascriptのプログラムを直接Pebble本体で実行することを目指している

## Mobile(Smartphone, Tablet)側

### PebbleKit

* [PebbleKit iOS](https://github.com/pebble/pebble-ios-sdk/), [PebbleKit Android](https://github.com/pebble/pebble-android-sdk/)が公開されている
* 開発者が自作のiOS/AndroidのネイティブアプリにPebble Watchappとやりとりする機能を実装できる
 * Pebble Watchapp側からはそのようなネイティブアプリをCompanion Appsと呼ぶ
* ネイティブアプリを用意しなくても済む[PebbleKit JS](http://developer.getpebble.com/docs/js/)がある

### PebbleKit JS

http://developer.getpebble.com/docs/js/


* iOS/Android側のPebble appで実行し、Pebble Watchappへデータを送る処理をJavascriptで実装するためのフレームワーク
* Pebble Watchapp単体で出来ないクラウドからデータを取得するような実装を追加することができる
* スクリプトはPebble Watchappに含め、Pebble appが取り出し実行するので別途ネイティブアプリを配布しなくて良い
 * ただしAppleがインターネットからダウンロードしたコードの実行を禁止しているため、iOSでは回避策として全てのWatchappのJSコードをPebble appに含めるという方式をとっている。したがって公式のPebble appが更新されるまでiOSではリリースしたPebble Watchappが公開されない
 * このPebble appの更新日は [Pebble JS Bundling Updates](http://forums.getpebble.com/discussion/12451/pebble-js-bundling-updates) で公開されている
* Pebble WatchappをJavascriptで実装するためのツールチェインではない
 * その目的のものは Simplyjs や Pebble.js の方

## IDE等

### CloudPebble

https://cloudpebble.net/

* Pebble Watchappを開発するためのクラウド上のIDE
* C言語だけなくPebble.js、Simplyjsにも対応している
* GitHubと連携することでリポジトリ管理もできるらしい
* Pebbleシミュレータを実行できる
* スマホのIPアドレスを入れることでPebble実機にインストールできる

### Atomエディタ

https://atom.io/

* [pb-completions](https://github.com/jneubrand/pb-completions) パッケージを使うとPebble Cのコード補完ができる

### Watchface Generator

* Pebble Watchappで時計機能だけ表示するwatchfaceを作成するツール
* 画像をアップロードして、時計の表示位置などの幾つかを設定することでアプリを作成してダウンロードできる
* Pebble Classic向け: http://www.watchface-generator.de/
* Pebble Time向け: http://www.watchface-generator.de/v3/


### Pebble Dash Docset

Macの[Dash (Docs & Snippets)](http://kapeli.com/dash)アプリ用のドキュメント。

Preferences > Downloads タブから **+** で以下のURLを追加してダウンロード。

```
http://partlyhuman.github.io/PebbleSdkDocset/Pebble.xml
```

参考: [SDK Documentation in Dash Docset](http://forums.getpebble.com/discussion/8270/sdk-documentation-in-dash-docset)

### その他

* [KiezelPay](https://www.kiezelpay.com/): Payment用のライブラリ
* [Clay for Pebble](https://github.com/pebble/clay): オフラインで動的に設定画面を作るライブラリ
* サンプルコード: https://developer.getpebble.com/examples/

## Pebble appstore


### Pebble appstore

https://help.getpebble.com/customer/portal/articles/1701779-pebble-appstore

* Pebble Watchappの公式なアプリストア
* 2014年2月ごろから公開
* Pebble app内から表示できる
* 有料販売には対応していない
* Pebble WatchappにはAndroid, iOSをサポートしているか、Companion Appsがあるか、などが情報で表示される
* 公開地域(国)を選択する機能はなく全世界のPebble Watchappが並ぶ
* Pebble appstoreは国際化に対応していないため基本的にPebble Watchappの説明は英語で記述する
 * それを気にせず母国語で説明を記述している開発者もいる
* Pebble Watchappは ``.pbw`` ファイルを公開することでPebble appstore以外で配布することは可能
* Pebble appstoreが後発であったため[My Pebble Faces](http://www.mypebblefaces.com/)のような非公式なギャラリーが存在する

### Pebble Developer Portal

https://dev-portal.getpebble.com/

* 開発者がPebble appstoreにPebble Watchappを公開する際に利用するサイト
* ここからPebble Watchappをアップロード(提出)したり、アプリの説明を記述したりする
* [Pebble Appstore Guide](https://dev-portal.getpebble.com/publish_to_appstore)がある
* 個々のPebble Watchappのパーマリンクが存在し、通常のブラウザで開くことができる
 * 開発者は自身のサイトで紹介ができる
 * Pebbleを購入する導線が用意されている

## まとめ

* Pebble Watchappの開発環境の構築は多少面倒なのでまずはCloudPebbleを試してみるのが吉
 * Mac OS XではHomebrewでPebble SDKがインストールできるようになり多少敷居は下がった
* スマホ側で実行する機能をJavascriptで書くものがPebbleKit JSでPebble側で実行する機能(Pebble Watchapp)をJavascriptで書くものがPebble.js
* Simplyjsの機能で済むなら、Simplyjs + PebbleKit JSを使いCloudPebbleで開発するのが一番手っ取り早い
* C言語の実装に抵抗がある場合はPebble.js + CloudPebbleを選ぶのも手、Beta版のリスクとのトレードオフ
* 既存のiOS/AndroidアプリのコンテンツをPebbleで表示したい場合はそのアプリのプロジェクトでPebbleKit iOS, PebbleKit Androidを利用して実装する
* クラウドでの開発に不安がある場合やエディタやソース管理を自分の方法で行いたい場合などはSDKを使って開発すればよい
* 単純な時計は Watchface Generator を使えば開発環境は不要
* Pebble Watchappを配布する環境として公式なPebble appstore、Pebble Developer Portalが用意されている
* Pebbleのプラットフォームが増えたためエミュレータが重宝する