さくらエディタのマクロで文書のテンプレを出力する

# はじめに
業務日誌、議事録などのテキストを作成する際、テンプレートがあると便利なことがあります。元々は `テンプレート_yyyymmdd.txt` みたいなものを用意して都度手動でリネームしていましたが、これをマクロで実現してみようと思って書いてみました。

# できたもの(結論)
WSH(JScript)で書いています。拡張子 .js で保存して外部マクロとして呼び出してください。その際文字コードに気をつけてください。私はSJISを使いました。文字コードについては本家のドキュメントも参照してください。
https://sakura-editor.github.io/help/HLP000204.html

```javascript
// 打ち合わせメモテンプレ作成

// 実行確認
if(MessageBox("エディタの入力内容を全て破棄し、テンプレートを適用します。\r\nよろしいですか？", 1) == 1) {
  setTemplate();
}

function setTemplate() {

    // 日付関連の文字列生成
    var dt = new Date();
    var year = dt.getFullYear();
    var month = ("00" + (dt.getMonth()+1)).slice(-2);
    var day = ("00" + (dt.getDate())).slice(-2);
    var week = dt.getDay();
    var weekString = ["日","月","火","水","木","金","土"][week];
    var today = year + "年" + month + "月" + day + "日" + "(" + weekString + ")";

    // 表題
    var meetingName = "朝ミーティング";
    // 保存先ディレクトリ
    var saveDir = "D:\\project01\\ミーティングメモ\\";
    // 保存拡張子
    var saveExtension = ".md.txt"
    // 保存ファイル名
    var saveFilename = meetingName + "_" + year + month + day + saveExtension;

    // クリア
    SelectAll( );
    Delete( );

    // ヘッダ部
    Editor.InsText("\r\n");
    Editor.InsText("# " + meetingName + "\r\n");
    Editor.InsText("  * " + today + "\r\n");
    Editor.InsText("\r\n");
    // 議題１
    Editor.InsText("## 本日の予定" + "\r\n");
    Editor.InsText("  * " + "\r\n");
    Editor.InsText("  * " + "\r\n");
    Editor.InsText("  * " + "\r\n");
    Editor.InsText("\r\n");
    // 議題２
    Editor.InsText("## XXXチーム報告" + "\r\n");
    Editor.InsText("  * " + "\r\n");
    Editor.InsText("  * " + "\r\n");
    Editor.InsText("  * " + "\r\n");
    Editor.InsText("\r\n");
    // 議題３
    Editor.InsText("## YYYチーム報告" + "\r\n");
    Editor.InsText("  * " + "\r\n");
    Editor.InsText("  * " + "\r\n");
    Editor.InsText("  * " + "\r\n");
    Editor.InsText("\r\n");
    // 議題４
    Editor.InsText("## その他" + "\r\n");
    Editor.InsText("  * " + "\r\n");
    Editor.InsText("  * " + "\r\n");
    Editor.InsText("  * " + "\r\n");
    Editor.InsText("\r\n");

    // 名前を付けて保存
    FileSaveAsDialog(saveDir + saveFilename);

}
```

# 説明
以下はダラダラとした説明です。

## 日付関連
この辺から拝借してきました。
https://qiita.com/VinceHeart/items/fc554fdee329a49aa928
本文とファイル名にそれぞれの形式で使用します。

## ファイル名・表題など
```javascript
    // 表題
    var meetingName = "朝ミーティング";
    // 保存先ディレクトリ
    var saveDir = "D:\\ほげほげプロジェクト\\ミーティングメモ\\";
    // 保存拡張子
    var saveExtension = ".md.txt"
    // 保存ファイル名
    var saveFilename = meetingName + "_" + year + month + day + saveExtension;
```
使いまわしがききやすいように、あえて細かく変数に切り分けています。日付を含むファイル名をここで決めてしまいます。
余談ですが拡張子 `.md.txt` は私の最近のお気に入りです。

## クリア
```javascript
    // クリア
    SelectAll( );
    Delete( );
```
そのまんま

## テンプレート本体
```javascript
    // ヘッダ部
    Editor.InsText("\r\n");
    Editor.InsText("# " + meetingName + "\r\n");
    Editor.InsText("  * " + today + "\r\n");
    Editor.InsText("\r\n");
    // 議題１
    Editor.InsText("## 本日の予定" + "\r\n");
    Editor.InsText("  * " + "\r\n");
    // （以下略）
```
`Editor.InsText()` でドンドコ書いていきます。タイトルやら日付は自動で。他テンプレートもご自身で使いたい議事録や日誌のフォーマットに従ってください。

## 名前を付けて保存
```javascript
    // 名前を付けて保存
    FileSaveAsDialog(saveDir + saveFilename);
```
テンプレート出力直後に保存してしまうことで、さくらエディタのタイプ別設定が活きて色分けやキーワードハイライトをしてくれます。また、私の場合は自動保存も有効にしています。

## 実行確認
```javascript
// 実行確認
if(MessageBox("エディタの入力内容を全て破棄し、テンプレートを適用します。\r\nよろしいですか？", 1) == 1) {
  setTemplate();
}
```
メッセージボックスを出してから実行します。いきなり全消しから始まるので・・・。

# おわりに
この記事では紹介しませんが、所定のパスにマクロを保存し、ショートカットキー登録までしてしまうと便利ですね。

以上です。