Gatsbyのブログがわりと体に馴染んできて、サクッとブログを作れるようにしたかったので、テンプレから記事を作成するPowershellのスクリプトを書きました。
こういう場面は何かとある気がするので、備忘録的にメモ。
引数と日付から保存先のディレクトリ名を決める
createNewBlog.ps1 newArticleみたいにして、記事のフォルダとテンプレートのマークダウンを生成してほしいので、まずはフォルダを作ります。日時についてはGet-Date -Formatでフォーマット指定した日付を出力できるようです。-UFormatだとUNIX形式で指定できます。
#今日の日付
$TODAY = Get-Date -Format "yyMMdd_"
#ブログのタイムスタンプ
$BLOGTIME = Get-Date -UFormat "%Y-%m-%dT%T%Z"
#保存先のディレクトリ名
$DIRNAME = "content/blog/" + $TODAY + $Args[0]
#テンプレートファイルを
mkdir $DIRNAMEこれでGatsbyの記事用フォルダcontent/blog/220227_newArticleが生成されます。PowerShellの場合引数は$Args[0]みたいにして配列に入るらしい。
テンプレートの.mdファイルを編集して保存
Copy-Itemでコピーして、Get-Content -replaceオプションで置換しながら書き換えていきます。置換するごとにファイル出力してるけど、もうちょっとスマートな書き方あるのかな。$fileContent > $MDFILEで出力したらUTF16-LEで保存されてしまい、frontmatterが全てnullになって若干ハマりましたが、Out-Fileでエンコーディングを明示的に指定して事なきを得ました。
#テンプレートを置換で書き換える
$MDFILE = $DIRNAME + "/index.md"
Copy-Item "content/template/index.md" $MDFILE
$fileContent = $(Get-Content -Encoding UTF8 $MDFILE) -replace "date:", $("date: `"" + $BLOGTIME + "`"")
$fileContent | Out-File $($MDFILE) -Encoding utf8
$fileContent = $(Get-Content -Encoding UTF8 $MDFILE) -replace "image:", $("image: `"" + $TODAY + $Args[0] + "/image.png`"")
$fileContent | Out-File $($MDFILE) -Encoding utf8シェルスクリプトをサクッと作れるようになると色々幸せになれそうだし、こういうのでちょっとずつ慣れたい…