
Zendesk関係のツールをClaude Codeで爆速開発してみた
こんにちは、業務効率化ソリューション部の入井です。
Zendeskでは、APIを活用して独自のツールを開発することで、標準機能だけでは実現できない様々な要件に対応することが可能です。
今回は、これらの開発をClaude CodeによるVibe Codingで実践する機会があったため、その成果物やClaude Codeを使う中で感じたことなどをご紹介します。
なお、Claude CodeはClaude Proプランを契約した状態で使用しました。
今回開発したもの
以下の2つのツールを開発しました。この他にも、Zendeskアプリの開発やGuideテーマのカスタマイズにもClaude Codeを活用しましたが、これらは少し特殊なものなのでまた別の記事で扱いたいと思います。
1. Zendesk API Client for TypeScript
こちらはその名の通り、TypeScript用のZendesk APIクライアントライブラリです。
業務上、様々な場面でZendesk APIを活用する機会が多いのですが、その都度各ツールで個別にリクエスト処理を実装しており、以前からこういったライブラリの必要性を感じていました。
今回、Claude Codeの効果を試すためにちょうど良い題材だと思い、開発してみました。
使用例
import { ZendeskClient } from 'zendesk-api-client-typescript';
const client = new ZendeskClient({
subdomain: 'your-subdomain',
email: 'your-email@example.com',
token: 'your-api-token'
});
// チケット一覧を取得
const tickets = await client.tickets.list();
// ユーザーを作成
const user = await client.users.create({
name: 'John Doe',
email: 'john@example.com'
});
実装機能
- チケット、ユーザー、組織リソースに関する基本的なエンドポイント(CRUD)
- 検索機能や一括インポート・エクスポートのエンドポイントにも対応
- Zendesk APIのレートリミットを考慮したリクエスト間隔の自動制御、リトライ処理
まだ対応エンドポイントは限定的ですが、今後徐々に増やしていきたいと思っています。
2. チケットエクスポートツール
こちらは、Zendeskのチケット情報を一括でエクスポートするCLIツールです。ブログ執筆時点ではMarkdown形式での出力に対応しています。内部的には、先ほどご紹介したzendesk-api-client-for-typescriptを利用しています。
以下の記事で紹介した、NotebookLMによるZendeskチケットを活用したRAG環境構築のために開発しました。
使用例
npx zendesk-exporter tickets --subdomain 該当Zendeskサブドメイン --email エージェントのメールアドレス --token APIトークン --tags 検証用インポート
実装機能
- ZendeskチケットのMarkdownによる一括出力
- 出力対象チケットのフィルタリング
- 現状はフォームID, タグによるフィルタが利用可能
こちらについても今後Jsonによる出力の対応や、フィルタリングオプションの追加などをしていく予定です。
Claude Codeによる開発を通して感じたこと
気軽に開発をスタートできる
私がClaude Codeを使用して感じた一番のメリットがこれです。
従来の手作業による開発では、今回のような比較的小規模なツールであっても、作り上げるまでにはそれなりの時間がかかります。作り慣れている種類のツールであればまだ進めやすいですが、特に初めて扱う技術分野の場合は、コーディングの前に多くの時間を情報収集に費やす必要がありました。そのため、こなさなければいけない他のタスクが多い場合などは、作り始めること自体に心理的なハードルを感じやすかったです。
今回活用したClaude CodeのようなVibe Codingを取り入れると、このようなハードルはほとんど感じませんでした。開発にあたって人間側で最低限用意すべきものは、どういう環境でどういう処理を行いたいかという要件のみです。それさえ伝えれば、AIが細部を含めた最低限のたたき台を短時間で生成してくれます。たたき台さえできればしめたもので、そこから先の微調整を進めるにあたっての心理的ハードルはかなり小さくなります。
やはり、開発における「1から100」のフェーズよりも、「0から1」のフェーズの方が遥かに困難で、Vibe Codingは「0から1」フェーズの進行を肩代わりしてくれるのがとてもありがたかったです。
もちろん、これは専門知識が不要になるという意味ではありません。後述するように、AIの生成物は不完全であることが多いため、最終的には各種技術の知見を持った人間によるレビューが不可欠です。初めて開発する分野の場合、最初の出力はAI任せであっても、最終的にその分野の知見を得たうえでレビューする必要があります。
最初に仕様や開発方針をしっかり固めることが重要
Claude Codeには、プロジェクトメモリという機能があります。これは、開発プロジェクトの背景やルールを記述したMarkdownファイル(CLAUDE.md)を用意しておくことで、AIが開発中常にその内容を考慮してくれるというものです。
Claude Codeは、過去の会話内容を記憶してくれますが、その記憶には限界があり、セッションが途切れるとリセットされてしまいます。最初にプロジェクトメモリを作成しておくことで、開発したいツールの仕様やアーキテクチャといった前提条件をAIに常に意識させることができ、開発が長期化しても要件のズレや漏れなどによる手戻りを防ぐことができます。
このプロジェクトメモリファイルの作成自体もClaude Codeに依頼することが可能です。/init
コマンドでプロジェクトディレクトリ内の状況をもとに文書の叩き台を作成してもらった後、さらに対話で内容を掘り下げていくことができます。
Zendesk API Client for TypeScriptの開発時は、以下のようにプロジェクトで実現したいことを説明しました。
- Zendesk APIクライアントをTypeScript用に開発したいこと
- 開発にあたっては、常に必ず公式APIリファレンスの内容を参照すること。
- Rate Limit制限を考慮した機能や、エラーハンドリング制御も実装すること。
- 単体テストだけでなく、実際のZendesk APIにアクセスしての統合テストも実装すること
これにより、このような文書ファイルができあがりました。このファイルは一度作って終わりではなく、開発の途中で必要に応じて更新を加えています。
今回のような特定のAPIを活用するツールを開発する際に一番重要なのは、当然ながら対象APIの仕様に忠実な実装をすることです。そのため、公式APIリファレンスを参照することを最優先にする指示を出しました。
同様に、Zendesk Exporterの開発時も以下のようにプロジェクトで実現したいことを説明しました。
- ZendeskのチケットをMarkdownで一括出力するツールを開発したいこと
- オプションで認証情報を渡したりフィルタリング設定を指定できること
- ライブラリはZendesk API Client for TypeScriptを使用すること
- 単体テストだけでなく、実際のZendesk APIにアクセスしての統合テストも実装すること
文章ファイルはこのような内容になりました。
これらの文書を用意したことで、AIが生成するコードの方向性に大きなズレが生じることなく開発を進めることができました。
生成結果をそのまま使うのは危険
大変便利なClaude Codeですが、一般的な生成AIと同様に出力結果は一歩引いて見る必要があります。
APIクライアントの開発時、チケットのCRUDといった基本的なエンドポイントについては、ほぼ修正なしで使える精度の高いコードが生成されました。一方で、インポート用エンドポイントなど、少し特殊なエンドポイントの実装については、リクエストやレスポンスの型に誤りがあったり、実際はインポートジョブのIDなどが返るのに、リソース作成結果が返ること前提のコードになっているなど、エンドポイントの仕様についての根本的な誤解が生じていました。また、存在しないはずのエンドポイントを呼び出すコードを生成するなど、いわゆるハルシネーションも発生しました。
プロジェクトメモリ(CLAUDE.md)には必ずAPIリファレンスを参照することをルールとして記載していましたが、それでもこのような仕様の誤解やハルシネーションを完全に防ぐことはできませんでした。
実装内容以外では、コードの品質面に問題が生じることもありました。例えば、不必要に複雑なロジックのコードが出力されていたり、関数などの責務が肥大化してしまっているパターンをよく見かけました。また、こちらの修正指示をこなす過程で、元々あったコードが未使用になっても削除されずに残ってしまうことも頻繁にありました。
このような問題がしばしば起こることから、AIによる出力結果を鵜呑みにするのではなく、知見を持った人間による最終的なレビューは必須だと感じました。なお、そのレビューというのが1行1行のコードの中身まで見ることなのか、各種テストツールによる機械的なチェックで良しとするのかについては、プロジェクトの内容や成果物の状況など様々な観点を元に検討する必要があると思われます。
生成結果の信頼性を上げるための手段
上記のような問題のあるコードの修正方法としては、Claude Codeに改めて公式ドキュメントを参照したうえでコード全体の実装内容が正しいかチェックさせたり、実際のZendesk APIにアクセスする統合テストの結果を参照させることが有効でした。コードの出力結果という客観的なデータをもとにAIに再考を促せるというのが、Vibe Coding独特のAI活用法だと感じました。
また、コードベースの複雑化・肥大化については、コードの品質を維持するために適切なタイミングで人間側からリファクタリングを指示する必要がありました。その際、単に「リファクタリングしてください」と抽象的に依頼するだけでも一定の効果はありますが、「この関数の責務が多すぎるので、〇〇の機能と△△の機能に分割してください」といったように、具体的な指示を出す方が圧倒的に精度の高い結果が得られました。当然、リファクタリングの前後では必ずテストを実行させ、エラーが発生しないことを確認させます。
また、長時間同じセッションで対話を続けるよりも、一度セッションを仕切り直して、まっさらな状態でコード全体をレビューさせると、それまで見逃していた新たな問題点を発見してくれるケースもありました。
おわりに
今回は、Claude Codeを活用してZendesk関連ツールを開発した経験から、個人的に感じたことや知見をご紹介しました。
間違いなくVibe Codingによって開発スピードを爆速化させることはできますが、それはAIに全てを丸投げすれば実現できるというわけではありません。十分な知見を持った開発者が責任を持ってAIを乗りこなす必要があります。
今後、このようなAIによる開発支援がさらに一般化していく中で、開発者に求められるスキルとして「いかにAIの特性を理解し、適切に使いこなせるか」が重要になってくる可能性が高いと思います。