🖋️

はてなブログに書いた Notion 記事一覧

コメント
はてなブログに書いている Notion 記事へのリンクです。
種別
Notion 関係
はてなブログに書いた Notion 記事の一覧です。使いながら紆余曲折していることがよくわかります。
数が多くなってきたので、データベースではなくブックマークの羅列にします。
astro-notion-blog の導入 : Notion 解説 (76) - hkob's blog
ここに書いているように現在、ブログははてなブログを使っています。実は以前、はてなダイアリー難民 → Scrapbox ときて、職場の Web ページでブログを書いていた時期がありました。 この時は、Middleman という静的なサイト生成のシステムを利用していました。HAML で記述したものを HTML にコンバートするとともにタグや最近の更新などを自動作成するものでした。将来的には消してしまうので、リンクではなくスクリーンショットを掲載しておきます。 今回、同じ静的なサイト生成を行うことができる astro-notion-blog を知りました。Notion から blog を生成できる点はこれまであった easy-notion-blog と同様です。easy-notion-blog は動的な描画が可能なのでメリットは多いのですが、Notion からデータ取得を行うために、描画に少し時間がかかるのが気になっていました。 astro-notion-blog の方は、以前利用していた Middleman と同様に静的なページを事前に構築するものです。構築には少し時間がかかるものの、一度構築してしまえば単なる Web ページになるため描画は爆速になります。 Middleman は記事の執筆が面倒だったため、最終的には今のはてなブログに移行をしてしまいました。記事を Notion で執筆できるようになると、はてなブログよりも圧倒的に快適になるので、これを機に astro-notion-blog に移行することを検討しています。今回、その下準備を始めてみたので、ここで記事として公開することにしました。 基本的に astro-notion-blog は基本サーバを持たない人でも運用できるように Cloudflare で簡単にデプロイできるようにデフォルト設計されています。しかしながら、私の場合は職場の Web サーバで運用する予定です。ここで問題になるのがサブディレクトリです。現在、私の研究室のサーバの URL は以下のようになっています。 https://www2.metro-cit.ac.jp/~hkob/ astro-notion-blog は Cloudflare での利用を前提としているため、デフォルトで / に展開されるようになっているようでした。調査したところ、astro 自体はサブディレクトリには対応しているようでした。このことを踏まえて
astro-notion-blog の導入 : Notion 解説 (76) - hkob's blogastro-notion-blog の導入 : Notion 解説 (76) - hkob's blog
タスク依存関係に対応したコマンドライン版 NotionTimeRecoding の更新 : Notion 解説(72) - hkob's blog
Notion 2.19 にて、タスクの依存関係とサブアイテム対応が来ました。京都のイベントで紹介されていたものですね。 私の場合は、タスクが日をまたがないので、サブタスクよりもより大きなプロジェクトとの関連になります。このため、こちらではなく依存関係の方を積極的に使っていこうと思います。せっかくなので、NotionTimeRecording もこれに対応する形で更新します。 まずはデータベースに依存関係を追加します。デフォルトでは「Blocking」と「Blocked by」というプロパティ名(日本語版だともっと長い名称でした)となっていますが、わかりにくいので「後タスク」と「前タスク」という名称にしました。 新規タスクを作成する際に、依存関係を設定できるようにします。今すぐやるタスクに依存関係を設定する必要はないので、st コマンドはそのままとし、日付なしタスクを登録する nt コマンドの派生系として ntd (nt with dependency の意味) コマンドを追加することにします。以前の nt コマンドと同様にページを作りますが、その前に既存タスクの選択を実施し、選択した page_id をリレーションとして追加します。 ntd コマンドを増やす必要があるので、シンボリックリンクで作成します。 ln -s nt ntd これでいくつかのタスクをテストで登録してみます。 日付なしタスクは LaunchPad にリストビューで表示しています。ここに後タスクを表示するようにします。 試験作成 → 採点 → ルーブリック入力 → 返却 → 成績提出の依存関係が正しく並んでいることがわかります。 依存関係があるので、後タスクは表示されていても仕方ありません。これを表示しないようにします。まず、それを確認するための情報収集のため PercentPreviousDone というロールアッププロパティを用意します。これは前タスクの Done のチェック率を表示するものです。前タスクが存在しない場合は空になりますし、存在する場合には Done のチェックボックスの割合が入力されます。前タスクが複数存在する場合があるので、これが 1 (100%) になった時に、そのタスクが実行できることになります。 これを使って日付なしタスクのフィルタは以下のようになりました。 Done にチェックがついていないこと 日付が空欄であること PercentPreviousDone が空であるか 1 (100%) であること フィルタ変更後は一番先頭のタスクのみが表示されるようになりました。 リストでは依存関係でフィルタすることができましたが、これからタスクを開始する st コマンドや対応可能なタスクを表示する ot コマンドは全てのタスクが表示されてしまいます。これらも PercentPreviousDone でフィルタするようにしましょう。 これはすぐ終わるはずだったんですが、NotionRubyMapping のロールアップクエリのバグに気づきました。前回の Formula クエリの対応でエンバグをしてしまったみたいです。こちらを v0.7.1 としてリリースしました。これを踏まえて、st, ot コマンドの時のみロールアップの値をチェックして、依存関係タスクを一覧に表示しないように変更しました。ntd コマンドについては、全てのタスクが表示されるようにこのフィルタ処理を除外しています。 前回の記事を書いてから、タスク関係はかなりスッキリさせてしまったので、こちらのスクリプトもだいぶ簡略化しました。とりあえず、参考になるかもしれないので全スクリプトをスナップショットとして公開しておきます。 この仕組み自体は、今回の新しい機能のおかげというわけではなく、以前からできていたことです。ただ、Notion が依存関係の作成自体を簡単に設定できるようにしてくれたので、紹介しやすくなりましたね。私の場合だと日付なしタスクにしか依存関係を設定していないので、タイムラインビューなどにおける矢印の恩恵は得られませんね。そのタスクが同一日付に行われた時だけうまく見える感じですかね。
タスク依存関係に対応したコマンドライン版 NotionTimeRecoding の更新 : Notion 解説(72) - hkob's blogタスク依存関係に対応したコマンドライン版 NotionTimeRecoding の更新 : Notion 解説(72) - hkob's blog
Notion AI にサポートされた NotionRubyMapping の更新 : Notion 解説(71) - hkob's blog
これは「Notion Community Advent Calendar 2022」の1日目の記事です。 adventar.org ということで、今日から Notion Community のアドベントカレンダーが始まりました。執筆陣は以下のようになっております。すごい人が集まっていますよ。楽しみですね。 初日なのでアンバサダーの私から軽く始めてみたいと思います。 今の時点で Notion AI で遊べているのは、申し訳ないですがアンバサダーだけとなっていると思います。いろんな人が Twitter や動画、YouTube ライブなどで披露しているので楽しみにしている人が多いと思います。待っただけの甲斐はあると思うので、順番が回ってきたらたくさん遊んでください。色々な人にデモした結果をこちらのページにまとめているので、興味があったらみてください。 その中で、「Ruby で NotionRubyMapping を使って、page を作成するコードを書いてください。」と指示してみました。書かれたコードはこちらです。 これ、かなりいい線をついているし、見やすいコードです(このままでは動きませんが)。特に configure でトークンをセットするのは Ruby っぽい書き方で格好いいですね。悔しくなったので、この config の書き方をできるようにしてみました。 NotionRubyMapping は当初自分で API アクセスをせず、notion-ruby-client という別の gem を使って、API アクセスをしていました。このクライアントを作るという動作のため、トークンの設定は以下のような記述方法になっていました。 NotionCache.instance.create_client " secret_XXXXXXXXXXXXXXXXXXXX " このメソッドは以前は、内部で notion-ruby-client のオブジェクトを作成し、それにキーを渡すような処理をしていました。しかし、notion-ruby-client のバージョンアップがなかなかされず、それが原因で NotionRubyMapping 自体もアップデートできないという問題が発生しました。そのため、現在では notion-ruby-client に依存せず、自分で
Notion AI にサポートされた NotionRubyMapping の更新 : Notion 解説(71) - hkob's blogNotion AI にサポートされた NotionRubyMapping の更新 : Notion 解説(71) - hkob's blog
メール確認タスクのスケジュール化: Notion 解説 (70) - hkob's blog
最近は職場内のやり取りは Teams に移ってきていて、すっかりメールを確認する頻度が減ってしまいました。Dock のバッジなどで、Twitter、Slack、Teams までは確認できるのですが、メールの確認が漏れることが多いです。メールでのやり取りが頻繁だった頃は、Inbox 0 にするなどこれでタスク管理の代わりにしていたこともありましたが、すっかり Inbox 放置でトラブルになることが増えてきました。 IMAP でメールが読めていた時には、Spark というアプリで Inbox 内のメール数がバッジで表示されていました。現在は Web ベースの Outlook しか使えず、ページを開くまでメッセージ数が確認できないのもメールが使いにくくなった原因かと感じています。 せめて、朝一だけでも確実にメールチェックが行えるように自動的にタスク化することにしました。せっかくなので、今回導入された繰り返しテンプレートを利用することにします。 単にタスクを作るだけでは Notion を使っている意味がないので、少し工夫をします。せっかくページができるので、ここに気になったメールの内容を記録できるようにします。ただし、毎日空のページだと書き込みのハードルが高くなるので、この部分は同期ブロックにします。 最初に基準となるページに同期ブロックのオリジナルを用意します。そして毎日作成される繰り返しテンプレートには、この同期ブロックのコピーを置くようにします。この結果、昨日のメールで気になっていたものが、今日のメール確認タスクにも表示されていることになります。これで新規のメールを確認する前に、作業が必要なものが確認できます。この同期ブロックは常に最新の情報だけがあればいいフロー情報なので、完了してしまったものは消してしまいます。 繰り返しタスクで日付を入れたいという希望が多数上がっています。しかし、現状では実現できていません。このため、タスク名を「0メール確認」のようにタスク名で一番先頭に出てくるようにしておきます。先日修正した「st」コマンドは日付未確定タスクも選択できるようになったので、このメール確認タスクを選択することでタスク開始 & 時間記録ができるようになります。 以下の手順で作業していきます。 「st 0メール確認」として今日のタスクを作ります。 同期ブロックを作成します。 同期ブロックのリンクを取得します。 タスクに0メール確認のテンプレートを作成します。 同期ブロックを貼り付けます。プロジェクトも「o事務作業」にしておきます。 テンプレートを選択して、繰り返しタスクを設定します これで明日から、毎朝 7:30 に「0メール作成」というタスクが自動的に作成されます。ここでターミナルにて「st」コマンドを実行すると、以下のような未完了タスク一覧が表示されます。すでに時間が登録されているタスクの次にこのタスクが表示されているので、その番号をタイプするだけです。今日はスケジュールタスクが登録されていなかったので、リターンだけタイプしても「0メール確認」の開始時間が設定され、Notion アプリでページが表示されます。 st 0: 0メール確認 1: NotionRubyMapping テンプレート作成 2: NotionRubyMapping マニュアル修正 3: アドベントカレンダーの記事を書く 4: セッションラボの音取り 5: ソフトウェア設計I試験作成 6: ソフトウェア設計I課題評価 7: プログラミングI試験作成 8: プログラミングI課題評価 9: 情報処理III試験作成 10: 情報処理III課題評価 11: 課題曲の音取り 12: 音声タスク登録の節を執筆 Notion が開いたらすぐにメールを開けるように Outlook へのリンクを同期ブロックの先頭においておきました。このまますぐにメールを確認できますね。
メール確認タスクのスケジュール化: Notion 解説 (70) - hkob's blogメール確認タスクのスケジュール化: Notion 解説 (70) - hkob's blog
日付未確定タスクに対する NotionTimeRecording 対応 : Notion 解説 (69) - hkob's blog
ターミナルで動作するコマンドライン版 NotionTimeRecording を作成したので、タスク管理がかなり楽になりました。ターミナルを開いていない時でも Alfred から「> st スタートしたいタスク」のようにすることで、開始時間が記録されたタスクが生成され、Notionアプリで表示されます。 使っていくうちにいくつか気になる点が出てきました。 現状、日付未確定のタスクは To Do リストにしていました。To Do リストをカレンダーにドラッグすることでタスクページに変換していましたが、この作業は GUI で行う必要がありました。 st コマンドはすでに作成済みのタスクに時間を付与することができませんでした。st だけを実行した時には、完了していないタスクを表示し、開始時間を再設定したい。 その際に日付未設定のタスクも選択できるようにしたい。 ot, et などでタスクが一つの時には無条件で選択していましたが、その場合でもタスクを選択するようにしたい。 これらの選択の時に、q とタイプすることで選択しないで処理をやめるようにしたい。 全てのプログラムがほぼ同型になるので、一つのスクリプトとしコマンド名で作業を切り分けるようにしたい。 st タスク名 とするとタスク名のタスクを生成します。開始時間が現在時刻に設定されます。また、 st だけを実行すると、本日および日付未確定の未完了タスク一覧が表示されます。ここで番号(0の時は省略可能)をタイプすると、そのタスクの開始時刻が設定されます。どれも開始したくない場合には、q とタイプします。 ot を実行すると、本日および日付未確定の未完了タスク一覧が表示されます。ここで番号(0の時は省略可能)をタイプすると、そのタスクが表示されます。どれも表示したくない場合には、q とタイプします。 et を実行すると、本日および日付未確定の未完了タスク一覧が表示されます。ここで番号(0の時は省略可能)をタイプすると、そのタスクの終了時刻が記録され、完了もチェックされます。どれも終了したくない場合には、q とタイプします。 nt タスク名 を実行すると、タスク名のタスクが生成されます。この際、日付は設定されません。 一つのファイルになるので部分ごとに解説していきます。 最初は NotionRubyMapping の初期設定と各種定数の設定です。CMD_NAME にスクリプト名が入るので、これで処理を切り分けます。 次にタスク選択部分を関数化します。この部分はコマンドで共通になるので、メソッド化しておきました。先に日付が設定されているものを日付順で取得し、その後日付が設定されていないものを名前順で取得します。並び順が異なるので、2回クエリを実行しています。1回でもできるのですが、クエリが汚くなるのでやめました。また、 q で終了する処理も追加しています。 def select_task() db = Database.find DATABASE_ID dps = db.properties dp, cp, tp = dps.values_at *%w[ 日付 Done タスク名 ] date_query = dp.filter_equals(Date.today) .and(cp.filter_equals false) .ascending(dp) date_exists = db.query_database(date_query).to_a unsettled_query = dp.filter_is_empty .and(cp.filter_equals false) .ascending(tp) date_unsettled = db.query_database(unsettled_query).to_a pages = date_exists + date_unsettled if pages.count.zero?
日付未確定タスクに対する NotionTimeRecording 対応 : Notion 解説 (69) - hkob's blog日付未確定タスクに対する NotionTimeRecording 対応 : Notion 解説 (69) - hkob's blog
コマンドライン版 NotionTimeRecording の作成: Notion 解説 (67) - hkob's blog
以前、NotionTimeRecoring というショートカット作成記事を書きました。新規タスクを開始時にタスク開始時間を記録し、既存のタスクを選んだ場合にはタスク終了時間を記録し、完了もチェックするものです。 hkob.hatenablog.com 結構便利で使っていたんですが、いちいちメニューからカーソルで選ぶのも面倒だなと感じていました。大体の作業は MacBook からやっていますし、基本的にターミナルは開いているので、コマンドラインで処理できると楽です。そこで、NotionTimeRecording のターミナル版を作成することにしました。なるべく処理わけをしたくないので、タスク開始のためのコマンド st とタスク終了のためのコマンド et を作ります。また、現在作業中のタスクのページを開く ot コマンドも用意することにします。 当然ながら NotionRubyMapping を使います。st コマンドは以下のようになりました。引数で与えられた文字列をタイトルとし、現在時刻を日付に登録したページを作成しているだけです。作成できたページの URL から URL scheme で Notion アプリを開いています。タスク更新がされているので、NotionTimeRecording の touch_file.txt を作成しています。常に起動し続けている MacBook が、このフォルダをフォルダアクションで見張っており、自動的に TaskUpdate スクリプトを自動起動します。 Task update スクリプトについては、以下の記事で書いています。 hkob.hatenablog.com 次にタスクを表示するコマンドを作ります。最初に今日の未完了のタスク一覧を取得します。未完了のタスクが一つだけであれば、尋ねることなくそのページを表示します。二つ以上の候補がある場合には、古い順に表示をして、その番号を入力することにします。基本的には一番古いものを選択すると思うので、単にリターンだけをタイプすると一番先頭のものが表示できるようになっています。 et はほぼ ot と同じで、page 更新が追加されているだけです。 動作している様子を Twitter に貼ってみた。うまく動いていることを確認した。実は今回のプログラムで、end_date だけを設定する際にクラスが違うと設定できない不具合があった。その他いくつか修正した部分もあったので、それを改善した NotionRubyMapping v0.6.8 も同時にリリースした。 ふと思い立ち NotionTimeRecording のコマンドライン版を作った。st: タスク開始、ot: タスク表示、et: タスク終了。タスクが一つしかない時は選択する必要なしにした。リターンキーだけ打てば一番古いものが対象になる。かなり便利になった。#notion #notionapi pic.twitter.com/9YOlmBaLLo - hkob|Notion Ambassador (@hkob) 2022年11月12日 NotionRubyMapping があると、この程度のプログラムは気楽に書けますね。今後もちょっとした小ネタを記事にしていきます。
コマンドライン版 NotionTimeRecording の作成: Notion 解説 (67) - hkob's blogコマンドライン版 NotionTimeRecording の作成: Notion 解説 (67) - hkob's blog
Web メールの取り込みから始めるタスク管理 : Notion 解説 (65) - hkob's blog
Outlook から日付未確定のタスクを作成 : Notion 解説 (63) - hkob's blog、 Teams から日付未確定のタスクを作成: Notion 解説 (64) - hkob's blog と連続して、Outlook、Teams からタスク登録する記事を書きました。ただ、これは PowerAutomate という企業向けの自動化ツールを使っているので、一般の人にはあまり縁があるものではありませんでした。 せっかくなら Gmail で同じことができないかなと考えていたのですが、ページベースのタスク管理でよければ API すらもいらないことに気づきました。いろいろ調べてみたんですが、意外とこんな使い方をしている人を見たことがない気がします。そこで、まだタスク管理を始めていない人でも簡単に始められるタスク管理の方法を解説してみたいと思います。 すでにタスクデータベースがある人はそれをそのまま使ってください。ここではまだタスク管理を始めていない人向けに簡単なデータベースを作ってみます。 プロパティはこのくらいでいいでしょうか。 タスク名: タイトルプロパティ ステータス: ステータスプロパティ 日付: 日付プロパティ タグ: マルチセレクトプロパティ (必要に応じて) 完了: チェックボックスプロパティ ビューは二つ用意してありね未完了タスクのビューと完了タスクのビューを作っています。どちらのビューも日付順でソートしてあり、完了の値でそれぞれフィルタしています。 Gmail や Outlook on the web はブラウザでメールを読むことができます。これをタスクのトリガにしましょう。個々のメールには URL が振られているので、これを記録すればいいことになります。Notion には
Web メールの取り込みから始めるタスク管理 : Notion 解説 (65) - hkob's blogWeb メールの取り込みから始めるタスク管理 : Notion 解説 (65) - hkob's blog
Teams から日付未確定のタスクを作成: Notion 解説 (64) - hkob's blog
前回、Outlook のメールからタスクを作成しました。今回は、Teams のメッセージからタスクを作成します。 今回は、TeamsToNotion というフローにします。フローを作成部分は前回と同じなので説明を省略します。Teams を選択すると「選択されたメッセージに対して(V2)」というのがあるので、これを試してみます。 Outlook と同様に項目を設定します。それぞれの項目は以下のようにしました。 Title: メッセージの件名とメッセージのコンテンツを並べました。Teams ではタイトルをつけないことも多く、コンテンツも入れないと中身が判別できなくなると考えたためです。 Sender: 送信元ユーザにしました Thread id: メッセージへのリンクにしました。 Source: Teams にしました。 名前が「ApiConnection -> 行の挿入」となってしまっていたので、「TeamsToNotion」に名前を変更しました。 Teams ではリンクが直接取得できることがわかったので、前回の GAS の link 作成部は単にそのまま設定するだけでよさそうです。修正箇所はここだけでした。 フローが成功したようです。 これで Outlook, Teams から Notion にタスク登録ができました。Outlook の方とほぼ共通処理だったので、あっという間に終わりましたね。これで、タスク抜けが減りそうです。
Teams から日付未確定のタスクを作成: Notion 解説 (64) - hkob's blogTeams から日付未確定のタスクを作成: Notion 解説 (64) - hkob's blog
Outlook から日付未確定のタスクを作成 : Notion 解説 (63) - hkob's blog
以前、Outlook の会議招集連絡から Notion タスクを作成する PowerAutomate を作成しています。誰かが私のカレンダーに会議を登録すると、自動的に Google カレンダーに転記され、GAS によって Notion のタスクが生成されるものです。これは今でもうまく動いています。 一方、メールにフラグを付けることで、タスクを生成するものを作っていました。上の応用でフラグが付くとNotion のタスクに登録されるものです。ただし、この手順では日付を設定することができないため、自動的に今日のタスクを設定していました。この後に Google カレンダーで移動することで、Notion のタスクの日付も変更するという二度手間が入っています。 せっかく日付未確定のタスクの欄を作成したので、今後は Outlook 及び Teams のメッセージを日付未確定に登録するようにしようと思います。Outlook の方だけでかなり長くなってしまったので、Teams の方は次回に回します。Teams はもう少しかかりそうです。 前回同様 Power Automate で新しいフローを作ります。 自動化したクラウドフローを選択します。すでに MailToNotion は消してしまったので、同じ名前で作り直しましょう。利用するトリガは「電子メールにフラグが設定されたとき(V4)」です。 ここまででフローのテストをしてみましょう。右上のテストを手動で実行し、Outlook にフラグを付けてみます。Google Spreadsheet を確認すると列が追加されています。 GAS の部分は前回の声でタスク登録の内容を GAS に落とし込むだけです。 あとは Toggle Block に ToDo ブロックを追加する処理を書きます。後でタスクデータベースに落とし込むことを考え、件名を To Do ブロックのテキストとし、差出人を本文に記載します。この差出人には Outlook へのリンクを付けておくことで、いつでもメールに戻れるようにしておきます。会話ID の最後の = がエスケープされないとうまく飛べないようなので、手動でエスケープしています。 とりあえず Outlook でフラグを付けるだけで、Notion の日付未確定にタスクが入るようになりました。ドラッグするとタスクに入ります。私の環境ではドラッグでの登録だと Google カレンダーに入らないのが残念ですが、これは Linked Database に期待しましょう。
Outlook から日付未確定のタスクを作成 : Notion 解説 (63) - hkob's blogOutlook から日付未確定のタスクを作成 : Notion 解説 (63) - hkob's blog
声でタスク登録 : Notion 解説(61) - hkob's blog
こんなネタを提供していただきました。 このアレクサ→Notion をショートカットアプリで出来ないかな🤔#notion #notiontwt https://t.co/vkKtvZy5sb - たむらりえ|Notionおばさん (@RieTamura36) 2022年7月20日 実は、以前 Siri からカレンダーを登録することで、間接的に Notion に登録する記事を書きました。これはこれでよかったんですが、意外と声で日付を入れるのが面倒で使わなくなりました。 前回の記事で、日付未確定のタスクを用意しました。日付が未確定なので、タスクを To Do ブロックで記述し、日程が決まった段階で、タスクページのカレンダーにドラッグすることで、タスク化する方策です。また、iPhone や iPad で簡単に登録しやすいように入力専用ページを作成していました。 そんなわけで、この To Do ブロックを声で登録してみることにしました。 挿入したいのはこの Toggle ブロックです。URL からこのブロック ID (05a57c5670274582986feb29e99665a5)を取得します。 このブロックに To Do ブロックを追加するショートカットを作ればよいことになります。JSON を書くのは面倒なので、NotionRubyMapping に教えてもらいます。 結果として以下のシェルスクリプトが出てきました。これを見ながらショートカットの JSON を書きます。 curl -X PATCH ' https://api.notion.com/v1/blocks/05a57c5670274582986feb29e99665a5/children ' \ -H ' Notion-Version:
声でタスク登録 : Notion 解説(61) - hkob's blog声でタスク登録 : Notion 解説(61) - hkob's blog
Launchpad の大改修完了 : Notion 解説(60) - hkob's blog
Notion の Launchpad の改訂を続けてきましたが、最後の中長期のタスクだけ手を出せていませんでした。悩んだ挙句、結局 Notion をそのまま使うことで落ち着きました。せっかくなので記事にまとめておきます。 タスクデータベースに今日のタスクがあると、自動的に ToDo ブロックが作成され、タスクへのページメンションがおかれます。タスクが完了したら ToDo ブロックのチェックを入れてもいいし、タスクの Done フラグにチェックを入れてもいいです。NotionTimeRecording を実行するか、1時間に1回ブロックとタスクのチェック同期処理が行われます。 今日は授業がなかったのでタスクは入っていませんでした。このブログ記事を書き始める段階で、NotionTimeRecording を実行したのでタスクが作成され、ToDo ブロックへのリンクが作成されています。 この部分も自動的にタスクデータベースと同期に1週間以内のタスクが○日後という形で作成されます。ここに直接書くこともできますが、今後は日付未確定のタスクの方に記述する方向になると思います。 タスクの部分にはタスクデータベースの Linked view がいくつか並んでいます。デフォルトではタイムラインビューを表示しており、今日のタスク進捗が見られるようになっています。現在はブログを執筆中というのがわかります。月表示もありますが、整理する時以外あまり表示することはありません。 表に公開しているページの裏側の作業用のビューをまとめています。入力専用の作業用のビューは他人に見せる必要がないので、今後ここにどんどんまとめていこうと考えています。 この中にある毎日のタスクは、今日のタスクに書かれていた ToDo ブロックのオリジナルが置かれたページの集まりです。今日のタスクはこのページ内の情報を部分的に見せていた Synced block だったのでした。あまり見返すことは多くないですが、何をやっていたかを確認することができるのは嬉しいかなと思っています。 上の最終形態の部分を見るとわかるように日付未確定のタスクの Synced block になっています。中身は Personal work links の部分にある「日付未確定のタスク」ページにあります。 日付未確定のタスクページには先ほどのページのオリジナルトグルブロックがあります。このページだけ独立しているのは、iPhone や iPad からも簡単に入力できるようにするためです。GTD 的な使い方として、思い立った時にすぐに入力できるようになっていると嬉しいためです。 この Synced block の下には、タスクデータベースのカレンダービューを置いてあります。日付未確定のタスクの日程が決まったら、トグルブロックをそのままカレンダーにドラッグできるからです。 試しに「Google Form 連携の記事を書く」の To Do ブロックを、今日のページにドラッグしてみます。To Do ブロックがタスクページに変換されて登録されています。 作成されたページを見てみると、「Checked」という余計な属性が作成されてしまっていました。Done という属性名を Checked に直せばいいのかもしれませんが、これまで多くの API ツールを作ってしまっているので、全て修正するのは大変です。特に使わないので気にしないことにしましょう。 NotionTimeRecording を実行すると、常時起動している MacBook Pro の Task update のトリガがかかるようになっているので、To Do ブロックの同期などが完了しています。作業にかかった時間も To Do ブロックの後ろに自動的に記載されるようになっています(今回、1時間7分でした)。また、先ほどタスク化した「Google Form 連携の記事を書く」も To Do ブロックと同期しました。これで、ほぼシステムとして完成した形になりましたね。
Launchpad の大改修完了 : Notion 解説(60) - hkob's blogLaunchpad の大改修完了 : Notion 解説(60) - hkob's blog
レシート自動登録ショートカットの作成 : Notion 解説(59) - hkob's blog
Notion しゅふ会のプレイベントが無事に終わりました。プレイベント後の雑談にて、たむらさんから、「レシートを簡単に記録できるとよいのですが」と話題提起がありました。レシートの金額だけ簡単に登録できればとのことでしたので、早速カメラのテキスト認識と連携したショートカットを作りました。 以下のような流れのアプリを作ります。 iPhone のカメラを起動 レシートをフレームに入れる 金額の部分がテキスト認識されるので該当部分をコピー 背面タップ Notion の個別収支自動登録され、このNotion ページが開く 必要ならタイトルや種別を入力 実装はほぼいつもの内容なので、詳細は省略します。 今回は、初めて使うしゅふの方々に使ってもらえるように、テンプレートも込みで配布します。 テンプレートにはインテグレーションの使い方やデータベース ID の取得方法なども細かく記述しました。 また、LaunchPad ページなどに貼ってもらえるように、個別収支の直近1週間分のみをまとめたリンクドビューを用意しておきます。 さらに、個別収支のページは月まとめのページに自動でリレーションされ、種別ごとに月ごとの合計値などを確認可能にします。 iPhone で動いている様子を動画にしてツイートしました。 昨日の「Notionしゅふ会」後の雑談で要望が出たもの作りました。iPhone カメラでテキスト認識 → コピー → 背面タップでレシート記録します。Notion 開くのでその場でタイトルと種別設定できます。月まとめにも自動リンクしているので月ごとの集計も可能#notion #まいにちnotion pic.twitter.com/IJFV3AEgwC - hkob|Notion Ambassador (@hkob) 2022年6月29日 また、macOS だとサービスから同じショートカットを動作させることができます。メールなどの明細はここから入れてもいいですね。 ショートカットはサービスにも対応したので、macOS のサービスからも使えます。サービスなのでコピーは必要なく、文字選択してサービスを起動すればよいです。まとめの方にもちゃんと入っているのがわかります。 pic.twitter.com/XPmvUnLRsw - hkob|Notion Ambassador (@hkob) 2022年6月29日 このショートカットはテンプレート込みで配布しています。以下のページを複製して自分の環境に合わせて設定してください。 --
レシート自動登録ショートカットの作成 : Notion 解説(59) - hkob's blogレシート自動登録ショートカットの作成 : Notion 解説(59) - hkob's blog
Google Books API との格闘 (失敗談) : Notion 解説 (58) - hkob's blog
昨晩、熊倉さんから以下のダイレクトメッセージを受け取りました。 小林さん突然すみません!こちら原因わからなくて困っているようなのですが、もし理由すぐ分かるようでしたら教えていただけるとめちゃ助かります・・ 個人的には、画像URLでカバー設定してもたまに引っ張ってこれない(.htaccess周りとかの設定?)ケースがあるのでそれに引っ掛かってるのかなーとかありますが、api特有の動きってあったりします・・? 熊倉さんが受けた質問主は Google Books API のイメージを API 経由で Notion に埋め込みたいが失敗するという話でした。結局、検証の結果、API から画像ブロックは埋め込めないことを結論づけました。夜中にふと、プロパティならいけるのではと思い再検証してみました。以下その再検証記録です。最終的には再検証も失敗したのですが、失敗談も記録ではあるので、ここに残しておきます。 テストするためのページが必要なので、まずは検証ページを作ります。検証自体もタスクなので、ショートカットで作成します。タスク開始するショートカットの説明はこちらです。私の場合は、Cmd-Option-]で起動し、「A new task」でタイトルを入れるだけです。hkob.hatenablog.com Google Books API は知らなかったので、検索したところここに解説がありました。 ちなみにサムネールの URL はこんな感じになるそうです。画像ファイルではなく単なる API 呼び出しなのですね。 https://books.google.com/books/content?id=Bdh_RQAACAAJ&printsec=frontcover&img=1&zoom=5&source=gbs_api" 検証には NotionRubyMapping を使います。irb を立ち上げ、以下のコマンドを実行し、上で作ったページを取得しておきます。また、上記のリンクを url という変数に格納しておきます。 まずは質問主ができるという Notion 上での貼り付けをやってみます。以下のような画面が出てきます。URL なので Create embed が候補に出ていました。 URL はこうなっています。Page ID の後に # があり、その後が Block ID になります。Block ID は 44368f420e0c44ddb5082a797843a48b ということがわかりました。 https://www.notion.so/hkob/Google-Books-API-ce85304228264674b8ba99694def2d4d#44368f420e0c44ddb5082a797843a48b このブロックを Block.find で取得してみます。embed で作成したのですが、内部では ImageBlock になっています。 b0 = Block.find " 44368f420e0c44ddb5082a797843a48b " 中身を見てみましょう。確かに ImageBlock であり、URL は上記のリンクがそのままついています。 b0.block_json 質問主が失敗するという ImageBlock を作成してみます。Invalid image url というエラーで失敗しました。 URL が画像のファイルと判断されていないためですね。API reference の Block object によると、URL は以下のものでなければならないようです。 Includes supported image urls (i.e.
Google Books API との格闘 (失敗談) : Notion 解説 (58) - hkob's blogGoogle Books API との格闘 (失敗談) : Notion 解説 (58) - hkob's blog
タスク管理の再検討(6) 今週のタスクを追加 : Notion 解説 (56) - hkob's blog
残った今週のタスクですが、これまでのものがかなり流用できたので、簡単に実装できてしまいました。これまでに大体説明した内容なので、コードだけ簡単に示します。 このメソッドは明日から1週間分のタスクのリストを取得するメソッドです。NotionRubyMapping を更新したので、日付を渡した場合にも日本のタイムゾーンで検索できるようになりました。 def this_week_each_tasks(db, today) dp = db.properties[" 日付 "] cp = db.properties[" Done "] query = cp.filter_equals(false).and(dp.filter_after(today)).and(dp.filter_before(today + 8)).ascending dp db.query_database query end タスクページの日付プロパティの開始時刻から「X日後: 」の文字列を作成するだけのメソッドです。ハマったのは日付の引き算をすると有理数が出てしまうので、to_i で整数に変換していることくらいでしょうか。 今週のタスクを更新するメソッドです。tb は表示先の ToggleHeading2Block、et_tasks は明日から1週間分のタスクのリスト、td_hash は登録済のタスクページ id から ToDoBlock を引く辞書です。ここでは、大きく分けて3つの処理をしています。 未登録タスクの登録: 1週間分のタスクページ一覧(et_tasks)のうち、未登録のものだけ新規に ToDoBlock を追加します。 X日後の文字列更新: 日付が変わるとX日後の文字列が一つ減ります。テキストを調べ、文字列が異なる場合には RichTextArray を差し替えます。 古いものを削除: 今日のタスクに移動してしまったものは、ここに表示する必要がないので、削除します。メンションされていない手書きの ToDo は削除しません。 def
タスク管理の再検討(6) 今週のタスクを追加 : Notion 解説 (56) - hkob's blogタスク管理の再検討(6) 今週のタスクを追加 : Notion 解説 (56) - hkob's blog
タスク管理の再検討(4) To Do block とタスクページの同期 : Notion 解説(52) - hkob's blog
これまでにタスク管理ページの再構築を行なっており、すでに3本の記事を書いています。 タスク管理の再検討 : Notion 解説(48) - hkob's blog タスク管理の再検討(2) synced block の自動差し替え : Notion 解説(50) - hkob's blog タスク管理の再検討(3) To Do ブロックの自動追加 : Notion 解説(51) - hkob's blog NotionRubyMapping がブロックの更新に対応できるようになったので、タスクページの完了フラグと To Do リストのチェックを同期するようにします。基本的にはどちらかにチェックが入っていたら、反対側もチェックを入れます。 NotionRubyMapping は v0.5.0 で非互換のアップデートになってしまったので、これまでのスクリプトも少し修正が必要になってしまいました。どうせなので、メソッドベースにリファクタリングしてしまいます。メソッドごとに動作確認をしながら構築していきましょう。 ここでは作成した関数を一つずつ紹介し、メイン側で一つずつ呼び出して結果を確認していきます。 NotionCache の作成およびキー登録部分はメソッド化しておきます。 メイン側では呼び出すだけです。後で、hex_id メソッドだけ使うので、nc として保存しておきます。実行結果を最後にコメントで記載しておきましたが、取得した NotionCache が表示されています。 nc = init print nc
タスク管理の再検討(4) To Do block とタスクページの同期 : Notion 解説(52) - hkob's blogタスク管理の再検討(4) To Do block とタスクページの同期 : Notion 解説(52) - hkob's blog
タスク管理の再検討(3) To Do ブロックの自動追加 : Notion 解説(51) - hkob's blog
一つ前の記事で、Synced block を毎日差し替えるところまで動きました。今回は、この Synced block に To Do リストを自動作成するところまで記述します。 初期状態では、synced_block_original は空ですが、2回目以降は To Do リストが並んでいます。To Do リストには、個別タスクページへのメンションリンクが設置されています。冪等性を保証するために、設定済の個別タスクページをハッシュに記録しておきます。 次に個別のタスクデータベースに以下のクエリを設定します。 et_tasks は条件に満足するページが入って List オブジェクトになります。 et_database = Database.find " 2395e3ffb55e4a8abc1ba426243776e3 " dp = et_database.properties[" 日付 "] cp = et_database.properties[" Done "] query = cp.filter_equals(false).and(dp.filter_on_or_before(today)).ascending dp et_tasks = et_database.query_database query et_tasks をスキャンして、作業 4 で登録されていないタスクを To Do ブロックとして登録します。今日のタスクでないものは、遅延の印として🧨マークを表示するようにします。To Do ブロックの本文は、タスクページへのリンクメンションオブジェクトとします。 append_blocks = et_tasks.each_with_object([]) do |t, array| next if todo_hash[t.id] start_date = t.properties[" 日付 "].start_date text = today == DateProperty.date_from_obj(start_date) ?
タスク管理の再検討(3) To Do ブロックの自動追加 : Notion 解説(51) - hkob's blogタスク管理の再検討(3) To Do ブロックの自動追加 : Notion 解説(51) - hkob's blog
メールから Notion に登録 : Notion 解説(46) - hkob's blog
最近、職場のやりとりが Teams メインになってきているため、逆にメールの読み抜けが多くなってしまいました。やはり情報は一箇所にまとめたいということで、必要なメールだけ Notion に登録してしまうことにします。流れとしては以下の通りです。 Outlook on the Web で Notion に送りたい記事にフラグをつける PowerAutomate がメールのフラグをチェックしており、トリガーされたメールの内容から今日の日付の Google Calendar イベントを作成する Google Calendar の Notion カレンダーは Notion のタスクページとリンクされているので、自動的に Notion の今日のタスクに入る Notion の今日のタスクに入っているものを適宜日付を変更する。Google Calendar も自動的に同期されて移動する。 3, 4 はすでに運用済なので、今日は 2 の部分だけ解説します。 以前、Outlook の召集令状 → Notion Google Calendar → Notion の記事を書いています。Power Automate についてはこちらを参照してください。 すでにカレンダーなどもリンク済みなので、今回は簡単でした。名前は MailToNotion としました。「電子メールにフラグが設定された時」のアクションから「Google Calendar のイベントの作成」につなげています。カレンダーID とタイトルおよび説明はメールの内容から取得します。日付は現在の時刻にしたいのですが、そのままだと UTC を取得してしまうので、以下の式で日本時間に変換しています。また、時間は設定せずに終日イベントとしています。 getFutureTime(9, 'Hour') 設定はこれで終わりです。メールにフラグを付けるとちゃんと Notion のタスクに登録されました。
メールから Notion に登録 : Notion 解説(46) - hkob's blogメールから Notion に登録 : Notion 解説(46) - hkob's blog
RSS から Notion に登録(1) : Notion 解説(44) - hkob's blog
現在一部の有志の人たちで、Notion のまとめページを作っています。このチームで新着記事の収集システムの設計を任されました。手動で収集するのは大変なので、RSS から自動で記事を収集し、データベースに登録します。管理者が内容を確認し、必要項目を登録した上で公開チェックをオンにするという流れです。すでに以下の逆引きNotion のページで Google Form から記事登録する仕組みは作っているので、Notion 登録部分は簡単に移行できます。今回は、RSS の取り込みがうまくできるかというところと、第三者に使ってもらうシステムとして設計するというところを中心に説明していきます。 実装は GAS で行います。そのためまず、Google Spreadsheet を用意しました。 最初の3行はシステムの管理および初期設定用のデータ置き場です。以下の 6 つの値を登録します。 登録用チェック日付: 通常は空白にして前日の記事を取得して Notion に登録します。ただし、新しい RSS サイトを登録した時には動作確認をしたいので、その RSS サイトの新着記事のある日付を記載します。ここに日付が記載されている場合には、リストの一番最後の RSS を取得し、この日付の記事に対して処理を行います。これで Notion に登録が行われていれば成功ということになります。テストが終了したらこの日付は消しておきます。 notion_api_token: スクリプト内に api token を直接記載したくないので、いつものようにスクリプトプロパティに登録します。自分の場合は、スクリプトを直接修正するのですが、今回第三者に提供することもあり、スプレッドシートから読み込むことにしました。初期設定時のみここから値を取り込み、プロパティに登録します。設定が終了したら空白に戻されます。 database_id: こちらはデータベースIDを登録します。notion_api_token と同様に初期設定の時のみ記載し、終了したらこちらも空白に戻されます。 タイトルの属性名: タイトルを登録するデータベースの属性名を記載します。 URL の属性名: 記事への URL を登録するデータベースの属性名を記載します。 更新日付の属性名: 記事の登録日付を登録するデータベースの属性名を記載します。 その下は実際に登録したい RSS を並べます。必要なのは URL だけで Title は人間がわかりやすいように記載しているだけです。登録チェック日付が登録されている場合には、最下段のものだけが有効になります。また、追加で固定値を登録しておきたい属性があれば、そのタイトルと属性の型を記述しています。 こちらはまとめサイトと同じ形に設定しておきました。 スクリプトプロパティの登録は最初に一回だけ実施します。いつもはスクリプト内に記述しているのですが、人に使ってもらうということでスプレッドシート上に記載してもらい、一度だけ実行してもらうことにしました。実行すると記述したデータは消えるようにしてあります。 毎回スプレッドシートから値を取得するのは面倒なので、あらかじめ固定値は取得しておきます。 RSS からデータを取り出し、checkDate と等しいものだけをフィルタして返すだけの関数です。特に難しいことはしていません。 上記で取得した定数、RSS のデータ、RSS の行、および登録日付を受け取り、Notion に登録する関数です。最初に RSS のデータから記事のタイトルと URL だけ取得します。また、追加属性については、とりあえず text, select, multi_select 属性に対応してみました。 メイン関数はこんな感じになりました。B1 に日付が入っていない場合には通常モードとして、記録されているすべての RSS を検索し、昨日の記事をピックアップして Notion に登録します。日付が入っている場合には、一番最後の RSS の特定日付のものを抽出して Notion に登録します。これで登録されることが確認できたら、日付を消せば明日以降は自動登録される形になります。 時間主導型のトリガを設定すれば終了です。数日動くことを確認したら、依頼主に納品しようと思います。 今のところ、note の RSS でしかテストしていないので、その他の RSS についてもテストしていこうと思います。
RSS から Notion に登録(1) : Notion 解説(44) - hkob's blogRSS から Notion に登録(1) : Notion 解説(44) - hkob's blog
macOS のサービスを使った Notion code block 挿入 : Notion 解説(41) - hkob's blog
以前、VSCode の選択部分を codeblock として挿入する記事を書きました。 こちらから入手できますので、使いたい方はどうぞ。 これはこれで便利なのですが、RubyMine、MATLAB など他のアプリでも利用したいですし、ターミナルの出力なども codeblock にできればいいなと思いました。昨日作成したタスク登録 ( macOS のサービスを用いた Notion タスク登録 : Notion 解説(40) - hkob's blog)と同様に選択部分を codeblock として登録する macOS サービスを作りました。 作成方法はタスク登録と同じなので省略して、スクリプトだけ示します。今回、プログラムコードを貼り付けることもあり「'」が文字列の中に入り込むことがあります。今回は、内部で shell スクリプトの呼び出しをしているため、「'」をエスケープする必要がありました。この部分でちょっと時間がかかりました。 昨日のタスク登録も同じ問題があったので、こちらも Ver 1.1 としたサービスをリリースし直しました。 保存したら、キーボード - ショートカットのタグでショートカットを設定します。今回は、「Opt-Cmd-P」にしました。 コードブロックにしたいテキストを選択した状態で、設定したショートカットをタイプします。言語設定のダイアログが出るので、タイプします。最後に編集したデータベースページの最後の部分にcode block が追加されます。 以前、Notion に codeblock を追加する機能拡張を作りましたが、macOS のサービスも作成しました。これでどこからでもコードブロックが追加できます。あまり需要はないかもしれませんが、こちらも github で配布しますね。#notion #まいにちnotion pic.twitter.com/RijCl7ywQA - hkob (@hkob) 2022年1月10日 macOS サービスはアプリケーションを問わないので、かなり使いやすいと思います。これから Github にリリースするので、後でリポジトリを張っておきます。 (1/21追記) リポジトリリンクを貼るのを忘れていました。申し訳ありません。
macOS のサービスを使った Notion code block 挿入 : Notion 解説(41) - hkob's blogmacOS のサービスを使った Notion code block 挿入 : Notion 解説(41) - hkob's blog
macOS のサービスを用いた Notion タスク登録 : Notion 解説(40) - hkob's blog
(1/9 追記) シングルクオートが入っている時にエラーになってしまっていたので、記事を修正しました。また、作成済みのバイナリを Github で配布しています。こちらもバグ修正しています。 これまで Notion のタスク登録に、自作の Alfred workflow を使っていました。 ポモドーロの設定やタスクの終了は比較的楽なのですが、タスクの登録は文字列の入力やコピーがあり、少し手間がかかりました。 このため、ついタスク登録をサボってしまうことが何度か発生し、その度に締切などに追われたことがありました。 そこで、タスク登録に関してはさらに簡単な仕組みが必要だと感じました。 ほとんどの時間で macOS を使っているので、せっかくならサービスを作ってしまうといいのではと思いつきました。 名前は NotionQuickAction とします。 作業手順は以下のようになります。 アプリケーションは問わず、タスクにしたい文字列を選択します。 NotionQuickAction サービスに割り振ったショートカットキーを押します。 ダイアログが出るので、日付・開始時間・終了時間を設定します。 全てを設定しなかった場合には、日付なしになります。 開始時間、終了時間を省略した場合には終日タスクになります。 終了時間を省略した場合には、開始時間から1時間のタスクになります。 Notion にタスクが作成され、自動的に Notion アプリまたはブラウザで開きます。 日付ありのタスクであり、かつカレンダーへの登録機能をオンにした場合には、カレンダーにも登録されます。 カレンダーの詳細には Notion のタスク ID が登録されています。Google カレンダーとの同期のために使うためです。 動作している様子の動画をここに示します。 午前中に Notion タスク登録する macOS サービスを作ってみました。作成方法も記事にしているので、後で公開します。#notion #まいにちnotion pic.twitter.com/gNZ8DKl33V - hkob (@hkob) 2022年1月8日 macOS のサービスを作るために、 Automator を用います。 クイックアクションを選択します。 Automator 画面は以下のようになります。右上の項目は以下のように設定しました。 ワークフローが受け取る現在の項目: テキスト 検索対象: 全てのアプリケーション イメージ: 共有 (特になんでもよい) カラー: ブラック (特になんでもよい) アクションは以下の二つを連結しています。 あとは JavaScript を実行の部分にスクリプトを以下のように記述しました。ユーザごとに異なる部分は上に定数として設定しています。この部分を自分のデータに書き換えてください。 記述が終わったら保存します。私は NotionQuickAction としています。保存すると、自分のライブラリフォルダの下の Services に保存されるはずです。 設定された NotionQuickAction は環境設定のキーボード - ショートカットに表示されます。チェックマークをつけると有効になります。またここで、ショートカットを適当な空いているものに設定します。ここでは「option - command - N」に設定してみました。これは自分の使いやすいものに設定してもらっていいです。 Alfred と違って、macOS 使っている人なら誰でも使えるので是非試してみてください。
macOS のサービスを用いた Notion タスク登録 : Notion 解説(40) - hkob's blogmacOS のサービスを用いた Notion タスク登録 : Notion 解説(40) - hkob's blog
Notion による Google Form のリアルタイム集計 : Notion 解説(39) - hkob's blog
Notion が Mermaid.js の描画に対応しました。グラフが Codeblock で書けるようになりました。要望があったので、Google Form をリアルタイムで集計する Notion ページを作ってみることにしました。いつものように作りながら記事を仕上げていきます。 ひとまずテストのために値が取得できるかだけ確認してみます。こんなコードを書きました。B2 からB列の一番下までのデータを値で取得してきます。 function getSheet() { return SpreadsheetApp.getActiveSheet() } function calcStats() { const sheet = getSheet() const values = sheet.getRange("B2:B" + sheet.getLastRow()).getValues() console.log(values) } 集計するところまで書いてみました。updateCodeBlock で stats を取得して、表示してみました。 Notion API 部分は Notion のサンプルページを作ってから取り組みます。 これで Notion の作業は終了です。 Notion 側の準備ができたので、Notion に送る部分を作成します。まず、インテグレーションのキーと先ほどのブロック ID を Script のプロパティに登録してしまいます。登録専用の関数をいつものように使います。まずこの状態でそのまま貼り付けて storeTokenAndId() を実行してみます。 成功したら、storeTokenAndId 関数は消してしまってください。コードに危険な文字列などを残さないためにプロパティに格納しているので、この関数はもう必要ありません。 次に mermaid のデータ文字列を作成します。今回は pai チャートを表示します。updateCodeBlock から mermaidCode を呼び出すように変更して表示してみます。 同様に API 用の payload を作ります。 ここの出力画面を撮り忘れましたが、ちゃんと動いていました。payload できてしまえば、いつものルーチンのものを持ってきます。updateCodeBlock も完成させてしまいましょう。 作成したページはここです。せっかくなのでアンケートに答えてみてください。もし Form 連携の参考になれば幸いです。
Notion による Google Form のリアルタイム集計 : Notion 解説(39) - hkob's blogNotion による Google Form のリアルタイム集計 : Notion 解説(39) - hkob's blog
VScode の選択部分を最後に更新したページの最後に code block として挿入: Notion 解説(38) - hkob's blog
昨日、特定のページを検索してコードブロックを挿入する記事を書きました( VScode の選択部分を Notion の codeblock として挿入 : Notion 解説(37) - hkob's blog)。使ってみて、今実行しているポモドーロのページに追記できた方が楽だし、設定項目も減って使いやすいのではと気づきました。そんなわけで、昨日リリースしたばかりですが、早速作り直します。 特定のデータベースでタイトルを検索するのではなく、データベースの中で一番新しいものを選択するようにします。このため以下の設定項目のみ設定すればいいだけになります。 code-block-to-notion.notionToken: Notion のトークン (secret で始まる文字列) code-block-to-notion.databaseId: 検索するデータベース ID (16進数の羅列) code-block-to-notion.openByApp: ページを Notion で開く時には true (true) 一番新しいものを検索するには、データベースの中で一番新しいものということで、「last_edited_time」が一番大きいものを検索すればいいだけになります。 まず、必要ない設定の読み込みを消しました。次に、ページの取得部分の関数名を getLastEditedPage に変更しました。 const myPage = await getLastEditedPage(); getLastEditedPage は単に timestamp 順の新しい順に並べ、一番先頭を取得します。前回は検索条件で自動的に一つしか取得しませんでしたが、今回は page_size で 1 件に絞っています。 async function getLastEditedPage() { let myPage; try { const lists = await notion.databases.query({ database_id: databaseId, sorts: [ { timestamp: "last_edited_time", direction: "descending" }, ], page_size: 1 }); myPage = lists.results[0]; } catch (error) { return undefined; } return myPage; } 今日の「1ポモドーロ」はこの記事を書くタスクでした。Alfred から「an code-block-to-notion のアップデート」でタスクを作成しました。さらに「pn」で「1-1」ポモドーロを設定しています。この状態で、このページが一番最新のページになっているはずです。 そこで、上の「コードを修正」と同じ文章を書いてみました。先にテキストを書き、VScode の選択部分をこの下に追加してみます。ちゃんと一番新しい記事であるこのページに追加されていることがわかります。 設定項目も少なくなりましたし、普通の人にも使いやすくなったのではないかと思います。
VScode の選択部分を最後に更新したページの最後に code block として挿入: Notion 解説(38) - hkob's blogVScode の選択部分を最後に更新したページの最後に code block として挿入: Notion 解説(38) - hkob's blog
VScode の選択部分を Notion の codeblock として挿入 : Notion 解説(37) - hkob's blog
今朝、Notion dev の Slack に以下の記事の紹介が出ていました。 publish.obsidian.md VSCode の選択部分から Notion の新しいページを作成し、codeblock として登録するものでした。Github で最終的なソースコードも紹介されています。 確かにコピーして、Notion 開いて貼り付けるよりも簡単ですね。ただ、新しいページが作られるよりも、私の場合には特定のページに追加されたほうがうれしい気がします。私の場合だとその日の雑務・振り返りのページに追加できるといいなということで、自分用に機能拡張を作ってみようと思いました。VScode の機能拡張を作るのも初めてなので勉強しながら試してみたいと思います。 とりあえず作り方を調べてみます。最初に引っかかったのでこれを参考にしてみます。 techblog.gmo-ap.jp 機能拡張用のジェネレータが用意されているようなので、yarn で準備します。 yarn add --dev yo generator-code yarn yo code で雛形を作成してみます。今回の機能拡張の名前は「code-block-to-notion」にしてみました。実行結果を以下に示します。最初に何で記述するかの選択肢が出てきました。参考にしているものも TypeScript で作成しているので、ここでも TypeScript を選んでみます。その他必要項目を記述すると、最後に VScode で開くかと聞いてくれます。優しいね。 yarn run v1.22.17 warning package.json: No license field $ /Users/hkob/node_modules/.bin/yo code _-----_ ╭──────────────────────────╮ | | │ Welcome to the Visual │ |--(o)--| │ Studio Code Extension │ `---------´ │ generator!
VScode の選択部分を Notion の codeblock として挿入 : Notion 解説(37) - hkob's blogVScode の選択部分を Notion の codeblock として挿入 : Notion 解説(37) - hkob's blog
私の Notion タスク管理状況 (令和3年10月末現在) : Notion 解説 (36) - hkob's blog
これまで個別機能の説明ばかりをしていたので、現状のタスク管理の状況をまとめておこうと思います。他人にどうやっているのか説明するためでもありますが、自分自身がどうやって設定したのか記憶が薄れているところもあるためです。サブタイトルには、その機能を何で実現しているかを記載しておきます。Notion アプリ内で済むものは (Notion のみ)、macOS の Alfred を利用しているものは (Alfred)、Notion API を Google App Script (GAS) で実現しているものは (GAS) とします。また、過去に書いた記事に詳細が書かれているものはリンクを貼っておきます。 今日のタスクの下には期限超過のタスクが並びます。今日の日付より前の日のタスクでかつ「Done」にチェックが付いていないものが表示されています。終わっていなければ、今日のタスクに上部の今日のタスクにドラッグ&ドロップすることができます。なお、期日超過するとタスクに「●」の遅延ペナルティがつくようになっています( 遅延タスクに毎朝自動的にマークを追加 : Notion 解説(27) - hkob's blog)。 直近1週間のタスク表示やカレンダー表示も用意してあるんですが、最近はほとんど使わなくなりました。 特にポモドーロ運用のための機能です。 当日のタスクは先ほどの LaunchPad からも簡単に登録できるのですが、macOS の場合には、Alfred を使うことでどのアプリを使っている時でもタスク登録ができます( Alfred4 からタスクを登録 : Notion 解説(25) - hkob's blog)。なお、このワークフローは私の github のサイトで配布しています。 未来のタスクは日付を指定して登録するだけでなく、忘れないようにカレンダーにも登録したいです。これも Alfred のコマンドで登録します。「anc」コマンドにタイトル、日付、開始時間、終了時間を並べて記述します。日付を省略した場合には今日のタスクになりますし、時間を省略すると終日タスクになります( タスク作成時にカレンダーにも同時設定 : Notion 解説(33) -
私の Notion タスク管理状況 (令和3年10月末現在) : Notion 解説 (36) - hkob's blog私の Notion タスク管理状況 (令和3年10月末現在) : Notion 解説 (36) - hkob's blog
タスク作成時にカレンダーにも同時設定 : Notion 解説(33) - hkob's blog
(後日追加) ここで説明している Notion workflow はこちらで配布しています。 一つ前の記事でカレンダーと Notion タスクを同期する記事を書きました。 hkob.hatenablog.com ただ、Alfred から「ac」コマンドでカレンダー登録した時に、Notion タスクが二重化してしまう問題がまれに発生してしまいました。また、「ac」コマンドでは「an」コマンドと異なり、プロジェクトをつけることができません。そこで、「anc」という Notion タスクとカレンダーを同時に設定するコマンドを追加しました。この時、カレンダーの description に id を設定することで、カレンダーと Notion タスクが同期できるようになります。内容は前回の記事とあまり変わらないので、変更点だけ説明しようと思います。すでに Workflow のバージョンは 1.3 にあげているので、すでにインストール済の方のものは自動的にバージョンアップしていると思います。 今回作成する anc は an の処理後にカレンダーも登録する形にしています。内容がほぼ一緒なので、Run Script などはすべて共通化し、Arg and Vars で処理を切り分けることにしました。 途中の 4 つの Arg and Vars は以下のようなパラメータ設定になっています。 また、この Arg and Vars で query を input 変数に入れているので、ac からの query も input に入れるように変更しました。 もともと an は終了時間を設定していなかったのですが、カレンダーと同じ処理になるように終了時間も設定できるように変更しました。また、最後に id を次の処理に渡すようにしました。 「an」コマンドの場合には calendar が false になっているので、カレンダーは登録しないようにしています。true の場合にはこれまで通り、カレンダー登録をおこないます。ただし、キーワードの入力を input からに変更しています。また、「anc」から実行している場合には、前の処理で「id」を受け渡されているので、この id をカレンダーの description に記録します。これにより前の記事の Notion タスクとの同期を実現しています。 anc コマンドではすでに Notion タスクが作成済みなため、GAS 側でカレンダートリガーがかかっても、Notion タスクが重複することはなくなりました。内容の更新処理は動きますが、同じ内容なので見た目は何も変わりません。これで、カレンダー作成時に Notion タスクが重複する問題を解決することができました。また、an コマンドと同じでプロジェクトも自動的に設定できて一石二鳥になりました。 はてなブログに書いた Notion 記事一覧
タスク作成時にカレンダーにも同時設定 : Notion 解説(33) - hkob's blogタスク作成時にカレンダーにも同時設定 : Notion 解説(33) - hkob's blog
カレンダーと Notion タスクを同期する : Notion 解説(32) - hkob's blog
以前、Google Apps Script (以下、GAS と記述します) のカレンダートリガーで、Notion タスクの登録する処理を作成しました。ただ、これは問題点があって、カレンダーデータを更新してもタスクが作成されてしまい、余計な Notion タスクを消す作業に追われました。Notion page の ID さえわかれば、作成ではなくプロパティなどの更新ができるので、カレンダーのメモに ID を記録することで、作成・更新を切り替えられるようにしたので、そのスクリプトを解説します。GAS を始めて使う人もいると思うので、過去に書いた記事を参照しながら、説明します。ただ、スクリプトは当時とだいぶ変わっているので、ここに全て記録することにします。 まだ GAS を使ったことがない人は、以下の記事を参考にスクリプトエディタを開いてください。スクリプトはまだ記述しません。 まだ、Calendar API を有効にしていない人は、以下のページを参考に有効化してください。「Google Calendar API を追加」の画像の部分まで進めてください。 コードをたくさん記述する前に Calendar API がうまく動作するかを確認します。スクリプトエディタに以下のコードを記述します。3 で取得したカレンダーID を下から4行目の部分に記述してください。 初回だけ認証が必要なので、下にあるように readCalendar を選択した状態で、「実行」をしてください。許可を行って文字列がコンソールに出力されたら成功です。終わったら readCalender 関数は消してしまってよいです。 次に Notion の Token とタスクデータベースの ID を環境変数に記録しておきます。見えるところに ID などを記録しておきたくないためです。storeTokenAndId の MY_NOTION_TOKEN と DATABASE_ID の説明の部分にそれぞれを記述します。先ほどと同様に
カレンダーと Notion タスクを同期する : Notion 解説(32) - hkob's blogカレンダーと Notion タスクを同期する : Notion 解説(32) - hkob's blog
タスクを Notion またはブラウザで開く : Notion 解説(31) - hkob's blog
(後日追加) ここで説明している Notion workflow はこちらで配布しています。 タスク作成時にプロジェクトを設定 : Notion 解説(30) - hkob's blog で紹介した Alfred workflow を github で公開しました。 ver 1.1 の時にタスク終了部分の環境変数化でバグを埋め込んでしまったので、ver 1.2 で修正しています。すでに取得済みの方は新しいものに差し替えてください。それだけだと申し訳ないので、タスクを Notion で開く「ot」コマンドを追加してみました。これは、その「ot」の作成記録です。 スクリプトもほぼ同じですが、ポモドーロと違って非ポモ?のタスクも全部表示するようにしています。API で URL が帰ってくるようになったので、id とともに URL を次のタスクに渡しています。 Shift + Return のタスク終了処理は「pn」と同じです。そのため、すでに作成ずみの Run Script に渡しています。 引数は「id url」の形式になっています。そこで、「Split Arg to Vars」にて引数に分離しています。 Notion が裏に隠れている場合も考えて、Run Script で Notion をアクティベートしました。これで Notion が画面の手前に表示されます。 function run(argv) { let notion = Application("Notion") notion.activate() return argv } バグフィクスのついでに新しい機能を追加してみました。これで Notion を開くのも楽になりました。 はてなブログに書いた Notion 記事一覧
タスクを Notion またはブラウザで開く : Notion 解説(31) - hkob's blogタスクを Notion またはブラウザで開く : Notion 解説(31) - hkob's blog
タスク作成時にプロジェクトを設定 : Notion 解説(30) - hkob's blog
(後日追加) ここで説明している Notion workflow はこちらで配布しています。 土曜日に作った Alfred の記事で二回目の Script Filter の使い方を理解しました。そこで、以前作った当日用の Notion タスク作成「an」に対して、プロジェクトを同時に設置するように修正してみることにしました。 以下のような指針で設計します。 「an タスク名 日付 開始時刻」の使い方は同じ。開始時刻を省略したら時刻なし、日付を省略したら自動的に今日になる。基本は「an タスク名」での利用を想定している。 ここで、現在策定済のプロジェクト一覧を表示し、プロジェクトのリレーションを自動的に設定する。 プロジェクトはそうそう変化しないので、取得後に YAML でファイルとして保存しておく。 二回目以降は Notion アクセスはせず、YAML から一覧を表示する。 Shift + Return を押したときには、プロジェクトの再取得を行う。 土曜日にポモの名前でハマったので、「プロジェクト」→「Project」に変換しました。まず、API から Project データベースにアクセスできるように、Share で「Input tasks」を招待します。 次に Alfred 側の環境設定です。Project のデータベースID を PROJECT_ID として登録しておきました。本来なら、DATABASE_ID は TASK_ID に直すべきなのですが、このままにしておきます。 データベースが複数になったことと、Relation の設定を行いたいことから、二つのメソッドを修正しました。一つ目は get_notion_pages
タスク作成時にプロジェクトを設定 : Notion 解説(30) - hkob's blogタスク作成時にプロジェクトを設定 : Notion 解説(30) - hkob's blog
Alfred からポモドーロプロパティを追加 : Notion 解説(29) - hkob's blog
(後日追加) ここで説明している Notion workflow はこちらで配布しています。 私も、Yuka さんが紹介されたポモドーロトラッカー( Notionでポモドーロトラッカー🍅 #まいにちNotion Ep.10 - YouTube)を使っています。平日4日は「もくもくタイム」で、グループみんなで集中して作業を実施しています。もくもくタイムにおけるポモドーロの作業記録は、タスクとして記録できるようになっています。 タスクが入ると、「未スケジュール」に入り、ドラッグ&ドロップでポモの設定ができるようになっています。ポモドーロで実施しないタスクは「未🍅?」フラグをチェックすることで、ポモ以外の今日のタスクに移動します。 Notion を開いていれば、簡単に設定できるのですが、別の作業をしている時に Notion をわざわざ開くのも面倒だなということで、Alfred からポモドーロを設定できるようにしました。 これまで 3 つほど workflow を個別に作ってきました。説明を簡単にするために分けていましたが、今後も色々と Notion 関係で作りそうなので、Notion tools という一つのパッケージにまとめることにします。 まだ移動しただけなので、問題なく動作しています。このうち二つの Ruby スクリプトはいくつかの共通な部品が存在しています。これを Workflow の共通ライブラリに移動してしまうことにします。 まず、Workflow の存在するフォルダを開きます。このフォルダに notion.rb というファイルを作成します。 notion.rb の中身はこんな感じです。共通する post, patch の呼び出しを共通化しています。面倒な部分を全部ここにまとめてしまったので、本体は、本当に書きたいことだけを記述すればよいことになります。 Add notion はこんな感じで短くなりました。 Add Relation も共通部分が消えました。 前置きが長くなりましたが、ここからが本番です。 仕様はこんな感じで作成しました。 キーワードは「pn」(pomonodo
Alfred からポモドーロプロパティを追加 : Notion 解説(29) - hkob's blogAlfred からポモドーロプロパティを追加 : Notion 解説(29) - hkob's blog
Aflred から Notion 振り返りページに箇条書きを追加 : Notion 解説(28) - hkob's blog
(後日追加) ここで説明している Notion workflow はこちらで配布しています。 これまでに 2つの Alfred workflow を作ってきました。1つ目は Alfred から直接 Notion のタスクを登録するものです。カレンダーに入れないでいいような当日のちょっとしたタスクが「an ちょっとしたタスク」で登録できます。 2つ目は Alfred からカレンダーを登録することで、Notion タスクを間接的に登録するものです。カレンダーのリマインダが使えると同時に Notion のタスクも入ります。「ac 少し先のタスク MM/DD HH1:MM1 HH2:MM2」などとするだけです。日付、時間は省略可能にしてあります。 一方、これまでタスクを作るまでもない細かいタスクは「雑務・振り返り」というページに書き込んでいました。このページは繰り返し設定で朝自動的に作成されるのですが、いちいち開いて書き込むのが面倒でした。そこで今回は、Alfred からこのページに箇条書きを自動で追加する Workflow を作りたいと思います。 Run Script の設定も「an」と同じです。スクリプト自体は次の節でブロックごとに紹介します。 require と環境設定の準備です。TITLE の読み込みだけ増えています。 ページをフィルタで取得する部分です。今後似たようなものを作るときに再利用できるように「query_notion」というクエリ専用のメソッドを作りました。uri と payload を変えることで、ブロックの取り出しなどにも使えると思います。 query_notion にページを取得用の uri を渡すことで、ページ一覧を取得します。 同じように patch 専用のメソッドを作っています。こちらも uri と payload を受け取って patch を Notion に送ります。 block 要素を追加する API 用の URI を patch_notion に渡してブロックを追加します。 ここからメインプログラムです。まず、振り返りページの ID を取得します。payload にフィルタを設定しているだけです。starts_with で環境変数 TITLE で始まるものを抽出しています。帰ってきた結果の最初のものの id を取得します。ページがなかったら、この後の処理はエラーになりますが、繰り返しタスクで自動的に作られていることが確実なので、エラー処理はしていません。 取得したページ自体もブロックなので、ブロックに子供を追加します。まだページの内容が存在しないときにはページコンテンツも自動的に作成されます。箇条書きなので、「bulleted_list_item」を追加しています。この辺りは自由に変更すればいいと思います。 動作するかどうかテストしてみます。振り返りページはまだコンテンツがありません。 これまで振り返りページを書き忘れることが多かったのですが、Alfred から書けるので、こまめに記録ができそうです。 はてなブログに書いた Notion 記事一覧
Aflred から Notion 振り返りページに箇条書きを追加 : Notion 解説(28) - hkob's blogAflred から Notion 振り返りページに箇条書きを追加 : Notion 解説(28) - hkob's blog
遅延タスクに毎朝自動的にマークを追加 : Notion 解説(27) - hkob's blog
今朝、Twitter をみたら、こんなツイートがありました。 #まいにちNotion 期限が過ぎていて、doneにチェックがついていないものに、🟠が自動的に入力される、みたいなやつを作りたい。- tomito (@to3Eto) 2021年6月28日 このアイディア面白いなと思いました。これまで、CRUD の C(reate) しか作っていなかったので、R(ead)とU(pdate)を試してみたくて実装してみました。 ここで、Rails でいう index と update に相当する API 呼び出しが発生します。前回までのスクリプトでは、スクリプトの中に MY_NOTION_ID や DATABASE_ID を直書きしていましたが、何度も出てくるのでメソッド化するとともに、前回使ったスクリプトプロパティに書き出すことにしました。これで、スクリプトを気兼ねせずに人に見せることができます。 この対応のために、以下のスクリプトを追加しました。以前のエディタでは、GUI でプロパティを設定できたのですが、新しいエディタはなくなってしまったので、コードで登録します(これが面倒だと思うなら、以前のエディタに一時的に戻すのもありです)。スクリプトを記述したら storeTokenAndId を実行します。キーと値が表示されたらこのメソッドは消してしまって良いです。 これらを読み出すメソッド myNotionToken() および databaseId() メソッドを作っておきます。 function myNotionToken() { return PropertiesService.getScriptProperties().getProperty("MY_NOTION_TOKEN") } function databaseId() { return PropertiesService.getScriptProperties().getProperty("DATABASE_ID") } 他の作業でも使いそうなので、getNotion という汎用メソッドを作っておきます。先ほどの myNotionToken() メソッドや databaseId() メソッドを使っています。filter やorder は引数の payload で指定します。 先程の getNotion を使って、未終了のタスクを取得します。Done プロパティが false で日付が今日より前のものを取得します。並び順は今回は関係ないですが、説明用につけています。 getNotion と同じように汎用のパッチメソッドを作ります。対象となるページの id を pageId として渡し、payload に更新情報を渡します。 これまでに作ったものを組み合わせて、今回の目的である遅延プロパティを更新します。rich_text プロパティが配列であることに気づかず、なぜ更新できないのだろうとハマって時間がかかりました。 rich_text プロパティがあるときには、plain_text 属性を取得し、その後ろに「●」をつけています。🟠は見た目がズレるので、今回はとりあえず「●」にしています。後で別の絵文字などに変えるかもしれません。Notion の制限を回避するために、1秒に1更新にしています。 updateDelayedTask を選択し、実行してみました。テストのために、Done がついていないものを作ってテストしてみました。また、一つ「aaa」という余計な文字列が入っている時のテストも実施してみました。 もう一回実行してみました。●がちゃんと増えていますね。サボっといるだけどんどん●が増えていき、ヤバさが伝わってきます。 毎日実行される関数があるので、そこに今回の関数を追加しました。GAS で朝4時から5時の間に doEverydayPost が実行されるので、その際に未完了タスクにも●が追加されるようになります。 function doEverydayPost() { selectEvents(new Date()) updateDelayedTask() } Twitter の「#まいにちNotion」タグから、またヒントをいただきました。いろんな人がいろんなアイディアを持っているので、参考になりますね。 はてなブログに書いた Notion 記事一覧
遅延タスクに毎朝自動的にマークを追加 : Notion 解説(27) - hkob's blog遅延タスクに毎朝自動的にマークを追加 : Notion 解説(27) - hkob's blog
Alfred4 からタスクを登録(カレンダー経由): Notion 解説(26) - hkob's blog
(6/21追記) 昨日のプログラムだとMM/DD の形式の時に日付が設定されないことに気づきましたので、スクリプトを修正しました。 今朝、Alfred4 から直接 Notion API を叩いて、タスク登録する記事を書きました( Alfred4 からタスクを登録 : Notion 解説(25) - hkob's blog)。ここで、日付や時間も設定できるようにしたのですが、先の予定を入れるならカレンダーにも登録したいと思いました。そもそもカレンダーにイベントが登録できれば、Notion タスクが作成されるので、Alfred4 からカレンダーに登録する機能が作れればいいわけです。ということで、こちらも作ってみます。 こちらは、Add Notion Task (以下 an と略します) とほぼ同じ書式にしました。ただし、カレンダーイベントなので、終了時間も設定できるようにしました。もし終了時間が設定されていない場合には、終了時間は開始時間の1時間後に自動的に設定します。今回、キーワードは「Add Calendar task」の省略形で「ac」にしてみました。 今回は API を叩くのではなく、macOS 自体のカレンダーに直接 Event を登録します。このため、今回は Ruby ではなく AppleScript で作成します。現在は、Javascript で AppleScript が書けるようになったので、それほど大変ではありませんでした。 Add Calendar Task Usage: ac task-name Input a today task
Alfred4 からタスクを登録(カレンダー経由): Notion 解説(26) - hkob's blogAlfred4 からタスクを登録(カレンダー経由): Notion 解説(26) - hkob's blog
Outlook の会議召集連絡から Notion タスクを登録 : Notion 解説(25) - hkob's blog
最近ようやく職場でも Microsoft 365 が浸透してきてくれて、会議の召集令状もカレンダーに登録してくれるようになりました。これも Notion に自動登録できるといいのですが、HTML の書き出しは Power Automate の Premium プランでないと使えません。そこで、Outlook カレンダー→ Google Calendar → Notion タスクというシステムを作ります。 Power Automate は macOS の Automator や iPhone のショートカットみたいにプロセスを自動化してくれるツールです。デスクトップで動くものもありますが、今回使うのは、IFTTT のようにサーバ側で動作するものです。 基本的に Outlook のカレンダーは基本的に召集令状が入るだけで、メインは Google Calendar を使っている状態です。これまでに Notion という Google Calendarにイベントが作成されると、Notion にタスクが作成されるシステムが設計済みです。このため、Outlook 側でイベントが作成されたら Google Calendar にイベントを作成するだけで十分です(更新や削除に対応する必要はなし)。 アクションを選択すると、サインインが要求されるので、対応する Google アカウントにサインインします。 保存するとフローをテストするように言われます。テストを実行するとイベント作成待ちになるので、Outlook で今日の22:00 に「test event」というタイトルのイベントを作成してみました。テストが成功すると、ちゃんと Notion にタスクが生成されていました。 来週からの会議の召集令状は自動的に Notion のタスクに入るはずです。今から楽しみです。 はてなブログに書いた Notion 記事一覧
Outlook の会議召集連絡から Notion タスクを登録 : Notion 解説(25) - hkob's blogOutlook の会議召集連絡から Notion タスクを登録 : Notion 解説(25) - hkob's blog
声で Notion タスクを登録 : Notion 解説(24) - hkob's blog
昨日、 Notion Meetup Kyoto #03 | Peatix に参加してきました。まみぞうさんの API 連携で、Siri や Alexa を使った声での登録が紹介されていました。これまで、Fast notion とかのアプリで素早く入れるというのがよく紹介されているのですが、それもアプリを立ち上げるという 1 クッションあるよなと感じていて手を出していませんでした。SIri であれば手間もないのでいいですね。 この通りに Zapier や Automate.io を入れれば同じことはできるのですが、それでは面白くありません。そもそもカレンダー→Notion 連携ができているので、Siri からカレンダー登録できればいいのだと気づきました。 そうとわかれば、デフォルトカレンダーを「Notion」に変更するだけです。カレンダーの環境設定で、デフォルトカレンダーを変更しました。 早速 Siri からカレンダー登録してみました。 ちゃんと入っています。これは便利ですね。カレンダー→Notionの作業はGoogle 内で閉じているので、遅延はほとんどありません。 こういうイベントに参加するとちょっとしたアイディアをもらえるので嬉しいですね。今後もいろいろと参加したいと思います。よろしくお願いいたします。 P.S. 今日は日曜日なので、週報も書かないといけないんですね。繰り返しイベントについては、 Notion 繰り返しイベント作成を Google Spreadsheet で管理する : Notion 解説(21) - hkob's blog の記事を参考にしてください。 はてなブログに書いた Notion 記事一覧
声で Notion タスクを登録 : Notion 解説(24) - hkob's blog声で Notion タスクを登録 : Notion 解説(24) - hkob's blog
Apple Music Web player を Notion に埋め込む : Notion 解説(23) - hkob's blog
前回の記事でアルバム写真をページから外し、ページの属性に移動しました。ページに隙間ができたので、Apple Music の Web player を埋め込んでみました。こちらも埋め込み方法を説明しておきます。 Apple Music の Web 版にアクセスし、「...」から「共有」をクリックし、「埋め込みコードをコピー」をクリックします。 ちなみに、上の NEW SEASON の場合にはこんな iframe になりました。 先ほどの iframe は「/embed」で選択できる「Embed」を選択します。 Embed link の入力画面になるので、先ほどコピーした iframe を貼り付けます。 埋め込んだ Web player は Notion 上で大きさを変更できます。貼り付けた結果を下に示します。曲のサンプルを聴きながら、データがみられるという形にしたくて、曲のデータベースと並べて表示してみました。 Apple Music の Music Video が空間オーディオに先行対応していますね。千里さんのライブビデオを見て、空間オーディオのライブ感に感動してしまいました。しばらく手を付けていなかったこのページの引っ越しを進めなくてはと思った次第です。 上で紹介した森高千里さんのデータベースはこちらです。→  森高千里データベース はてなブログに書いた Notion 記事一覧
Apple Music Web player を Notion に埋め込む : Notion 解説(23) - hkob's blogApple Music Web player を Notion に埋め込む : Notion 解説(23) - hkob's blog
Files & media を Gallery view の Preview に設定する : Notion 解説(22) - hkob's blog
Gallery view では Preview を設定することができます。これまでは、ページの頭に画像を置いて Page Contents をプレビューしたり、Cover image を設定した上で、Page cover を設定していました。色々調べたところ、Files & media 属性に画像を設定することで、この内容を Preview に設定できることがわかったので、やり方を解説したいと思います。 以下の図は森高千里さんのアルバムデータベースの中の「NEW SEAON」というアルバムの属性を示したものです。今回は、ここに Thumbnail という「Files & media」の属性を追加しました。 ここには実際にファイルをアップロードすることもできますが、link を埋め込むこともできます。ここでは、オフィシャルの画像のリンクを設定しています。リンクを設定すると上にあるようにかなり小さく画像が表示されます。 属性の設定ができたら Preview の設定をします。まず、Gallery view の「...」から Properties をクリックします。 ここでは表示する Properties の選択ができますが、その上の部分で Card preview を選択する場所があります。ここで、先ほど準備した Thumbnail を選択できるようになります。 設定が終わるとこんな感じに Thumbnail がプレビューとして並びます。 Files & media の使い方がよくわからなかったのですが、こんなところで使えるとは思いませんでした。意外と知らない人がいそうなので記事にしてみました。参考になれば幸いです。 ちなみに、上で紹介した森高千里さんのデータベースはこちらです。→  森高千里データベース はてなブログに書いた Notion 記事一覧
Files & media を Gallery view の Preview に設定する : Notion 解説(22) - hkob's blogFiles & media を Gallery view の Preview に設定する : Notion 解説(22) - hkob's blog
Notion 繰り返しイベント作成を Google Spreadsheet で管理する : Notion 解説(21) - hkob's blog
土曜日に書いた「 定期的に Notion ページを作成する : Notion 解説(19) - hkob's blog 」によって、毎朝「雑務・振り返り」タスクが Notion に自動登録されるようになりました。 実は、繰り返しタスクについては、まいにち Notion No.7 を参考にして、「 リマインダの作成: Notion 解説(7) - hkob's blog 」において、リマインダテーブルという形で LaunchPad に表示されるようになっています。ただ、リマインダはだたのリマインダであって、実際にタスクにしたければ、別途タスクテーブルにタスクを作成する必要がありました。 せっかくなので、この部分も自動タスク作成にしてみようと思いました。Yuka さんの基準日からのインターバルというアイディアだけでなく、指定月、指定週、指定日なども設定できるように拡張しています。 作成したスプレッドシートはこんな感じです。各行が表示される条件になります。複数の条件がある場合には AND 条件になっています。各列の説明をします。 雑務・振り返り: インターバルが1なので毎日表示されます。 燃えるゴミの日、資源ゴミの日、週報: 週ごとなのでインターバルが 7 になっています。基準日を変えることで特定の週に設定できます。OR は書けないので複数行に同じものを書いてください。 燃えないゴミの日: 月の第2・第4火曜日なので、インターバルだけでなく、特定の週を設定しています。これも OR は書けないので 2 行書いています。 月報: 月末に表示したいので最終日を指定します。ただし最終日は月毎に異なるので、-1 で指定します(-2 だと月末の前日)。正の値の場合には日付が一致すると表示します。 誕生日: 月と日の両方を設定します。1年に1回だけ表示されることになります。 GAS のスクリプトは以下のように変更しました。中身はこれまでとほとんど変わりません。 (6/13修正: getMonth() の戻り値は0〜11でした。一月後に誕生日と言われて気づきました。以下のスクリプトは修正しています) とりあえずテストでコマンドを実行したが、月曜日なので今朝と同じものしか登録されなかった。水曜日に燃えるゴミの日が表示されれば成功かな。 115 行目に以下の行を追加し、ログを残すようにしてみました。 sheet.getRange("I" + (row+1)).setValue(date); こんな感じで最後に登録した日が Spreadsheet に残るようになります。 はてなブログに書いた Notion 記事一覧
Notion 繰り返しイベント作成を Google Spreadsheet で管理する : Notion 解説(21) - hkob's blogNotion 繰り返しイベント作成を Google Spreadsheet で管理する : Notion 解説(21) - hkob's blog
定期的に Notion ページを作成する : Notion 解説(19) - hkob's blog
昨日は ics からタスクを登録するアプリを作りました(→ カレンダーデータのデータベースへの一括登録 (Notion API 編): Notion 解説(18) - hkob's blog)。 他に自動化したいこととすると、毎日書くことにしている雑務・振り返りのページの作成です。現在は、今日の日付でフィルタされた Linked Database にて、New することで今日の日付を自動設定していました。雑務・振り返りテンプレートの1行目に以下の行が書いてあります。先頭で「delete」を押すことで、タイトルに移動するので、日付を記入し、該当する曜日を残すという手動作業を実施しています。 雑務・振り返りX/X (月火水木金土日) 手動作業はなくしたいですし、この手間が面倒で振り返りをサボることもあります。ページが毎日自動作成されていれば、サボることも減るかなと考えています。Notion の API の設定などはこの記事では省略しているので、前の記事を参照してください。 以下のようなスクリプトを作成しました。postNotion は payload をもらって、それを Notion に送るだけのものです。これは昨日のスクリプトとやっていることは同じです。createPayload はタイトルと日付をもらって、payload を作ります。今後別のものを登録したいときに使えるように役割を分離しました。doEverydayPost は引数なしで上記のタイトルと日付を作ります。タイトルも日付が入るので、同じように today から作成しています。曜日名は日本語にしたかったので、これも別の関数に切り出しています。このくらいしてあると、後で別の作業でも再利用可能になると思います。なお、payload には「タイトル」「日付」以外に「非ポモ?」というチェックボックスも入れています。この辺りは自分の環境に合わせて属性を追加・削除してください。 後で、ここに doPost(e) を追加して、Slack のコマンドで Notion のテーブルに機能を追加できるようにするつもりです。 新しいウェブアプリが作成されました。URI ができていますが、今回は特に使いません。これは後で Slack のコマンドを作った時に使います。 これで明日の朝からは、毎日「雑務・振り返り」ページが自動作成されます。ページを開いたら、雑務・振り返りテンプレートを選択すれば、それ以外の各種項目が設定されます。これで記録をサボることが減るでしょうかね。 はてなブログに書いた Notion 記事一覧
定期的に Notion ページを作成する : Notion 解説(19) - hkob's blog定期的に Notion ページを作成する : Notion 解説(19) - hkob's blog
カレンダーデータのデータベースへの一括登録 (Notion API 編): Notion 解説(18) - hkob's blog
Notion API のパブリックベータが使えるようになりました。そしたら、以前作った カレンダーデータのデータベースへの一括登録方法 (ics → Excel → Notion): Notion 解説(14) - hkob's blog を改良することで、直接 ics から Notion に一括登録できます。ということで、早速作りました。 Integration を登録するには、下にある「Develop your own integrations」のページからアクセスできます。 作成するとこんな画面が表示されます。「Internal Inregration Token」の Show をクリックするとかなり長いトークンが出てくるので、これをコピーして取っておきます。 実際に登録したいデータベースの Share を設定します。私の場合にはタスクというテーブルなので、それを開きます。Linked Database になっている「↗︎タスク」の部分をクリックすればよいです。 さらに、Database の ID を取得します。上の画面の「Copy link」をクリックして適当なエディタに貼り付けます。リンク名のうち、 https://www.notion.so/の後ろから始まり、?v までにある16進数(0-9までの数字とa-fまでの文字で書かれた文字列)をコピーして取っておきます。 Rubist なので、ics2tsv.rb を下に ics2notion.rb というプログラムを作成します。properties の下の「タスク名」と「日付」の部分は自分のテーブルの属性名に読み替えてください。ics2tsv で print していた部分を API 呼び出しにしただけです。API は Notion API のサンプルからいただきました。少しハマったところというと、日付のところは何もしないと GMT になってしまったので、後ろに「+09:00」を足した部分くらいですね。アクセス制限は1秒あたり3アクセスくらいらしいんですが、念のため1秒に1件の登録にしています。 サンプルで今日の16:40 に一つイベントを作成した ics を用意しました。「デバッグ表示あり」の部分にコメントを付ける前の結果です。動いているかどうか心配だったので、request データも表示されています。ちゃんと登録されているか見るために、ics2tsv.rb と同じタブ区切り表示は残しています。また、表示の後ろにレスポンスコードを表示しています。200 となっていれば成功で何も表示しませんが、それ以外の数字の時には response.body もエラー表示するようにしています。 API ができるといろいろと夢が広がりますね。もう少し何ができるかを考えていきます。 はてなブログに書いた Notion 記事一覧
カレンダーデータのデータベースへの一括登録 (Notion API 編): Notion 解説(18) - hkob's blogカレンダーデータのデータベースへの一括登録 (Notion API 編): Notion 解説(18) - hkob's blog
Copy of を一括で消す : Notion 解説 (17) - hkob's blog
Yuka's STUDIO の Notion の部屋で『ページをコピーすると付く「Copy of 」を簡単に消す方法はないですか』という質問がありました。確かに、カレンダービューとかで、Option ドラッグで複製が簡単にできるんですが、「Copy of 」が付きますね。これまでは手作業で修正していたんですが、確かに自動化できると便利だなと思いました。完全なる自動化ではないですが、二手間くらいでできる方法を考えたので紹介しておきます。 コピーするとページ名に「Copy of 」が自動的に付きます。Copy of をコピーしてもさらに付くことはありません。ページ名は文字列固定なので、ここを Formula にすることはできません。そのため、ページ名から Copy of を取り除いた列をFormula で作成します。名前は「Remove Copy of」としておきます。フォーミラは以下のように設定します。 これで、コピーしたものから Copy of を取り除いた列が作成されます。 次にこの列をページ名に簡単にコピーできるビューを作成します。ビューの名前は Formula と同じ「Remove Copy of」としておきます。このビューはページ名と Remove Copy of の属性のみを表示します。さらに、Filter でページ名が「Copy of」で始まるものだけを抽出します。 ここまでが準備です。 大量にページをコピーした時には、この「Remove Copy of」ビューを開きます。今、テストでデータを用意したのが下の図です。タスク名と「Copy of 」が消された列が表示されています。図にあるように Remove Copy of の列を全体選択して、ページ名(この例ではタスク名)の部分に貼り付けることで、Copy of を一括で修正することができます。 質問されるまで、こういう発想がなかったので新鮮でした。Notion についてみんなでディスカッションできる場があるのはいいですね。各地で Notion コミュニティが出来まくっているのもよくわかります。 はてなブログに書いた Notion 記事一覧
Copy of を一括で消す : Notion 解説 (17) - hkob's blogCopy of を一括で消す : Notion 解説 (17) - hkob's blog
ポモドーロトラッカーの導入 : Notion 解説(15) - hkob's blog
Yuka さんの「まいにち Notoin Ep.10」 にて「 Notion でポモドーロトラッカー 」が公開されました。YouTube の中でも紹介されていましたが、このポモドーロトラッカーは Yuka's Studio でベータテストしていました。情報解禁ということで私の方でも紹介します。 現在の私の Launchpad はこんな感じです。 今回、Yuka さんの記事で紹介されたポモドーロトラッカーがトップに並んでいます。 ポモドーロトラッカーの詳細は Yuka さんの YouTube の動画の方がわかりやすいので、是非それをみてください。 なお、今日は誕生日ということで、個人的なタスクが多かったので、タスクは意図的に消しています。 Yuka さんのポモドーロタイマーから、個人的に修正している部分を紹介します。 私の場合には To Do リストおよび活動記録を「タスク」というテーブルで管理しています。 ポモドーロトラッカーには、未スケジュールとして To Do に入れたものが全部表示されます。 ただ、To Do には会議など、ポモドーロ運用に合わないものもあります。 そこで、私の場合は「非ポモ?」という Boolean の属性を追加しました。 左上の未スケジュールの部分には、非ポモが未チェックのものだけが表示されます。 To Do に入れていたものは、当然チェックを付けていないので、ここに表示されます。 この部分はにタスク名と非ポモのチェックボックスだけが表示されています。 先程のようなポモドーロ運用に合わないものについては、ここでチェックボックスをクリックすればこの欄から消えることになります。 中央部には先ほど除外したポモ以外のタスクが表示されます。 フィルタで「非ポモ?」にチェックが入ったものだけが表示されます。 この部分には「Done」だけが表示されています。 作業記録などが書き換わったら、すぐに「Done」がクリックできるようにそれだけ表示しています。 リマインダの部分は、まいにち Notion Ep.7 の 繰り返しタスクで紹介されたものです。タスクに入れ忘れた繰り返しタスクが表示されるので、必要に応じてポモに追加したり、ポモ以外の今日のタスクに追加します。 Yuka さんのポモドーロトラッカーの動画からテンプレートを Duplicate するとビューなどは作り込まなくていいので楽かもしれません。 ただ、すでに ToDo や作業記録をデータベースで管理されている方は、そのテーブルに動画で紹介されている「ポモ」の「Multi Select」属性を追加する方が簡単かもしれません。作業が終わったら、上の画面のようにサイクルごとに Linked database を追加します。Duplicate したものを参考にしながら自分の Launchpad などに適用するといいと思います。なお、私の場合はポモドーロトラッカーのフィルタは、Yuka さんの動画に紹介されたものに「非ポモ?」が未チェックであるかどうかを追加しています。 すでに1月弱ほどポモドーロトラッカーを使っていますが、以下のようなメリットがありました。 ポモドーロタイマーを無駄に回すことがなくなりました。これまでは、作業が止まっているときにもタイマーを回しっぱなしにしていることがありました。このような、「この時間に何をやっていたんだろう」というような無駄ポモがなくなりました。 過去のタスクのポモドーロ数を見ることで、似たようなタスクにかかる時間が予想できるようになりました。 ちょっとした仕事でも、作業記録を残すようになりました。ポモとしてタスクを作成するので、記録忘れがなくなりました。 今回、Yuka's Studio のポモドーロトラッカーのベータテストに参加することができ、少し貢献することができました。 個人的に Notion 使っているだけだと知らないこともたくさんあるので、こういったコミュニティでたくさんの人とディスカッションできるのは本当に助かっています。 ポモドーロや Notion に興味がある人は、参加してみるといいかもしれません。 はてなブログに書いた Notion 記事一覧
ポモドーロトラッカーの導入 : Notion 解説(15) - hkob's blogポモドーロトラッカーの導入 : Notion 解説(15) - hkob's blog
カレンダーデータのデータベースへの一括登録方法 (ics → Excel → Notion): Notion 解説(14) - hkob's blog
タイトルデータだけのデータベース登録については、箇条書きを使うことで一括登録をする方法を紹介しました。 hkob.hatenablog.com ただ、うまくテーブルの形を合わせると、Excel からの貼り付けもかなり便利です。今回は、ics というカレンダー形式のタスクデータを、Excel を経由して一括登録する方法を解説します。 本校の校務支援システムでは、授業のスケジュールを Google Calendar などに登録できるように ics 形式で出力してくれます。形式は以下のような形になっています。ここから、授業名を示す SUMMARY と開始日・時刻を示す DTSTART が取り出せれば Ok です。 BEGIN:VCALENDAR VERSION:2.0 PRODID:-//東京都立産業技術高等専門学校//校務支援システム//JP BEGIN:VEVENT DTSTART;TZID=Asia/Tokyo:20210409T102500 DTEND;TZID=Asia/Tokyo:20210409T174500 SUMMARY:卒業研究(53) END:VEVENT BEGIN:VEVENT DTSTART;TZID=Asia/Tokyo:20210412T124500 DTEND;TZID=Asia/Tokyo:20210412T160000 SUMMARY:電気電子工学実験実習I(23) END:VEVENT BEGIN:VEVENT DTSTART;TZID=Asia/Tokyo:20210412T102500 DTEND;TZID=Asia/Tokyo:20210412T115500 SUMMARY:情報処理II(33) END:VEVENT このファイルを読み込み、タブ区切りテキストに変換した後、Excel に貼り付け、さらに Notion にペーストすることで一括登録します。以下、手順を説明します。 Notion ではタスクというデータベースに流し込みます。先ほどみたように入力するデータは、「タスク名」と「日付」だけになります。そこで、データベース置場に「時間割一括入力」というページを作成し、タスクを Linked Database で用意します。 すでに登録されたものが見えても邪魔なので、「Done」にチェックが入ったものは除いています。また、プロジェクトは「l授業」になるので、フィルタを設定しておきます。あらかじめフィルタしてある項目は、流し込んだ場合に自動的に設定されるためです。 Excel はタブ区切りテキスト(tsv) を貼り付けると自動的にセルに配置してくれるので、ics から tsv に変換するスクリプトを作成すればよいだけです。私は Rubist なので、Ruby で書きました。SUMMARY と DTSTART を取り出して、END の時に書き出しているだけです。一つだけ工夫した点は、同じ授業名が出ないように 2 回目以降は後ろに数字を入れています。これは、同じ文字列が存在する列は、Notion が勝手に Select に変換してしまい、余計な空白列が発生してしまうためです。 #!
カレンダーデータのデータベースへの一括登録方法 (ics → Excel → Notion): Notion 解説(14) - hkob's blogカレンダーデータのデータベースへの一括登録方法 (ics → Excel → Notion): Notion 解説(14) - hkob's blog
残薬管理ページの作成: Notion 解説 (10) - hkob's blog
いろんな科で薬を処方してもらうと、薬の更新期限がわかりにくくなります。常に残薬数を気にしていないと、通院時に薬を所望してもらうべきなのか判断に困ります。朝、その日分の薬を用意するときに、残薬量を目分量で把握はできるのですが、システム化しておきたいと考えていました。当初は、iPhone で管理できる専用アプリを作ろうとも考えていました。 今朝、電車の中で リマインダの作成: Notion 解説(7) - hkob's blog のことを考えていたところ、同じ形で Formula で自動計算できるのではと考え、仕様を設計してみました。薬を処方してもらったときに、残薬数を追加するだけで、基本は情報をトップページに表示しておくだけという簡単なものができました。せっかくなので、設計手順を記載しておこうと思います。 いつものようにデータベースは隠し、表は Linked database で必要なものだけを見せる形にする。 薬は頻繁に変わる場合があるので、「有効」フラグをつけて再利用できるようにする 日付に合わせて自動的に残薬数を計算するようにする 現在の薬がいつまで持つのかも表示する (次の通院時まで持つのか、薬だけ処方しに行かなければいけないのかがわかる) データベースの各属性を示しておきます。最初は入力が必要な項目です。 Name [String]: 薬の名前を入れる。 有効 [Boolean]: 現在服薬している場合にチェックを入れる。 確認日 [Date]: 薬の残数を確認した日を入れる。薬が処方された時はその日付を入れる 確認日残数 [Number]: 確認日の朝の時点の残薬数を入れる。薬が処方された時は、過去の残薬数に処方された数を追加する。 一日使用数 [Number]: 1日に服薬する薬の量を入れる。 残りは全て Formula です。上記の情報から計算します。念のため、使用した Formula も記載しておきます。 朝残数 [Formula]: 朝の時点の残薬数です。確認日から今日までの日数を数え、一日使用数を掛け算したものを確認日残数から引いているだけです。 prop("確認日残数") - dateBetween(dateSubtract(dateSubtract(now(), hour(now()), "hours"), minute(now()), "minutes"), prop("確認日"), "days") * prop("一日使用数") 夜残数 [Formula]: 朝の残数から1日使用数を引いているだけです。人によってどっちが知りたいかは不明なので、両方用意しておきました。ビューには必要な方のプロパティを表示すればいいと思います。 終了予定 [Formula]: 確認日残数を一日使用数で割った日付を確認日に足しているだけです。端数は無視しています。ちゃんとやるなら floor か ceil を付けるべきでしょうが、大体の日付がわかればよいかと思ったためです。 データとしてはこんな感じになります。 参照側は夜残数と終了予定さえ見えればいいかということでこんな感じになりました。毎日自動更新されるので、自分のよく見るページの片隅にでも置いておけばよいと思います。また、処方してもらった時だけデータベースを開き、確認日と残数だけ更新すればよいだけになります。 薬の画像などを追加して、ギャラリービューにしてもよいかもしれませんね。 自宅に帰ったら、実際に残薬を数えて使ってみたいと思います。なお、今回の 残薬管理のテンプレート も公開しています。もし興味を持ったら、Duplicate してみてください。 また、今回は残薬管理としましたが、毎日コンスタントに減るものなら同じように使えるかと思います。さらにリマインダの技術をこれに適用すれば、○日ごとに○個減る消耗品管理機能にも拡張できそうです。要望があれば、こちらもサンプルテンプレートを作って配布してみたいと思います。 はてなブログに書いた Notion 記事一覧
残薬管理ページの作成: Notion 解説 (10) - hkob's blog残薬管理ページの作成: Notion 解説 (10) - hkob's blog
日報・週報・月報の追加: Notion 解説(6) - hkob's blog
前回、生活記録と To Do のページを改め、週間アジェンダに改変しました( 週間アジェンダの作成: Notion 解説(4) - hkob's blog)。現状はこんな感じになっています。 記事のところから変更したのは以下の部分です。 今日・明日・来週はドラッグで日付設定が可能なので、それがわかるようにタイトルの色を変えました。 前日までの期日超過の未完了タスクをいちいち設計モードで修正するのが面倒だったので、8日分の下に表示しました。ここから「Done」をクリックしたり、今日や明日に移動したりできます。 Gallery view だと空の時にうまく移動ができないことがありました。そこで、この部分は見た目を犠牲にしてテーブルビューにしました。 そんな中、Yuka さんの Discord にある「notionの部屋」で「日報・週報・月報」を Relation で関連付けしているが、Relation の貼り付けを自動化できないかという質問がありました。そのアイディアを聞いて、Relation ではなく Formula でサンプルを作って回答してみました。→ 月報まとめ(サンプル)のテンプレート これを作ってみて、生活記録でやっていた振り返りを同じ仕組みで取り入れられないかと思いました。せっかくなので、試してみようと思います。いつものように記録を取りながら進めていきます(執筆後注: やはり今回も設計しながら逆戻りなどがありました。読みにくくてすみません)。 これまでタスクにするまでもない短い作業は、雑務プロジェクトの一つのタスクを用意していました。今回「月報まとめ(サンプル)」を作った時に、「今日の日報」をページの一番アクセスしやすいところに用意しました。これと同じ考え方で、雑務プロジェクトのタスクは毎日作成することとし、常に Launchpad の上部に設置することにしてみました。手順を箇条書きにしてみます。 雑務プロジェクト名を「z雑務・日報」プロジェクトに名称変更しました 月報まとめのサンプルでは、データベースに「Weekly report?」フラグを付けました。私の場合にはプロジェクトがリンクされているので、週報のプロジェクトを作って追加するだけでよいかと思います。同じように箇条書きで作業を記録します。 週報プロジェクトを作成します。このプロジェクトは手動で選択しないため、名前も単に「週報」とします。先程の「z雑務・日報」も手動で入力しなくなったので、頭の「z」は抜いておきます。通常、プロジェクト名の先頭に英字を加えておくと、手動でプロジェクトを選択するときに、タイプするだけで候補が絞られて便利になることを期待しています。今回の二つのプロジェクトは自動的にプロジェクトが選択されるので、この処置が要らなくなります。 タスクに「今週?」プロパティを追加します。これは Yuka さんの YouTubeの受け売りです。その週の日曜日以降、土曜日以前なら true を返す関数になっています。 if(prop("日付") >= dateSubtract(dateSubtract(dateSubtract(now(), day(now()), "days"), hour(now()), "hours"), minute(now()), "minutes") and prop("日付") <= dateAdd(dateSubtract(dateSubtract(dateSubtract(now(), day(now()), "days"), hour(now()), "hours"), minute(now()), "minutes"), 7, "days"), true, false) 同様にタスクに「月初日」プロパティを追加します。次に作る「週番号」を計算するために必要なものです。 dateSubtract(dateSubtract(dateSubtract(prop("日付"), date(prop("日付")) - 1, "days"), hour(prop("日付")), "hours"), minute(prop("日付")), "minutes") 作成した「月初日」を使って計算する「週番号」プロパティを追加します。 ceil(dateBetween(dateSubtract(dateSubtract(prop("日付"), hour(prop("日付")), "hours"), minute(prop("日付")), "minutes"), dateSubtract(prop("月初日"), day(prop("月初日")), "days"), "days") / ...
日報・週報・月報の追加: Notion 解説(6) - hkob's blog日報・週報・月報の追加: Notion 解説(6) - hkob's blog
プログラマから見た Notion の概念 : Notion 解説(1) - hkob's blog
Notion を少し使い始めましたが、なんとなく性に合う感じがしました。 あまりに自由度が高くてどこから始めていいのかわからないという声も聞きますが、概念がわかるとプログラマには使いやすいのではと思いました。 ということで、プログラマの視点から Notion の概念を説明してみたいと思います。 ページの中にページを埋め込むということは、内包しているページの責任は埋め込み元のページにあります。オブジェクト指向で言うと強い参照です。このため、親のページを消してしまうと、内包しているページも全て消えることになります。 一方で、あるページから別のページへの参照だけを作りたい場合もあります。以下は今日の「活動記録(日)」の上の部分です。ここには、昨日の記録へのリンクが用意されています。このリンクは所有権を持たないため、オブジェクト指向でいう弱い参照になると思います。 情報をまとめていると定型で整理したいページが出てきます。この時にはデータベースの機能を使います。データベースは上述のページの集合体で、共通のプロパティを持ちます。各ページにどのようなプロパティを持たせればよいのかは、オブジェクト指向のクラスの設計に共通する話ではないかと思います。作った後で、さまざまなビューを作って絞り込みをできるようになります。この辺りは Rails で scope を作るイメージですかね。 試しにこのブログの M1 MacBook Air インストールアプリケーション一覧 - M1 MacBook Air インストール覚書(番外編) - hkob's blog の M1 MacBook インストールアプリ一覧を Notion にインポートしてみました。ページデータを Numbers に貼り付け、CSV にエクスポートした後、Notion にインポートしました。読み込んだデータベースは、以下のような感じになりました。読み込んだ段階で、arch とかは Property type が自動的に Select になっていました。いっそ、ブログを更新したものを公開しつづけるより、このデータベースを公開した方が有用ではないかと感じているところです。後日、このページを作成する記事を作ってみて、よさそうならこちらに移行しようかと思っています。 もう一つは会議のデータベースです。こちらの属性は大したことないのですが、新しいページを作った時のテンプレートを工夫しています。会議ごとにテンプレートが異なるので、それぞれのテンプレートボタンをたくさん埋め込んでいます。こちらも後で記事にしようと思います。 いろいろ作りながら工夫をしているので、その辺りを説明しつつ、周りの Notion ユーザを増やしていこうと画策しているところです。 はてなブログに書いた Notion 記事一覧
プログラマから見た Notion の概念 : Notion 解説(1) - hkob's blogプログラマから見た Notion の概念 : Notion 解説(1) - hkob's blog
Notion 始めました - hkob's blog
一月ほど空いてしまいました。あまりに多忙で仕事でかなりポカをしています。 原因は、昨年夏に職場のメールシステムが Microsoft 365 になった際に、Todo 管理も Todoist から Microsoft To Do に移行したものの、うまく活用できていなかったためです。 Outlook でフラグを付けるだけで、To Do に入るなど連携はよいのですが、それすらもできていませんでした。 肝心の To Do 自体も Todoist でできていたカレンダーの日付との連携がよくなく、見過ごすことが多くなりました。 色々と調べたところ、Notion がかなり使えるという情報を見かけました。気になった記事はこちら。 これらのサイトを参考にして、以下のようなページを作ってみました。 Swaaan さんの Weekly To Do を参考にしてみました。こちらがトップページ。 このページから新しい週を始めるとテンプレートから1週間分のページを作成できるようにしました。ほぼ Swaaan さんのテンプレートをいただき、少し修正しました。 To Do とは別に日々の記録を付けるようにしました。こちらは最後の平野さんのものを真似ました。平岡さんの Youtube で紹介されているものです。 このトップページで「生活記録(日)」とすると、日々の記録のテンプレートが作成できるようにしています。実際のページはこんな感じです。こちらも平野さんのテンプレートをいただき、自分用に修正しました。 生活記録の中にある会議へのリンクは、別に用意した会議データベースのページオブジェクトへのリンクになっています。こんな感じで同一形式のページはデータベースの形で格納でき、さまざまな形で抽出可能になるようです。データベースの仕組みはかなり面白そうなので、これまで Excel などで管理していたデータなども、こちらに推移するようにしてみました。 まだたった1日だけですが、Notion はものすごく便利に使えることがわかりました。ただ、自由度が高い分内部構造がどうなっているかを理解しないと、操作が難しい感じがしました。せっかくなので、ハマりそうなポイントなどをこれから紹介できればと思っています。 とりあえず今日は生存表明ということでこの辺にしておきます。 はてなブログに書いた Notion 記事一覧
Notion 始めました - hkob's blogNotion 始めました - hkob's blog