会社支給のPCが新しくなって開発環境を構築することにしたのだが、今まで使っていたActive Perlが有償になってしまい、Strawberry Perlが無料ということで入れ替えました。
ちょっとしたコマンドラインツールを作るならPerlは手軽でいいのだが、いくつか不満なところがあります。
一つは、日本語処理の変遷。Perlの日本語処理というか、複数バイト処理は、何度か変遷があって、今のutf8主体になって、binmodeで入出力の文字コードを指定する流れになるまで、ずいぶん時間がかかりました。このためも、バージョンによって処理が微妙にことなります。古いコードを最新のバージョンで動かすようにするには、若干の手直しが必要だったりします。これは結構不便です。
次にライブラリ周り。CPANは優秀なライブラリであり、便利なのだけど、素の状態のPerlのライブラリが割と貧弱。新規に作成するときは、特段問題ではないだが、環境移行のときは、CPANからインストールせざるを得ないので、これが結構面倒なんですね。何を入れるべきか忘れていたり、バージョン管理とか。
最後にWin32系の処理。
今回思い切ってRubyに切り替えようかなと考えた理由がこれ。Win32処理は、CPANでも特殊でgccをダウンロードしてきて、ライブラリをコンパイルする必要があります。さすがにPC入替の忙しいときにやりたくない。
Active Perlは、CPANではなくて、Perl Package Manager(以下PPM)という秀逸なツールがついてきているので、バイナリライブラリは、コンパイル済みのパッケージを利用できます。これが理由で、Active Perlを長年愛用していたのです。
いろいろと考慮した結果、割と使い込んだ経験のあるRubyにすることしました。
Rubyはクラスを作るのが簡単。Perlは、オプジェクト志向言語ではないので、出来ないことはないというレベル。ちょっとしたツールなら不要なのですが、少し大きなツールを作ることになると、Perlは大変。
Rubyは日本が源流ということもあって、マルチバイト処理は問題がありませんし、仕様が変更される心配はなさそう。
まあ、図示するとこんな感じかな。Rubyの標準ライブラリのほうがPerlに比べてカバーする範囲が広いし、いったん標準ライブラリになったものが、途中からサポートされなくなるとか少なさそう。ツールを作成する場合は、基本標準ライブラリの範囲内で作成することが多いので、そこのところは問題がないかと思います。
つらつらと、Rubyライブラリ周りを見ていて気が付いたところ。データベースの関連が標準ライブラリに入っていない。ちょっと調べてみたが、DBIがサポートされていたはずと調べてみるが、Ruby1.8時代までサポートが終了しているらしい。データベースのアクセスライブラリは、個々のデータベースごとにあるようで、PHPのPDOやPerlのDBIのような標準化されたものは、ActiveRecordを使うらしい。うーん?、あまり感心しないなあ。
完全に移行するわけでもないので、データベースアクセスの必要なツールは、今まで通り、Perlを使うことにしよう(そんなにDBにアクセスするツールが必要かというと疑問だけど)。
あと画像関係のライブラリが弱い。コマンドラインで、画像系ツールを作成する必要は薄いので、この辺りは、まあ良いか。
個人的な感想なんだが、比較的よく使う言語ごとに、優位表を作ってみた。
私は普段TortoiseGitという、WindowsExplorerを拡張する形のGitクライアントを使っているのだが、一つ面倒な問題がある。このツールは、WindowsExplorerのファイルアイコンのアイコンオーバーレイハンドラーを使っているだが、これがDropBoxなどと競合して表示されなくなる。そこで普段使用しない、アイコンのオーバーレイの登録を削除するツールを作っていた。Perl版があって、基本ロジックはそのコードを見ながら作るので、たいして難しい話ではないのだが、色々と忘れているライブラリの使い方を調べたりで、3時間程度でコード作成は完了した。これで、少し快適になった。
yna