TimeTracker NXをAPIで自由に操ってプロジェクト管理をChatGPTと連携する

この記事は[TimeTracker NXでプロジェクト管理を効率化しよう！ by グローバル・アスピレーションズ Advent Calendar 2024](https://qiita.com/advent-calendar/2024/timetrackercloud)の18日目の記事になります。

TimeTrackerアドカレのページには以下のように記載されています。一言でいうとプロジェクトの管理を簡単にできる便利なツールですね。過去に色々なツールを使ってきましたが、チーム構成やメンバーの経験などにより、どのツールが使いやすいかは大きく変わることがありますが、TimeTrackerの公式サイトを見るとAPIを提供していることがわかったので、今回はAPIを活用してTimeTracker NXとChatGPTと連携してGPTsを作成し、`チャットベースでタスク管理`を行える仕組みを作っていきたいと思います。

プロジェクト管理に特化した作り込まれたUIを持っているサービスですが、GUIに限定せずしっかりとAPIをユーザーに提供しているというのがTimeTracker NXの特徴です。かゆいところに手が届かなければ自分で作ってしまえばよいということになります。

私は以前よりこういったプロジェクト管理用のGUIやデータベースと連携したChatUIがあれば便利で、タスク管理が捗ると考えておりましたので、今回TimeTracker NXとそのAPIを利用できる良い機会なので試してみることにします。

# TimeTrackerについて
まずはTimeTrackerで何ができるのかわからないので確認です。

### ●TimeTrackerクラウドサービスとは？
:::note info
TimeTracker NXは、ソフトウェア開発、ハード設計、営業、Web制作などの業務における
工数管理／プロジェクト管理のためのツールです。
当社では、サーバやメンテナンスエンジニアなどのコストをかけず、
安全かつ高速にご利用いただける『TimeTracker Cloud Service』をご提供しております。
:::

### ●TimeTracker NXでできること
:::note info
複数メンバーによるリアルタイムのプロジェクト共同管理、プロジェクト横断で自分の担当タスクを一覧管理、プロジェクト横断のガントチャート表示など、
現場の見える化／改善活動を支援するしくみが盛りだくさんです。
「続けられる工数入力」を徹底的に追求し、個人の作業振り返りにも有効です。
:::

# APIドキュメントについて

https://docs.timetracker.jp/webapi/

こちらに公式のドキュメントがあります。ドキュメントを一通り眺めてみると以下のような機能が提供されている事がわかりました。

---

### **認証関連**
- トークンの発行 (`POST /auth/token`)
- トークンの削除 (`DELETE /auth/token`)

### **ユーザー管理**
- ユーザー一覧の取得 (`GET /system/users`)
- 特定のユーザー情報の取得 (`GET /system/users/{userIds}`)
- ログイン中のユーザー情報の取得 (`GET /system/users/me`)
- 新規ユーザーの追加 (`POST /system/users`)
- ユーザー情報の更新 (`PUT /system/users/{userIds}`)
- ユーザーの削除 (`DELETE /system/users/{userIds}`)

### **タイムエントリー管理**
- タイムエントリーの追加 (`POST /system/users/{userId}/timeEntries`)
- ユーザーのタイムエントリー一覧取得 (`GET /system/users/{userId}/timeEntries`)
- タイムエントリーの削除 (`DELETE /system/users/{userId}/timeEntries/{timeEntryIds}`)

### **通知管理**
- ユーザー通知一覧の取得 (`GET /system/users/{userId}/notifications`)

### **組織管理**
- 組織の一覧取得 (`GET /system/organizations`)

### **ユーザーグループ管理**
- ユーザーグループ一覧の取得 (`GET /system/userGroups`)

### **プロジェクト管理**
- プロジェクト一覧の取得 (`GET /project/projects`)
- 特定プロジェクトの取得 (`GET /project/projects/{projectIds}`)
- プロジェクトの追加 (`POST /project/projects`)
- プロジェクトの更新 (`PUT /project/projects/{projectIds}`)

### **ワークアイテム管理**
- ワークアイテムの取得 (`GET /workitem/workItems/{workItemIds}`)
- ワークアイテムの更新 (`PUT /workitem/workItems/{workItemIds}`)
- ワークアイテムの削除 (`DELETE /workitem/workItems/{workItemIds}`)

---

これらを利用して、認証、ユーザー管理、プロジェクト管理、タイムエントリー追跡、通知管理など、TimeTracker NX WebAPIが提供する多様な機能を操作可能です。さらに詳細な使用方法は、公式ドキュメントを参照する必要があります。

## サンプルコード
また、サンプルコードはこちらになります。

https://docs.timetracker.jp/webapi/sample/start-up

執筆時点では以下のようなサンプルコードがJavaScriptのコードで提供されています。

| No. | 活用場面                                     |
|-----|---------------------------------------------|
| 1   | ユーザー情報を一括で更新する                  |
| 2   | プロジェクトを立ち上げ、WBSを作成する         |
| 3   | 実績工数を他システムから定期的に反映する       |
| 4   | 実績工数を定期的に削除する                   |
| 5   | 実績工数データを他の管理システムに反映する     |
| 6   | 定期的にプロジェクト一覧の情報を出力する       |
| 7   | プロジェクト単位で当該期間の工数を出力する     |


## Json Schema

APIを利用するうえでスキーマファイルを探したのですが、見当たらなかったのでドキュメントの情報を元に作成しました。Json SchemaさえあればAPIを利用するのも簡単ですよね。

https://github.com/aoinakanishi/timetracker-nx-api-json-schema

### ChatGPTでJson Schemaを生成

試行錯誤はしましたが、以下のような形でChatGPTを使ってjson schemaを生成しています。json schemaが手元にないことは多いと思いますが、APIの実装等には便利なのでこういった生成AIを活用して作成することは可能です。また、サンプルコードなどからもjson schemaを生成することが出来ます。

![スクリーンショット 2024-12-24 15.21.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129712/26baf9f2-e40f-c40f-160b-ce713d49794f.png)

## GPTsに登録

ChatGPTのGPTsとしてTimeTracker NXを利用できるようにしようとしましたが、GPTsで読み込めるのは、OpenAPIスキーマでした！！！残念。

ということで、OpenAPIスキーマに変換してもらって色々と試行錯誤していたところ、ようやく値が取れるようになりました。値が取れたときの状態はスクショを取れていないので以下が検証をしているときのキャプチャです。

![スクリーンショット 2024-12-25 21.01.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129712/40379e7a-2180-50f2-4b6a-3a29c6fbf401.png)

次に色々なAPIにも対応できるようにOpenAPIスキーマに次々と変換
![スクリーンショット 2024-12-25 21.05.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129712/d7d6106d-ff27-db8f-4b88-8d231fd25705.png)

最終的にすべてのAPIの設定も進めていました。
![スクリーンショット 2024-12-25 21.08.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129712/2fabb540-345b-892f-0695-ffc2b2459a44.png)

## トークンの削除

![スクリーンショット 2024-12-25 21.09.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129712/767134fc-0fd5-7137-46a1-902adaf3ce10.png)

## プロジェクト一覧の取得
![2024-12-25_21-14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129712/8e1753de-1405-9710-987b-5c422f581335.png)

## ゲームオーバー
色々と検証をしているとアクセス制限がかけられてしまったのか、全く反応しなくなってしまいました。
![スクリーンショット 2024-12-25 21.21.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129712/8a76a08e-7607-ef8c-4fb0-08d0097caef8.png)

## アクセス制限
確認するとアクセス制限がかけられてしまったようです。
![スクリーンショット 2024-12-25 21.22.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129712/79ba173b-981e-7b10-56e2-6afd30239c0e.png)

ローカル環境からcurlコマンドで実行すると値を取得できるのでおそらくIPアドレスで弾かれてしまったようです

# 実現したかったこと

仕方ないので実現したかったことを残して終わりにします。

- TimeTracker NXのAPIドキュメントをOpenAPIスキーマ化
- GPTsに登録して、API経由で実行できるようにする
- GPTs(ChatGPT)上でチャット経由でプロジェクト内容の取得、表示
- チャット経由でデータを更新
- 日本語でチャットのやり取りでデータの更新を行う
- TimeTracker NXで更新されたデータの確認・運用

# まとめ
チャット経由でできるようになると、Slack等と連携し、通常の業務の流れでプロジェクト管理を自動的に出来る仕組みが出来る予定でした。

プロジェクト管理のために、PMが時間を取られるのはとても無駄なことも多いです。有益なコトに時間を使えるようになればと思っておりましたが、ChatGPTからのAPIアクセスが制限されてしまうと手の打ちようがありません。

有料で契約していればIPの制限も解除できると思いますが、現在Advent Calendar用の無料アカウントで実行しているので、今回は諦めます。

どなたかが実現された暁にはまた利用してみたいと思います。