Android 端末上で開発環境を整えてみた

本記事は、[サムザップ Advent Calendar 2019 #2](https://qiita.com/advent-calendar/2019/sumzap2) の初日の記事です。

#前書き
普段は SRE として既存タイトルの保守運用・改善を行いつつ、新規プロジェクトへ向けた標準化、構築運用がメインタスクです。他にもエンジニア採用と育成など、幅広く業務を行なっています！

この記事は出張前の6時間（移動時間含む）を使ってどこまで Android端末に開発環境を整備できるかトライした記事になります。（スクリーンショットは後から取得したものです。）


#やりたいこと
- PCを持ち歩くのが辛いので、普段使いのAndroid端末を開発作業環境にする
- 個人の開発環境は、AWS と python に依存しているので使えるようにする
    - ssh (4G回線なので固定IPが使えないので、SSMで代用できないか検証)
    - python （できれば anyenv 経由の pyenv でインストールしたい）
    - pip で aws-cli を使えるようにする
    - bash / zsh のスクリプトが書けること

# やったこと
さあ、残り5時間半で頑張っていきます！

## Andoird で Terminal が使えるようにする
2019年12月現在、terminal emulator は数多く Goole PlayStore に登録されてる。
[Termux](https://wiki.termux.com/wiki/Main_Page) を見つけた。
基本的なシステムコマンド or ssh のみ使えるものが多いが、Termux はaptやpkg を用いてパッケージの追加が可能だ。
https://github.com/termux/termux-packages

インストール完了後の起動画面
![Screenshot_20191201-125242452.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145853/0955a147-0bc9-53fc-0786-675d3b7e6e93.jpeg)

ここで、ls や df などのコマンドが使えることを確認した。
かなり便利だ。スマホでの作業環境構築が一気に捗った気がする。

(さぁ、移動しなくては。)

## python のインストール
package リストに python があるのは確認済みなので何も考えずに実行してみる。

```shell:Termux上で実行

apt install python
```


pip を含めて使えるようになった。
![python-pip.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145853/79bec6bf-24da-c166-b845-623728166ff9.png)

同じ要領で以下のパッケージもインストール

```shell:Termux上で実行

apt install git
apt install openssh
```

(ここで残り3時間程度。スクリーンショットの共有ができないくらいに空港のWi-Fiが弱い...)

### ここまでで、python, pip, ssh, git のコマンドが実行できることは確認した。
さあ、搭乗時間が迫ってきた。anyenv化は将来的に対応するとして、aws-cli はめちゃめちゃ大事だ。これがなければ、何もできない....

```shell:Termux上で実行
pip install awscli
```
![Screenshot_20191201-125629560.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145853/1765c922-157b-7868-a342-e81f1828ab83.jpeg)

意外にさっくりできてしまった！
(搭乗手続きのため、中断。)
（気がつけば残り2時間程度。）

```shell:Termux上で実行
aws s3 ls
2019-02-01 18:20:37 ＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊
2019-01-01 20:13:29 ＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊
2018-12-01 16:31:29 ＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊
2018-11-01 16:36:22 ＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊
2018-10-01 11:06:09 ＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊
```

実行確認をした。（モザイクが面倒だったので、テキストをコピペしました。）

## ssm が使えるようにセッティング
```shell:Termux実行
mkdir ~/.ssh
touch ~/.ssh/config
vim ~/.ssh/config
```
ここで気が付いた... vimが標準インストールされていない... 

```shell:Termux実行
apt install vim
```

（残り1時間20分）

```shell:Termux実行
vim ~/.ssh/config

Host i-* mi-*
    ProxyCommand sh -c "aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"
```
これはインスタンス名を指定した時に、自動で ssm を経由してポート解放せずログインできるようにするおまじない。ただし、対象のEC2にはインスタンスロールなどで、ssmによるログインを許可しておく必要がある。
その辺りは、[AWS Systems Manager のセットアップ](https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/systems-manager-setting-up.html)を参照してくだされ。

### aws コマンドが使えるように credential をセット

```shell:Termux実行
vim ~/.bashrc

AWS_SECRET_ACCESS_KEY=****************************************
AWS_DEFAULT_REGION=ap-northeast-1
AWS_ACCESS_KEY_ID=********************
```

```shell:Termux上で実行
ssh leosuke@i-**************
```

![result.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145853/f035d187-e079-d01e-07b0-d8e58048c131.png)

セッションマネージャのプラグインがインストールされていない！
ということでインストールしようとしたが... windows用のexe, amd用のrpm と deb しかなく....
alienコマンドで変換してファイル共有してみたが... イントールできなかった。

さらに `aws help` を利用しようとしたら、groff がなく... groffもインストールできなかった。
（ここで時間が終了。作業時間は3時間弱くらい。）



# まとめ
Android 端末で実現できなかったことがあるものの、割と使える環境が整った！ 
（記事に書いていない部分の後悔としては、bluetooth キーボード。トラックパッドがないものを買ってしまったのがよくなかった）

改善したい点は、termux で aws session-manager-plugin と groff がインストールできなかった。[Groff](https://www.gnu.org/software/groff/)はアウトプットフォーマッタだが、こんなに影響範囲があるとは思わなかった。session-manager-plugin の rpm や deb ファイルのアーキテクチャを amd64 から aarch64 に変換する方法も検討したが、無理だった。

ひと昔前なら root 化しなくてはできなかったことが、端末スペックの向上とアプリケーションによって割と簡単に導入できるようになった。少ない時間でゴリゴリと進められて良かったので、Termux の disabled-packages を使えるように コミットしていこうと思った。


明日は @hiroki_shimada さんの記事です。
ーーーーーー
### 後日談
mac の bundle用 Python スクリプトでインストールしてみた。
kex_exchange_identification というエラーが出て結局 ssm 経由では接続できなかった。