EdgeRouter Xに組み込む自作ツールを作るなら、どの言語を使うか?

故あってEdgeRouter Xを触っている。

中身のEdgeOSがVyattaベースで、Vyattaの大本はDebianで、さらにコンソールがvbashで割と普通のシェル環境っぽく使えるので*1、自作のコンソールアプリを組み込めそうだと思ったのだ。

というかsshログインのホームディレクトリにbinという名前のディレクトリを作って、中にスクリプト等を置いておくと、次回のログイン以降に環境変数PATHに追加されるよね……。

タスクスケジューラ機能を使って自作スクリプトを定期実行することもできるようだ。

問題は、どの言語なら比較的容易にコンソールアプリを実装できるか、ということだ。

EdgeRouter X上のEdgeOSは32bit MIPS little-endianで動作している。CやC++で実装するとクロスコンパイルが面倒だ。一方でスクリプト言語の類は、限られた空きディスク領域に処理系を導入すると後々面倒なことになりそうだ。

一番手軽なのはシェルスクリプトだろう。POSIXでも定義されているような、一般的なテキスト/ファイル処理用のコマンドは一通り載っているようなので、凝ったことをしなければ大丈夫だろう。

スクリプト言語については、EdgeOS V1.x系にはデフォルトでPerl 5とPython2が入っている。CPANPyPIが組み込まれていないので標準ライブラリ縛りとなりそうだが、Perl 5やPython2でスクリプトを書くこともできそうだ。ただし、スクリプトが実行開始されるまでにほんの少し時間がかかる。普段使いのPCと比較すれば、EdgeRouter XはCPUパワーもディスクI/O速度も劣るだろうから、仕方がない。

ダークホースだったのはGo言語。普通にPC上で開発して「GOOS=linux GOARCH=mipsle」を付与してgo buildして、生成された実行ファイルをEdgeRouter Xに転送すればよい。簡単だ。ただし実行ファイルのバイナリサイズが大きくなるので、若干注意が必要かもしれない。まあそこまで気にすることは無い気もするが……。

起動速度を勘案すると、簡単な処理ならシェルスクリプトで、凝ったことをしたいならGo言語で開発するとよさそうだ。Perl 5やPython2も悪くないだろうが、果たして標準ライブラリ縛りに耐えられるだろうか? あと、Pythonは3系を使いたくなりそう。

*1:ただしUnixコマンドやファイルの入力補完は効かない。管理用コマンドの入力補完が組み込まれているためだろう。