OpenHands GitHub Action完全ガイド - 自動化でさらなる生産性向上を

## 概要

OpenHands GitHub Actionは、GitHubリポジトリでのissueやプルリクエストに対してAIエージェントが自動的に作業を実行する強力な自動化ツールです。これまでCLIでの直接操作について解説してきましたが、GitHub Actionを導入することで、チーム開発での生産性を大幅に向上させることができます。

https://x.com/hAru_mAki_ch/status/1936076731578019948

## 前回の記事のおさらい

本記事は以下の記事の続編です：

- **[OpenHands CLI 完全ガイド](https://hamaruki.com/openhands-cli-guide/)**: OpenHands CLIの基本的な使い方とコマンドについて詳しく解説
- **[OpenHands CLIでカスタムOpenAI互換モデル（Litellm）を設定する方法](https://hamaruki.com/openhands-cli-setup-custom-openai-compatible-litellm/)**: カスタムモデルやローカルLLMの設定方法

これらの記事では個人での開発効率化に焦点を当てましたが、今回はチーム開発での自動化について解説します。

## OpenHands GitHub Actionとは

OpenHands GitHub Actionは、GitHubのワークフロー機能を活用してAIエージェントを自動実行するサービスです。issueやプルリクエストに特定のラベルを付けたり、特定のコメントを投稿することで、AIエージェントが自動的にコードの修正や機能実装を行います。

### 主要な特徴

- **自動トリガー**: ラベルやコメントで簡単に起動
- **プルリクエスト生成**: 修正内容を自動でプルリクエストとして提出
- **反復的改善**: フィードバックに基づいた継続的な改善
- **カスタマイズ可能**: チーム固有の設定や指示を追加可能

## セットアップ方法

### 1. リポジトリへのインストール

OpenHands GitHub Actionを新しいリポジトリにインストールするには、以下のワークフローファイルを作成します。

`.github/workflows/openhands-resolver.yml` を作成：

https://github.com/Sunwood-ai-labs/oha-demo-001/blob/main/.github/workflows/oha.yml

```yaml
name: Resolve Issue with OpenHands

on:
  issues:
    types: [labeled]
  pull_request:
    types: [labeled]
  issue_comment:
    types: [created]
  pull_request_review_comment:
    types: [created]
  pull_request_review:
    types: [submitted]

permissions:
  contents: write
  pull-requests: write
  issues: write

jobs:
  call-openhands-resolver:
    uses: All-Hands-AI/OpenHands/.github/workflows/openhands-resolver.yml@main
    with:
      macro: ${{ vars.OPENHANDS_MACRO || '@openhands-agent' }}
      max_iterations: ${{ fromJson(vars.OPENHANDS_MAX_ITER || 50) }}
      base_container_image: ${{ vars.OPENHANDS_BASE_CONTAINER_IMAGE || '' }}
      LLM_MODEL: ${{ vars.LLM_MODEL || 'anthropic/claude-sonnet-4-20250514' }}
      target_branch: ${{ vars.TARGET_BRANCH || 'main' }}
      runner: ${{ vars.TARGET_RUNNER }}
    secrets:
      PAT_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      PAT_USERNAME: ${{ secrets.PAT_USERNAME }}
      LLM_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
```

### 2. 必要な設定

#### Repository Secrets
- `ANTHROPIC_API_KEY`: Anthropic Claude APIキー
- `PAT_USERNAME`: GitHubユーザー名

#### GitHub設定
リポジトリの **Settings > Actions > General** で以下を設定：
- **Allow GitHub Actions to create and approve pull requests**: ✅ ONにする

#### Repository Variables（オプション）
これらの設定は任意です。指定しない場合はデフォルト値が使用されます：

- `LLM_MODEL`: 使用するLLMモデル（デフォルト: `anthropic/claude-sonnet-4-20250514`）
- `OPENHANDS_MACRO`: カスタムマクロ（デフォルト: `@openhands-agent`）
- `OPENHANDS_MAX_ITER`: エージェントの最大反復回数（デフォルト: 50）
- `TARGET_BRANCH`: プルリクエストのターゲットブランチ（デフォルト: `main`）

## 基本的な使い方

### Issue解決の自動化

#### 方法1: ラベルを使用

1. GitHubでissueを作成
2. `fix-me`ラベルを追加
3. OpenHandsエージェントが自動的に問題を分析し、修正を試行
4. 修正内容がプルリクエストとして提出される

#### 方法2: コメントを使用

1. issueまたはプルリクエストにコメントを投稿
2. コメントを`@openhands-agent`で開始（デフォルトマクロ）
3. エージェントが該当のコメント内容に基づいて作業を実行

### 使用例

#### バグ修正の依頼
```
Issue タイトル: ログイン機能でメールアドレスの検証が正しく動作しない

Issue 本文:
ユーザーがログインする際、無効なメールアドレス形式でもログインできてしまう問題があります。
バリデーション機能を追加して、正しいメールアドレス形式のみを受け付けるようにしてください。

ファイル: src/auth/login.js
```

ラベル `fix-me` を追加すると、エージェントが：
1. コードを分析
2. バリデーション機能を実装
3. テストケースを追加
4. プルリクエストを作成

#### 機能追加の依頼
```
@openhands-agent
ユーザーダッシュボードに「最近の活動」セクションを追加してください。
- 過去7日間のユーザーアクティビティを表示
- 日付順でソート
- 最大10件まで表示
- レスポンシブデザインに対応
```

## 高度な設定

### カスタム指示の追加

リポジトリルートに `.openhands/instructions.md` ファイルを作成することで、エージェントにカスタム指示を提供できます：

https://github.com/Sunwood-ai-labs/oha-demo-001/blob/main/.openhands/instructions.md

```markdown
# OpenHands カスタム指示

## プロジェクト概要
このプロジェクトは React + TypeScript で構築された Web アプリケーションです。

## コーディング規約
- ESLint と Prettier の設定に従ってください
- コンポーネントは関数型で記述してください
- テストファイルは `__tests__` ディレクトリに配置してください

## 禁止事項
- 本番環境の設定ファイルは変更しないでください
- データベースマイグレーションは直接実行しないでください

## 推奨事項
- 新機能追加時は必ずテストケースを含めてください
- コメントは日本語で記述してください
```

### 環境変数の詳細設定

| 変数名 | 型 | 説明 | 例 |
|--------|-------|------|-----|
| `LLM_MODEL` | Variable | 使用するLLMモデル | `anthropic/claude-sonnet-4-20250514` |
| `OPENHANDS_MAX_ITER` | Variable | エージェントの最大反復回数 | `50` |
| `OPENHANDS_MACRO` | Variable | カスタムマクロ | `@openhands-agent` |
| `OPENHANDS_BASE_CONTAINER_IMAGE` | Variable | カスタムサンドボックスイメージ | `custom_image` |
| `TARGET_BRANCH` | Variable | プルリクエストのターゲットブランチ | `main` |
| `TARGET_RUNNER` | Variable | ワークフローを実行するランナー | `ubuntu-latest` |


## まとめ

OpenHands GitHub Actionは、これまでのCLI使用で培った生産性をチーム全体に拡張する強力なツールです。適切にセットアップすることで、issueの自動解決、コードレビューの効率化、継続的な品質改善を実現できます。

### 次のステップ

1. **導入開始**: 小規模なリポジトリでテスト運用
2. **設定最適化**: チーム固有の要件に合わせた設定調整
3. **ワークフロー統合**: 既存の開発プロセスとの統合
4. **チーム教育**: メンバーへの使用方法共有

OpenHands CLIでの個人生産性向上から始まり、GitHub Actionでのチーム生産性向上まで、AI支援開発の全体像を活用して、より効率的で質の高い開発を実現してください。

## 関連リンク

- [OpenHands CLI 完全ガイド](https://hamaruki.com/openhands-cli-guide/)
- [OpenHands CLIでカスタムOpenAI互換モデル（Litellm）を設定する方法](https://hamaruki.com/openhands-cli-setup-custom-openai-compatible-litellm/)
- [OpenHands Resolver README](https://github.com/All-Hands-AI/OpenHands/blob/main/openhands/resolver/README.md)
- [OpenHands公式ドキュメント](https://docs.all-hands.dev/)