Googleドライブ+GASで日記のページを自動で補充する

※当サイトは、アフィリエイト広告を利用しています

スマホでもPCと同じ日記を書きたい

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

情報はファイルとして一元管理することにした (別題:Evernoteが開かなくなった)
ある日Evernoteが開かなくなった読書メモ、勉強ノート、日記といった情報を一元化しようということは今やあらゆる本に書いてある。メリットとしては以下の通りか。一度収集した情報を再度収集したり探し回ったりする時間をなくせるすべての情報が同じ...

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時くらいに行う。

  1. GoogleドライブのObsidian>Templetesフォルダの中にデイリーノートのテンプレートTemplete for DailyNote.mdを用意しているので、その内容を読み込む
  2. テンプレート内の{{tp_date}}の文字列を今日の日付に置換する[2]
  3. 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時
GASで毎日デイリーノートを作成する設定

GASで毎日デイリーノートを作成する設定

これで毎朝その日の日付で日記のテンプレートが用意されている状態になった。
いわばページが自動補充される日記である。やったね。

まとめ:できるだけ意志力に頼らずに日記を続けたい

ページの補充を自動化することによって、日記ファイルを作る手間がなくなり、日記を続けやすくなる。
日記を続けると頭が良くなるという話もあるので、ちょっとでもいいから自動化して、意志力に頼らず続けたい。

参考リンク

参考にした本

『詳解! Google Apps Script完全入門 第3版』
ネット上の情報だと断片的だから、こういう体系だった本が1冊あると助かる。

脚注

  1. 「仮の日記」というファイルを作ってはいるが、そこから本来の日付ファイルに戻すのをかなりの確率で忘れる[]
  2. 出現が1回だけなのでReplaceをそのまま使っているが、何度も出てくるなら正規表現の方がいいかも[]
タイトルとURLをコピーしました