2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ひとりごとからTODOを作るClaude Codeスキル

仕事中にやんなきゃな~ってことを思いついたものの、ひとりごとをつぶやいたまま忘却の彼方になってしまった経験はありませんか?わたしはしょっちゅうです。

今回は Claude Code と対話しながら、トランスクリプトを週次TODOチェックシートに自動変換する「スキル」を作り、ひとりごとを見えるようにしました。


Claude Codeの「スキル」とは?

Claude Codeにはスキルという仕組みがあります。SKILL.md という Markdown ファイルに処理の指示を書いておくと、特定のトリガーワードで Claude がその指示に従って動いてくれます。

.claude/skills/
└── todo-from-transcript/
    └── SKILL.md   ← ここに指示を書く

Markdownを書くだけで自分専用のAIアシスタント機能を作ることができます。いい時代ですね。


作る前の相談:どんな設計にする?

とはいえClaude Codeを本格的に触り始めたのがつい最近なので、スキルの作成もどうすればいいやらです。
そのため、やりたいことをClaude Codeに相談しつつ、スキルの作成はClaude Codeにお任せしました。

スキル作成のための事前準備

Claude Code公式プラグイン skill-creator を活用しました。

skill-creator はスキル作成を支援するプラグインで、以下のことをやってくれます

  • SKILL.md の書き方ガイドラインの提供
  • テストケースの実行と結果の比較(スキルあり vs なし)
  • 完成したスキルの .skill ファイルへのパッケージ化

インストール済みであれば、チャットで「スキルを作りたい」と伝えるだけで対話形式でスキル作成が進みます。今回もこのプラグインの手順に沿って、テストを回しながら仕様を磨いていきました。

Claude Codeに相談したこと

私: 目的はひとりごとのトランスクリプトから、todoメモを作ることです。やってほしいことは、トランスクリプトからwhenとwhatを確認して、日付ごとにまとめる。できればチェックシートにしたいです。形式はマークダウンかエクセル。これはclaudeがどちらのほうがメモ作成に向いているかを判断して、形式をどちらかに決めてほしいです。トリガーはtodo作成でお願いします。

↑とりあえずやりたいこととして、チェックリストにしたいこと、いつ・何をするをシンプルにまとめたいことをClaude Codeにお伝えする。

マークダウンを選びます。- [ ] の構文でチェックシートをそのまま表現できる。ファイルサイズが軽く、他ツールへの転用もしやすい。

私: 作成単位は日次、週次、月次のどれがいいでしょうか。

週次をおすすめします。ひとりごとには「明日やる」「来週まで」「月末までに」が混在しがち——日次では粒度が細かすぎ、月次では埋もれる。週単位でグループ化しつつ、各タスクに具体的な日付を併記すれば精度と見通しを両立できます。

いったんこれで作成してもらいます。


仕様をまとめて、スキルを作成

設計が固まったところで Claude Code がスキルを作成してくれました。

項目 内容
トリガー 「todo作成」「TODOまとめて」など
入力① memo_voice/ フォルダのファイル
入力② チャットへのテキスト直貼り
出力先 todo/ フォルダ
ファイル名 yyyymmdd-yyyymmdd_todo.md
週の区切り 月曜〜金曜(営業日のみ)

作成されたSKILL.mdの主要部分はこちらです:

---
name: todo-from-transcript
description: ひとりごとや音声メモのトランスクリプト(文字起こし)から
TODOチェックシートを作成する。ユーザーが「todo作成」「TODOまとめて」
「トランスクリプトからTODO」などと言ったときに必ずこのスキルを使う。
---

## 変換ルール

- 「明日」→ 翌日の日付
- 「来週〇曜日」→ 来週の該当曜日
- 「〇月末」→ その月の最終日
- 期限の記載がない → 今日の日付
- 「いつか」「そのうち」→ 未定セクションへ

いい感じに動くかテスト

Claude Codeで作成したスキルをテストします。
ただし、このテストもわたしはノータッチで、サンプルのトランスクリプトはClaude Codeが作成し、わたしがすることは出来上がったチェックリストが想定通りかをチェックするだけになります。

テスト1:基本的なひとりごと

「えーと今日は6月6日で、明日の午前中に田中さんに提案書を送らないと
いけないんだよな。それと来週月曜日、6月9日に部門会議があるから
準備しておかないと。あとなんか資料作らないといけないんだけど、
まあそのうちやろう。冷蔵庫の中身を整理したいんだよね、いつかやる。」

↑Claude Codeが書いたひとりごとです。提案書、部門会議に冷蔵庫の中身整理が入っているのがなんだかかわいい

出力された 20260602-20260608_todo.md

# TODO: 2026-06-02 〜 2026-06-08

## 2026-06-02(月)〜 2026-06-06(金)

- [ ] (2026-06-07) 田中さんに提案書を送る(午前中)

## 2026-06-09(月)〜 2026-06-13(金)

- [ ] (2026-06-09) 部門会議の準備をする

## 未定

- [ ] 資料を作成する
- [ ] 冷蔵庫の中身を整理する

テスト2:複数週にまたがるケース

「今週中に確定申告の書類を税理士に送る。6月20日は車の車検があって、
前日までに車を預けに行かないといけない。同僚のSさんへのお礼メールも
書かないとな、明日中に。6月末までに有休を申請しておきたい。」

出力された 20260601-20260705_todo.md

# TODO: 2026-06-01 〜 2026-07-05

## 2026-06-01(月)〜 2026-06-06(金)

- [ ] (2026-06-06) 確定申告の書類を税理士に送る
- [ ] (2026-06-07) 同僚Sさんへのお礼メールを書く

## 2026-06-09(月)〜 2026-06-13(金)

- [ ] (2026-06-11) 銀行に行って通帳を記帳する

## 2026-06-15(月)〜 2026-06-19(金)

- [ ] (2026-06-19) 車検前日までに車を預けに行く

## 2026-06-29(月)〜 2026-07-05(金)

- [ ] (2026-06-30) 有休を申請する

対話しながら仕様を育てる

実際出力されたテスト結果と、自身でもトランスクリプトを入れていくつかテストをするなかで、スキルを修正してきました。

改善1:期限なしタスクを「未定」ではなく「今日」に

私: 日付の指定が無かったものは今日の日付でtodoを作成してください。

↑わたしの場合は、特に日付を意識していないTODOはだいたい今日やらなきゃいけないものなので、未定ではなく今日にしてもらいました。

改善2:週の区切りを金曜に

私: 週の終わりは金曜日にしてください。営業日にしかこのtodoは使いません。

このTODOは業務用なので、週区切りは営業日カウントに変更しました。

改善3:未達タスクの自動持ち越し

私: 金曜日までにタスク化したもののうち、未達のものは翌週に持ち越したいです。どうすれば自動化できますか?

週次でファイルを分ける仕様のため、金曜日時点で残置されたタスクがそのまま彼方にいってしまうことの防止機能です。

処理手順に以下が追加されました:

2. todoフォルダを確認し、前週のTODOファイルがあれば読み込む
   - 前週ファイルの判定:ファイル名の終了日が今週の月曜日より前のもの
   - `- [ ]` のままのタスク(未完了)をすべて拾い上げる
     ...
3. 前週からの未完了タスクと新規タスクを合わせて週単位でグループ化する
   - 前週未完了タスクは今週の月曜日付に変換して今週のセクションへ

次回「todo作成」と言うだけで、前週の - [ ] が残っているタスクは自動的に今週に持ち越されます。


完成したSKILL.md全文

---
name: todo-from-transcript
description: ひとりごとや音声メモのトランスクリプト(文字起こし)から
TODOチェックシートを作成する。ユーザーが「todo作成」「TODOまとめて」
「メモからタスクにして」「トランスクリプトからTODO」「音声メモをTODOに」
などと言ったとき、またはトランスクリプトテキストを渡してTODO管理を
依頼されたときに必ずこのスキルを使う。
---

# todo-from-transcript

ひとりごと・音声メモのトランスクリプトから、週次TODOチェックシート
(Markdown)を作成するスキル。

## 入力の受け取り方

1. ファイル指定:`memo_voice/` フォルダ内のファイルを読む
2. テキスト直接入力:チャットに貼り付けた場合はそのまま処理

## タスク抽出のやり方

- 明確な期限・日時:「明日」「来週月曜」「〇月〇日まで」など
- 意図のある行動表現:「〜しなきゃ」「〜を送る」「〜を確認する」など
- 曖昧な将来の意図:「いつか〜」「そのうち〜」「〜したい」

変換ルール:

- 「明日」→ 翌日の日付
- 「今週中」「今週内」→ その週の金曜日
- 「来週〇曜日」→ 来週の該当曜日
- 「〇月〇日」→ そのまま使用
- 「〇月末」「月末まで」→ その月の最終営業日
- 期限の記載がない場合 → 今日の日付
- 変換できない場合は「未定」扱い

重複タスクは統合する。

## 週のグループ化ルール

- 週は月曜始まり〜金曜終わり(営業日のみ)
- 期限が明示されていないタスクは今日の日付を使い、その週のセクションへ
- 「いつか」「そのうち」など意図的に先送りしている表現のみ「未定」へ

## 出力ファイル

- 保存先:`todo/`
- ファイル名:`yyyymmdd-yyyymmdd_todo.md`(月曜〜金曜)

## 出力フォーマット

# TODO: 2026-06-02 〜 2026-06-06

## 2026-06-02(月)〜 2026-06-06(金)

- [ ] (2026-06-03) 資料をAさんに送る

## 未定

- [ ] いつか本棚を整理する

## 処理手順

1. 入力を特定する(ファイル or テキスト直接)
2. todoフォルダを確認し、前週のTODOファイルがあれば読み込む
   - 前週ファイルの判定:ファイル名の終了日が今週の月曜日より前のもの
   - `- [ ]` のままのタスク(未完了)をすべて拾い上げる
3. トランスクリプト全文を読む
4. タスク候補を全件リストアップする
5. 各タスクの期限・日時を特定し、具体的な日付に変換する
6. 前週からの未完了タスクと新規タスクを合わせて週単位でグループ化する
   - 前週未完了タスクは今週の月曜日付に変換して今週のセクションへ
7. 重複を統合する
8. 出力ファイルのパスと名前を決める
9. Markdownを書いてファイルに保存する
10. 保存先パスをユーザーに伝える。持ち越しがあれば件数も伝える

感想と持ち越し課題

  • Claude Code公式のプラグインを利用していることから、自分で一からスキルを書くよりは品質が担保されてそうで助かる。あと作成が本当に早い。
  • TODOリストとしていちいちマークダウンを開くのはめんどくさいので、改善したい

追記 :Microsoft To Doと連携するようにしました

TODO管理をMicrosoft To Doで行うように修正しました。
(Microsoft To Doを利用している理由は会社のPCで使えるから、だけです。)

Microsoft Graph APIを叩くことは権限上できないので、
OutlookタスクがM365アカウントでMicrosoft To Doと自動同期されることを利用し、スキルのなかでOutlookタスクの作成を行います。

Outlookへのタスク登録スクリプト

python todo_to_outlook.py
import win32com.client
import json
import sys
from datetime import datetime

def register_to_outlook(tasks):
    """
    tasks: [{"subject": "タスク名", "due_date": "2026-06-08"}, ...]
    due_dateはYYYY-MM-DD形式。省略可(期限なしで登録)。
    """
    outlook = win32com.client.Dispatch("Outlook.Application")
    for t in tasks:
        task = outlook.CreateItem(3)  # olTaskItem
        task.Subject = t["subject"]
        if t.get("due_date"):
            task.DueDate = datetime.strptime(t["due_date"], "%Y-%m-%d")
        task.Save()
        date_label = t.get("due_date") or "期限なし"
        print(f"  登録: [{date_label}] {t['subject']}")

def main():
    if len(sys.argv) < 3 or sys.argv[1] != "--tasks":
        print("使い方: python todo_to_outlook.py --tasks '<JSONリスト>'")
        sys.exit(1)

    tasks = json.loads(sys.argv[2])
    print(f"{len(tasks)}件をOutlookに登録します...")
    register_to_outlook(tasks)
    print("完了。Microsoft To Doを確認してください。")

if __name__ == "__main__":
    main()

完成したSKILL.md全文(改善版)

改善したスキルが以下です。Microsoft To Doを利用するにあたり、不要な処理を削除しています。

---
name: todo-from-transcript
description: ひとりごとや音声メモのトランスクリプト(文字起こし)からTODOをMicrosoft To Doに登録する。ユーザーが「todo作成」「TODOまとめて」「メモからタスクにして」「トランスクリプトからTODO」「音声メモをTODOに」などと言ったとき、またはトランスクリプトテキストを渡してTODO管理を依頼されたときに必ずこのスキルを使う。
---

# todo-from-transcript

ひとりごと・音声メモのトランスクリプトからタスクを抽出し、Microsoft To Do(Outlook)に直接登録するスキル。

---

## 入力の受け取り方

2つのパターンを想定する:

1. **ファイル指定**`~/memo_voice/` フォルダ内のファイルを読む。複数ファイルある場合は全件処理してまとめる。
2. **テキスト直接入力**:ユーザーがチャットにトランスクリプトを貼り付けた場合はそのまま処理する。

---

## タスク抽出のやり方

トランスクリプトを読み込んだら、以下の観点でタスクを見つける:

- **明確な期限・日時**:「明日」「来週月曜」「〇月〇日まで」「今週中に」など
- **意図のある行動表現**:「〜しなきゃ」「〜しておこう」「〜を送る」「〜を確認する」など
- **曖昧な将来の意図**:「いつか〜」「そのうち〜」「〜したい」

相対日付は今日の日付(システムのカレント日付)を基準に変換する:

- 「明日」→ 翌日の日付
- 「今週中」「今週内」→ その週の金曜日
- 「来週〇曜日」→ 来週の該当曜日
- 「〇月〇日」→ そのまま使用
- 「〇月末」「月末まで」→ その月の最終日
- 期限の記載がない → 今日の日付
- 変換できない場合は期限なしで登録

重複タスクは統合する。

---

## 処理手順

1. 入力を特定する(ファイル or テキスト直接)
2. トランスクリプト全文を読む
3. タスク候補を全件リストアップする(漏れより過抽出のほうがよい)
4. 各タスクの期限・日時を特定し、具体的な日付に変換する
5. 重複を統合する
6. 以下のスクリプトにタスクを渡してOutlook(Microsoft To Do)に登録する
   ```bash
   python "~/.claude/skills/todo-from-transcript/scripts/todo_to_outlook.py" --tasks "<JSON形式のタスクリスト>"
   ```
   ただしスクリプトの引数渡しが難しい場合は、スクリプトを読んで同等の処理をPythonコードとして直接実行してよい
7. 登録件数をユーザーに伝える

---

## 注意点

- ファイルが複数ある場合はすべて処理し、まとめて登録する
- トランスクリプトが日本語・口語・不完全な文でも問題なく処理する
- タスクが1件もない場合は「タスクが見つかりませんでした」と伝え、登録しない
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?