Androidには、フルパッケージのターミナル環境
Termuxがあり、ひと通りのシェルスクリプトを実行できます。
ただし、ターミナルはキーボード無しで使うには向いていません。Termuxのプラグインを利用すると、ホーム画面からスクリプトを呼び出すことが可能です。
以下の2つの方法が提供されています。
- Termux:Widget をインストールして、ホーム画面にウィジェットを設置
- Tasker を購入して、 Termux:Taskerをインストール。ホーム画面にTaskerのウィジェットを設置
ただ単に実行するだけであれば、Termux:Widgetで足ります。 Taskerを利用すると、ウィジェットからの手動実行のほか、コンテキストに応じた自動実行やアイコン指定が可能です。Tasker以外にもMacroDroidなどTaskerプラグインに対応したアプリからも利用できます。
Termux利用開始時に理解しておくべきポイント
TermuxはGoogle Playのほか、 F-Droid(Android向けFOSSリポジトリ)で配布されており、プライマリはF-Droidです。Google Play版はほぼ更新なしです。
後述のTermux:APIなどのプラグインはGoogle Play版は有料ですが、F-Droidは無料配布(寄付歓迎)です。
TermuxはGoogle Play版とF-Droid版を混ぜて利用できないため、あらかじめ選択が必要です。
各マーケットが保護しているものは異なるので、F-Droidを使うのか否か、判断したうえで利用開始すべきでしょう。
すでにGoogle PlayのTermuxを利用している場合、いちどプラグインを含め全てのTermuxをアンインストールするとF-Droid版をインストールできます。
なお、環境により
termux-setup-storageがハングアップする場合がありますが、pkg install termux-am
で直ります。
権限追加
プラグイン実行には追加権限が必要です。
- Widgetを利用するにはTermux本体に「他のアプリに重ねて表示」の権限が必要です
- Termux:Taskerを利用するには、Taskerに「Run commands in Termux environment」の権限が必要です。TaskerからTermuxにリクエストする権限で、TaskerやMacroDroidのアプリ情報の「その他の権限」にあります。
シェルスクリプトの記述
プラグインの規約に沿って、実行対象のシェルスクリプトを最初に用意しておきます。
プラグインごとに配置パスが決まっています。
- Termax:Widgetから呼び出すスクリプトは、Termuxホームディレクトリの
.shortcuts
に置く。ターミナル画面を表示したくないスクリプトは.shortcuts/tasks
サブディレクトリに置く - Taskerから呼び出すスクリプトは、ホームディレクトリの
.termux/tasker/
に置く。
なお、シンボリックリンクでは動作しなかったため、スクリプトの実ファイルを所定の場所に置く必要があります。
最初はディレクトリが存在しないため手動でmkdir
します。
- スクリプトは自ら記述し、実行属性をつけておく。termux上で動作するものであれば、とくに制約なく動作すると思われる
シェルスクリプトの記述例は以下のとおりです。shebangが独特のPathである以外は、普通のbashです。
#!/data/data/com.termux/files/usr/bin/bash
echo "hello"
shebangのパスが誤っている場合、No such file or directory
といった分かりづらいエラーになるため、注意が必要です。
ホーム画面に追加(Termux:Widget)
操作はホームアプリによりますが、ホームからTermuxウィジェットを追加すると、スクリプトを選択する操作になります。
スクリプトごとにアイコンができるため、タップするとスクリプトを実行できます。
アイコンはTermuxと同じですが、ホームアプリの機能で変更可能でしょう。
Taskerに登録(Termux:Tasker)
Termuxスクリプトのタスク登録は、Taskerを起動して適切に選択していくだけで完了します。
- タスク内のアクションを新規作成する際、「プラグイン」で「Termux:Tasker」が選択可能になっており、スクリプトを指定できる。
- オプションは、実行時のターミナル表示/非表示の選択。ターミナル表示は動作確認に利用できる
タスクを作成できたら、ウィジェットを作成します。ウィジェット作成前にTaskerを完全に終了しておく必要があり、Taskerの画面で「戻る」操作を繰り返して停止させます。
- ホーム画面長押しなどでウィジェット追加する。リストからTaskerを選択
- タスクリストから対象のタスクを選択。画面下のボタンからアイコンも変更可能
- 確定の方法が非常に分かりづらいが、「戻る」操作を繰り返すことでウィジェット作成を完了できる
これにより、ホーム画面上にアイコンを設置でき、アプリ起動と同様、タップするとスクリプト実行できます。
たとえばcurl
のスクリプトを記述することで、CIのwebhookなどAPIコールするボタンを作ることも可能です。
また、Termux:APIを追加導入するとクリップボードなどのデバイス操作も可能になるため、クラウドサービスを活用したスクリプトも可能ではないかと思います(未確認)。
Chuma Takahiro