【Astro】記事書くために必要なフォルダや.mdファイルを自動で配置したい
Astro で記事を書くにあたって、markdownをコピペしたり画像用のフォルダを準備したりが面倒だと感じたので Windowsの標準機能 バッチファイル で省力化してみました。
バッチファイル って?
バッチファイルとはコマンドプロンプト上で実行できる命令を予めファイルとして保存しておき、例えばクリックするだけで用意した命令を実行することのできるファイルを指します。一定のルールに則ってフォルダを作成する、ファイルを連番にして複数個作成するなど様々なことができます。

そもそもコマンドプロンプトって何?と思う方の参考に。上画像のようなソフトウェアです。名前は知らなくとも見たことある人も多いのでは?
Astroプロジェクトのファイル構造とルール
運用によって異なりますが私場合は、以下のようなファイル構造となっています。
src
└ pages
└ posts
├ YYYY-MM-DD_○○○.md
├ YYYY-MM-DD_○○○.md
└ YYYY-MM-DD_○○○.md
public
└ images
└ blog
├ YYYY-MM-DD_○○○
├ YYYY-MM-DD_○○○
└ YYYY-MM-DD_○○○
├ logo.png
└ sample01.png
Markdown記事は、 src\pages\posts 内に YYYY-MM-DD_○○○(記事名).md というルールで命名しています。 そして画像は、 public\images\blog 内に記事名と同名のフォルダを作り、その中で管理しています。
今回の目標
src, public と同じ階層にtemplate\template.md と write.bat(バッチファイル) を配置し記事と画像フォルダを自動で生成する
src
public
template
└ template.md (コピー元となるMarkdownファイル)
write.bat
こんな感じで配置するイメージですね!
コード全文
最終的なコードはこんな感じになります。順番に見ていきましょう。
@echo off
rem 文字コードをUTF-8に変更
chcp 65001
rem スクリーン初期化
cls
rem 現在の日付を取得する(YYYY/MM/DD)
set Date=%Date%
rem (YYYY/MM/DD) => (YYYY-MM-DD) へ置換する
set Date=%Date:/=-%
rem フォルダ名の入力
set /p FolderName="Please enter a folder name: "
rem フォルダパス生成
set FolderName=%Date%_%FolderName%
set ImageFolder=public\images\blog\%FolderName%
rem フォルダの生成
mkdir %ImageFolder% %PostFolder%
rem テンプレートmarkdownファイルのコピー
copy template\template.md src\pages\posts\%FolderName%.md
rem 対象フォルダを開く
START EXPLORER %ImageFolder%
rem はコメント
rem コメントだよ!
rem ○○○ はコメントです。あってもなくても実行に影響はありません。
おまじない&文字コードを設定する
@echo off
rem 文字コードをUTF-8に変更
chcp 65001
@echo off はコマンドプロンプトの使用上命令を使用すると反復確認表示がされるためそれをオフにする命令です。画面をスッキリさせるための命令です。
chcp 65001 は、少しややこしいのですが文字コードをUTF-8に切り替えるための命令です。最近のWindowsはメモ帳の文字コードが標準でUTF-8で作成されるようなのでその前提です。コピペしてうまく動かない(文字化けする)場合には、文字コードについて調べてみてください。
画面をスッキリさせる便利命令 cls
rem スクリーン初期化
cls
cls はプロンプト上の文字列をすべてクリアするコマンドです
日付を取得する
rem 現在の日付を取得する(YYYY/MM/DD)
set Date=%Date%
rem (YYYY/MM/DD) => (YYYY-MM-DD) へ置換する
set Date=%Date:/=-%
Date という変数に日付を格納し、フォルダやファイル名として扱えない ”/” を ”-“に置換します。
任意の記事名を入力させる
rem フォルダ名の入力
set /p FolderName="Please enter a folder name: "
記事名は任意で命名したいので FolderName という変数に、ユーザの入力値を格納します。
フォルダを生成する
rem フォルダパス生成
set FolderName=%Date%_%FolderName%
set ImageFolder=public\images\blog\%FolderName%
rem フォルダの生成
mkdir %ImageFolder% %PostFolder%
先程の日付と入力値(FolderName)を結合し、フォルダ名を定義します。 また、画像フォルダを public\images\blog に生成します。
Markdownファイルのコピー
rem テンプレートmarkdownファイルのコピー
copy template\template.md src\pages\posts\%FolderName%.md
template\template.md を 画像フォルダ public\images\blog に%FolderName%で定義した名称でコピーします。
エクスプローラ を開く
rem 対象フォルダを開く
START EXPLORER %ImageFolder%
エクスプローラで画像フォルダを開きます。
実行する
作成したファイルの拡張子が.bat または .cmd となっていることを確認してください 作成したバッチファイル 私の場合は write.bat をダブルクリックすることで実行することができます。
おわりに
自分でファイルやフォルダをポチポチコピペするよりはだいぶ楽に作業できるようなりました。VScodeであれば直接ターミナルからバッチファイルの実行もできますし相性も○
バッチファイルは今回の内容以外でも工夫次第でMarkdownの中身も置換したりできるのでぜひ使いこなしてみてください!!