(2024-12-16 最新情報に大幅更新しました)
もうソフトウェア開発はスマートフォンで完結する時代が近くまで来ているかも知れません。
Termux
ここでTermuxのおさらいです。
Androidは Linux Kernel を基礎とした Android Kernel で動いているため、基本的にはLinuxバイナリがそのまま動きます。
TermuxはLinuxターミナルのようにAndroidをコマンドラインターミナルで操作するための端末アプリです。
検証環境
私が正常動作を確認した端末です。
割と最近の端末でも問題なく動作します。
端末名 | 型番 | OS | Root権限 |
---|---|---|---|
GALAXY S 9+ | SM-G9650 | Android 8 | 無 |
GALAXY S 22 | SCG13 | Android 13 | 無 |
AQUOS Sense 8 | SH-54D | Android 14 | 無 |
インストール
まずはTermuxをインストールします。
リポジトリのリリースから最新版のAPKをダウンロードして、ファイルエクスプローラーなどからインストールしましょう。
インストールが完了しアプリを起動したら、とりあえず最低限の作業環境を整えておきます。
# ストレージへのアクセス許可
termux-setup-storage
# パッケージを更新
apt update -y && apt upgrade -y && apt autoclean -y && apt autoremove -y
# 基礎ツールをインストール
apt install -y busybox openssh termux-services proot-distro
# Termux起動時にsshdを自動起動
sv-enable sshd
# SSHでログインする際のパスワードを登録
passwd
# Ubuntuをインストール
proot-distro install ubuntu
これで作業が捗るようになりました。
今回導入するVSCode ServerやDenoは、そのままTermuxからは実行できません。
必ず先ほどインストールしたUbuntuから実行する必要があります。
パッケージマネージャ経由でインストールするツールについては、UbuntuでインストールしたものはTermuxからは実行できませんが、TermuxでインストールしたものはUbuntuから実行できます。
主な理由としては、一部のライブラリがAndroidと一般的なLinuxディストリビューションで異なるためです。
# Ubuntuにログイン
proot-distro login ubuntu --fix-low-ports --shared-tmp --termux-home
# パッケージを更新
apt update -y && apt upgrade -y && apt autoclean -y && apt autoremove -y
# 実行ファイルをダウンロード
busybox wget -O - 'https://code.visualstudio.com/sha/download?build=stable&os=cli-alpine-arm64' | busybox tar x -zO 'code' > /usr/local/bin/code
busybox wget -O - 'https://github.com/denoland/deno/releases/latest/download/deno-aarch64-unknown-linux-gnu.zip' | busybox unzip -p - 'deno' > /usr/local/bin/deno
# パーミッションを変更
chmod 700 /usr/local/bin/*
# 動作確認
code -V
deno -V
ちなみに、Ubuntuにログインするとスーパーユーザーとなりますが、これは PRoot という技術を使用しているためです。
実際にAndroidのRoot権限を取得しているわけではありません。
VSCode Serverを起動するときは serve-web
サブコマンドを使用します。
Android内のローカルホストにVSCode Serverが構築されます。
# 127.0.0.1:8000をリッスン
code serve-web
後は、見慣れた画面で思うがまま開発を進められます!
SSH接続
SSHを使用して外部からTermuxを操作することも可能です。
実際に私も、自宅ではPCからアクセスして作業することがあります。
接続する際のパラメータを参考に載せておきます。
Termuxのsshdはデフォルトのリッスンポートが 8022
に変更されているので注意です。
この例では、無線LANなどでAndroidとPCが同じローカルネットワークに存在する想定です。
IPアドレスは適宜読み替えてください。
# 普通にログインする場合
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'
# PCからAndroidのVSCode Serverにアクセスする場合 (SSHポートフォワード)
ssh -TNg -p 8022 -L 127.0.0.1:8000:127.0.0.1:8000 termux@192.168.0.1