はじめに
hkob の雑記録の第97回目は、今日からの授業のために準備したレジュメ作成タスクの自動作成について解説します。
昨年4月の作業
こんなポストを見つけました。タイムラインビューで手作業で依存関係を繋げていました。
年度当初にやること。icsToNotion で一括流し込みした授業タスクの依存関係をタイムラインビューで一括設定。このビューはこのためだけにある。#Notion #notiontwt pic.twitter.com/TOFQPDvXlf
— hkob|Notion Ambassador (@hkob) 2024年4月7日
この作業は 3/31 のこの記事で、自動化されました。これにより授業間の依存関係を繋ぐ時間が削減されました。
昨年8月の作業
昨年度の後期の授業では、授業タスクの前にレジュメ作成のタスクを作成し、依存関係をやはりタイムラインで接続していました。季節労働だし、一科目で数分で終わるからいいかと気持ちだったのかもしれません。
レジュメタスク作成の自動化
ただ、科目数もあるとこれも面倒だと感じました。そのため、以下のようなスクリプトを数分で記載しました。だいたい 1科目分の設定時間くらいです。
#!/usr/bin/env ruby require "notion_ruby_mapping" include NotionRubyMapping NotionRubyMapping.configure { |c| c.token = ENV["NOTION_API_KEY"] } if ARGV.length != 1 puts "Usage: make_prepare_tasks.rb <page_id>" exit end lecture_page = Page.find ARGV.first pre_lecture_page = nil db = lecture_page.parent while lecture_page do title = lecture_page.title puts "Page: #{title}" db.create_child_page do |_, pp| pp["Task name"] << "#{title}のレジュメ作成" pp["blocking"].add_relation lecture_page.id pp["blocked by"].add_relation pre_lecture_page.id if pre_lecture_page end pre_lecture_page = lecture_page lecture_page_id = lecture_page.properties["blocking"].relation.map { |r| r["id"] }.first lecture_page = lecture_page_id && Page.find(lecture_page_id) end
処理前の未完了タスク一覧です。次の授業を blocking しているのがわかります。

とりあえず一番最初のデータベースの授業で実行してみました。授業の依存関係を辿っていき、それぞれの授業の前にレジュメ作成タスクを作成します。
% make_prepare_tasks.rb "https://www.notion.so/hkob/44-1-1c6d8e4e98ab81f29ae4c4f82409383b?pvs=4" Page: データベース(44)[1] Page: データベース(44)[2] Page: データベース(44)[3] Page: データベース(44)[4] Page: データベース(44)[5] Page: データベース(44)[6] Page: データベース(44)[7] Page: データベース(44)[8] Page: データベース(44)[9] Page: データベース(44)[10] Page: データベース(44)[11] Page: データベース(44)[12] Page: データベース(44)[13] Page: データベース(44)[14] Page: データベース(44)[15]
依存関係はこんな形でレジュメが授業同士を挟むように設定されるようにしています。

1回目の授業が1回目のレジュメ作成に blocked by されており、逆に2回目の授業や2回目の授業準備を blocking していることがわかります。

実際他の授業もうまくレジュメ作成の依存関係が設定されていることがわかります。

うまくいっていそうなので、他の科目の一気にやってみました。
hkob@hM1Pro ~/L/C/D/bin> make_prepare_tasks.rb "https://www.notion.so/hkob/I-24-1-1c7d8e4e98ab810ab4a7d218a549fbac?pvs=4" Page: 情報工学実験実習I(24)[1] Page: 情報工学実験実習I(24)[2] Page: 情報工学実験実習I(24)[3] Page: 情報工学実験実習I(24)[4] Page: 情報工学実験実習I(24)[5] Page: 情報工学実験実習I(24)[6] Page: 情報工学実験実習I(24)[7] Page: 情報工学実験実習I(24)[8] Page: 情報工学実験実習I(24)[9] Page: 情報工学実験実習I(24)[10] Page: 情報工学実験実習I(24)[11] Page: 情報工学実験実習I(24)[12] Page: 情報工学実験実習I(24)[13] Page: 情報工学実験実習I(24)[14] Page: 情報工学実験実習I(24)[15] hkob@hM1Pro ~/L/C/D/bin> make_prepare_tasks.rb "https://www.notion.so/hkob/1-1c7d8e4e98ab8130ba46f7b0400930c1?pvs=4" Page: マルチメディア処理(専攻科)[1] Page: マルチメディア処理(専攻科)[2] Page: マルチメディア処理(専攻科)[3] Page: マルチメディア処理(専攻科)[4] Page: マルチメディア処理(専攻科)[5] Page: マルチメディア処理(専攻科)[6] Page: マルチメディア処理(専攻科)[7] Page: マルチメディア処理(専攻科)[8] Page: マルチメディア処理(専攻科)[9] Page: マルチメディア処理(専攻科)[10] Page: マルチメディア処理(専攻科)[11] Page: マルチメディア処理(専攻科)[12] Page: マルチメディア処理(専攻科)[13] Page: マルチメディア処理(専攻科)[14] Page: マルチメディア処理(専攻科)[15] Page: マルチメディア処理(専攻科)[16] hkob@hM1Pro ~/L/C/D/bin> make_prepare_tasks.rb "https://www.notion.so/hkob/I-24-1-1c7d8e4e98ab8144bd40d38bdfbc0fa5?pvs=4" Page: プログラミングI(24)[1] Page: プログラミングI(24)[2] Page: プログラミングI(24)[3] Page: プログラミングI(24)[4] Page: プログラミングI(24)[5] Page: プログラミングI(24)[6] Page: プログラミングI(24)[7] Page: プログラミングI(24)[8] Page: プログラミングI(24)[9] Page: プログラミングI(24)[10] Page: プログラミングI(24)[11] Page: プログラミングI(24)[12] Page: プログラミングI(24)[13] Page: プログラミングI(24)[14] Page: プログラミングI(24)[15] hkob@hM1Pro ~/L/C/D/bin> make_prepare_tasks.rb "https://www.notion.so/hkob/II-34-1-1c7d8e4e98ab81d29dcecd4f80f0c551?pvs=4" Page: プログラミングII(34)[1] Page: プログラミングII(34)[2] Page: プログラミングII(34)[3] Page: プログラミングII(34)[4] Page: プログラミングII(34)[5] Page: プログラミングII(34)[6] Page: プログラミングII(34)[7] Page: プログラミングII(34)[8] Page: プログラミングII(34)[9] Page: プログラミングII(34)[10] Page: プログラミングII(34)[11] Page: プログラミングII(34)[12] Page: プログラミングII(34)[13] Page: プログラミングII(34)[14] Page: プログラミングII(34)[15]
全科目で依存関係ができています。

Launchpad での表示
この結果、レジュメ作成はカレンダータスクではないので、LaunchPad ではいつかやるタスクになります。依存関係が設定されているため、現在できるタスクだけが表示されています。レジュメ作成自体には締切はないのですが、依存している授業にはカレンダーが設定されているため、残り日数が remain に掲載されています。昨日の時点で後1日しか猶予がないので、この二つのタスクはすぐに実施しなければいけません。

二つのタスクを実施後
「いつかやる」タスクは「Work now」ボタンを押すと、スプリント・開始時刻・In Progress ステータス・Next step チェックボックスが自動設定されます。作業が終わったら、Next step チェックボックスを外すと、Done ステータスに移行するとともに終了時刻が設定されます。ここで、いつかやるタスクには、この二つの授業の次のレジュメ作成タスクは表示されていません。これはもう一つの依存先である授業が完了していないためです。今日、授業が終わってメモが記載され完了になると、無事に来週のレジュメ作成が表示されます。その時には remain は 7 になっているはずてず。

おわりに
やはり NotionRubyMapping でコードを書くのは楽ですね。1年に2回しか使わないコードですが、数分の人間の手作業が10秒弱で待つだけでいいのは本当に楽です。