diff --git a/content/posts/2026-01-08/image-1.png b/content/posts/2026-01-08/image-1.png new file mode 100644 index 0000000..9f7bc8b Binary files /dev/null and b/content/posts/2026-01-08/image-1.png differ diff --git a/content/posts/2026-01-08/image.png b/content/posts/2026-01-08/image.png new file mode 100644 index 0000000..b432283 Binary files /dev/null and b/content/posts/2026-01-08/image.png differ diff --git a/content/posts/2026-01-08/index.md b/content/posts/2026-01-08/index.md new file mode 100644 index 0000000..e9d4c44 --- /dev/null +++ b/content/posts/2026-01-08/index.md @@ -0,0 +1,116 @@ +--- +author: usbharu +draft: false +categories: + - 技術 +date: 2026-01-08T22:08:17+09:00 +tags: + - 自動化 + - Reclaim + - Google Apps Script +keywords: + - 自動化 + - Reclaim + - Google Apps Script +title: スケジュール管理を自動化して怠惰を加速させる +relpermalink: posts/2026-01-08/ +url: posts/2026-01-08/ +decription: スケジュール管理を自動化して怠惰を加速させる +--- + +あるいは自分の時間を1秒でも増やしたいあなたに。 + +怠惰、傲慢、短気がプログラマの美徳だとか、面倒くさがりほどプログラマに向いているだとか言いますが、自動化とかすら面倒なのがusbharu。というわけで今まで課題の期限は頭で覚えて管理していました。しかし先日急激にタスクが増え、自分が管理できそうにないレベルになってしまいました。これを機に全部自動化しよう というわけです。 + +## 構成 + +- Google カレンダー +- Google Tasks +- Reclaim +- Google Apps Script(任意) + +スケジュールをGoogle カレンダー、タスクをGoogle Tasks、自動化をReclaimで行います。Google Apps ScriptはiCal形式のものを自動的にGoogle Tasksにブチ込むために使うため、その他の方法で自動化できる場合は不要です。 + +## 自動化の準備 + +### スケジュール + +まず、開始時間、終了時間が決まっている用事を全部Googleカレンダーに入れましょう。なに? いちいち入れるのが面倒だ? Geminiにやってもらいなさい + +![GeminiにGeminiがGoogleカレンダーと連携して何ができるのかを説明してもらっている様子。予定の作成、検索、変更、削除などができる](image.png) + +このとき、予定の時間ぴったりではなく拘束時間全部を登録します。なぜなら自動化の際に移動時間などは自動で計算してくれないから + +なお予定自体に余裕をもたせる必要はありません。自動化の際にバッファーを設定できます。 + +### タスク + +開始時間、終了時間が決まっていない用事、あるいは普通のタスクはGoogle Tasksに入れます。学校の課題とか、その他諸々提出物とかです。手動でタスクを追加するのはあまりにも不便なので、なんとか自動化して下さい。可能なら完了済みを反映させるところまで自動化しちゃって下さい。でもReclaimからGoogle Tasksのリストは選択できないので、連携してからReclaimが作ったリストに追加して下さい。 + +## いざ自動化 + +スケジュールの自動管理にはReclaimというサービスを使います。AIが所要時間、優先度、期限などをもとに、自動でスケジュールを組んでくれます。複数人で使う場合はそれぞれの予定を見て、会議などの時間を決めてくれる機能もあるようです。 + +[Reclaim](https://reclaim.ai/) + +ところで公式サイトがメモリリークしていると思うんですが、僕だけでしょうか。メモリ15GB食ってました + +### Reclaimに登場する概念 + +概念も何も一般的なスケジュール/ToDoアプリとそう変わらないのですが、いくつか特殊な概念があるのでここで説明しておきます。 + +- Hours - タスク、Habitsを入れて良い日、時間帯。 +- Habits - 習慣 毎日、週何日、などの頻度で自動的に差し込んでくれる +- Focus - 空いてる時間にやりたいこと 例えば勉強とか、個人開発とか + +#### Hours + +Hoursは自動でタスクとHabitsを入れるときの制約です。タスク作成時にどのHoursでスケジュールを作成するか選ぶことができます。 + +![alt text](image-1.png) + +Hoursを設定することで、例えば真夜中にタスクをブチ込まれる事故を防ぐことができます。あと、Googleアカウントに複数カレンダーが紐づいている場合に追加先のカレンダーを選択することができます。しっかり設定しておきましょう。家族にタスクをフル開示する事故が発生します(一敗)。 + +HoursにはWorking Hours、Meeting Hours、Personal Hoursの3つがデフォルトで準備されており、自分で新しく作成することもできます。僕は26時ぐらいまで起きていることが多いので、日付をまたいで設定できないのが惜しいところ + +とりあえずPersonal Hoursを起きている時間全てに変えておくと良いと思います。 + +#### Habits + +Habitsは習慣、または習慣にしたいものです。とりあえず掃除とか入れておくと良いでしょう。上で設定したHoursの時間で、設定した優先度・所要時間・理想的な時刻(Ideal time)をもとに自動でスケジューリングしてくれます。 + +その他スケジュールに失敗したときに残す/消すの設定や、どの程度予定を守るか、依存関係などを設定できます。 + +#### Focus + +集中して取り組みたいことをスケジュールに組み込んでくれます。空いている時間にFocusを差し込むか、Focusを作ってから間にタスクなどを差し込むかを選べるようです。僕は後者を使っていましたが、タスクの期限よりもFocusが優先されることがあったので前者(UI上で右)にしています。 + +Focusは週に約何時間スケジュールするかを設定することができ、僕はとりあえず多めに設定しています。 + +--- + +さて、概念の解説が終わったところで、自動化していきましょう。設定からIntegrationに進み、Google カレンダーとGoogle Tasksを連携します。 + +はい、完了です。これでReclaimが自動でスケジュールを作成してくれます。Google カレンダーは今まで通り普通に予定を作成できます。人が作った予定をReclaimは尊重し、動かすことはありません。Reclaimに委ねたい場合はGoogle Tasksに追加しましょう。また、予定を移動した場合や優先度、所要時間を変更した場合に再計算が行われ、改めてスケジュールが作成されます。 + +あとはスケジュール結果を見て調整して行きましょう。Bufferと絵文字プレフィックスは設定しておくと良いと思います。 + +Googleカレンダーを見ているとき、重要な予定だけフィルターできたほうが便利ですので、手動で管理するカレンダーと自動管理するカレンダーは分けるべきでしょう。 + +### Google Apps Scriptで自動化 + +タスクの期限がiCal形式のカレンダーで配布されている場合はGoogle Apps Scriptで自動化することができます。Google カレンダーにiCal形式のカレンダーをインポートし、`CalendarApp.getCalendarById(id,now,end)`でイベント一覧を取ることができます。あとは重複排除してGoogle Tasksにブチ込むだけなのですが、タスクのタイトルでReclaimを制御することができます。 + +[Creating and syncing Google Tasks to Reclaim](https://help.reclaim.ai/en/articles/4293078-creating-and-syncing-google-tasks-to-reclaim) + +とりあえずdueを設定しておくとよいでしょう。 + +[Tasks Service](https://developers.google.com/apps-script/advanced/tasks) + +[Class CalendarApp](https://developers.google.com/apps-script/reference/calendar/calendar-app) + +重複排除の際にはPropertiesServiceが便利です。多くても1ヶ月分のタスクなんて数百件でしょうから。 + +## おわりに + +こんなことをしても結局TwitterとMisskeyに時間を奪われています!!!!! \ No newline at end of file diff --git a/resources/_gen/images/posts/2026-01-08/image-1_hu_22b14f219c6ad408.png b/resources/_gen/images/posts/2026-01-08/image-1_hu_22b14f219c6ad408.png new file mode 100644 index 0000000..2671d6e Binary files /dev/null and b/resources/_gen/images/posts/2026-01-08/image-1_hu_22b14f219c6ad408.png differ diff --git a/resources/_gen/images/posts/2026-01-08/image-1_hu_2f44878da1dccc85.png b/resources/_gen/images/posts/2026-01-08/image-1_hu_2f44878da1dccc85.png new file mode 100644 index 0000000..4d4d16b Binary files /dev/null and b/resources/_gen/images/posts/2026-01-08/image-1_hu_2f44878da1dccc85.png differ diff --git a/resources/_gen/images/posts/2026-01-08/image-1_hu_49a2d779fcab9913.png b/resources/_gen/images/posts/2026-01-08/image-1_hu_49a2d779fcab9913.png new file mode 100644 index 0000000..1313544 Binary files /dev/null and b/resources/_gen/images/posts/2026-01-08/image-1_hu_49a2d779fcab9913.png differ diff --git a/resources/_gen/images/posts/2026-01-08/image-1_hu_eebe635f8fb4d186.png b/resources/_gen/images/posts/2026-01-08/image-1_hu_eebe635f8fb4d186.png new file mode 100644 index 0000000..c470293 Binary files /dev/null and b/resources/_gen/images/posts/2026-01-08/image-1_hu_eebe635f8fb4d186.png differ diff --git a/resources/_gen/images/posts/2026-01-08/image_hu_142c74606d80f0db.png b/resources/_gen/images/posts/2026-01-08/image_hu_142c74606d80f0db.png new file mode 100644 index 0000000..87106a7 Binary files /dev/null and b/resources/_gen/images/posts/2026-01-08/image_hu_142c74606d80f0db.png differ diff --git a/resources/_gen/images/posts/2026-01-08/image_hu_145456668c419ebb.png b/resources/_gen/images/posts/2026-01-08/image_hu_145456668c419ebb.png new file mode 100644 index 0000000..318fcf5 Binary files /dev/null and b/resources/_gen/images/posts/2026-01-08/image_hu_145456668c419ebb.png differ diff --git a/resources/_gen/images/posts/2026-01-08/image_hu_2b2f5cbe685dba7e.png b/resources/_gen/images/posts/2026-01-08/image_hu_2b2f5cbe685dba7e.png new file mode 100644 index 0000000..3ada5d6 Binary files /dev/null and b/resources/_gen/images/posts/2026-01-08/image_hu_2b2f5cbe685dba7e.png differ diff --git a/resources/_gen/images/posts/2026-01-08/image_hu_c184674dab497425.png b/resources/_gen/images/posts/2026-01-08/image_hu_c184674dab497425.png new file mode 100644 index 0000000..4187d38 Binary files /dev/null and b/resources/_gen/images/posts/2026-01-08/image_hu_c184674dab497425.png differ