【楽ちん】ブログで対談風テキストを楽に作るためのツール【PowerShell】
オープニングトーク
いら:どうも、いらにかの半身の「いら」です。
にか:どうも、もう半分の「にか」です。ってこれは一体なんですか?
いら:今回は対談風テキストをブログに書き起こすときに便利なツールを作ってみたので、それの話をしようかなと。
にか:なるほど。それで実際にこんなテキストを書いてるのですね。
いら:対談風テキストを書くときって大抵「<名前>:<セリフ>」だよね。
にか:コロン《:》の代わりに余白とかのケースもありますね。
いら:で、大抵のブログってHTML直書き or WYSIWYGって呼ばれる仕組みを採用してるんだけど、名前のところを色つけたりとかボールド表示したりとか、いちいちブログのエディタで操作するの面倒くさいんだよね。
にか:あー、以前「よくわかる道草屋」を作ったときにも苦しめられてましたね
※「よくわかる道草屋」は某サービスの評価試験目的で作られたサイト。スマホじゃないとレイアウトが崩れるのであまり紹介したくない黒歴史。
いら:無駄に思える繰り返し作業が本当にストレスなんだよね。パソコンに出来ることならパソコンにやらせるべきだし。あと、シエル学園シリーズは対談系テキストも書く予定だから、いっそのことツール作っちゃおうってことで作りました。
にか:「作りました」ってすでに過去形なのか(笑)
というわけで始まった今回のブログのネタは、対談風テキストの置換支援ツールのお話です。
ソースコード
基礎ロジックを先に考えるのがめんどくさかったので、先にPowerShellでプロトタイプを組みました。以下、プロトタイプのソースコードです。
Replace-Chacolor.ps1
function Replace-Chacolor {
param(
$FilePath,
[PSCustomObject]$Templates,
$JsonTemplateFile = ""
)
#TODO: tempalte validationを追加する
$text = (Get-Content $FilePath -Raw)
$result = $text
if ($JsonTemplateFile -ne ""){
$Templates = Get-Content -Raw $JsonTemplateFile | ConvertFrom-Json
Write-Debug $Templates[0].Text
}
$Templates | % {
$tmp = $_
$result = $result -replace $tmp.Text,$tmp.ReplaceText
}
$result
}
今のところ、ルール(テンプレート)に書かれているTextをReplaceTextに置換するだけの簡易実装です。
本当はルール自体に置換処理のスクリプトを書けるようにもできるんですが、過剰すぎるし、ルール記述が複雑になりそうなので機能を除外しました。
ちなみに、僕はモジュール化してもう少し便利に使っています。
使ってみた様子(デモ)
まずは、テキストを用意します。
text.txt
いら:そういえばテスト設計どう?
にか:うーん、コスト大きいですね。
いら:じゃあ設計後回しでホワイトボックステストにしちゃおう
にか:了解です。ちなみに、この機能ってどれくらいで作れそうです?
いら:うーん、ちょっと10分くらい待ってもらっていい?
~10分後~
いら:だいたい8分くらいかな
にか:わかりました。工数表に記入しときますね。
いら:ついでにDoneって記載しておいて
にか:えっ?
いら:もう作っちゃったから
見積もりよりも先にモノを作ってしまうのが、良くも悪くもいらの性分《タチ》だった・
そしたら、ルールファイル(テンプレート)を作ります。
template.json
[
{
"Text" : "いら:",
"ReplaceText":"<span style=\"color: #ef5350\">いら:</span>"
},
{
"Text":"にか:",
"ReplaceText":"<span style=\"color: #42a5f5\">にか:</span>"
}
]
ちなみに、上記はJSONで書いていますがスクリプトにはPSObjectでも渡せるので、好きなコンフィグ形式で設定してPowerShellでPSObjectに変換してから渡しても動きます。
つまり、Replace-Chacolor -FilePath .\text.txt -Template $(someScriptConfig.ps1)
みたいにPSObjectのコンフィグを返すPowerShellスクリプトでルールファイルを書いておくことも出来ます。
※ルールファイルをスクリプトで書く黒魔術の便利さはPython使いならよく知ってるはず(多分
ちょっと話が逸れましたが、これをこんな感じで使います。
PS [NIKA-DESKTOP]> Replace-Chacolor -FilePath .\text.txt -JsonTemplateFile ..\template.json
するとこんな感じに出力が得られます。
<span style="color: #ef5350"><span style="color: #42a5f5">いら:</span></span>そういえばテスト設計どう?
にか:うーん、コスト大きいですね。
<span style="color: #ef5350"><span style="color: #42a5f5">いら:</span></span>じゃあ設計後回しでホワイトボックステストにしちゃおう
にか:了解です。ちなみに、この機能ってどれくらいで作れそうです?
<span style="color: #ef5350"><span style="color: #42a5f5">いら:</span></span>うーん、ちょっと10分くらい待ってもらっていい?
~10分後~
<span style="color: #ef5350"><span style="color: #42a5f5">いら:</span></span>だいたい8分くらいかな
にか:わかりました。工数表に記入しときますね。
<span style="color: #ef5350"><span style="color: #42a5f5">いら:</span></span>ついでにDoneって記載しておいて
にか:えっ?
<span style="color: #ef5350"><span style="color: #42a5f5">いら:</span></span>もう作っちゃったから
見積もりよりも先にモノを作ってしまうのが、良くも悪くもいらの性分《タチ》だった・
あとはコピペするなり保存するなりすればOK。
デモでは名前をカラー表示しているだけですが、アイコンとかに置換するのも出来ます。
意図して作ったわけではないですが、特定の固有名詞を毎回強調表示したりするのにも使えます。
PowerShellなんて使いこなせないよ‼(キレ気味)
需要があればMimiCaにWebアプリとして組み込みます。
(ぼくはもう満足してるからぼくの需要とモチベはない)
WebアプリはUIデザインとか面倒な工数がかかるので、需要が無いと無駄感が強すぎて腰が上がらない……
余談
別にテキストエディタの置換機能で置き換えても大差ないですが、この置換ルールを設定ファイルに記述しておけるのが一番の魅力です。何度も繰り返し使うケースや置換ルールが膨大なケースって、手でそれらをやるのは死にたくなります(ストレスフル)。
置換ルールを読み込ませて、テキストを一括処理する。
置換の際にはルールのロジックを考えなくて良い気楽さがあります。
(ストレスの緩和)
あと、ブログシステムによってHTMLだったりマークダウン記法だったり独自記法だったりするので、「Ci-enならこのルール、はてなブログはこのルール」みたいに管理できるのも非常に便利です。
あとスクリプトになっていれば、「テキストを保存したら置換後のテキストを自動で出力ファイルに生成」みたいなことが簡単に組めるので楽です。
ちなみに、ツールを作りはじめてから記事書き終わるまで3時間30分くらいでした。
(予約投稿なので、別日に書いてます)