OpenHands GitHub Issue Resolverを使って(ほぼ)無料でAIエンジニアに開発を依頼できる環境を作ってみる
※ この記事は2025/3/15現在の情報に基づいています。生成AIの進化は非常に早いため、最新情報は各公式ページをご確認ください。
はじめに
AIエンジニアを活用した開発が注目されていますね。
AIエンジニアといえば、Devinが有名ですが、利用するためには月額約500ドルからのプランしかなく、コスト面でのハードルがあり、気軽に試すのは難しい状況でした。
そこで、オープンソースの自動開発AIエージェントとして開発されているOpenHandsに注目。GitHub & Gitlab Issue Resolver機能というものがあり、これを設定すると、GitHub Workflowの中でOpenHandsのエージェントが実行されるため、セルフホスト不要で環境を構築することが可能です。
OpenHandsは基本的にはセルフホストが必要ですが、また、GitHub WorkflowはPublicリポジトリであれば無料で利用できるため、コストを気にせず利用できる点も大きな魅力です。
さらに、OpenRouterを使い、無料のLLM APIを設定することでAPI料金もかからなくなり、気軽にAIエンジニアに開発を依頼することが可能になります!
ここからは、OpenHands GitHub Issue ResolverとOpenRouterを使って(ほぼ)無料でAIエンジニアに開発を依頼できる環境構築の手順を記載します。
OpenHands GitHub Issue ResolverとOpenRouterを使って(ほぼ)無料で駆け出しエンジニアレベルのAIエンジニアに開発を依頼できる環境構築の手順
OpenRouterのアカウント開設とAPIキーの取得
まずは、OpenRouterのアカウントを作成し、APIキーを取得します。同時に、Creditsよりチャージを行います。
無料モデルの探し方として、Models一覧ページの左側にある「Prompt pricing」で「FREE」だけを選択することで、利用可能な無料モデルを絞り込むことができます。
例として、以下のモデルがおすすめです。
- deepseek/deepseek-r1:free
- google/gemini-2.0-pro-exp-02-05:free
API Keys画面より、Create KeyでAPIキーを作成し、APIキーをメモっておきます。
- Credit limitを1とかにしておくことで、余計にCreditが消費されないようにしておきます。
また、後の設定で必要になるので使用するモデルのbase_url
とmodel
を確認してメモっておきます。
- 詳しくは各モデルのAPIページ参照
Github ActionsとWorkflowの設定手順
公式の手順に従って作成していきます。
以下は抜粋した手順
- GitHubのPAT(personal access token)を作成
- https://github.com/settings/personal-access-tokens
- リポジトリを限定したいのでFine-grained personal access tokensの方で作ったほうがよさそうです
- OpenHandsにアクセスさせるリポジトリを選択し、contents、issues、pull requests、workflowsにRead and writeの権限付与をします
- リポジトリの
.github/workflows/
配下に openhands-resolverのひな型ymlをコピー - repository permissionsの設定
- リポジトリの Settings -> Actions -> General -> Workflow permissions より、Read and write permissionsを選択し、Allow GitHub Actions to create and approve pull requestsを選択します
- リポジトリの Settings -> Actions -> General -> Workflow permissions より、Read and write permissionsを選択し、Allow GitHub Actions to create and approve pull requestsを選択します
- GitHub secretsの設定
- リポジトリの Secrets and variables > Actions を選択
- Repository secretsに下記の値を設定します
- LLM_API_KEY:OpenRouterのAPIキーを設定
- LLM_BASE_URL: https://openrouter.ai/api/v1
- PAT_USERNAME:PATのユーザー名(自分)
- PAT_TOKEN: PATのアクセストークン
- Repository variablesに下記の値を設定
- LLM_MODEL:OpenRouterのLLMモデル名を設定
- 例:
openrouter/deepseek/deepseek-r1:free
- openrouterの場合、モデル名の前に
openrouter/
を付ける
- 例:
- LLM_MODEL:OpenRouterのLLMモデル名を設定
- その他のオプションは下記参照
実際の使用方法
実際にどのようにOpenHandsとOpenRouterを使って開発が進むのか、使用例を解説します。
GitHub上でIssueを立て、Issueに対してfix-me
のラベルを付けるとGithub ActionsでOpenHandsが実行され、処理が終わるとPRが起こされます。
GitHub上でIssueを立て、対象Issueにfix-meラベルを付けます。
fix-meラベルが付いたIssueをトリガーに、GitHub Actionsが起動し、OpenHandsが実行されます。
- Actionsの様子
- 3m47sで処理が終わっています
- OpenHandsが開発を行っている様子
OpenHandsが処理を完了すると、修正内容がPull Requestとして提案されます。
- PRの内容が英語で記載されるのでちょっと悲しい・・・
変更内容を見てMergeします!
修正依頼する場合はPRに @openhands-agent とメンションを付けてコメントする事で再度OpenHandsが実行されます。
なお、OpenAPIのActivityよりCostの使用量が確認できます
- コスト0円!
さいごに
OpenHands Github Issue ResolverとOpenRouterの無料APIを組み合わせることで、ほぼ無料でAIエンジニアに開発を依頼できる環境ができました。
生成AIエージェントを使った開発では、指示の出し方やリポジトリ内におけるAIが理解しやすい設計思想、実装方針などのドキュメントを充実させることが重要かなと感じました。
Claude 3.7 Sonnet を使ったDevinはジュニアエンジニアレベルの開発依頼ができると言われていますが、DeepSeek R1を使ったOpenHandsはClaude 3.7 Sonnetには及ばないものの、駆け出しエンジニアレベルの開発はできるのではないかと思います!
もっと力が欲しいか・・・?ってなったらAPIをClaude 3.7 Sonnetにすればヨシ!
Discussion