前のページ

17. OpenClaw 実践:AI プログラミングアシスタントの構築

本稿では OpenClaw で AI プログラミングアシスタントを構築する方法を解説します。Claude Code、Codex などのツールを統合し、コードレビュー、自動テスト、CI/CD 連携などを実現し、開発効率を向上させます。

OpenClaw v2026.2 対応 | coding-agentgit-workflowstest-runner スキルのインストールが必要です。プロジェクトコードリポジトリへのアクセス権限が必要です。

TL;DR: コードレビュー:Agent が PR の変更を分析してレビューレポートを生成。自動テスト:"test-runner": {"frameworks": ["jest", "vitest"]}。CI/CD 連携:Webhook で GitHub/GitLab イベントを受信。マルチプロジェクト管理:"projects": {"frontend": {...}, "backend": {...}}。コアコマンド:openclaw agent --message "この PR をレビューして"

実践目標

以下を実現する AI プログラミングアシスタントを構築します:

  1. コードレビューの自動化
  2. テストの実行と結果レポート
  3. コードドキュメントの生成
  4. CI/CD パイプラインの連携
  5. マルチプロジェクトのコンテキスト切り替え

必要なスキルのインストール

# プログラミング関連スキル
openclaw skill install coding-agent
openclaw skill install debug-pro
openclaw skill install git-workflows
openclaw skill install docker-essentials

# テストスキル
openclaw skill install test-runner

コードレビュー自動化

コードレビューの設定

---
name: code-review-assistant
version: 1.0.0
description: Automated code review with OpenClaw
triggers:
  - code review
  - コードレビュー
  - review
  - PR review
---

# Code Review Assistant

プルリクエストのコードレビューを自動化します。

## 機能

- コード変更のレビュー
- 一般的な問題のチェック
- 改善提案
- レビューコメントの生成

## レビューチェックリスト

1. **コード品質**
   - 命名規則
   - コード構造
   - エラーハンドリング

2. **セキュリティ**
   - SQL インジェクション
   - XSS 脆弱性
   - シークレットの露出

3. **パフォーマンス**
   - N+1 クエリ
   - メモリリーク
   - 非効率なアルゴリズム

4. **ベストプラクティス**
   - DRY 原則
   - SOLID 原則
   - デザインパターン

コードレビューシナリオ

ユーザー:この PR をレビューして

Agent:承知しました。PR #123 をレビューします...

[PR 情報を取得]
[コード変更を分析]
[潜在的な問題をチェック]

## PR #123 レビューレポート

### 概要
- ブランチ: feature/user-search
- 変更: +156 -23
- ファイル: 8 個

### 発見された問題

**重大** (1):
- 🚨 `auth.js:45` - パスワード平文保存のリスク

**警告** (3):
- ⚠️ `search.js:23` - 潜在的な SQL インジェクション
- ⚠️ `user.js:78` - 未処理の Promise
- ⚠️ `utils.js:12` - 非推奨 API の使用

**提案** (5):
- 💡 ユニットテストの追加を検討
- 💡 マジックナンバーを定数に置き換え
- 💡 エラーバウンダリの追加を推奨
- 💡 共通メソッドの抽出を検討
- 💡 型アノテーションの追加を推奨

### コードの良い点
- ✅ 適切な関数命名
- ✅ 合理的なモジュール分割
- ✅ 適切なコメント

レビューコメントを生成しますか?

自動テスト

テスト実行設定

{
  "skills": {
    "test-runner": {
      "frameworks": ["jest", "vitest", "pytest"],
      "coverage": {
        "enabled": true,
        "threshold": 80
      },
      "reporting": {
        "format": "markdown",
        "output": "test-report.md"
      }
    }
  }
}

テストシナリオ

ユーザー:テストを実行して結果をレポートして

Agent:テストを実行しています...

[テストコマンドを実行]
[テスト結果を収集]
[カバレッジを分析]

## テストレポート

### テスト結果
- 合計: 45 テスト
- 成功: 42 ✅
- 失敗: 2 ❌
- スキップ: 1 ⏭️

### 失敗したテスト

**1. UserSearch.test.js**

AssertionError: expected [] to equal [{id: 1, name: ’test’}]

提案: データベース接続または mock データを確認

**2. Auth.test.js**

Timeout: Async callback not invoked within 5000ms

提案: タイムアウト時間を延長するか、非同期ロジックを確認

### カバレッジ

| ファイル | 文 | 分岐 | 関数 | 行 |
|-----|-----|-----|-----|-----|
| auth.js | 85% | 78% | 90% | 85% |
| search.js | 72% | 65% | 80% | 70% |
| user.js | 90% | 85% | 95% | 90% |
| **合計** | **82%** | **76%** | **88%** | **82%** |

失敗したテストを修正しますか?

CI/CD 連携

GitHub Actions 連携

# .github/workflows/openclaw-review.yml
name: OpenClaw Review

on:
  pull_request:
    types: [opened, synchronize]

jobs:
  review:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      
      - name: Setup OpenClaw
        run: npm install -g openclaw@latest
        
      - name: Run Review
        env:
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
        run: |
          openclaw agent --message "Review PR #${{ github.event.pull_request.number }}" \
            --output review-comment.md
            
      - name: Post Comment
        uses: actions/github-script@v6
        with:
          script: |
            const fs = require('fs');
            const comment = fs.readFileSync('review-comment.md', 'utf8');
            await github.rest.issues.createComment({
              owner: context.repo.owner,
              repo: context.repo.repo,
              issue_number: context.issue.number,
              body: comment
            });

自動デプロイ

ユーザー:staging にデプロイして

Agent:staging 環境にデプロイしています...

[最新コードを取得]
[テストを実行]
[プロジェクトをビルド]
[サーバーにデプロイ]

## デプロイレポート

### デプロイ情報
- 環境: staging
- ブランチ: main
- コミット: abc1234
- 時刻: 2026-02-26 15:30

### デプロイ手順
1. ✅ コード取得
2. ✅ 依存関係インストール
3. ✅ テスト実行 (45/45 成功)
4. ✅ プロジェクトビルド
5. ✅ サーバーへデプロイ

### ヘルスチェック
- API: ✅ 正常
- データベース: ✅ 接続正常
- Redis: ✅ 接続正常

### アクセス URL
- URL: https://staging.example.com
- API: https://api-staging.example.com

デプロイ成功!

マルチプロジェクト管理

プロジェクト設定

{
  "projects": {
    "frontend": {
      "path": "~/projects/frontend",
      "skills": ["coding-agent", "test-runner"],
      "context": "AGENTS.md"
    },
    "backend": {
      "path": "~/projects/backend",
      "skills": ["coding-agent", "docker-essentials"],
      "context": "AGENTS.md"
    },
    "mobile": {
      "path": "~/projects/mobile",
      "skills": ["coding-agent"],
      "context": "AGENTS.md"
    }
  }
}

プロジェクト切り替え

ユーザー:backend プロジェクトに切り替えて

Agent:backend プロジェクトに切り替えました。

現在のプロジェクト情報:
- 名前: backend
- パス: ~/projects/backend
- 技術: Python/FastAPI
- 直近のコミット: ユーザー認証を追加

何をお手伝いしましょうか?

コード生成

ボイラープレートコードの生成

ユーザー:User モデルの CRUD API を作成して

Agent:User モデルの CRUD API を作成します...

[既存のコード構造を分析]
[コードファイルを生成]

以下のファイルを生成しました:

**1. models/user.py**
```python
from pydantic import BaseModel
from datetime import datetime

class User(BaseModel):
    id: int
    name: str
    email: str
    created_at: datetime
    updated_at: datetime

class UserCreate(BaseModel):
    name: str
    email: str

class UserUpdate(BaseModel):
    name: str | None = None
    email: str | None = None

2. routers/users.py

from fastapi import APIRouter, HTTPException
from models.user import User, UserCreate, UserUpdate

router = APIRouter(prefix="/users", tags=["users"])

@router.get("/", response_model=list[User])
async def list_users(): ...

@router.get("/{user_id}", response_model=User)
async def get_user(user_id: int): ...

@router.post("/", response_model=User)
async def create_user(user: UserCreate): ...

@router.put("/{user_id}", response_model=User)
async def update_user(user_id: int, user: UserUpdate): ...

@router.delete("/{user_id}")
async def delete_user(user_id: int): ...

3. tests/test_users.py

from fastapi.testclient import TestClient

def test_list_users(): ...
def test_create_user(): ...
def test_update_user(): ...
def test_delete_user(): ...

テストを実行して検証しますか?


## ドキュメント生成

### API ドキュメント

ユーザー:この API のドキュメントを生成して

Agent:API エンドポイントを分析しています…

[ルートファイルをスキャン] [API 情報を抽出] [ドキュメントを生成]

API ドキュメント

ユーザーモジュール

GET /users

ユーザー一覧を取得

パラメータ

名前 必須 説明
page int ページ番号
limit int 1ページあたりの件数

レスポンス

{
  "data": [User],
  "total": int,
  "page": int,
  "limit": int
}

POST /users

ユーザーを作成

リクエストボディ

{
  "name": "string",
  "email": "string"
}

レスポンス

{
  "id": 1,
  "name": "string",
  "email": "string",
  "created_at": "2026-02-26T00:00:00Z",
  "updated_at": "2026-02-26T00:00:00Z"
}

docs/api.md に保存しますか?


## トラブルシューティング

### CI/CD の問題

```bash
# CI/CD ステータスを確認
openclaw ci status

# CI/CD ログを表示
openclaw ci logs --last

# 失敗したジョブを再実行
openclaw ci retry

コードの問題

# コード問題を分析
openclaw analyze --project backend

# 修正提案を生成
openclaw suggest --file auth.js

まとめ

OpenClaw でプログラミングアシスタントを構築するポイント:

  • コードレビュー:PR レビューの自動化
  • テスト実行:自動テストとレポート
  • CI/CD 連携:自動デプロイフロー
  • マルチプロジェクト管理:コンテキストの迅速な切り替え
  • コード生成:ボイラープレートコードの生成
  • ドキュメント生成:API ドキュメントの自動生成

更新履歴

  • 2026-02-26:初版公開

シリーズナビゲーション