最近、久しぶりにTermuxを触ってみたのですが、新しい発見があったので纏めてみました。
ここ半年ほど、公私ともに主な開発プラットフォームとしてDenoを据えています。
最初はTypeScriptもサーバーサイドも苦手意識がありましたが、使い込むうちに段々とそのポテンシャルと手応えを感じるようになりました。
今ではイチバンのお気に入りプラットフォームです。
はたまたCode-Serverは、VSCodeのバックエンドとフロントエンドを完全に分離し、ウェブブラウザを介してリモートから扱えるようにしたものです。
同様にウェブブラウザからVSCodeを扱えるvscode.devもありますが、こちらはコマンドラインの実行などクライアントマシンに依存する処理は行えません。
せっかくTermuxも触ったことだし、これらをAndroidもといTermuxでも実行できないかと調べてみたところ、なんと動きそうではありませんか。
早速、試してみる事にしました。
検証環境
- 端末: GALAXY S9+ SM-G9650 (海外版)
- OS: Android 8.0
- Root権限: なし
インストール
まずはAndroidへTermuxを入れるところから始まります。
「もう入れてあるよ!」という方は次へすっ飛ばしてください。
昔はGoogle Play Storeで配布されていたのですが、年々厳しくなるAPI制限に痺れを切らし、いつしかAPKを単独配布するスタイルとなっていました。
リポジトリのリリースから最新版をダウンロードして、ファイルエクスプローラーなどからインストールしましょう。
インストールが完了しアプリを起動したら、とりあえず最低限の作業環境を整えておきます。
# おまじない
apt update && apt upgrade && apt autoremove && apt autoclean
# とりあえずこの辺があれば何とかなる
apt install termux-services proot-distro coreutils net-tools busybox zip unzip openssh git wget curl vim nodejs python
# Ubuntuをインストール
proot-distro install ubuntu
# Termux起動時にsshdを自動起動
sv-enable sshd
# ストレージへのアクセス許可
termux-setup-storage
# SSHでログインするときのパスワードを登録
passwd
これで、色々と捗るようになりました。
なお、以降の作業について「スマホだと作業しにくい...」という場合は、パソコンからSSH経由で作業しても問題ありません。
SSH接続する際の参考情報は、本記事末尾に掲載してあります。
Deno
2022/09現在、公式からAArch64-Linuxビルドは公開されてないため、導入するのは非公式ビルドとなります。
(なお公式最新版にはほぼリアルタイムで追従している模様)
ダウンロードとインストールは以下のコマンドとなります。
curl -qL -o ./deno.zip https://github.com/LukeChannings/deno-arm64/releases/latest/download/deno-linux-arm64.zip
unzip ./deno.zip && rm -f ./deno.zip
chmod 700 ./deno
mv -f ./deno ~/../usr/bin
ちなみに、公式で公開されてないのには根深い理由があり、たびたび公式のディスカッションでも話題になっています。
ざっくり解説すると、DenoはCIにGitHub Actionsを使用しており、Actionsが元から対応してるプラットフォームがx86_64しか無いためです。
Actionsにサードパーティ製のAArch64プラットフォームを追加することもできますが、それらはQEMUでエミュレーションしているが故に実行速度がありえん遅く、無限CI編で開発が全く捗らないため、現在は仕方なく元から対応してるプラットフォームのみでやりくりしてるそうです。
この件はGitHubも認知しているようで、なる早でAArch64プラットフォームの提供を考えてはいるようです。
そのためx86_64ビルドについてはWindows、Mac、Linuxとそれぞれ揃っています。
また、詳しい経緯は分かりませんが、何故かM1-Macビルドも公開されています。
これらの経緯があり、Denoの開発メンバーが個人としてメインブランチをフォークし、AArch64-Linuxビルドを公開してくれています。
それを有り難く使用させていただくわけです。
Code-Server
こちらは公式ビルドが公開されているため、それを使用します。
ダウンロードとインストールは以下のコマンドとなります。
curl -qL -o ./code-server https://aka.ms/vscode-server-launcher/aarch64-unknown-linux-gnu
chmod 700 ./code-server
mv -f ./code-server ~/../usr/bin
実行
今回導入したDenoやCode-Serverは、あくまでLinuxバイナリなのでTermux環境つまりAndroidでは実行できません。
そのため、必ず最初にインストールしたUbuntu環境から実行する必要があります。
Ubuntuへのログインは以下のコマンドとなります。
proot-distro login ubuntu
deno -V
code-server -v
このUbuntu環境の/usr/bin
はTermux環境の~/../usr/bin
へのリンクとなっているため、Termux上で加えた変更がそのまま反映される仕組みとなっています。
ホームディレクトリは独立しています。
ちなみに、パッケージのインストールなどもTermuxから行う必要があります。
(あくまでUbuntuなどのディストロはTermuxの配下という関係)
後は、見慣れたコマンドラインで思うがまま開発を進められます!
ギャラリー
参考:SSH接続
SSHで外部からTermuxへ接続する時のコンフィグを参考に載せておきます。
スマホの小さい画面とソフトウェアキーボードでは流石に作業しんどいですよね...
Host PHONE1
HostName 192.168.0.1
# ユーザー名はTermux側で無視されるため何でも良い
User termux
# ウェルノウンポートのリッスンはRoot権限が必要なためTermuxのsshdはデフォルトのリッスンポートが変更されている
Port 8022
# ログインシェルとしてUbuntuを指定する場合のみ必要
RemoteCommand proot-distro login ubuntu
RequestTTY yes