読書記録:「ToDoリスト」は捨てていい。
本マガジンでは、「Notion で(自分なりの)タスク・時間管理を行う方法」について、連載してきたので、
いきなり「読書記録」が挟まるのは、たとえ、書籍の内容が「タスク・時間管理」に関係するとは言っても、多少、不自然に思われるかもしれません。
割と、その辺は、気にならないという人も多いですかね?
実は、今まで、Notion の使い方や、「環境構築」をテーマとした記事ばかりで、思想的な話は、あまりしてきませんでしたし、
例えば、「プレ着手」の概要や、「inbox 不要論」などについては、一応、マガジン外で語るという、ある種の線引きをしています。
そして、それらの記事を上げた後で、マガジン内では、「プレ着手」を実践するための、より具体的な方法を解説する、という形式をとっていました。
では、なぜ、今回の「読書記録」は、マガジンに含めようと思ったのかというと、もちろん、Notion にも関係があるからですね。
私の場合、Notion で実践しているタスクシュートのログの中に、「読書メモ」が残されているから、と言えば、分かりやすいでしょうか?
つまり、本書の感想や、自分なりの考察などは、いずれ、マガジン外で書くとして、まずは、純粋に「読書記録」だけを、ご紹介したいと思います。
まぁ、あまり前置きが長くなってもアレなので、一体、どういうことなのかは、実際に、この記事を軽く読んでみて、確認していただければ幸いです。
それでは、始めていきましょう。
書籍紹介
本書は、副題にもある通り、人はなぜ「消耗」するのか、どうすればそれを回避できるのかについて、やさしく教えてくれる本で、
もっと言えば、「ToDoリスト」はなぜ人を消耗させるのか、どうすれば「捨てていい」とまで思えるのか、といったようなことが分かります。
タイトル通りですね。
しかし、書かれていることは、当然、それだけにとどまりません。
ただ、今回は、上述の通り、内容を深掘るのではなく、「読書メモ」をまとめるのが目的なので、早速、次の作業へと進んでしまいましょう。
ちなみに、タスクシュート認定トレーナーの方による紹介では、次の記事がオススメなので、
基本的に、タスクシューター向けにはなりますが、内容を早く知りたいといった場合には、是非、参考にしてみてください。
Notion 上でログを確認してみる
というわけで、ここからが本題なのですが、
まず、これから何をするのかが分かりやすいように、実際に本書を読んだ時のログの一覧を、Notion 上で表示させてみましょう。
私は、本書を「電子書籍」というプロジェクトの(ルーチン)タスクの一種として、読み進めていたため、
例えば、以下のような、「プロジェクトページ」に配置してあるテーブルで、さらにタスクの「名前」による絞り込みや、検索を行うことにより、
該当するタスクのログだけを、確認することができます。

単独のルーチンやプロジェクトでログを取っていれば、もっと楽にフィルタリングできたかもしれませんが、その辺の事情は、人それぞれですよね。
ともかく、これを見れば、本書を何回に分けて読んだのか、読むのにかかった時間や、先送くった回数なども、一目瞭然なわけですが、
今回、重要となるのは、各タスクのページに書かれている「内容」です。
ページに何かしら記入がある場合には、タスク名の左にアイコンがつくようになっているので、その点は分かりやすいでしょう。
例えば、ページの一つを適当に開いてみると、次のようになっています。

この日は、割と真面目にメモを取っていますが、大抵、もっとラフに、自分なりに重要だと思った点についてだけ、まとめている感じです。
と言っても、そもそも、私の場合、こうして、毎回のようにメモをしながら読む本というのは、かなり珍しく、
夕方以外の時間帯にも、午前中や夜寝る前に、日課として、それぞれ別の本を(しかも、曜日によって違う本を)読み進めていたりはするのですが、
ほとんどの場合、時間を記録するだけで、ページの中身は、基本的に空白のままになっているというのが、実情ではあります。
逆に言えば、本を読み終わった後で、なんとなく、色々とメモに書いていたような気がしたら、
結果として、ちょっと振り返ってみようか、などと思い立つこともある、というだけの話なのかもしれません。
ともあれ、こうやって、一つずつページを開いていけば、特定の書籍に関する「読書メモ」を、順番に見ていくことができるというわけです。
Notion からメモを抽出してみる
しかし、各タスクのページを、いちいち順番に開いて読んでいくのは、結構、面倒ですよね。
まぁ、軽く読むだけなら、それほどでもないかもしれませんが、
場合によっては、全てのメモを1ページにまとめたい、というようなこともあるのではないでしょうか?
そもそも、最初から、ルーチンやプロジェクトのページにメモを追記していく方針を採っていれば、一つのページを見るだけで事足りたのですが、
その辺りのページの使い分けは、人によって大きく異なるので、どうしても、タスクページにメモりたいということもあると思います。
また、どうしても、外部へ出力したいということも。
そんな時は、Notion API を使って、全ての「読書メモ」の文章を、抽出してきてしまうのがオススメで、
お分かりの通り、これこそが、この記事を本マガジンに含めた理由ですね。
例えば、GAS で、以下のようなコードを実行すると、特定の条件に当てはまるページの内容を、順番に取得していくことができます。
function getParagraph() {
const filter = { "filter": { "and": [
{ "property": "名前", "rich_text": { "contains": "「ToDoリスト」は捨てていい。" } },
{ "property": "ステータス", "status": { "equals": "完了" } }
] },
"sorts": [{ "property": "実行日", "direction": "ascending" }]
};
const options = {
'method': 'post',
'headers': {
'Authorization': 'Bearer ntn_XXXXXXXXXX',
'Content-Type': 'application/json',
'Notion-Version': '2022-06-28'
},
'payload': JSON.stringify(filter)
};
const response = UrlFetchApp.fetch('https://api.notion.com/v1/databases/xxxxxxxxxx/query', options);
const contents = JSON.parse(response.getContentText());
const results = contents.results;
results.forEach((result) => {
const children = getChildrenContents(result.id);
children.forEach((child) => {
if (child.paragraph) {
console.log(child.paragraph.rich_text[0].plain_text);
}
});
});
}例によって、コード中の「xxxxxxxxxx」は「タスクリストデータベースの ID」に、「ntn_XXXXXXXXXX」は Notion API の「シークレット」に、
それぞれ、置き換えておいてください。
まず、今回は、本書のタイトルを名前に含み、ステータスが「完了」のタスクを、実行日順に取得するため、以下のような「filter」を設定しました。
{ "filter": { "and": [
{ "property": "名前", "rich_text": { "contains": "「ToDoリスト」は捨てていい。" } },
{ "property": "ステータス", "status": { "equals": "完了" } }
] },
"sorts": [{ "property": "実行日", "direction": "ascending" }]
}そして、各ページの内容を取得してくるため、「getChildren()」という別の関数を作成し、利用しているのですが、
こちらは、以前にも、「ルーチンページ」の内容を複製する際に使っていて、実を言うと、初登場ではありません。
とは言え、前とは「シークレット」の渡し方だけ、少し異なります(前は、関数の引数にしていました)し、ここにもコードを掲載しておきましょう。
function getChildren(id) {
const options = {
'method': 'get',
'headers': {
'Authorization': 'Bearer ntn_XXXXXXXXXX',
'Notion-Version': '2022-06-28'
}
};
const response = UrlFetchApp.fetch('https://api.notion.com/v1/blocks/' + id + '/children?page_size=100', options);
const contents = JSON.parse(response.getContentText());
return contents.results;
}もちろん、引数を増やして、「getParagraph()」関数から「シークレット」を渡すように変更してもらっても構いませんよ。
ところで、本来、Notion のページには、様々な「ブロック」を配置でき、その種類によって、データの取得方法が、全く違うので、
実は、かなり厄介なのですが、今回の「読書メモ」は、上の画像でも紹介したように、それを見据えて、全て、単純なテキストで書いてあるため、
本プログラムを実行するだけで、以下のように、一行ずつ、容易に取得することができました。

逆に言えば、特殊な種類のブロック、例えば、「箇条書きリスト」や「引用」などは、次のような方法では出力できないので、要注意です。
console.log(child.paragraph.rich_text[0].plain_text);この辺りのことは、またいずれ、解説していきたいと思っています。
マークダウンファイルとして出力する
抽出したデータを、どういった形式で書き出すかも、自由なのですが、
マークダウンファイルとして出力したいなら、例えば、以下のように、コードを書き換えると良いでしょう。
function getParagraph() {
...
let text = `### 読書メモ\n\n`;
results.forEach((result) => {
const children = getChildrenContents(result.id);
children.forEach((child) => {
if (child.paragraph) {
text += `- ${child.paragraph.rich_text[0].plain_text}\n`;
}
});
});
DriveApp.createFile("「ToDoリスト」は捨てていい。.md", text);
}もとより、GAS を使っているのであれば、こうして、Google ドライブに保存してしまうというのが、多分、いちばん簡単で、
これは、以前、「日次レビュー」に対して行なったのと、同じ手法ですね。
Google ドライブ( https://drive.google.com/drive/my-drive )上でファイルをプレビューしてみると、次のように表示されましたでしょうか?

また、Google ドライブのアプリをインストールした PC で、「マイドライブ」フォルダを「Obsidian」の「Vault」として指定し、
このファイルを開いてみると、おそらく、以下のようになります。

要するに、これから、ここで、アウトラインを操作するなどして、読書メモを整理していこう、というわけですが、
その結果は、次回にでも(マガジン外の記事で)紹介したいと思っているので、良ければ、引き続き、お付き合いください。
まとめ
今回は、特定の条件でタスクを絞り込み、タスクページの内容(プレーンなテキストで書いたメモ)を、収集する方法について、紹介してみました。
まぁ、「読書メモ」については、上でも少し触れたように、そもそも、書籍ごとに、ルーチンやプロジェクトのページを作成し、
そこに、「箇条書きリスト」や「引用」ブロックなども活用しつつ、どんどん追記していく形で書いていけば良く、
実際、私も、現在、試運転中である、タスクシュートの「少し変わった実装パターン」の環境では、そのような方法を採用するつもりだったりします。
ただし、「読書メモ」に限らず、タスクページの内容を取得してくる手法自体は、他にいくらでも応用が考えられると思うので、
もし、何か必要な時が来たら、是非、この記事のことを思い出して、参考にしてもらえれば幸いです。
ではまた。
