Pythonista 3 で双方向のファイル転送

# はじめに
　電車の中でプログラミングしようと思ってPythonista 3を1200円で購入。早速iPad Air2とiPod touchにPythonista 3をインストールしてみた。ホストPCにある既存スクリプトをPythonistaに取り込む方法が分からないので双方向のファイル転送の方法を調べてみた。

# StaShのインストール
　https://github.com/ywangd/stash を参照。
・まず次の1行スクリプトを実行する。

```python:
import requests as r; exec(r.get('http://bit.ly/get-stash').text)
```
インストールに成功すると次のように表示される。

```console:
Installation completed.
Please Restart Pythonista and run launch_stash.py under the Home directory to start StaSh.
```
・指示通りPythonista3を再起動(※)してからlaunch_stash.pyスクリプトを実行。UNIXコンソールのような画面に変わり、プロンプトが表示される。

```console:
StaSh v0.6.18
Tip: You can invoke almost any Python scripts, including UI and Scene, directly from StaSh
[~/Documents]$ 
```
※Pythonista3の再起動は、ホームボタンをダブルクリックしてタスクリストを表示してPythonista3のタスクを上にスワイプする。

# SSH on StaSh
　StaShのプロンプトをstash、リモートホストをhost、host上のユーザ名をuserとする。
・まずSSHの鍵を作成。デフォルトは1024bitのRSAなので2048bitにする。

```console:
stash$ ssh-keygen -t rsa -b 2048
```
・scpで公開鍵をホストに転送。ターゲットのパスは省略できない。

```console:
stash$ scp ~/.ssh/id_rsa.pub user@host:~/
```
・ホスト側で公開鍵を登録。

```console:
host$ cat id_rsa.pub >> .ssh/authorized_keys
```
・sshの接続テスト。初回実行時はpyteがインストールされる。

```console:
stash$ ssh user@host
```

# SCP on StaSh
　この記事の本題。上記でSSHの公開鍵認証が設定されていれば簡単にできる。
・デバイス→ホストPC

```console:
stash$ scp file.py user@host:~/
```
・ホストPC→デバイス

```console:
stash$ scp user@host:~/test.py .
```

# Git on StaSh via HTTP
・clone：ローカルのディレクトリを指定しないと直下にファイル展開してしまうので注意する。

```console:
stash$ git clone https://github.com/username/repositry.git mydir
```
　初回起動時はdulwichのインストールを促される。

```console:
dulwich was not found. Will attempt to download.
Neet to download dulwich. OK to download [y/n]? y
```
・add：ドット「.」は使えない。ファイルを明示する。

```console:
stash$ git add file.py
```
・status：STAGEDとUNSTAGEDが表示される。

```console:
stash$ git status
STAGED
modify['file.py']
UNSTAGED LOCAL MODS
[]
```
・commit：初回は名前とメールアドレスの登録を促される。

```console:
stash$ git commit "comment"
Author Name: MyName
Save this setting? [y/n]y
Author Email: user@domain
Save this setting? [y/n]y
```
・push：GitHubのユーザ名とパスワードを聞かれる。

```console:
stash$ git push
Attempting to push to: https://github.com/username/repositry.git, branch: refs/heads/master
Enter username: username
Enter password: password
Push to https://username:password@github.com/username/repositry.git successful.
success!
```

# Git on StaSh via SSH
・公開鍵のGitHubへの登録
　公開鍵をクリップボードにコピー
```console:
stash$ cat ~/.ssh/id_rsa.pub
ssh-rsa AAA ...(省略)...
 ...(省略)... KIQ==
```
　長押ししてSelect→ssh-rsaから==までを範囲選択→Copy
　ブラウザでGitHubにログインして公開鍵を登録
　　Settings→左メニューのSSH and GPG keys→New SSH keyボタン
　　　Title: iPad Air 2
　　　Key: (長押ししてペースト)
　　Add SSH keyボタンを押す。

以降はHTTP経由とほぼ同じ(パスワードを聞かれない:-)。

・clone：ローカルのディレクトリを指定しないと直下にファイル展開してしまうので注意する。

```console:
stash$ git clone git@github.com:username/repositry.git mydir
```
　今回は初回起動時ではないのでdulwichのインストールはない。

・add：ドット「.」は使えない。ファイルを明示する。

```console:
stash$ git add file.py
```
・status：STAGEDとUNSTAGEDが表示される。

```console:
stash$ git status
STAGED
modify['file.py']
UNSTAGED LOCAL MODS
[]
```
・commit：今回は名前とメールアドレスは登録済みなので聞かれない。

```console:
stash$ git commit "comment"
```

・push：今度はパスワードを聞かれずに出来た！

```console:
stash$ git push
Attempting to push to: git@github.com:username/repositry.git, branch: refs/heads/master
Push to git@github.com:username/repositry.git successful.
success!
```

# Git on StaSh via SSH (GitLab編)
　無料でプライベートなリポジトリを作りたかったので[GitLab](https://gitlab.com/)も使うことにした。
　落書き状態の恥ずかしいコードはこちらがお勧めです。

・公開鍵のGitLabへの登録
　公開鍵をクリップボードにコピー
```console:
stash$ cat ~/.ssh/id_rsa.pub
ssh-rsa AAA ...(省略)...
 ...(省略)... KIQ==
```
　長押ししてSelect→ssh-rsaから==までを範囲選択→Copy
　ブラウザでGitLabにログインして公開鍵を登録
　　Settings→上メニューのSSH Keys
　　　Key: (長押ししてペースト)
　　　Title: iPad Air 2
　　Add keyボタンを押す。

以降はGitHubと全く同じなので省略。

# 以上