本連載では第一線のPerlハッカーが回替わりで執筆していきます。今回のハッカーは非エンジニアとして普段からプログラミング情報を発信しているnote103こと門松宏明さんで、テーマは「自作ツールによる日常業務効率化」です。
本稿のサンプルコードは、WEB+DB PRESS Vol.112のサポートサイトから入手できます。
簡単なツールで日々を効率化する
筆者は昨年までフリーランスの編集者として活動していましたが、現在はIT企業のカスタマーサポートとして働いています。その一方で、数年前にPerlのプログラミングに出会って以来、Perlを使って自分のためのツールをたくさん作ってきました。本業のプログラマーのように大規模なプログラムや本格的な手法は扱えませんが、基礎的な構文を組み合わせるだけでも驚くほど多様なプログラムを作れることを日々実感しています。
Perlは今なお時代とともに着実な進化を遂げていますが、本稿ではそうした最新の事情にはあえて触れず、基本的なコードによる簡単なツールでも普段の業務や生活を飛躍的に効率化してくれることを紹介します。
なお、本稿ではPerl 5.28.0を使用し、Macでの操作を前提としています。
基礎構文でツールを作る
初めに紹介するのは、for
文、if
文などの初歩的な構文だけで作成したツールです。
作業の進捗を可視化する
筆者が以前に編集していた音楽全集[1]では、毎巻脚注を100~150個ほど作成していました。この作業は地味な割にたいへんな労力を必要とすることから、ペースを落とさずに作り続ける工夫が必要でした。そこで、「今日は注釈を何個作った、残りは何個になった」という進捗を可視化し、自らを鼓舞するために書いたのが次のコードです。
このプログラムはfor
文、if
文、__DATA__
の組み合わせでできています。__DATA__
は、実際のファイルの終端よりも前の場所に、論理的なスクリプトの終端を設定できるトークン[2]です。__DATA__
以降に置かれたテキスト((3))は、DATA
ファイルハンドルから読み出すことができます((1))。
このプログラムでは、それをfor
文で下方へ流し、if
文と正規表現で受け止めて必要な処理を施しています((2))。
使い方
使い方はシンプルです。まず注釈が完成した見出しに■、作成中の見出しには▲、未着手のものに□マークを付けておき、先ほど(3)で示した__DATA__
以下にその注釈テキストをペーストして実行すると、次のように進捗を一目で把握できます。
このfor
文、if
文、__DATA__
の組み合わせは、ほかにもさまざまな目的に応用できます。次に紹介するのもその一つです。
データの書式を変換する
前述の音楽全集では、毎回テーマに沿った年表を巻末に掲載していました。各巻のテーマはクラシック、ポップス、民族音楽など目まぐるしく変わるので、テーマに特化した項目はゼロから作らなければいけませんが、その他の一般的な音楽史や世界史については以前に作った項目をある程度再利用することができました。
そこで、筆者は過去に作成した年表上のすべての出来事を、次のように1本のテキストファイルにストックしておき、使い回せそうな内容があればそこから取り出して使うようにしていました。
しかし、ここで一つの問題が生じます。この素材データでは、内容を整理しやすいように1行ごとに出来事を記し、各行頭に年数を振っていますが、実際の年表では出来事単位ではなく、年単位で年数が振られていたほうが自然です。そのため、本番用のデータは1年につき1行として、そこに複数の出来事がぶらさがるように修正する必要があります。また、可読性を高めるために●マークを追加し、最終的には次のように書き換えなければいけません。
そこで、前者から後者へ年表の書式を変換するために書いたのが次のコードです。
__DATA__
以下に管理用フォーマットにのっとった年表項目を入れて実行すると、本番用フォーマットに変換されたデータが出力されます。
もしこの変換ツールがなければ、何百行にも及ぶ項目をすべて目視と手作業で書き換えることになったでしょう。単純なコードですが、多くの時間と労力を節約することに貢献してくれました。
ファイル名を簡便にリネームする
もう一つ、Perlの基礎構文を使って作成したツールを紹介します。なお、このプログラムはGitHubで公開しているので、ここでは概要と使い方を中心に解説します[3]。
通常、ターミナルでファイルをリネームするときにはmv
コマンドを使いますが、このときにはリネーム後のファイル名をすべて入力する必要があるので、bar.txt
をbaz.txt
にするように、1文字だけ変更したい場合には無駄な入力が増えてしまいます。実際にはr
をz
にしたいだけですから、それに見合った操作をできたほうが便利です。そして、これを実現するのがcopyrename.pl
です。
使い方
このツールでリネームを行う場合は、実行時に引数としてrname
を渡します[4]。また、筆者はこの処理をよく行うので、.bashrc
[5]にrr
というエイリアスを設定しています。エイリアスとは、複雑なコマンドに簡単な別名を与えることで、コマンドを入力しやすくする機能です。
カレントディレクトリにはapple.md
という名前のファイルが入っています。コードを実行すると、処理対象をファイルかディレクトリ、またはその両方で指定するように促されるので、ここではファイル(f
)を指定します。
すると、カレントディレクトリの対象となるファイルが一覧表示されるので、たとえばapple
のe
をf
にする場合はe f
と入力します。
置換対象の指定が済むと、次のように処理前後の状態が表示されます((1))。意図のとおりであればy
を入力し、そうでなければ[Enter]キーでやりなおします。
<続きの(2)はこちら。>
- 特集1
イミュータブルデータモデルで始める
実践データモデリング
業務の複雑さをシンプルに表現!
- 特集2
いまはじめるFlutter
iOS/Android両対応アプリを開発してみよう
- 特集3
作って学ぶWeb3
ブロックチェーン、スマートコントラクト、NFT