Pebble-SDKをWSLのUbuntu18.04に構築

## これは何ですか？
パイソン？？なにそれ牛鬼？？？な知識０ド素人が表題を達するまでのエラー対処をベースに、これからpebbleに手を出すwin環境の人たちが少しでも気軽に開発へ手を出せるよう１～９．６くらいまでを覚え書いた、**ド素人向け**メモ。
目的はあくまで**環境の構築**であり、正しい知識・手順の教示ではありません。
そのため、素人解釈・発言が山程ありますので、事前にバックアップなど、**作業はすべて自己責任の下で行ってください。**
###修正録###
2020-02-17：赤っ恥も良いところだったので大幅に修正しました。私みたいな素人の役に立ってくれれば嬉しいの気持ち。基本的に追記のみです。
2020-08-15：環境再構築に伴い備忘録としてみたらめちゃくちゃ読みにくかったので表現の統一や修飾の追記などを行いました。

## インストールする環境
* windows10 Education 64bit 1909 build18363.535（実質Proと違い無いはず?）
* Core-i5-5200U<br>
RAM 4GB
* WSL
* Ubntu18.04LTS

## 手順と参考にしたもの
普通ならrebbleから手順読んでインストールするのがベストですが当然リンク切れetcで無理でした。
有志により様々なインストール用のガイドやシェルスクリプトが公開されていますが、どれも微妙に足りなかったり何か違ったりします。
そこで、下記のシェルスクリプト
1. [Install Pebble SDK with patch to Ubuntu 64bit](https://gist.github.com/gitcrtn/2ccbfccce317c04ef2dedef5b66b824a)
と、これをもとにインストール方法を解説してくださっている下記サイト様を参考に手順としました。
2. [生活試行](https://or1eq1.com/wpp/archives/397)
これら2つをベースに、実際にあったトラブルと細かな手順を以下に覚え書きます。

## WSLの有効化とubuntuの準備
1. 上記サイトのとおり進めるか、powershellを管理者権限で開いて    

```
PS> Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
```
を実行。<br>
2. windowsストアからUbuntu18.04LTSをインストール。スタートメニューからUbuntuを起動し、ユーザー名とパスワードを作成。<br>
3. Ubuntuのアップデート

```
sudo apt update
sudo apt dist-upgrade -y
```
途中紫の画面ではい[y]かいいえ[n]を聞かれるが、確か「アップデート中のシステムリブートをコマンドなしで承認するか」どうかだったはず。[y]でOK、待つ。<br>
4. zipファイルの解凍用パッケージのインストール<br>

``` 
sudo apt install unzip
```

これで`unzip [ファイル名.zip]`が解凍できるようになります。<br>
5. タイトルバーを右クリックし、プロパティ＞オプションで「Ctrl+shift+Vでコピペを有効にする」にチェックチェック。<br>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/573787/e78df6fe-586c-1626-483a-03971d705041.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/573787/5f57cb0a-5c12-1275-11b7-19af5eb4f49e.png)<br>
Ubuntuではwindows標準の「Ctrl+C/V」によるコピペができないので、これを設定しておかないと素人的には色々不便です。

これで、準備は整いました。

## python-pipとPython2.7のインストール
Python2.7とpipコマンドを使えるようにします。

```
sudo apt install python-pip python2.7-dev
```

## virtualenvのインストール
第一の難関、virtualenvのインストール。
**シェルスクリプトでもインストールされる記述がありますが、事故を起こす可能性が非常に高いので手動で確実にインストールします。**

```
sudo pip install virtualenv
```

実行して終了したら、

```
which virtualenv
```

を実行。
正常にインストールされていれば、

```
/home/[ユーザー名]/.local/bin/virtualenv
```

と表示されます。
もし、

    Traceback (most recent call last):
    File "/usr/local/bin/virtualenv" , line7, in <module>
    from virtualenv.main import run_with_catchImport
    ImportError : No module named main

と出た場合、うまくインストールされていないので、
`sudo pip install virtualenv`で再インストール。
`/home/[ユーザー名]/.local/bin/virtualenv`が出るまで挑戦。
※2,3度やっても成功しない場合はUbuntuを再インストールした方が早かったです。

## shファイルのダウンロード
シェルスクリプトのダウンロード。vimでコピペするとだいたい改行とか誤操作で躓く（上記サイトにも注意書きあるのに私はvimして躓いた）ので**必ずzipでダウンロード**すること。

```C
mkdir ~/download/ //（ファイルが散らばるのが嫌いな人は適宜）
cd ~/download/
wget ["zipのURL"]//（ここで`Ctrl+Shift+V`による貼り付けが約立ちます）
unzip ["ダウンロードしたzipファイル名"]
```

ファイルを解凍すると英数字のファイル名で生成されるのでリネームなりしたほうが良いかもしれないですね。
一応、中に**install_pebble_sdk.sh** と**try_install_face.sh**があるのを確認します。


## 中身の書き換え
このシェルスクリプトを実行すれば完了ですが、一部に修正が必要なので`vim`コマンドを使って書き換えます。
1. install_pebble_sdk.shがあるディレクトリで

```
vim install_pebble_sdk.sh
```

を実行。中身が羅列されるので、「ｉ」を入力して編集モードへ<br>
2. 25行目あたり

```
virtualenv --no-site-packages .env
```

 という記述内容から、

```
virtualenv .env
```
--no-site-packagesを削除し上記のように書き換えます。
※現在は--no-site-packagesのオプションを使うとエラーが出るため。<br>
3. escキーで編集モードから抜けます。
4. 大文字「ZZ」を入力して上書き保存し終了。

## シェルスクリプトの実行
第二の難関、.shの実行。
何度も言いますが私は素人、いわゆる**Shebang(シバン)**を知らないまま
`sh install_pebble_sdk.sh`を実行してしまいました。
**シバン**というのはスクリプト/ソースコードの1行目に記述されるもので、.shファイルをコマンドとして実行する際に、**マシンにどの言語(?)で実行させるか**を指定しているらしいです。
今回、.shファイルの一行目はこの通り。

    #!/usr/bin/env bash    

つまりこれは**`bash`**を使ってスクリプトを実行しなさいよという意味ですね。


    bash install_pebble_sdk.sh

分かったところで、bashコマンドで実行。しばらく待ちます。
途中何度かy/nの選択が出ますが、例によってディスク容量食うぞという確認なので全てy。

## ~~shではなくbash~~　shで実行して失敗
成功のような失敗例の話(早く構築したい人は飛ばしてOK)。
先に述べたとおり、`sh install_pebble_sdk.sh`を実行して失敗した例です。

    Successfully installed backports.ssl-match-hostname-3.4.0.2 colorama-0.3.3 enum34-1.0.4 gevent-1.1.1 gevent-websocket-0.9.3 greenlet-0.4.15 httplib2-0.9.1 libpebble2-0.0.26 netaddr-0.7.18 oauth2client-1.4.12 packaging-16.7 peewee-2.4.7 progressbar2-2.7.3 pyasn1-0.1.8 pyasn1-modules-0.0.6 pygeoip-0.3.2 pyparsing-2.4.6 pypkjs-1.0.6 pypng-0.0.17 pyqrcode-1.1 pyserial-2.7 python-dateutil-2.4.1 requests-2.7.0 rsa-3.1.4 sh-1.9 six-1.9.0 virtualenv-13.1.0 websocket-client-0.32.0 wheel-
横に長く一見すると成功したようですが、sdkに必要なパッケージの一部がインストールされただけで、肝心のpebble-sdkのインストールまでこぎつけていないパターン。
このあとすぐリセットしてしまったので正しい解法は不明ですが、おそらくvirtualenvのインストールでコケていた模様です。
~~ここでふと、`sh`ではなく`bash`でshを動かすことを思い出し、ダメ元で`bash install_pebble_sdk.sh`しました。
するとあら不思議、上記successfully～～～以降のプロセスもスルスル進んでいきました。~~
**`bash`で動かすべきスクリプトなので成功して当たり前でした。**
本当にvirtualenvがインストールできていなかったのか、shだから失敗したのか不明ですが、とにかく失敗です。`bash`で上書きしたらどうなるかわからないので、大人しくUbuntuを再インストールしたほうが良いです。

## エラーの無視と~~bashによる~~成功
ここから先はbashで.shを動かした結果になります~~が、shで動かしても同じになる模様~~。
同じになりません。失敗します。しました。

**スクリプトの進行を見守っていると、前述のvirtualenvインストールに成功していても途中で下記のエラーが出力されている場合があります（スクリプト自体は進行し続ける）。**

    Traceback (most recent call last):  
    File "/usr/local/bin/virtualenv" , line7, in <module>
    from virtualenv.main import run_with_catchImport
    ImportError : No module named main

**私の場合は無視して実行したところ最後まで無事にインストールできたので、一度無視して進めてみるのも手・・・かもしれません(責任は負いません)。**

~~しばらく待つ。私待～つ～わ、いつまでも（ｒｙ~~
途中何度か「ディスク容量食うよ」という旨の[y/n]を聞かれるので、待ってないで適宜[y]で進めましょう。

    use v12.14.1
    patching file pebble_tool/account.py
    patching file pebble_tool/commands/sdk/__init__.py
    patching file pebble_tool/commands/sdk/manage.py
    patching file pebble_tool/sdk/manager.py
    patching file pebble_tool/util/analytics.py

流れるログが止まり、最後の方に上記メッセージが出れば成功。パッチ当てに成功したという旨のログ（多分。
これ以外の何かが出力されればそれは失敗なので、順番に洗いましょう・・・と言いたいのですが、私が確認できたエラーはsh→bashで解決、virtualenvインストールの失敗、そもそもここまでの手順だと一発でできたことにより解説できることがほぼ無いです。
逆に言えばこの手順なら誰でもできる？？？
別環境で挑戦して、適宜追記します。

**2020-02-17追記**
Windows10 Pro 64bit環境のSurfacePro4にもインストールできたので、`bash`とvirtualenvでこけなければ誰でもできそうですね。

## Pebble-SDKのインストール~~を確認する~~

適当なディレクトリで

    pebble --version
を実行（この段階で、pebbあたりでtabキーを押すとpebbleが予測で出てくるハズ）。

もはやここまで来ると基のサイト様をそのままなぞるだけになりますが、一点。
初めて`pbble --version`や`pebble new-project [プロジェクトの名前]`を実行した際、`opt in to this collection`がどうのこうの表示されます。
![pebble.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/573787/2f2079fe-f8f6-d3c4-a700-af659de203c4.png)<br>
これはかつてpebbleがサービス稼働していた時代、pebble側でユーザーが何作ってるかなどを収集しており、それに同意するかどうかを訪ねているわけですね。
今となっては収集する側が居ないので、どちらでも良いです。
(画像ではSDKコアがまだ入ってないので、`pebble Tool v4.5`で終わってます。)

**SDKコアのインストール**
[y/n]の選択後、`NO SDK installed`の表示とともにSDKコアのインストールが開始されます。始まらない場合は

    pebble new-project [適当な名前]
を実行。
途中ライセンスに同意するかどうかを聞かれるので、rebbleなどで読んでから[y]。
そこそこ時間がかかるので、今度は本当に待ちます。
![pebble2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/573787/2c276670-a901-5a5d-190c-46b4ea0fd9d4.png)<br>
new project＝新しいアプリ雛形の作成に成功すればSDKコアもインストール成功です。
ちなみに、新規で作ったプロジェクトのフォルダやファイルは、`pebble new-project`コマンドを実行したディレクトリに生成されるので、予めフォルダなどを作っておいたほうが良いかもですね。

一応`pebble --version`でバージョン確認。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/573787/569a82c1-8d84-145f-15b0-f1770323faf4.png)
**こんな感じに出てきたら完っ全にフルハウス、成功です。お疲れさまでした。**

###どこかで失敗のパターン###
もし、v4.5の後に`no SDK installed`のような記述があれば失敗なので~~ubuntuを再インストールするなどして、再度１からやったほうが素人には早いです。~~
**もう一度`pebble new-project [任意の名前]`を実行してSDKインストールしてみましょう。私はこれでできました。**
`command not found`、もしくは`Pebble Tool v4.5`しか出ない(active SDK～が無い)場合は、手順にしたサイト様にも解説があるように

    source .bashrc
を実行し(て環境変数をリロードし)て、再度`pebble --version`してみます。

次に別のエラーの例。
先の項のパッチが当たったよという旨のログで、何回目かの挑戦の際、末尾に
`install_pebble_sdk.sh: 152: install_pebble_sdk.sh: source: not found`が発生し、インストール確認の際にsdkコアが入ってない旨が表示されました。
.shファイルの152行目は`source $HOME/.bashrc`なので、virtualenvが原因な気がして何度か`sudo pip install virtualenv`しましたが結局変わらずだったので、やり直しました。明確な原因は不明です。
**これもおそらく`sh ~~.sh`で動かした弊害かと思われますが詳細不明。**
それ以外のエラーと以降については、参考の項で上げたサイト様にあるエラー確認と手順を踏めば、問題なく確認できるはずです。

# 総括
知識０の素人が手を出して大やけどしたけど最終的に回復したのでオッケー。シバンについても良いお勉強になりました。
して、開発環境は整ったものの、依然としてエミュレーター関係は動かないし、そもそも環境作ったところでPythonもCもjsも読めない書けない作れない。
結果として成功したからいいものの、下手したら今でもエラーに飲まれていた可能性があったわけで。
それでもここに至るまで、意味不明なエラーと流れるログは、ストレスまみれの現実社会を忘却の彼方へ葬り去ってくれました。ハマできる何かがあるって素晴らしい。
落ち着いたら今度はペブルウォッチ本体への接続とアプリのインストールもまとめたいですね。

最後になりましたが、`生活試行`様および`reddit`、`スクリプトの作者`の皆様、色々お教えくださった`青鳥の某御方`、ありがとうございました。