携帯用のキーボードを作ったので、 通勤中はこれを使って携帯(Nexus 5X)上で作業(このblogを書くとかね)をする事にした。

さて、Android上でどうやって作業するかを考えねばならない。 丁度、mhattaさんが、Termuxで作業するといいという記事を書いていた。 よさそうなので、これを使ってみる事にした。

TermuxはPlay storeからインストールできるAndroidアプリで、 それなりに使える端末エミュレータと、そこで動くコマンド一式と、 Aptベースのソフトウエアパッケージひと揃いがパッケージされているもの。

パッケージとかはオープンソースでメンテナンスされているみたい。

対抗馬とし考えていたのは、UserLAnd(旧GNU root)だけど、 UserLAndの場合、Debianのパッケージをそのまま使えるため、 使えるパッケージは多いけど、そのかわり、 ファイルの配置がうまくいかないところをprootとかchrootでごまかしているので、 その辺がちょっとハッキーな感じは否めない。

とりあえず、Termuxではじめて、パッケージの足りなさに嫌気が差したら、 UserLAndに移行する事にしよう。

環境構築

mitamae

基本的にLinuxなんだから簡単だろうと思っていたら、 そうでもなかった。

たしかに、Zshとかvimとか普段使うソフトウエアはパッケージに入っている。 これらはそのままインストールできた。

普段、設定ファイル群は、gitのレポジトリに入れて管理していて、 それをコピーしてきて使ってるんだけど、 最近この作業をmitamaeに切りかえていた。 mitamaeは当然レポジトリに入っていなかったし、(debianでもない) mitamaeの方でも携帯向けのリリースなどなかった。

mitamaeのレポジトリには、RaspberryPi用のバイナリがあったけど、 当然動かない。(glibcじゃないしね)

仕方ないから手元でコンパイルを試みたが、 いくつか変更が必要だった。

1つ目は、mruby-dirパッケージがコンパイルできない事。 Androidのlibcはいくつかglibcにある特殊な関数が用意されてないので、 それを使ってるコードはエラーになる。 mruby-dirのソースでは、既に、 __android__ マクロが定義されていたら、 これらの関数を使わないでRubyへ例外を返すように書かれていたが、 Termuxのclangは __android__ではなく__ANDROID__が定義されていて、 その部分が有効になっていなかった。 昔はマクロが違ったのか、書いた人の勘違いか。 とりあえず、mruby-dir側で修正してもらった

2つ目はもうすこし本質的な問題で、 mitamae上で、pkg "git"と書くと、 debianではapt install gitが、 centosではyum install gitが(たぶん)実行されるんだけど、 Termuxではどうすべきかがわからず困っていた。

これは、mruby-specinfraというパッケージがどうするべきかを定義していたので、 specinfraに、Termuxの定義を足す変更を入れてもらった。 specinfraにどんどん謎なOSを足し続けていくのはどこかで破綻しそうな気もするけど、 良い解決方法もないので仕方ない。

とりあえず、手元でmitamaeがコンパイルできたので、 バイナリとして手元のサーバーに置いておく事にする。

これでいつものシェルとVimの環境が整った。

Ruby

プロジェクトごとに、使うRubyのバージョンが一致しないので、 普段はAnyenvrbenvを使ってRubyをインストールしてる。 同じことを携帯上でやろうとしたら、 Rubyのコンパイルに30分以上かかった。

PCと比べるとIOバンド幅が極端に狭いのではないか。

Rubyのバージョンを揃えるのは諦めて、 termuxが提供するバージョンを使うのが正解かもしれない。

日本語入力

Termuxのターミナルは、何もしなくても日本語を含むutf-8文字列を表示できる。 また、有料オプションパッケージを買うと、好きなフォントに変更できるらしい。

しかし、一方で、IME経由の文字入力はうまくハンドリングできないようで、 普通に入力すると未確定文字列が表示されないし、 回避のためにはインラインでない入力ボックスに入れる事になる。

それでもいいのだけど、キーボードでは慣れた方法で入力したいので、 Vim側にskk.vimを入れて使う事にした。 これはかなり快適で、PCでSKKで入力するように高速に日本語文字列を入力できる。

むしろ、Termux以外のAndroidアプリにキーボードで文字を入力するのが 面倒に感じられるようになる。

NodeJs

nodejsも、Rubyと同じで、ndenvで管理していた。 しかし、ndenvでは携帯にはnodejsをインストールはできないようだ。

仕方ないからtermuxで準備されてるnodejsを使うことにした。

今後やりたいこと

とりあえず、ファイル共有用にunisonを入れたい。 ocamlがいるのか?

おまけ

良く使うキーボードショートカットをまとめておく。

Meta+BS 戻る
Ctrl+T Google日本語入力などで、変換中の文字列をアルファベットにする。
Meta+SPC 入力方式を切り替える。
Alt+TAB アプリケーションの切り替え
Meta+/ ショートカットの一覧

長くなったので、続きは別の記事で。