レジュメ作成タスクの自動作成: hkob の雑記録 (97)

はじめに

hkob の雑記録の第97回目は、今日からの授業のために準備したレジュメ作成タスクの自動作成について解説します。

昨年4月の作業

こんなポストを見つけました。タイムラインビューで手作業で依存関係を繋げていました。

この作業は 3/31 のこの記事で、自動化されました。これにより授業間の依存関係を繋ぐ時間が削減されました。

hkob.hatenablog.com

昨年8月の作業

昨年度の後期の授業では、授業タスクの前にレジュメ作成のタスクを作成し、依存関係をやはりタイムラインで接続していました。季節労働だし、一科目で数分で終わるからいいかと気持ちだったのかもしれません。

hkob.hatenablog.com

レジュメタスク作成の自動化

ただ、科目数もあるとこれも面倒だと感じました。そのため、以下のようなスクリプトを数分で記載しました。だいたい 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]

依存関係はこんな形でレジュメが授業同士を挟むように設定されるようにしています。

mermaid

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

1回目授業のプロパティ

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

1科目完了

うまくいっていそうなので、他の科目の一気にやってみました。

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 になっているはずてず。

レジュメ作成2件完了

おわりに

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

hkob.notion.site