Perl Hackers Hub

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

この記事を読むのに必要な時間:およそ 1 分

(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で書かれており,そのどれもが入門書の前半に書かれているような初歩的な構文です。もしこのツールを不特定多数のユーザーが使うのであれば,想定外の入力にも対応できる複雑なしくみが必要になるかもしれませんが,自分だけが限定的な用途で使う前提であれば,このような最小限のコードでも十分に目的を果たせます。

注1)
詳しくは当社代表によるブログ記事ヘルプのバージョン管理・編集・デプロイの仕組みを整備した話をご覧ください。
使い方

では,実際に使ってみましょう。ルートディレクトリで,対象となる複数のファイル名に共通するフレーズ(ここでは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.113

2019年10月24日発売
B5判/160ページ
定価(本体1,480円+税)
ISBN978-4-297-10905-9

  • 特集1
    接続エラー,性能低下,権限エラー,クラウド障害
    AWSトラブル解決
    原因調査・対応・予防のノウハウ
  • 特集2
    Ruby書き方ドリル
    要点解説と例題で身に付く!
  • 特集3
    体験
    ドメイン駆動設計
    モデリングから実装までを一気に制覇
  • 一般記事
    FigmaによるUIデザイン
    デザイナーとエンジニアがオンラインで協業できる!
  • 一般記事
    入門
    SwooleによるPHP非同期処理
    高速化のための並列実行はどのように書くのか