組み込み系のCプログラマが仕事で使う言語の例(納品はしないけど使っている編)

id:eel3:20111107:1320594859 では納品物として提出するものに限定して使用する言語を列挙した。しかし実際に仕事をする場合には納品物以外にもコードを書くことがある訳で、その時はまた別の言語を使ったりする。

個人的に使う分には好きな言語を選べる(可能性が高い)ので、納品用のコードを書く場合とは別の言語を使う人は多いと思う。

シェルスクリプト、バッチファイル

作業の自動化に欠かせない。ちょっとした処理であっても、同じコマンドを同じオプション引数で何度も実行する可能性があるのなら、シェルスクリプトかバッチファイルにしてしまう。

何らかの自動化をビルドプロセスに組み込む場合は、シェルスクリプト化するのではなくMakefileに直接記述することもある。

自分の中ではバッチファイルは「作業手順を羅列して自動化する用」のツールで、何か本格的なツールを作る場合に使うことはない。元よりバッチファイルのプログラマブルな側面にあまり期待していないこともある。

一方でシェルスクリプトでは、作業手順を羅列する類のコードは少ない。パイプやリダイレクトを使用したワンライナー(のちょっと大きめなもの)か、Rubyで書いたツール程ではないけどそれなりに本格的っぽい小ツールが多い。各コマンドを組み合わせて実装することもあれば、シェルスクリプトは単なるラッパーで実質的な処理を他のスクリプト言語で記述して埋め込んでいる場合もある。

シェルスクリプトを書く際は手元の2〜3のLinuxマシンで動作する程度には移植性を気にかけている(つもり)。ディストリビューションないしメジャーバージョンが異なると思わぬ所で足をすくわれるものだ。できるだけ/bin/shで動かす前提で書くし、時にはLinux以外のOSのmanを参照することもあるが、最終的には実際に動かして問題を洗い出すことになる。

PerlPythonRuby等のスクリプト言語(ついでにsedawk

このあたりのスクリプト言語は、ちょっとしたフィルタからダミーサーバの実装まで幅広く使用できて重宝している。ちなみに私はRuby派(理由:単なる慣れの産物)。

小物ツールやダミーアプリなどは、無くても仕事はできるがあれば便利な代物だ。これらを自前で用意する場合、あまり時間を書けずに実装できると都合が良い。Rubyを使うとさくっとプロトタイプを実装できるのだ。

ワンライナーでフィルタできる点も便利だ。irbのような対話型ツールも捨てがたい。

テキスト処理の場合はsedawkで済ますことも多い。入力が定型のテキストレコードの場合、Rubyでも簡単に実装できるけど個人的にはまずawkで実装してみる。そのまま突き進めそうなら全てawkで書くし、途中で限界を感じたらRubyで書き直す。

但しテキスト処理でも例えばCSVXMLRubyに便利な標準ライブラリが用意されている訳で、その場合は最初からRubyを選択する。

JScriptVBScriptPowerShell

PerlRubyは便利だが、「他人のPC(Windows)でも問題なく動作する小ツール」を実装するのには向いていない。この場合はWSHを使うことが多く、デフォルトで動作するJScriptないしVBScriptで実装することになる。

ネット上のサンプルは圧倒的にVBScriptが多いが、個人的にはJScriptの方が好きだ。方言とはいえJavaScriptは強力だ。WSHが流行ってJScriptスクリプトを書くことが定番になってくれたら良かったのだが、残念ながら私がWSHに出会った時点で既にWSHは落ち目だった。

Microsoftの野望としては、バッチファイルやWSHの役目は今後PowerShellに移行していくことになっている。とはいえ暫くはJScriptVBScriptも使われ続けるだろう。

HTA

Windows用のGUIな小ツールを求められた場合に使用する。HTAJScriptの組み合わせは多分クライアントサイドJavaScriptに近いと思う。

この辺りの役目もPowerShellに移行していくのだろうか?

C++

ごく稀にC++でツールをこしらえることもある。実は生のバイナリデータを扱うコードをRubyで実装するのが苦手なのだ。これは仕事でC言語でバイナリデータを扱っている弊害だと思う。

とはいえツールをC言語で実装するというのも非効率なので、better CとしてC++を使っている。C++の標準ライブラリはCの標準ライブラリと比べたら遥かに充実しているので。

Lua

Luaに関しては自分の仕事の特性が強く現れていると思う。というのも「Wiresharkのフィルタを書く為の言語」という位置づけだからだ。

Luaも強力な言語ではあるが、Lua単体でツールを作ることはない。Luaを組み込んだアプリを拡張する為に使っている。