こんにちは。キャディ株式会社の Analysis Platform Group でソフトウェアエンジニアを務めている廣岡です。
業務としては、キャディの様々なサービスの裏側で稼働する機械学習解析のインフラやバックエンドの開発、アプリケーションとの橋渡しなどに取り組んでいます。最近では下記記事で紹介したようなプロジェクトに取り組んでいます。
今回は私たちのチームで作り、開発業務の中で利用している Claude Skills について紹介します。
TL;DR
- Claude Skills を使って ML 開発における定型作業を効率化した
- 推論サーバー構成やログ調査、インフラ構築など 5 つのスキルを整備した
- エンジニアリングバックグラウンドが異なるチームで、開発効率が大きく向上した
背景
キャディの ML システムでは図面解析のための機械学習モデルを多数開発・運用しています。Analysis Platform チームでは、機械学習エンジニアと連携して ML モデルのデプロイ、運用まで一貫してサポートしていますが、いくつかの課題がありました。
1. 定型作業の属人化
「本番環境のエラーログを調査したい」「新しいモデルを追加したい」といった作業には、プロジェクト固有の知識が必要です。Kubernetes の namespace は何か、サンプルリクエストにはどのデータを使って良いのか、といった情報は README や他のドキュメントに散在しており、新メンバーのキャッチアップや作業完了に時間がかかっていました。
2. プラットフォームの複雑性
私たちは LitServe(ML 推論サーバー)、Pub/Sub(非同期ジョブキュー)、GKE など複数の技術を組み合わせて ML 基盤を構築しています。効果的にデプロイや調査を行う上では、それぞれの技術やシステムの仕様を把握しておく必要がありました。
3. コンテキストスイッチのコスト
「ツールの仕様や使い方を理解する」→「作業を実施する」→「結果を確認する」という業務フローの中で、最初の「ツールの仕様や使い方を理解する」に多くの時間や労力を費やしていると感じていました。
キャディのエンジニア組織では Claude Code を広く利用しており、Claude Skills を導入することでこれらの課題に対処できないかと考えました。
Claude Skills とは
Claude Skills は、Claude Code に対してプロジェクト固有の知識を与える仕組みです。.claude/skills/ ディレクトリに SKILL.md ファイルを配置することで、Claude がその知識を参照しながら作業を行います。これによって開発・運用時の仕様への準拠や、各種ツールの使い方を自然言語ベースで記述でき、業務の生産性や品質を向上できると期待しました。
スキルは YAML と Markdown で記述します。詳細は公式ドキュメントや Anthropic のスキルリポジトリ を参照してください。
整備したスキル一覧
前述の背景を踏まえて、ここでは 5 つのスキルを紹介します。
1. add-litserve-model
新しい LitServe サーバーの実装を追加するスキルです。LitServe は Lightning AI が開発した推論サーバーフレームワークで、私たちは GPU 上の ML ウェブサーバーを構築する上で採用しています。
LitServe にはマルチプロセスでの動作や動的バッチ推論など、ML サーバーを構成する上で便利な機能が多く搭載されています。ボイラープレートコードの生成や主要な推奨設定をスキルとして整備することで、推論サーバーの実装作業を効率化しています。
.claude/skills/add-litserve-model/
├── SKILL.md # 生成手順、要件定義
├── ADDITIONAL_SETUP.md # CI/CD、K8s マニフェストのセットアップ
└── examples/
├── api.py # LitServe API のテンプレート
├── models.py # Pydantic モデルのテンプレート
├── main.py # サーバーエントリポイント
├── Dockerfile # GPU 対応 Dockerfile
└── pyproject.toml # 依存関係定義
スキルの中では例えば下記のような構成を記載しています。これらを記載しておくことで、実装時の設定や構成の漏れを減らすことができます。
- リクエスト・レスポンスのモデル、画像のリクエスト方法
- 動的バッチング(batch/unbatch メソッド)の実装パターン
- GPU 環境での Dockerfile
- CI/CD(GitHub Actions)や Kubernetes マニフェストのセットアップガイド
使用例:
> /add-litserve-model sample_ml
モデル名を指定すると、以下のようなディレクトリ構造が生成されます。
src/caddi_ai_models/sample_ml/ ├── src/ │ ├── __init__.py │ ├── models.py # Pydantic request/response │ ├── api.py # LitServe API(動的バッチング対応) │ └── main.py # Server entry point ├── tests/ │ └── test_api.py ├── Dockerfile # GPU 対応イメージ └── pyproject.toml
動的バッチングの実装パターンや GPU 推論のためのライブラリ設定など、つまづきやすいポイントがスキルに含まれているため、新しいモデルの追加がスムーズに行えます。
2. sample-request
ML API へのサンプルリクエストを送信するスキルです。各環境での API 動作確認に使用します。
.claude/skills/ml-sample-request/ └── SKILL.md # エンドポイント URL、認証方法、リクエスト例
キャディの ML API は図面(画像)解析リクエストを送ることが多くあります。画像データはリクエストボディを構築するのが手間だったり、リクエストのために使って良いサンプルデータがどこに書かれているかわかりづらいこともあったため、スキルとして明示的にしておくことで検証が容易になっています。
環境ごとのエンドポイント URL や認証方法をスキルに含めることで、「この環境の〇〇サービスににテストリクエストを送りたいんだけど、コマンドを教えて」というやりとりに対応できます。
私たちの開発環境では dev 環境にはエンジニアから直接リクエストを送れる一方で、stg, prod 環境のサービスはシステムの安全のために踏み台からアクセスするという運用になっています。これに対応して、dev 環境向けには Claude Code から直接リクエストを送り、stg, prod 環境向けにはリクエストに必要なコマンドを提示するようにしています。
3. cloud-logging
GKE 上のサービスのログを Cloud Logging から取得して調査するスキルです。Claude Code から gcloud logging コマンドを実行することでログを調査します。このスキルは地味ながら重宝しており、特に作って良かったと感じています。
個人的に Google Cloud の Cloud Logging のクエリは書き方にやや癖があり、コンソールからクエリを実行するのが億劫に感じていました。このスキルのおかげで、クエリの書き方を調べずに済み、エラーやパフォーマンスなど迅速なログ調査が可能になっています。
.claude/skills/cloud-logging/
├── SKILL.md # 環境・サービス情報、基本コマンド
└── examples/
├── error-logs.md # エラーログ検索のサンプル
├── success-rate.md # 成功率計算のサンプル
├── performance.md # パフォーマンス分析のサンプル
└── aggregation.md # 集計クエリのサンプル
スキルには、Claude Code が適切にログを調査・分析できるように以下のような情報を盛り込んでいます。
- 環境(dev/stg/prod)ごとのプロジェクト ID
- サービスごとの namespace、ワークロード名の対応表
- よく使う集計のサンプルクエリ
- コンテキスト効率化テクニック(jq によるフィールド抽出など)
SKILL.md の抜粋:
## 環境とプロジェクトID | 環境 | プロジェクトID | |-----|---------------| | dev | caddi-ml-dev | | stg | caddi-ml-stg | | prod | caddi-ml-prod | ## 対象サービス一覧 | サービス | Namespace | Container名 | |---------|-----------|-------------| | caddi-ml-1 | caddi-ml | caddi-ml-1 | | caddi-ml-2 | caddi-ml | caddi-ml-2 |
使用例:
Claude Skills はユーザーが直接実行できるほか、ユーザーとのやり取りの中で必要なシーンで自動的にトリガーしてもらうこともできます。ログスキルの場合は、例えば下記のようなプロンプトについても、ログスキルが反応してトリガーできています。
> prod 環境の caddi-ml-1 サービスで今日の夕方くらいにエラーが増えてるんだけど、エラーの種類と件数を整理して
Claude がプロジェクト ID やフィルタ条件を適切に設定し、以下のようなコマンドを実行してログを取得・分析してくれます。
gcloud logging read \ 'resource.type="k8s_container" AND resource.labels.namespace_name="caddi-ml" AND severity>=ERROR' \ --project=caddi-ml-prod \ --limit=50 \ --format="json"
Claude Code は jq などのコマンドの扱いもうまいため、JSON 形式で出力することでさまざまな加工や集計も可能になります。
4. async-job-analysis
非同期ジョブの投入と処理をまたいだログ分析スキルです。
キャディの ML システムでは、スループットが要求されるユースケース向けに非同期ジョブ型の解析も実行しています。非同期ジョブの集計ではサービスを跨いだ id join やリトライの考慮など、比較的複雑なシステム仕様を踏まえる必要があるため、個別のスキルとして定義することで必要に応じて呼び出すことができます。
内部では前述の cloud-logging スキルを使っており、より高度なユースケースに対応する形となっています。
.claude/skills/async-job-analysis/
├── SKILL.md # ジョブフロー、ログイベント定義
└── examples/
└── success-rate.md # 成功率計算のサンプル
スキルには以下のような内容を記載しています。
- ジョブフローの概要(投入→Pub/Sub→処理→通知)
- 各イベントのログパターン
- 成功率計算、リクエスト→処理完了のリードタイム計測などのサンプルクエリ
SKILL.md の抜粋:
非同期ジョブにおける各種イベントを整理しておくことで、Claude が柔軟に集計を実行してくれます。
## ログイベント | イベント | Container | Message Pattern | Key Fields | |---------|-----------|-----------------|------------| | 投入成功 | job-proxy | `Job submitted successfully` | `job_id`, `model_name` | | ステータス通知 | job-runner | `Published job status message` | `job_id`, `job_status` | | 処理成功 | job-runner | `Job processing completed successfully` | `job_id` | | 処理失敗 | job-runner | `Job {job_id} failed: {error}` | `job_id` |
5. production-ready-k8s-deployment
社内標準に沿った Kubernetes Deployment のマニフェストを生成するスキルです。
キャディ社内では Production Readiness Checklist (PRCL) という形で、プロダクション環境でアプリケーションを安全に展開する上で重要な設定や要件をリスト化、チェックしています。リストの内容は多岐に渡りますが、例えば K8s マニフェストの設定項目も含まれます。
キャディではほとんどのアプリケーションが k8s クラスタ上に展開されています。K8s は柔軟な定義ができる一方でさまざまな設定項目があり、エンジニアが全てを熟知して設定するのは大変になり得ます。
このスキルでは、PRCL で定義されている K8s Deployment の項目と実際のマニフェストの定義方法を記載することで、認知負荷を少なくアプリケーションのマニフェストを構成できるようになります。
.claude/skills/production-ready-k8s-deployment/ ├── SKILL.md # PRCL 項目と対応設定、生成手順 ├── template.yaml # Deployment テンプレート └── examples.md # 実際のデプロイ例
具体的には下記のような内容を盛り込むことで、必要な設定がカバーされたマニフェストを簡単に定義することができます。
- リソース制限、Probe、Graceful shutdown の適切な設定
- Istio サイドカー(サービスメッシュ)や Datadog と統合するための設定
- 実際のデプロイ例の参照
SKILL.md の抜粋:
### Deployment Items Covered by This Template | PRCL ID | Item | Template Setting | |---------|------|------------------| | PRCL-01 | CPU req/limit | `resources.requests.cpu`, `resources.limits.cpu` | | PRCL-02 | Memory req/limit | `resources.requests.memory`, `resources.limits.memory` | | PRCL-03 | Graceful shutdown | `terminationGracePeriodSeconds` | | PRCL-04 | Liveness Probe | `livenessProbe` | |...
使用例:
> /production-ready-k8s-deployment caddi-ml-server
Claude がユーザーにデプロイ名、コンテナイメージ、ポート番号などを質問し、チェックリストに準拠したワークロードを構成できます。こちらは今は試験的に deployment でだけスキルを定義していますが、PRCL では他にスケーリングや可用性に関する項目があるため、将来的にはさらに k8s の他のリソース設定をカバーすることも有用だと考えています。
スキルを作る際の工夫
これらのスキルを作ってみて、感じたことを記載しておきます。
コンテキストウィンドウの節約
Claude Code はコンテキストウィンドウを消費するため、スキルの内容が長すぎると本来の作業に使えるトークンが減ってしまうため、以下の工夫をしました。
- 本体(SKILL.md)は簡潔に保ち、詳細は
examples/ディレクトリに分割 - Claude が必要に応じて examples を参照する設計
.claude/skills/cloud-logging/
├── SKILL.md # 基本情報のみ
└── examples/
├── error-logs.md # エラーログ検索のサンプル
├── success-rate.md # 成功率計算のサンプル
└── performance.md # パフォーマンス分析のサンプル
開発者向けドキュメントとの統合
元々いくつかのスキルでは、必要な記載を全て .claude/skills 以下に配置していました。一方で、例えばサンプルリクエストの送信方法やログにおけるサービス名などは、アプリケーション側の README.md などにも書かれており、記載が重複している箇所がありました。
スキルと独立したアプリケーションの仕様やマニュアルは開発者向けドキュメント(例えばdocs/ ディレクトリなど)として配置し、スキルからはそのドキュメントを参照する形を試しています。これによって開発者からもコーディングエージェントからも同じドキュメントが有用になり、ドキュメントのメンテナンスも一元化できると考えています。
効果と今後やりたいこと
Claude Skills の導入によって、ログ調査などの運用オペレーションや、ML 推論サーバーの標準的な構成・開発など、さまざまなシーンで属人化解消、作業効率化の恩恵が得られています。
以下は今後さらにコーディングエージェントを使って実現してみたい内容です。
今後やりたいこと①:負荷試験レポート自動作成
やってみたい内容の一つとして、負荷試験レポート作成の自動化を考えています。
負荷試験を実施した際には、負荷に応じた成功率やレイテンシーなどのパフォーマンス、インフラリソースの使用率などさまざまな指標をチェックし、レポーティングします。特に ML システムでは解析処理に時間がかかったり、GPU など特殊なインフラリソースを使うことも多いため、レポートの内容も複雑化になりやすいと感じています。こうした内容をスキル化することで作業の効率化が期待できます。
キャディではログやモニタリングに Datadog を広く使っているため、 Datadog MCP や Pup CLI を介してログやメトリクスの集計・可視化が行えます。さらに Datadog には Notebooks というドキュメント機能もあるため、これらと Claude Code を組み合わせることで、グラフの描画や考察の記載など含めて負荷試験レポートの作成を簡単に実現できるのではないかと考えています。
今後やりたいこと②:ドキュメントの自動アップデート
アプリケーションの実装・実態と、ドキュメントの整合性のチェックを自動化できないかと考えています。
リポジトリにおける README などのドキュメントは、開発メンバーのキャッチアップやオペレーション時の資料として非常に重要です。また今回紹介したログ調査やサンプルリクエストなど、コーディングエージェントを適切に動かす上でも、アプリケーションの設定や仕様を適切に整理しておく必要があります。
一方で、こうしたドキュメントは実装やデプロイ環境の実態と乖離してしまい、整備が追いつかなかったり、修正が漏れてしまうこともあると感じています。こうした実装とドキュメントの乖離をコーディングエージェントによって定期的にチェックして、自動でドキュメントをアップデートするような仕組みもできたら面白いと考えています。
まとめ
Claude Skills はアプリケーションやチームの知識を AI アシスタントに教え込む有用な仕組みです。私が所属する Analysis Platform チームは必ずしも全員が ML 関連のバックグラウンドを持っているわけではないですが、Claude Skills によって ML システム周りの開発・運用効率が大きく向上したと感じています。
今回は Claude Skills について紹介しましたが、こうしたコーディングエージェントの台頭は不可逆的かつエキサイティングな潮流に感じます。この流れの中で ML 開発をどのように推進していくべきかも注視しつつ、楽しんでいきたいと思います。
キャディでは、ML 基盤の構築・運用に興味のあるエンジニアを募集しています。興味のある方は、ぜひ採用ページをご覧ください。