本連載では第一線のPerlハッカーが回替わりで執筆していきます。今回のハッカーはNiigata.pmの代表をしている丸山晋平さんで、テーマは「Perlで作るシステム運用ツール」です。
本稿のサンプルコードは、WEB+DB PRESS Vol.92のサポートサイトから入手できます。
なぜPerlは運用に適しているのか
近年、Webアプリケーションの複雑化に伴い、主にLL(Lightweight Language)を使っていたいわゆる「Web系」の開発でも、JavaやScalaなどの「重量級」の言語でアプリケーション開発を行うケースが増えているように感じます。LLを使用しているところでも、Ruby on Railsの台頭からかRubyで開発しているケースが多く、PerlでWebアプリケーションを開発しているところは「珍しい」という感想を抱かれることが多いのではないでしょうか。実際、筆者の勤務先であるリラクでも、サーバサイドの開発はScalaをメインとしています。
では、Perlは「すでに役割を終えた言語」なのでしょうか。そんなことはありません。本連載を読んでいればわかるとおり、Perlはアプリケーションを書くのにも十分に強力な言語ですし、日々の運用などをサポートするための言語としてはかなり強力な言語だと言えます。実際、筆者の勤務先でも、運用にはPerlを多用しています。
アプリケーションそのものとシステム運用ツールの性格の違いとして、変更の多さが挙げられます。アプリケーションはユーザーのニーズに合わせ日々仕様が変わります。そのため、柔軟性や記述性が重要になります。それに対して運用ツールは、一度作ったあとは比較的長い間手を入れずに使われます。そのため、安定性や「一度書いたらしっかり動き続ける」という性質が重要になります。後者の性質に関して、Perlはとても優れています。以降でその理由を見ていきましょう。
枯れた言語である
Perlは枯れた言語です。言語自体に歴史と使用実績が積み上げられており、信頼性があります。さらに、PerlのエコシステムであるCPANには長い間利用され続けた安定性のあるモジュールがたくさん公開されており、これらはCPAN Testersによりテストされています。CPAN Testersというのは、有志のテスターがローカルで行ったテスト結果をサーバに集積することによって、さまざまな環境でのテストを担保するしくみです。
高い後方互換性
言語は進化し続けるものです。でも、「セキュリティフィックスのために言語のバージョンを上げたら、運用ツールが動かなくなってしまった」「運用ツールのためのライブラリのバージョンを上げたら、運用ツールが動かなくなってしまった」といったことは避けたいものです。
Perlもバージョンが上がるごとに進化し続けていますが、Perlは言語もライブラリも後方互換性を大切にしているので、コードに手を加えずに言語やライブラリのバージョンを上げることが容易です。
UNIX系システムでの幅広い実行環境
運用系のツールはシェルスクリプトなどで書かれることも多いでしょう。しかし、たとえば同じawkコマンドでも、gawkとawkでは微妙に挙動が異なります。開発はOS Xで行い、プロダクション環境はLinuxという人も多いと思いますが、環境によって挙動が異なる場合はそのあたりを意識する必要があります。
それに対してPerlは、非常にポータビリティの高い言語です。環境による挙動の違いを意識する必要がありません。
また、たいていのUNIX系のディストリビューションにはPerlが標準で入っています。私たちの仕事は、常にrootがもらえて自由に環境を整えられる仕事であるとは限らず、限られた権限で最大限の効果を達成しなければならない場合も多々あるでしょう。そのようなときも、Perlはとても良い運用ツールとなってくれるでしょう。
<続きの(2)はこちら。>
- 特集1
イミュータブルデータモデルで始める
実践データモデリング
業務の複雑さをシンプルに表現!
- 特集2
いまはじめるFlutter
iOS/Android両対応アプリを開発してみよう
- 特集3
作って学ぶWeb3
ブロックチェーン、スマートコントラクト、NFT