【Termux】AndroidにVSCode ServerとDenoを導入する

もうソフトウェア開発はスマートフォンで完結する時代が近くまで来ているかも知れません。

## Termux
ここでTermuxのおさらいです。

- https://termux.dev
- https://github.com/termux/termux-app

Androidは [Linux Kernel](https://kernel.org) を基礎とした [Android Kernel](https://source.android.com/docs/core/architecture/kernel) で動いているため、基本的にはLinuxバイナリがそのまま動きます。

TermuxはLinuxターミナルのようにAndroidをコマンドラインターミナルで操作するための端末アプリです。

Root権限は必要ありません。

## 検証環境
私が正常動作を確認した端末です。
割と最近の端末でも問題なく動作します。

|端末名|型番|OS|Root権限|
|:--|:--|:--|:--|
|GALAXY S 9+|SM-G9650|Android 8|無|
|GALAXY S 22|SCG13|Android 13|無|
|AQUOS Sense 8|SH-54D|Android 14|無|

## インストール
まずはTermuxをインストールします。

リポジトリのリリースから最新版のAPKをダウンロードして、ファイルエクスプローラーなどからインストールしましょう。

- https://github.com/termux/termux-app/releases/latest

インストールが完了しアプリを起動したら、とりあえず最低限の作業環境を整えておきます。

```sh
# ストレージへのアクセス許可
termux-setup-storage

# パッケージを更新
apt update -y && apt upgrade -y && apt autoclean -y && apt autoremove -y

# 基礎ツールをインストール
apt install -y busybox curl openssh proot-distro termux-services

# Termux起動時にsshdを自動起動
sv-enable sshd

# SSHでログインする際のパスワードを登録
passwd

# Ubuntuをインストール
proot-distro install ubuntu
```

これで作業が捗るようになりました。

今回導入するVSCode ServerやDenoは、そのままTermuxからは実行できません。
必ず先ほどインストールしたUbuntuから実行する必要があります。

パッケージマネージャ経由でインストールするツールについては、UbuntuでインストールしたものはTermuxからは実行できませんが、TermuxでインストールしたものはUbuntuから実行できます。

主な理由としては、一部の共有ライブラリがAndroidと一般的なLinuxディストリビューションで異なるためです。

```sh
# Ubuntuにログイン
proot-distro login ubuntu --fix-low-ports --shared-tmp --termux-home

# パッケージを更新
apt update -y && apt upgrade -y && apt autoclean -y && apt autoremove -y

# 実行ファイルをダウンロード
curl -L 'https://code.visualstudio.com/sha/download?build=stable&os=cli-alpine-arm64' | busybox tar x -zO 'code' > /usr/local/bin/code
curl -L 'https://github.com/denoland/deno/releases/latest/download/deno-aarch64-unknown-linux-gnu.zip' | busybox unzip -p - 'deno' > /usr/local/bin/deno

# パーミッションを変更
chmod 755 /usr/local/bin/*

# 動作確認
code -v
deno -v
```

ちなみに、Ubuntuにログインするとスーパーユーザーとなりますが、これは [PRoot](https://proot-me.github.io) という技術を使用しているためです。
実際にAndroid本体のRoot権限を取得しているわけではありません。

VSCode Serverを起動するときは `serve-web` サブコマンドを使用します。
Android内のローカルホストにVSCode Serverが構築されます。

```sh
# 127.0.0.1:8000をリッスン
code serve-web --without-connection-token --host 127.0.0.1 --port 8000
```

後は、見慣れた画面で思うがまま開発を進められます！

ネットワーク内の他のPCなどからアクセスしたい場合は、リッスンアドレスを `0.0.0.0` にしてください。

## SSH接続
SSHを使用して、外部からTermuxを操作することも可能です。
実際に僕も、自宅ではLAN経由でPCからアクセスして作業することがあります。

接続する際のパラメータを参考に載せておきます。
Termuxのsshdはデフォルトのリッスンポートが `8022` に変更されているので注意です。

IPアドレスは適宜読み替えてください。

```sh
# 普通にログインする場合
ssh -p 8022 termux@192.168.0.1

# 直接Ubuntuにログインする場合
ssh -t -p 8022 termux@192.168.0.1 proot-distro login ubuntu --fix-low-ports --shared-tmp --termux-home
```

## ギャラリー
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253070/ac8434e4-3203-6aa9-7b26-a8abd483a547.jpeg" width="300">
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253070/32b63eca-0021-781e-7a12-401e3b8c0944.jpeg" width="300">
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253070/200ca57d-6165-a9e4-bbc3-76beb5af7e5a.jpeg" width="300">
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253070/9eae113f-6730-0b5a-d3ca-0270c7c8550f.jpeg" width="300">
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253070/f9beb2ab-790a-0cf3-faff-458f6ba103e6.jpeg" width="300">