正規表現のパワーを実感
――『正規表現辞典 改訂新版』は目的別の検索ができるリファレンスですが、正規表現の歴史や背景についても解説されています。今回は佐藤さんに本書についてお尋ねしますが、まずはご自身のことを教えてください。
佐藤:勤務先はいわゆるSIerですので、各種システムの企画・構築を主業務としています。主に担当しているのは企業向けのアプリケーション開発基盤の構築や、個別システムに対するアプリケーション・アーキテクチャの立案といった分野ですね。
世間的には「アーキテクト」と呼ばれる職種になりますが、私自身はプログラマーとして個別の問題と向き合い、頭を絞るほうが好きです。
――仕事では正規表現をどう活用されているのでしょうか。
佐藤:個別のアプリケーションにおける入力値検証などに利用することはもちろん、アプリケーションやミドルウェアのトラブルシュートにおけるログの分析や、既存データのクレンジングなどに活用しています。
ログ分析では必要なログのみを抜き出す、あるいは不要な部分を刈り取るために正規表現は欠かせません。データのクレンジングでは不要なデータを排除する、あるいは不正なデータを正しい形式に整形するといった作業が必要となりますが、このような局面でも正規表現はそのパワーを存分に発揮してくれます。
読みやすさやメンテナンスのしやすさで差がつく
――プログラマー(開発者)として、正規表現を使いこなすのと使いこなさないのとでは、どんな差がつきますか?
佐藤:テキストを相手にする処理では、正規表現を活用することで簡潔かつ分かりやすい記述が可能となるケースが多々あります。正規表現をうまく使えないプログラマーは、ちょっとした処理でもループでテキストを文字単位に分割し、複雑な条件分岐を処理中に記述してしまいます。
このようなプログラムは確かに動作するかもしれませんが、読みやすさやメンテナンスのしやすさという観点で見れば大きなマイナスとなるでしょう。
「正規表現を使いこなす」という質問からすると拍子抜けされるかもしれませんが、正規表現を使って解決すべき現場の問題の多くは、基本正規表現と拡張正規表現の範囲でも十分まかなえます。
ですので、本当に基本的な部分をちゃんと理解するだけでもプログラマーとしては大きなアドバンテージになります。大切なのは個々のメタキャラクタの意味をきちんと押さえること、そして実践を繰り返すことでしょう。最初はとっつきにくく見える正規表現も、慣れてくるうちに自然と記述できるようになります。
――開発者以外でも正規表現を使えることでどのような利点がありますか?
佐藤:現在は開発者以外の方でも、各種のクラウドサービスなどのツールやリソースを活用して生産性の向上、さらにはビジネス上の成果を求められる時代です。処理対象の指示や結果の加工に正規表現が必要とされる、あるいは正規表現を使うことでより柔軟な処理を実現できるといった局面は今後も増えてくるはずです。
たとえば、RPA(Robotic Process Automation)ではExcelやPDFファイルから特定のデータのみを抜き出し、妥当性を判断し、加工したうえで最終的な結果を得るといったことが普通に行われます。このような処理は、それこそ正規表現が最も得意とする領域です。
結果に辿りつく過程を理解してほしい
――2005年に出版された初版と、この改訂版が出る間に、どのような変化がありましたか?
佐藤:本書の前書きにも書きましたが、Unicodeが文字コードの標準的地位を獲得したことです。文字の選択はUnicodeのプロパティにもとづいて行われるため、たとえば1文字の数字を表す「\d」はUS-ASCII以外の数字にもマッチすることが当然になりつつあります。
また、絵文字のように複数のコードポイントを消費して目に見える1文字を表すケースもこれまで以上に増えました。本書でも可能な限り、これらのポイントについて説明しています。
――本書の特徴や狙いについても教えてください。
佐藤:初版執筆時点からそうなのですが、UNIXの古典的なツールであるgrep、sed、awkに紙幅を割いていることです。利用可能な正規表現という観点では、これらはほかの処理系に格段に劣ります。
それでも取り上げているのは、正規表現の歴史やこれらのツールが果たしてきた功績をリスペクトしていることはもちろん、UNIX系OSであれば間違いなくどこでも使えるというメリットがあるからです。そのため、逆引きリファレンスでも可能な限り、これらで使えるメタキャラクタの範囲でならどう記述するかを説明しました。
また、逆引きリファレンスに取り上げた正規表現の説明に際しては、単に結果を示すだけではなく「どうしてその結果に辿りついたのか」「ほかの記述ではどのような問題が発生しうるか」を極力解説するようにしています。
結果に辿りつく過程を読者にトレースしていただくことによって、個々のメタキャラクタの意味や用途を理解してもらえれば、と考えたからです。
一つ一つ使えるメタキャラクタを増やしていくことから
――では、本書はどんな方に読んでもらいたいですか?
佐藤:出版時期(5月)から考えれば、これからプログラマーとしてデビューする新社会人の方が最初に挙げられます。また、ある程度経験を積んだものの、正規表現にいまいち馴染めないという若手・中堅層にも手に取っていただけると嬉しいですね。
――ありがとうございます。最後に、正規表現を使ってみようかなと考えている方に向けて、アドバイスをいただけますでしょうか。
佐藤:先にもお話ししましたが、基本正規表現と拡張正規表現の範囲が扱えるようになるだけでも、多くの問題が解決できます。そして、先読みや戻り読みといった概念が使えるようになると、もっと効率は上がります。まずは焦らずに、一つ一つ自分が使えるメタキャラクタを増やしていくことから始めましょう。
また、他者が記述した正規表現を利用する場合は、本書のメタキャラクタリファレンスを使ってその内容をきちんと紐解き、理解してから使ってください。自分が理解できない正規表現は、どんな結果をもたらすか分かりませんから。