iPad Pro 2018での開発環境の構築

## 前書き
　＠willsmileです．Qiitaの初投稿のため，簡単に自分について語ります．本業はEduTech企業のエンジニアですが，院生時代，教育関係（学習科学/教育工学）に関する研究を経験し，人間の学習に関する事象の背後にある原理/原則を解釈（妄想）することは趣味です．これに関して，自分の考えを書き出して，他人のフィードバックを貰えるように，Medium（後でリンクを貼り付け）で発信しています．
狙い
　2019年9月末から，iPad Proを普段個人の文章作成と情報管理ツールを導入し，愛用しています．勿論，本文でもiPadでのScrivener（Mac版とDropbox経由で同期）を使って作成しました．PC/Macより，iPad Proを使う一番目のメリットがポータビリティだと思います．それを得るために，トレードオフとして，アプリ/ツールを選択する範囲が縮められることです．
　これと“対抗”するために，自身のアイデアを記事するアプリ/ツールはOSと依存しないあるいはCross-platformのものに切り替えることを行いました．学び中の新しい開発技術を試したい，あるいは個人の開発プロジェクトに小さい改善を加えたい時に使える「開発環境」もiPadでできれば便利かなと思いつつ，いろいろ調べてから得た3つのやり方を紹介します．

## 本題
### 1．Pythoisa
URL: http://omz-software.com/pythonista/
適用対象：Pythonがメインな方
　実際に，適用対象である方の中で，多分Pythonistaを知っている人が多いと想定するため，Pythonista自体の紹介を省略します．
　一点の懸念事項だけを共有すると，使用できるPython Moduleが限定されているらしいです．詳細は[公式ドキュメント] (http://omz-software.com/pythonista/docs/ios/index.html)に載せられています．他のModuleにも使いたい場合，[Stash](https://github.com/ywangd/stash)というツールを使うことをおすすめします．
### 2. Blink Shell + Remote Server
URL: https://www.blink.sh
適用対象：リモートにあるサーバと繋いて作業する方
　このアプリの面白いところは，なんとopen sourceになっています！というのは，ソースコードのレベルでいろいろカスタマイズして，自分のMacでBuildして，使えることも可能です！（作成者たちに感謝するために，Appstoreにも購入してからやるけど）
　詳細の使い方は，下記のようないろな方が書かれた記事に参考してください．一つの注意点を共有すると，ほとんどのiPad Pro専用のキーボードにはEscキーがいないです．そうすると，Blinkを用いて，ViｍなどのText Editorを使う時に不便になるので，configコマンドでSettingsを開いて，「Keyboard」のところに，Escを代替するキー（Caps/Shift/Backquote）を選択するという操作をやっておいたほうがよいと考えます．

使い方に関する記事：
https://medium.com/@TehBrofessor/ipad-pro-remote-station-part-1-55520445b2b6
https://arslan.io/2019/01/07/using-the-ipad-pro-as-my-development-machine/

### 3. Blink + Raspberry Pi
適用対象：Raspberry Pi 4あるいはPi Zeroを持つ方
注：本説明でのやり方は100パーセント[Ben Hardillさんの記事](https://www.hardill.me.uk/wordpress/2019/11/02/pi4-usb-c-gadget/)に参考して，**そこからのやり方をわかりやすく説明するだけで，オリジナルなことが一切ない**です．

#### 前提条件
- デバイス：Raspberry Pi 4
- OS：Raspbian Buster (Debian 10 based)
 - 筆者普段は，Pi 4に[Archlinux ARM](https://archlinuxarm.org/platforms/armv8/broadcom/raspberry-pi-4)を入れて使用するが，このために，Raspbianを新しいmicro SDカードに入れて使用する．

#### 事前準備：
- Bootloaderを最新にすること
- 手順：https://www.raspberrypi.org/documentation/hardware/raspberrypi/booteeprom.md
- 理由：最近のアップデートにより，Pi 4がlow power mode，network boot，data transfer over USB-C portといった機能が使えるようになるから
- Raspbianで，SSHをOnにすること
 - 手順：https://www.raspberrypi.org/documentation/remote-access/ssh/

#### 設定手順：
注：以下の〇〇の追加には，場所を指定しない場合，それが宣言型の設定ファイルなので，どの行でも書き込んでも良いということです．

- /boot/config.txtに，dtoverlay=dwc2を追加する．
- /boot/cmdline.txtの最後の行に，modules-load=dwc2を追加する．
- /etc/modulesに，libcompositeを追加する．
- /etc/dhcpcd.confに，denyinterfaces usb0を追加する．
- パッケージ dnsmasqをインストールする．

```
sudo apt-get install dnsmasq
```

- その設定ファイル（/etc/dnsmasq.d/usb）を新規作成して，以下の内容を書き込む．

```
interface=usb0
dhcp-range=10.55.0.2,10.55.0.6,255.255.255.248,1h
dhcp-option=3
leasefile-ro
```

- そして，ネットワーク設定ファイル（/etc/network/interfaces.d/usb0）を新規作成して，以下の内容書き込む．

```
auto usb0
allow-hotplug usb0
iface usb0 inet static
  address 10.55.0.1
  netmask 255.255.255.248
```

- 最後に，起動時に使うスクリプト（/root/usb.sh）を新規作成して，以下の内容書き込む．

```bash
#!/bin/bash
cd /sys/kernel/config/usb_gadget/
mkdir -p pi4
cd pi4
echo 0x1d6b > idVendor # Linux Foundation
echo 0x0104 > idProduct # Multifunction Composite Gadget
echo 0x0100 > bcdDevice # v1.0.0
echo 0x0200 > bcdUSB # USB2
echo 0xEF > bDeviceClass
echo 0x02 > bDeviceSubClass
echo 0x01 > bDeviceProtocol
mkdir -p strings/0x409
echo "fedcba9876543211" > strings/0x409/serialnumber
echo "Ben Hardill" > strings/0x409/manufacturer
echo "PI4 USB Device" > strings/0x409/product
mkdir -p configs/c.1/strings/0x409
echo "Config 1: ECM network" > configs/c.1/strings/0x409/configuration
echo 250 > configs/c.1/MaxPower
# Add functions here
# see gadget configurations below
# End functions
mkdir -p functions/ecm.usb0
HOST="00:dc:c8:f7:75:14" # "HostPC"
SELF="00:dd:dc:eb:6d:a1" # "BadUSB"
echo $HOST > functions/ecm.usb0/host_addr
echo $SELF > functions/ecm.usb0/dev_addr
ln -s functions/ecm.usb0 configs/c.1/
udevadm settle -t 5 || :
ls /sys/class/udc > UDC
ifup usb0
service dnsmasq restart
```

- 以下のコマンドを使って，このスクリプトを実行できるようになる．

```
chmod +x /root/usb.sh
```

- 起動に関する設定ファイル（/etc/rc.local）に，「exit 0」行の前に，下記を追加する．

```
sh /root/usb.sh
```

　ここまで，全部の設定は完了です．Pi 4を再起動して，USB-CケーブルでiPad Proと接続して，iPadから電力を提供する同時に，ローカルデータ通信で，Pi 4と繋いてみましょう．うまくいく場合，以下のイメージのように，iPadのSettingには，「Ethernet」が表示されます．上記の設定によると，Pi 4自身が固定IPアドレス（10.55.0.1）で設定され，Pi 4とつなぐデバイス（iPad Pro）にIPアドレス範囲（10.55.0.2~10.55.0.6）にアサインされます．Blinkを使って，下記のコマンドで，Pi 4をアクセスすることができます（Piデフォルトユーザを使う場合，yourusernameをpiにする）．

```
ssh yourusername@10.55.0.1
```
![iPad_connect_with_Pi4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256687/ccd36863-3b60-ab9f-d523-d2234f01ce17.png)
![Blink_with_Pi4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256687/a51b4ad5-8ecc-c6b7-b2f6-504e2729c005.png)

#### 注意点：
- Raspberry Pi 4の熱すぎ問題を解決するために，外付けのFanを購入・使用する方が多くて，このやり方の場合，low power modeを使うので，悪影響があるかどうかは筆者自身が把握していないので，基本的にFanを外した状態で利用する．