constraints-scheduling について
カレンダーデータの抽出、制約の分類、時間枠の検索、結果の検証を段階的に進めるスケジューリング用スキルです。参加者の空き時間や予定の競合、所要時間、希望条件を扱うタスクに向いています。
主な機能
- 01カレンダーデータの抽出と検証
- 02必須・希望・境界条件の分類
- 03指定粒度に沿った時間枠検索
- 04プログラムによる制約検証
- 05境界条件と出力形式の確認
活用シーン
- 01参加者の空き時間から会議枠を探す
- 02候補枠とカレンダー予定の競合確認
- 03分単位で最も早い有効枠を検索
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ letta-ai/ skills --skill constraints-schedulingインストール後、Claude Code で/constraints-schedulingを入力して読み込まれたか確認します。
詳細
制約付きスケジューリング
概要
このスキルでは、参加者の空き時間、既存のカレンダー、希望条件など、複数の情報源にまたがる制約を満たす時間枠を見つける、制約ベースのスケジューリング問題の解決方法を説明します。体系的なデータ抽出、プログラムによる検証、時間の粒度要件への適切な対応を重視します。
ワークフロー
フェーズ 1:入力の検証とデータの抽出
分析を始める前に、データが完全であることを確認してください。
- まず入力ファイルの整合性を検証する - 処理の前に、入力ファイルが変更されておらず、想定どおりのデータが含まれていることを確認します
- データを完全に抽出する - ファイルの内容をすべて読み込んだことを確認します(ツールの出力が途中で切り詰められていないか注意してください)
- 適切なパーサーを使用する - ICS(iCalendar)のような構造化形式には、手動でテキストを抽出するのではなく、適切な解析ライブラリを使用します
- 抽出したデータを記録する - 抽出したすべての予定、制約、希望条件を明確にまとめます
フェーズ 2:制約の分類
解決策を探す前に、制約を明確なカテゴリに分類してください。
-
ハード制約(必ず満たす必要があります):
- 参加者が対応可能な時間帯
- 既存のカレンダー予定との競合
- 必要な会議時間
- 譲れない時間の制限
-
ソフト制約(同じ条件の候補から選ぶ際に考慮する希望):
- 希望する曜日
- 希望する時間帯
- 希望するバッファ時間
- その他の提示された希望条件
-
エッジケースの制約:
- 境界条件(例:会議が昼休みの開始時刻ちょうどに終了する)
- 曜日ごとのルール(例:特定の曜日は早く退勤する)
- バッファの要件(例:特定の時刻以降は会議を入れない)
フェーズ 3:体系的な解の探索
網羅的な探索方法を実装してください。
- 指定された粒度を守る - 分単位の粒度が指定されている場合は、時間の区切りだけでなく、その粒度で開始可能なすべての時刻を確認します
- プログラムで検証する - すべての制約を組み込んだスクリプトを作成し、考えられるすべての時間枠を体系的に確認します
- 包括的なスクリプトを 1 つ使用する - 手動分析とコードによる分析で作業を重複させないようにし、プログラムによる検証を信頼します
- 最も早い有効な時間枠を確認する - 「最も早い」時間枠を見つける際は、正しい基準時刻から探索を開始し、指定された粒度を守っていることを確認します
フェーズ 4:検証
解決策を確定する前に、次の項目を確認してください。
- すべてのハード制約と照合する - 選択した時刻が各制約を満たすか、個別に確認します
- 境界条件を記録する - 会議が制約の境界時刻ちょうどに終了するなどのエッジケースでは、有効であることを明示的に確認します
- 元データと照合する - 選択した時間枠が、抽出したカレンダーの予定と競合しないことを確認します
- 出力形式を確認する - 指定された形式要件に出力が合致していることを確認します
よくある落とし穴
データ抽出の問題
- ファイルの読み込みが途中で切り詰められる - ツールの出力では長いファイルが途中で切り詰められることがあります。データを完全に抽出できたことを必ず確認するか、プログラムによる解析を使用してください
- 手動解析の誤り - ライブラリを利用できる場合は、ICS の予定のような構造化データを手作業で抽出するのは避けてください
- 予定の見落とし - カレンダーの解析が不完全だと、スケジュールの競合につながる可能性があります
粒度の誤り
- 指定された粒度を無視する - 分単位の粒度が必要な場合、時間単位の候補だけを確認すると、より早い有効な時間を見落とす可能性があります
- 境界条件の思い込み - 10:00〜11:00 の会議と 11:00 に始まる制約が競合するかどうかは、要件によって異なります
分析の整理不足
- 手動分析の重複 - 同じ制約を手作業で何度も確認すると、労力が無駄になるだけでなく、分析結果に一貫性がなくなるおそれがあります
- 思いつくままの推論 - 構造化せずに曜日や制約を行き来すると、誤りのリスクが高まります
- 検証の遅れ - 分析の完了後ではなく、分析を始める前に入力の整合性を確認してください
制約の処理
- ソフト制約をハード制約として扱う - 希望は選択肢を絞り込む条件ではなく、同順位の候補から選ぶ際の判断基準にしてください
- エッジケースを見落とす - 曜日ごとのルール、バッファ要件、境界条件は見落としやすい項目です
- 制約の列挙が不完全 - 入力データからすべての制約を抽出できていない状態です
検証チェックリスト
スケジュール案を提出する前に、次の点を確認してください。
- すべての入力ファイルを省略なく読み込んだ
- 入力ファイルの完全性を検証した(変更されていないことを確認した)
- 選択した時間がすべてのハード制約を満たしている
- 抽出したすべてのカレンダーイベントとの競合がない
- 指定された粒度の要件に従って検索した
- エッジケースと境界条件を明示的に確認した
- 有効な候補から選ぶ際にソフト制約を適切に使用した
- 出力形式が要件に合っている
ベストプラクティス
- まずプログラムを使って取り組む - 手作業で分析するのではなく、入力を解析して制約を確認する包括的なスクリプトをすぐに作成します
- 適切なライブラリを使用する - ICS ファイルには icalendar などのライブラリを使用し、ほかの構造化形式には適切なパーサーを使用します
- 階層的に分析を構成する - 日や時間帯を行き来するのではなく、制約のカテゴリごとに整理します
- 信頼できる唯一の情報源を使う - プログラムによる検証を信頼し、手作業で分析を重複させないようにします
- 境界条件を明確に扱う - 境界条件の扱い方(終点を含むかどうか)を記録します
- 網羅的に検索する - 「最も早い」または「最適な」時間帯を探す場合は、指定された粒度ですべての候補を検索します
コメント
Markdown 対応