後期時間割の依存関係設定スクリプト作成 : hkob の雑記録 (614)

はじめに

hkob の雑記録の第614回目(連続188日目)は、後期時間割の依存関係設定スクリプトを作成した件を記録しておきます。

前期との違い

前期では ics から Notion タスクを自動生成するスクリプトを実行していました。このスクリプトでは自動的に1回目から15回目までの授業に依存関係を自動で設定していました。

hkob.hatenablog.com

ただ、その後 6 月に以前の Google Calendar と Notion の同期システムに戻したのでした。

hkob.hatenablog.com

後期の授業登録は ics ファイルをクリックすることで、Google Calendar にイベントを登録しました。上に示した同期システムにより、自動的にタスクが生成されました。

依存関係の自動設定

そうなると前期に設定されていた依存関係は自動的に設定されることはなくなります。それは不便なので、さっと concat_tasks.rb というスクリプトを作成してしまいました。この程度のものだと数分で作成できてしまうのが、NotionRubyMapping のいいところです。

#!/usr/bin/env ruby
# frozen_string_literal: true
require "date"
require "notion_ruby_mapping"
include NotionRubyMapping
NotionRubyMapping.configure do |config|
  config.notion_token = ENV["AMBASSADOR_NOTION_API_KEY"]
  config.wait = 0
end

TASK_DATA_SOURCE_ID = "1f70ce2a652080cebc36000b08bc3b11"
ds = DataSource.find TASK_DATA_SOURCE_ID

tp = ds.properties["Task name"]
sp = ds.properties["Status"]
dp = ds.properties["Date"]

pages = ds.query_data_source tp.filter_starts_with(ARGV[0]).and(sp.filter_equals "Not Started").ascending(dp)
pre_page = nil
pages.each do |page|
  p page.title
  if pre_page
    page.properties["blocked by"].relation = pre_page.id
    page.save
  end
  pre_page = page
end

使い方は以下のようになります。引数で示した文字列で始まる Not Started のタスクを日付順に取得し、blocked by に一つ前のページを登録しているだけです。冪等性があるので、何度やっても問題ないので、もう一度実行してみました。うまく動いているようです。

concat_tasks.rb "プログラミングI(24)"
"プログラミングI(24)[1]"
"プログラミングI(24)[2]"
"プログラミングI(24)[3]"
"プログラミングI(24)[4]"
"プログラミングI(24)[5]"
"プログラミングI(24)[6]"
"プログラミングI(24)[7]"
"プログラミングI(24)[8]"
"プログラミングI(24)[9]"
"プログラミングI(24)[10]"
"プログラミングI(24)[11]"
"プログラミングI(24)[12]"
"プログラミングI(24)[13]"
"プログラミングI(24)[14]"
"プログラミングI(24)[15]"

おわりに

今なら AI に頼めばやってくれるのですが、個人のものは AI の利用量には制限があるので、決定論的なものであればスクリプトでやってしまったほうがいいですね。

hkob.notion.site