コマンドラインツールとしてのtimestampとPerlについて
先日作ったタイムスタンプツールを早速業務で使う機会に恵まれた。
実際には「恵まれた」というには微妙な話で、要は比較的早急にログファイルを確認してほしい、という内容だった。
個人的な感覚だが、生のログファイルを確認しなければならないとき、というのは割と異常な精神状態であることが多い気がする。
そういうときには、タイムスタンプの形式を気にして処理するようなスクリプトを書くのすらも面倒だと感じがちであり、
こういった「いい感じにやってくれる」ツールを有り難く感じるものである。
同僚に見せたところ、コマンドラインツールにしたらどうかとアドバイスを貰った。
確かに、ログファイルは、コマンドラインでPIPEしながら処理することが多く、 コマンドラインツールとして実装することはメリットがあると思う。
そこで、Perlで再実装した。
書きたいことは、ほとんどREADMEに書いたが、Perlを選択した理由を再度述べる。
まず、コンパイル言語は避けた。
それは、このツールはアドホックな手法でタイムスタンプを見つけており、
したがって、ユーザは時にカバーしきれないパターンに遭遇すると考えられる。
その場合にユーザが望むことは、ソースコードを「アドホックに」改変することであるが、
コンパイル言語の場合、変更は容易ではない。
ソフトウェアの変更には、コンパイラが必要であり、あるいはビルドの補助ツールが必要になる。
GoやRustといった最近の言語では、開発環境の構築は、比較的容易にできるように工夫されているけれども、
それでも多くのユーザは、これらの言語の開発環境を「もとからは」持っていない。
そこで、多くのユーザが「元から持っているような」スクリプト言語が第一の選択肢になる。
こういった場合に第一の候補であるが、できるだけ避けたいのは、
Windowsであればバッチファイルであり、Linuxであればシェルスクリプトである。
いずれも長い歴史を持つ言語であり枯れた技術だが、その文法はかなり独特であり、可読性が高いとは言えない。
そもそもこれらのツールは、結局その中で様々なツールを呼び出して使うGlue言語としての性格が強く、
一貫性のあるソースコードを書きづらいと思う。
また、OSごとに別の言語を選択するのはぜひ避けたいところである。
そこで、汎用的なスクリプト言語、Perl、Python、Ruby、node.jsが思い浮かぶ。
この中で、ユーザの追加のセットアップが不要な可能性が高い言語はなにか?
ということになると、Perlに落ち着く。
多くのLinuxディストリビューションで、Perlは元からインストールされているし、私は使ったことはないが、
Mac OSでも元からインストールされているようだ。
Windowsでは元からインストールされているということはないので、Active PerlなりStrawberry Perlなりを
インストールしなければならないような気がするが、実はGitをインストールすると、Perlが付属してついてくる。
これはGitのコマンドのいくつかがPerlで実装されているためである。
ログファイルの分析をするユーザがGitを入れている可能性がどれくらいか、というとこれは想像するしか無いのだが、
比較的開発者寄りの人物像が思い浮かび、その可能性はそれなりに高いのではないかと思う。
以上のような理由から、Perlを採用した。
PerlはStack Overflow Developer Survey 2020のmost dreaded languagesで3位につけるなど、 最近では好ましく思われないことが増えているようであるが、こういった小規模な開発者向けコマンドラインツールを作るのには、 相変わらず向いている、という思いを新たにした。
Perlの可読性は低いと言われることが多いが、小規模なプログラムであれば、問題は少ないと思う。
また、Perlの哲学TIMTOWTDIを乱用せず、一貫性のあるコーディングを意識すれば、少なくともシェルスクリプトよりは、Well-constructed
なコードが書けると考えている。
Perlを書くのは3年ぶりで、色々忘れていることが多かった。
しかし、依然、正規表現については優れていると感じた。