【Unit4 ブログリレー8日目】
エムスリー エンジニアリンググループの井本です。Unit4チーム(m3.com開発チーム)に所属しています。今日が誕生日です。
この記事では、Claude Codeを活用して30分で作成した実用的なタスク管理ツールについてお話します。
背景
中途入社してから1年以上経過し、複数サービスの開発を担当する機会が増えてきたタイミングで従来のテキストメモベースのタスク管理がしんどくなってきました。
かといって複雑なタスク管理ツールを使うのも大変で結局、使わなくなるリスクがあったため、気軽に運用できるタスク管理ツールを作りました。
あまり時間をかけたくなかったので30分で作りました。
課題
具体的な既存ツールの課題は下記
- Jira: 弊チームで使用しているプロジェクト管理ツール。バージョンアップ作業を並列で進める際の細かい状態管理(デプロイ待ち等)には粒度が粗い。メモの一覧性も低い
- ただのメモ帳: 視認性が低い。書き方が統一されていないので使うほど何を書いているかわからなくなる
つまり既存ツールにおける痛みとは次の両立ができないことでした。
- 雑に記入できる
- 見やすく表示できる
これらを満足するためClaude Codeを入出力として活用したタスクリストを作ることにしました。
Claude Codeを活用することで、手軽にサクッと作ることができます 入力文字列や出力の定義の解釈における詳細な実装はClaude Codeがカバーしてくれるため、ルールの定義を自然言語で行えば実現できるからです。
タスク管理ツールの開発(30分で)
Claude Codeのセッションごとに情報の共有については、データベース代わりのテキストファイルを指定しました。
Claude CodeではCLAUDE.mdという設定ファイルにおいて、Claude Codeの動作ルールを事前定義できます。 以上踏まえて次のような定義をCLAUDE.mdに書きました
# タスク管理
タスク管理を依頼することがあります。
現在の状態は/hoge/huga/current.mdで箇条書き管理してください。
## current.mdの持つ情報
- 箇条書きは優先度順に並んでいます
- タスクごとにステータスを持ちます。ステータスは次の通り
- GO待ち: 開発着手のGOサイン待ちです。決裁待ちが主で、PdM経由で確認します。
- 開発中: GOサインが出たら開発中ステータスに移行します。実際は未着手でもGOが出たら開発中ステータスに移行します。
- 待ち: 開発中ステータスの後ないし途中に他の担当者の作業待ちになり、私が作業を進められない状態です。確認にはQA担当のQA作業待ち、デザイナーやエンジニアによるレビュー待ち、PdMへの仕様確認待ち、リリース担当者の作業待ち、などがあります。
- 完了: すべての作業が完了し、リリース後の確認が終わった状態です。原則ステータスやメモを書き換えることはありません。
- タスクごとに簡単なメモを持ちます
- タスクごとにMRまたはPR、SlackなどのURLを複数持ちます。
- タスク名、ステータス、メモ、URLは半角スペース区切りで保持します。
- タスクは優先度順に並びます。
## 操作
依頼に基づき下記の操作をしてください。複数の操作をまとめて依頼する可能性があります。
- 出力: current.mdの現状を表示します。完了ステータス以外のリストを表示してください。見やすくフォーマットして表示してください。
- 次のようなフォーマットにしてください。タスクごとに空白行を挟んでください
```
【1】タスク名 - ステータス
メモ
URL1
URL2
【2】タスク名 - ステータス
メモ
URL1
URL2
```
- 追加: current.mdにタスクを追加してください。完了ステータス以外のタスクのうち最後尾に追加してください。ステータス指定なければデフォルト開発中にしてください
- 削除: current.mdから指定したタスクを削除してください
- ステータス更新: 指定したステータスにタスクのステータスを更新してください。完了ステータスになったタスクは末尾に移動してください。なお末尾への移動は優先度を最低に変更することを意味します。
- メモ: メモを更新してください。メモ更新後はタスク出力してください
最初からこのような設定になっていたわけではなく、運用しながら改善を進めて上記のような定義に落ち着きました。
まず最初は10分くらいでタスク名、ステータス、メモ書きのみを記録するように定義しました。 そのうえで運用しながら「URLを残したい」「それもMRとSlackチャットのURL両方残したい」のように追加定義していきました。
コードは一切書かず、CLAUDE.mdの設定とデータベース代わりのテキストファイルの用意だけでClaude Codeをタスク管理ツールとして使用できる状態が整いました。
さて実用性はいかがでしょうか。
結果
結論からいうと当初の要件を満たす、雑に記入できる&見やすく表示できるツールとして、タスク状況が落ち着いた現状でも便利に使っています。
雑に記入できる
表記揺れに対してかなり柔軟に対応してくれるので、タスク名をいちいち入力しないで済む点が気に入っています。例えば「サービスBとサービスC連携」タスクであれば「連携タスク」という呼び名で反応します。
タスク名だけでなく指示内容についても柔軟で、「タスク確認」で「出力」が実行されたり、「XXをタスク追加」でタスクが追加されます。
また、弊チームでは依存パッケージの更新作業はRenovateというツールでMRを自動作成し、ランダムにアサインしています。アサインされる度に、MRのタイトルとURLをコピー&ペーストして渡しているうちに、Renovate(サービス名/パッケージ名)のようなフォーマットのタスク名を勝手に設定してくれるようになりました。
実際の依頼例とその結果
| 依頼内容 | Claude Codeの反応 |
|---|---|
| Renovate yyyタスクはQA待ち、https://www.m3tech.blog/も追加して | Renovate(xxx/yyy)タスクのステータスを「待ち」に変更、メモに「QA待ち」を記載、URLを追加 |
| 連携タスクのフロント側完了して | 「サービスBとサービスC連携(フロントエンド)」タスクのステータスを「完了」に変更し、末尾に移動 |
| 連携タスクのサーバー側も同じ | 前の操作を参考に、「サービスBとサービスC連携(サーバーサイド)」も同様に完了処理を実行 |
| (タスクを追加した後で)メモはサーバーサイドの設計する | 追加したタスクのメモに「サーバーサイドの設計する」を追記 |
見やすく表示できる
定義どおりに出力してくれます。
【1】サービスAの設定変更 - 開発中
動作確認をする
https://yyy.example.com/XXXXX/p1234567890
https://xxx.example.com/service-a/merge_requests/123
【2】複数サービス連携機能:サービスB - 開発中
単体テストを追加する
https://xxx.example.com/service-b/merge_requests/456
【3】複数サービス連携機能:サービスC - 待ち
ひと通り実装完了
https://xxx.example.com/service-c/merge_requests/789
【4】Renovate(service-d/aws-sdk) - 待ち
QAデプロイ待ち
https://xxx.example.com/service-d/merge_requests/567
なお出力フォーマットの設計と作成もClaude Codeに実施してもらうことで、ツール自体の実装工数も抑えています。 また嬉しい誤算として普段、VS CodeでClaude Codeを運用している関係でURLはクリッカブルに表示されました。おかげで手軽にCIやレビューの進捗を確認しにいくことができるようになりました。
今後の課題
今後は下記を改善したいです
- 完了タスクもcurrent.mdに残しているので、Claude Codeの使用トークンが膨れ上がっていく懸念がある。完了タスクは削除するか別ファイルに保存したい。
- 前日のスナップショットとの差分を、日報の作成の補助にできないか
- 月ごとの勤怠締めの確認タスクを月末に自動追加できないか
まとめ
30分でタスク管理ツールを作りました。手軽に入力できる&見やすい出力のタスク管理ツールとして実用しています。
考察として、Claude CodeのようなAIエージェントを表記揺れに柔軟に対応してくれる対話インタフェースとして捉えると、ちょっとした痛みを解決するためのツールを手軽に作成できるのではないでしょうか。
We're hiring!
エムスリーではテクノロジーを活用して医療業界を変えるプロダクト作りに取り組んでいます。 エンジニア、プロダクトマネージャー、プロダクトデザイナーを絶賛募集中です。 ご興味を持たれた方はぜひご応募ください。