OpenHans CLIを自分なりの使い方で使う

しむどん 2025-06-18

はじめに

最近はAnthropicのClaude Codeが何かと話題です。私もClaude Codeを試してとても良い印象を持ちました。これと同様のものとしてOpenAI Codexもあり、私も入れていますが、あまり活用できていません。しかし、本当にAIエージェントは進化しています。

OpenHands CLIの紹介

つい先日、OpenHansから公開されたOpenHands CLIについて紹介します。OpenHandsは元々、Devinという開発エージェントのクローンとして作られたOpenDevinの後継です。OpenHands CLIは、いくつかのLLMのAPIを利用して動作するエージェントです。特定のLLMにロックインされないため、柔軟に利用できます。

インストール方法

OpenHands CLIのインストールは非常に簡単です。Pythonの環境があれば、以下のコマンドでインストールできます。

pip install openhands-ai

インストール後、`openhands`コマンドを実行して起動します。

openhands

TUI(ターミナルUI)が表示され、いくつかの質問がされます。これには、ディレクトリへのアクセス許可や使用するAPI、モデル、APIキーなどが含まれます。これらに真摯に答えれば問題ありません。

ソースコードの取得

ソースコードを確認したりいじったりしたい場合、パッケージはPyPIからダウンロードするのではなく、GitHubからcloneすることをお勧めします。

git clone [email protected]:All-Hands-AI/OpenHands.git

Dockerの利用

エージェントをローカルで実行するのは不安なため、Dockerを使ってコンテナ内で作業を行います。以下は、私が使用しているDockerfileの例です。

FROM python:3.12.10-slim
RUN apt-get update -y \
    && apt-get install -y curl make git build-essential \
    && python3 -m pip install poetry --break-system-packages

COPY pyproject.toml poetry.lock ./
RUN poetry install --no-root
COPY openhands ./openhands
RUN touch README.md
RUN poetry install
CMD poetry run openhands

Dockerfileの改善点

  • マルチステージビルド: より効率的なビルドを実現するために、マルチステージビルドを検討することができます。
  • `poetry install`の最適化: `poetry install`を2回呼び出す必要はありません。
  • aptのキャッシュの削除: 不要なキャッシュを削除することで、イメージサイズを小さくできます。

コンテナのビルドと実行

ソースコードとDockerfileからイメージをビルドします。

docker build .

タグは付けず、必要になったら後で付けることをお勧めします。

docker run --volume $PWD:$PWD -it IMAGE_ID

これでエージェントが起動します。あとはエージェントと対話しながら作業を進めていきます。

Emacs Lispによるコマンド

このコンテナを素早く起動および停止できるように、Emacs Lispでコマンドを用意しておくと便利です。

(defvar my/agent-docker-image-id "4552063a1ff0")

defun my/agent (&optional cwd)
  (interactive (list (read-directory-name "DIRECTORY: "
					default-directory nil
					default-directory)))
  (let ((default-directory cwd)
        (vterm-shell (format "docker run -v $PWD:$PWD -it %s"
										my/agent-docker-image-id))
        (vterm-buffer-name (format "*Agent: %s*" (expand-file-name
										default-directory)))
        (vterm-kill-buffer-on-exit nil))
    (vterm)))

環境変数の利用

毎回起動時に何を使用するのかを聞かれるのは面倒です。環境変数として渡す方法を検討しましょう。以下のように修正できます。

(defun my/agent (&optional cwd)
  (interactive (list (read-directory-name "DIRECTORY: "
					default-directory nil
					default-directory)))
  (let ((default-directory cwd)
        (vterm-shell
		(format
		"docker run --volume $PWD:$PWD --volume $HOME/.openhands:/root/.openhands --workdir $PWD -it %s"
										my/agent-docker-image-id))
        (vterm-buffer-name (format "*Agent: %s*" (expand-file-name
										default-directory)))
        (vterm-kill-buffer-on-exit nil))
    (vterm)))

まとめ

OpenHands CLIは非常に便利なツールですが、使用する際には適切な設定と環境を整えることが重要です。これにより、AIエージェントの能力を最大限に引き出すことができます。今後も新しい発見や改善点を見つけていきましょう。