


OpenHans CLIを自分なりの使い方で使う
はじめに
最近は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エージェントの能力を最大限に引き出すことができます。今後も新しい発見や改善点を見つけていきましょう。