Perl Hackers Hub
第57回 自作ツールによる日常業務効率化―初歩的なコードだけで身近な問題を解決!(1)
本連載では第一線のPerlハッカーが回替わりで執筆していきます。今回のハッカーは非エンジニアとして普段からプログラミング情報を発信しているnote103こと門松宏明さんで,
本稿のサンプルコードは,
簡単なツールで日々を効率化する
筆者は昨年までフリーランスの編集者として活動していましたが,
Perlは今なお時代とともに着実な進化を遂げていますが,
なお,
基礎構文でツールを作る
初めに紹介するのは,for
文,if
文などの初歩的な構文だけで作成したツールです。
作業の進捗を可視化する
筆者が以前に編集していた音楽全集
footnotes-counter.
#!/usr/bin/env perl
use strict;
use warnings;
my $done = 0;
my $doing = 0;
my $todo = 0;
for (<DATA>) { ――(1)
if ($_ =~ /\A■/) { ┓
$done++; |
} |
elsif ($_ =~ /\A▲/) { |
$doing++; |(2)
} |
elsif ($_ =~ /\A□/) { |
$todo++; |
} |
} ┛
print "完了: $done, 作成中: $doing, 未着手: $todo\n";
__DATA__ ┓
■見出しA |
本文A |
|
▲見出しB |(3)
本文B |
|
□見出しC |
本文C |
(省略) ┛
このプログラムはfor
文,if
文,__
の組み合わせでできています。__
は,__
以降に置かれたテキストDATA
ファイルハンドルから読み出すことができます
このプログラムでは,for
文で下方へ流し,if
文と正規表現で受け止めて必要な処理を施しています
使い方
使い方はシンプルです。まず注釈が完成した見出しに■,__
以下にその注釈テキストをペーストして実行すると,
実行例
$ perl footnotes-counter.pl
完了: 17, 作成中: 4, 未着手: 87
このfor
文,if
文,__
の組み合わせは,
- 注1)
- 『commmons: schola
(コモンズ・ スコラ) ── 坂本龍一監修による音楽の百科事典』 - 注2)
- 文脈によってさまざまな意味を持つ用語ですが,
ここでは 「しるし」 や 「ラベル」 のような意味で用いています。
データの書式を変換する
前述の音楽全集では,
そこで,
西洋音楽史年表の素材データ
1920 コルンゴルトのオペラ《死の都》初演
1920 ホルスト《惑星》全曲初演
1922 ヒンデミット《一九二二年》
1922 イベール《寄港地》
1923 ストラヴィンスキー《結婚》初演
1923 オネゲル《機関車パシフィック231》
1924 プッチーニ《トゥーランドット》(未完)
1924 レスピーギ《ローマの松》
1924 ガーシュウィン《ラプソディ・イン・ブルー》初演
しかし,
西洋音楽史年表の仕上がり例
●1920年 コルンゴルトのオペラ《死の都》初演 ●ホルスト《惑星》全曲初演
●1922年 ヒンデミット《一九二二年》 ●イベール《寄港地》
●1923年 ストラヴィンスキー《結婚》初演 ●オネゲル《機関車パシフィック231》
●1924年 プッチーニ《トゥーランドット》(未完) ●レスピーギ《ローマの松》 ●ガーシュウィン《ラプソディ・イン・ブルー》初演
そこで,
timeline-parser.
my @data = <DATA>;
my $year;
my $buf_year = 0;
my $topic;
for (@data) {
if ($_ =~ /\A(\d+)\t(.+)/) {
$year = $1;
$topic = $2;
if ($year == $buf_year) {
print " ●$topic";
}
else {
print "\n●$year年 $topic";
}
$buf_year = $year;
}
}
__DATA__
1920 コルンゴルトのオペラ《死の都》初演
1920 ホルスト《惑星》全曲初演
(省略)
__
以下に管理用フォーマットにのっとった年表項目を入れて実行すると,
もしこの変換ツールがなければ,
ファイル名を簡便にリネームする
もう一つ,
通常,mv
コマンドを使いますが,bar.
をbaz.
にするように,r
をz
にしたいだけですから,copyrename.
です。
使い方
このツールでリネームを行う場合は,rname
を渡します.bashrc
rr
というエイリアスを設定しています。エイリアスとは,
.bashrc
alias rr='path/to/copy-rename.pl rname'
カレントディレクトリにはapple.
という名前のファイルが入っています。コードを実行すると,f
)
$ rr
f/d/a/q?
> f
すると,apple
のe
をf
にする場合はe f
と入力します。
ls:
file: apple.md
Put the words before & after
> e f
置換対象の指定が済むと,y
を入力し,
from: ┓
apple.md |
to: |(1)
applf.md ┛
Change OK? [y/N]
> y
ls:
file: applf.md
- 注3)
- これ以降で紹介する公開プログラムについても同様です。
- 注4)
- 引数に
rcopy
を渡すと,同様の方法でファイルを複製することもできます。詳しくはGitHubリポジトリのREADMEを参照してください。 - 注5)
- bashの起動時に読み込まれる設定ファイルの一つです。これに設定を記述しておくと,
シェルを起動するたびに同じ内容を入力する必要がなくなります。
<続きの
本誌最新号をチェック!
WEB+DB PRESS Vol.122
2021年4月24日発売
B5判/168ページ
定価1,628円
(本体1,480円+税10%)
ISBN978-4-297-12119-8
- 特集1
上から下まで全レイヤ解説! 複雑化した世界を体系的に学ぶ
Web技術総整理 - 特集2
新バージョン登場! PythonによるWeb開発の基本
はじめてのDjango - 特集3
Rustで実装!
作って学ぶRDBMSのしくみ
バックナンバー
Perl Hackers Hub
- 第66回 モジュールによる時間の多様な取り扱い(2)
- 第66回 モジュールによる時間の多様な取り扱い(1)
- 第65回 依存モジュールの更新 ―update-cpanfile,GitHub Actionsで実現!(2)
- 第65回 依存モジュールの更新 ―update-cpanfile,GitHub Actionsで実現!(1)
- 第64回 少しマニアックなPerlのテクニック―特殊変数,低レベルの標準関数を使いこなす(2)
- 第64回 少しマニアックなPerlのテクニック―特殊変数,低レベルの標準関数を使いこなす(1)
- 第63回 PPIとPerl::Tidyを組み合わせて作るコード整形ツール(2)
- 第63回 PPIとPerl::Tidyを組み合わせて作るコード整形ツール(1)
- 第62回 Perl歴史散策 ―インタプリタの実装と,構文の進化をたどる(3)
- 第62回 Perl歴史散策 ―インタプリタの実装と,構文の進化をたどる(2)