Perl Hackers Hub

第57回自作ツールによる日常業務効率化―初歩的なコードだけで身近な問題を解決!(3)

(1)こちら⁠2)こちらから。

最小限のコードで書く

最後に、最近作ったばかりの小さなツールを紹介します。

拡張子が異なる同名ファイルを同時に開く

現在筆者が勤めるヴェルク⁠株⁠では、自社サービスboardのヘルプ記事をGitで管理しています[1]⁠。この際、本文データとそれ以外のデータ(タイトル・メタ情報など)をHTMLファイルとYAMLファイルに分けて記述し、たとえば「お問い合わせ方法」に関するヘルプ記事のソースファイルであれば、リポジトリの次の場所に配置しています。

本文データ
source/helps/help_how_to_contact.html
その他のデータ
source/helps/help_how_to_contact.yml

筆者はかつて編集者だった経験を活かして、こうしたヘルプ記事の文字校正を行っていますが、その際にはそれら2本のテキストファイルを両方開いておく必要があります。

しかし、これを毎回MacのFinderで探して開くのはたいへんです。そこで、この作業を省力化するために作ったのがfind-file-open.plです。

find-file-open.pl
my $query = $ARGV[0];

unless ($query) {
    say "Input a query.";
    exit;
}

my $result = `find . -iname "*$query*"`;
print $result;

my @result = split /\n/, $result;

say "\nTotal files: ".scalar @result;
print "OK? (y/N)\n> ";

my $answer = <STDIN>;
chomp $answer;

if ($answer eq 'y') {
    for (@result) {
        print `open $_`;
    }
}

本ツールは、これまでに紹介した中でもとりわけ短いコードでできています。

シェルコマンドのfindopenを少し使っている以外はPerlで書かれており、そのどれもが入門書の前半に書かれているような初歩的な構文です。もしこのツールを不特定多数のユーザーが使うのであれば、想定外の入力にも対応できる複雑なしくみが必要になるかもしれませんが、自分だけが限定的な用途で使う前提であれば、このような最小限のコードでも十分に目的を果たせます。

使い方

では、実際に使ってみましょう。ルートディレクトリで、対象となる複数のファイル名に共通するフレーズ(ここではhelp_how_to_contactを引数として渡して実行します。なお、ここではfoというエイリアスで呼び出します。

.bashrc
alias fo='perl path/to/find-file-open.pl'
実行例
$ fo help_how_to_contact

すると、次のように検索にヒットしたファイルが列記されます。その対象で問題がなければyで決定し、意図しない結果であれば条件を変えてやりなおします。

./source/helps/help_how_to_contact.html
./source/helps/help_how_to_contact.yml

Total files: 2
OK? (y/N)
> y

この場合は、表示された2本のファイルが同時に開かれます。

このツールによって、以前は数分かかっていたファイルの準備が数秒で済むようになりました。同サービスには400本弱のヘルプ記事があることを考えると、この小さなプログラムがもたらした効果は非常に大きなものだと言えるでしょう。

まとめ

本稿では、筆者が日々の生活の中でPerlをどのように活用しているか、実例とともに解説しました。扱った内容は必ずしもPerlに特有のものではなく、ほかのプログラミング言語で実現できるものもあると思います。もし気になったアイデアがあれば、手に馴染んだ環境に置き換えて、ぜひ試してみてください。

さて、次回の執筆者は尾形鉄次さんで、テーマは「正規表現の勘所」です。お楽しみに。

WEB+DB PRESS

本誌最新号をチェック!
WEB+DB PRESS Vol.130

2022年8月24日発売
B5判/168ページ
定価1,628円
(本体1,480円+税10%)
ISBN978-4-297-13000-8

  • 特集1
    イミュータブルデータモデルで始める
    実践データモデリング

    業務の複雑さをシンプルに表現!
  • 特集2
    いまはじめるFlutter
    iOS/Android両対応アプリを開発してみよう
  • 特集3
    作って学ぶWeb3
    ブロックチェーン、スマートコントラクト、NFT

おすすめ記事

記事・ニュース一覧