スマホでもPCと同じ日記を書きたい
情報をクラウドストレージに纏めている。日記も同じく毎日日付ごとにMarkdownファイルを作って書いている。

Obsidianにはデイリーノートといってその日のノートをテンプレートから簡単に作る機能がある。
昔はそれを使っていたのだが、一つ問題があった。
朝、PCでデイリーノートを作り忘れると、その日のファイルがまだない状態なので、
スマホで日記を書くのが途端に面倒くさくなるということだ[1]。
Pythonで自動化していた時期もあったが、いつでもPCの電源がついているとは限らないので、自動的に作成されない日があった。
だったら24時間起きているサーバで、デイリーノートを自動で作ってしまえばいい。
できるさ、そう、Google Apps Script (GAS)ならね。
Google Apps Scriptでデイリーノートを毎日作ってもらう
Google Apps Script (GAS)は、Googleが提供しているプログラミング言語。JavaScriptがベースらしい。
GmailやGoogleカレンダー、そしてGoogleドライブなどのアプリケーションを操作できる。
というわけで、日記ファイルをGoogleドライブに置いていることが前提になるが、以下の方法でデイリーノートを作成することにした。
Obsidianを併用しているのでObsidianというフォルダの下にあることになっているが、書き換えればどのフォルダでもいけるはず。
自動化したいこと
以下を毎朝0時くらいに行う。
- Googleドライブの
Obsidian>Templetes
フォルダの中にデイリーノートのテンプレートTemplete for DailyNote.md
を用意しているので、その内容を読み込む - テンプレート内の
{{tp_date}}
の文字列を今日の日付に置換する[2] - Googleドライブの「Obsidian>DailyNote」フォルダの中にその日の日付で
yyyymmdd.md
という命名規則のファイルを作成して保存(既に同名のファイルがあれば何もしない)
やってみたこと
- Google Apps Scriptから、新しいプロジェクトを作って、.gsファイルに以下を書く。
function createDailyNote() {
//日付のフォーマット
var d1 = Utilities.formatDate(new Date(), 'Asia/Tokyo', 'yyyy-MM-dd');
// Obsidian>Templetesフォルダを取得する
var tempfolder = getFolder(getFolder(null,'Obsidian'),'Templetes');
//デイリーノート用のテンプレートの中身を読み込む
var content = tempfolder.getFilesByName('Templete for DailyNote.md').next().getBlob().getDataAsString("utf-8");
//中身が空だった時の予備
if (content == ""){
var content = "---\n" + "title: DailyNote\n" + "date: "+ d1 + "\n" + "keywords: \n" + "aliases: " + "tags: \n" + "---\n";
}
//日付を置換する
content = content.replace("{{tp_date}}",d1);
// Obsidian>DailyNoteフォルダを取得する
var folder = getFolder(getFolder(null,'Obsidian'),'DailyNotes');
console.log(folder.getName());
//ファイル名は日付
var name = d1 +".md";
//同名ファイルがないときだけ上書き
if (!(folder.getFilesByName(name).hasNext())) {
var file = folder.createFile(name, content);
console.log(file.getName())
}
}
function getFolder(parent, folname){
//フォルダ取得関数
if (parent == null) {
parent = DriveApp.getRootFolder();
}
const folders = parent.getFoldersByName(folname);
let targetfol;
if (folders.hasNext()){
targetfol = folders.next();
} else{
targetfol = null;
}
return targetfol;
}
- 「トリガー」(時計のアイコン)の設定に行って、「createDailyNote」関数を以下の条件で実行するようにする。
- 時間主導型
- 日付ベースのタイマー
- 午前0時~1時
これで毎朝その日の日付で日記のテンプレートが用意されている状態になった。
いわばページが自動補充される日記である。やったね。
まとめ:できるだけ意志力に頼らずに日記を続けたい
ページの補充を自動化することによって、日記ファイルを作る手間がなくなり、日記を続けやすくなる。
日記を続けると頭が良くなるという話もあるので、ちょっとでもいいから自動化して、意志力に頼らず続けたい。
参考リンク
参考にした本
『詳解! Google Apps Script完全入門 第3版』
ネット上の情報だと断片的だから、こういう体系だった本が1冊あると助かる。
脚注
- 「仮の日記」というファイルを作ってはいるが、そこから本来の日付ファイルに戻すのをかなりの確率で忘れる[↩]
- 出現が1回だけなのでReplaceをそのまま使っているが、何度も出てくるなら正規表現の方がいいかも[↩]