👨‍💻

Open Devin(AIソフトウェア開発ツール)を使ってみた

2024/05/17に公開

Open Devinとは?

OpenDevinは、AIの力を活用した革新的なオープンソースのソフトウェア開発ツールです。
OpenDevinを使うと、生成AIとコミュニケーションをとりながら単にコードを生成してもらうだけでなく、開発プロジェクト自体(フォルダやコードファイル含む)の作成、必要なモジュールのインストール、コードの修正、WEB画面の立ち上げなど様々なタスクを自動で行うことができるような環境になっているようです。

実際に動かしたデモ動画(Djangoアプリ開発)

https://youtu.be/LzYOtKG6S-0

与えた指示内容

以下のタスクを実行してください。
作業結果は日本語で回答してください。

#タスク  
1.Djangoの最新バージョンをインストールしてください。  
2.Djangoのインストールが終わったらDjangoのプロジェクトを作成してください。  
実行コマンド:django-admin startproject config .
3. アプリケーションの作成(アプリ名はmyapp)を作成してください。  
4.TODOアプリのモデルの定義(models.py)を実装してください。  
タスクには優先度をつけたいです。

OpenDevinの特徴

特徴 説明
技術の優秀さ DockerやKubernetesを利用し、コードの安全な実行と開発プロセスの効率化を実現
ユーザーフレンドリーなインターフェース ReactやVSCodeプラグインなどを提供し、シームレスで対話的な開発体験を提供
多様性 特定のアプリケーションに限定されず、AIを使用した幅広いソフトウェア開発を支援

OpenDevinの長所と短所

長所 短所
AIを活用し、困難なプログラミングタスクを魅力的な問題解決の体験に変える プログラミング言語と技術の堅固な基盤を要求するため、初心者にとっては困難な場合がある
オープンソースであることで、継続的なアップデートや貢献によって繁栄する 特定のオペレーティングシステムとプログラミングの知識が必要
リアルタイムの対話機能により、開発プロセスを加速し、冗長なテスト手順を排除 リアルタイムの対話には安定したインターネット接続が不可欠

実際に使ってみた感想

✅現時点では実務レベルでの利用はまだ難しい。
  ※短時間に多くのAPIコールが発生するとリクエスト上限にすぐひかっかる。
  ※タスク内容によっては誤った操作を実行してしまう(別ファイルにコードを追記するなど)
✅単にコードを書くだけではなく開発に必要な様々なタスクを自動で実行してくれる。
 ※モジュールのインストール、コマンド実行、ディレクトリ移動、ファイル作成、ファイルへコードを記載するなど。
※目的を達成するために必要なタスクも提案して自動で実行してくれる(ただし、勝手にどんどんタスクを実行してしまうので意図したタスクでない場合もある)
✅エラーなどが発生すると自動で修正を試みてくれます。
  ※ただしエラーが解決できないとエラー修正のタスクが繰り返し実行されてAPIコール制限に引っかかりエラーで終わってしまうという状況になる。
✅指示した内容を裏でタスク分割してタスク毎にAPIコールを投げているような感じだったので、指示内容によってはAPIコールが大量に発生するのでコストに注意する必要がある。

動作確認環境

  • Windows11
  • WSL(Debian)

以下は、上記の環境で構築を構築した際の手順です。

※WSL(Ubuntu)だとうまくリクエストが投げれなかったのでDebianを利用したほうがよさそう。

1.Windows+Debian環境のセットアップ

1-1.Hyper-Vの有効化

Powershellを管理者モードで起動して以下のコマンドを実行する。

 Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All
この操作を完了するために、今すぐコンピューターを再起動しますか?
[Y] Yes  [N] No  [?] ヘルプ (既定値は "Y"):

YESでOS再起動を実施する。

Powershell画面を管理者モードで起動して、以下のコマンドを実行してすべてEnabledになっていることを確認する。

Get-WindowsOptionalFeature -Online  | ? FeatureName -Match "Hyper-V"                                                                                                    FeatureName : Microsoft-Hyper-V-All
State       : Enabled

FeatureName : Microsoft-Hyper-V
State       : Enabled

FeatureName : Microsoft-Hyper-V-Tools-All
State       : Enabled

FeatureName : Microsoft-Hyper-V-Management-PowerShell
State       : Enabled

FeatureName : Microsoft-Hyper-V-Hypervisor
State       : Enabled

FeatureName : Microsoft-Hyper-V-Services
State       : Enabled

FeatureName : Microsoft-Hyper-V-Management-Clients
State       : Enabled

1-2.Debian GNU/Linuxのインストール

管理者モードでPowerShellを起動して以下のコマンドを実行する。

wsl --install -d Debian

インストール中: Debian GNU/Linux
Debian GNU/Linux はインストールされました。
Debian GNU/Linux を起動しています...

インストールが完了すると以下の画面が表示されるので、usernameとpasswordを入力して設定する。

Installing, this may take a few minutes...
Please create a default UNIX user account. The username does not need to match your Windows username.
For more information visit: https://aka.ms/wslusers

Enter new UNIX username: <ユーザ名を指定>
New password:<パスワードを指定>
Retype new password:<パスワードを指定>
passwd: password updated successfully
Installation successful!
Linux 用の Windows サブシステムが Microsoft Store で入手可能になりました。
'wsl.exe --update' を実行するか、https://aka.ms/wslstorepage
 にアクセスしてアップグレードできます。Microsoft Store から WSL をインストールすると、最新の WSL 更新がより速く提供され ます。
詳細については、https://aka.ms/wslstoreinfo
をご覧ください。

Debianのバージョン確認

 cat /etc/debian_version
12.5

1-3.パッケージ管理を行うaptパッケージを最新化

sudo apt update

ダウンロード済のパッケージを最新版に更新する。

sudo apt upgrade

1-4.root権限にパスワードを設定

sudo su -
root@C11-HCZO027AALO:~# passwd
New password:
Retype new password:
passwd: password updated successfully

1-5.デーモンの設定

DebianではOSが最初に起動するプログラム(デーモン)がinitになってるので、systemdに変更する。

まず、wsl.confファイルを作成する。

vi /etc/wsl.conf

以下を追加して保存(:wq!)する。

[boot]
systemd=true

exitで一旦rootユーザを抜ける。

Powershellの画面上で以下のコマンドを実行してwslを更新する。

 wsl --update
インストール中: Linux 用 Windows サブシステム
Linux 用 Windows サブシステム はインストールされました。

WindowsPC画面下にあるWindowsマーク→Debianを選択してDebianを起動したら、ps -auxコマンドを実行する。

ps -aux
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  4.8  0.1 167040 12372 ?        Ss   17:23   0:00 /sbin/init

/sbin/initとなっていればOKです.

また、以下のコマンドを実行して/sbin/init -> /lib/systemd/systemdと表示されていることも確認しておきます。

ls -l /sbin/init
lrwxrwxrwx 1 root root 20 11月 22 05:57 /sbin/init -> /lib/systemd/systemd

1-6.dockerインストール

まず、curlをインストールします。

sudo apt install curl

以下のコマンドを実行してDockerをインストールします。

curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh

以下のようなメッセージが表示されればOKです。

================================================================================

To run Docker as a non-privileged user, consider setting up the
Docker daemon in rootless mode for your user:

    dockerd-rootless-setuptool.sh install

Visit https://docs.docker.com/go/rootless/ to learn about rootless mode.


To run the Docker daemon as a fully privileged service, but granting non-root
users access, refer to https://docs.docker.com/go/daemon-access/

WARNING: Access to the remote API on a privileged Docker daemon is equivalent
         to root access on the host. Refer to the 'Docker daemon attack surface'
         documentation for details: https://docs.docker.com/go/attack-surface/

================================================================================

Dockerサービスを起動し、起動時に自動的にDockerが起動するように設定します。

sudo systemctl enable docker

Synchronizing state of docker.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable docker

sudo systemctl start docker

以下のコマンドを実行してDockerステータスがActiveになっていることを確認します。

 sudo systemctl status docker
● docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2024-05-15 17:23:10 JST; 5min ago
TriggeredBy: ● docker.socket
       Docs: https://docs.docker.com
   Main PID: 276 (dockerd)
      Tasks: 17
     Memory: 115.7M
     CGroup: /system.slice/docker.service
             └─276 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

Dockerのバージョン確認

docker --version
Docker version 26.1.2, build 211e74b

2.Open Devin環境のセットアップ

基本的には、公式リポジトのQuick Startに書いてある手順を実施すればOKです。

2-1.リポジトリをクローンする

DebianOS上に任意のフォルダを作成(ここでは/home/<user>/source)してディレクトリ移動した後、以下のコマンドでOpen DevinリポジトリをCloneします。

pwd
/home/<uername>/source
git clone https://github.com/OpenDevin/OpenDevin.git

以下の通りリポジトリがコピーされていることを確認します。

pwd

/home/<username>/source/OpenDevin

ll
合計 692
drwxr-xr-x 12 shara shara   4096  5月 15 05:24 ./
drwxr-xr-x  3 shara shara   4096  5月 15 05:24 ../
-rw-r--r--  1 shara shara     51  5月 15 05:24 .dockerignore
drwxr-xr-x  8 shara shara   4096  5月 15 05:24 .git/
-rw-r--r--  1 shara shara     26  5月 15 05:24 .gitattributes
drwxr-xr-x  4 shara shara   4096  5月 15 05:24 .github/
-rw-r--r--  1 shara shara   3590  5月 15 05:24 .gitignore
-rw-r--r--  1 shara shara   5480  5月 15 05:24 CODE_OF_CONDUCT.md
-rw-r--r--  1 shara shara   3371  5月 15 05:24 CONTRIBUTING.md
-rw-r--r--  1 shara shara   4620  5月 15 05:24 Development.md
-rw-r--r--  1 shara shara   1095  5月 15 05:24 LICENSE
-rw-r--r--  1 shara shara  12323  5月 15 05:24 Makefile
-rw-r--r--  1 shara shara   6518  5月 15 05:24 README.md
drwxr-xr-x  9 shara shara   4096  5月 15 05:24 agenthub/
drwxr-xr-x  5 shara shara   4096  5月 15 05:24 containers/
drwxr-xr-x  3 shara shara   4096  5月 15 05:24 dev_config/
drwxr-xr-x  5 shara shara   4096  5月 15 05:24 docs/
drwxr-xr-x  4 shara shara   4096  5月 15 05:24 evaluation/
drwxr-xr-x  6 shara shara   4096  5月 15 05:24 frontend/
drwxr-xr-x 11 shara shara   4096  5月 15 05:24 opendevin/
-rw-r--r--  1 shara shara 586969  5月 15 05:24 poetry.lock
-rw-r--r--  1 shara shara    304  5月 15 05:24 pydoc-markdown.yml
-rw-r--r--  1 shara shara   1599  5月 15 05:24 pyproject.toml
drwxr-xr-x  4 shara shara   4096  5月 15 05:24 tests/

2-2. 作業用ディレクトリの作成

Open Devinを利用する際に利用される作業用ディレクトリを作成しておく必要があります。
先ほどCloneしたOpenDevinフォルダ直下にworkspaceという空のディレクトリを作成します。

pwd
/home/<username>/source/OpenDevin

mkdir workspace

2-3. Open Devinコンテナの立ち上げ

以下のコマンドを実行します。

workspaceフォルダのパスを指定

<username>は自分の名前に変更する

cd /home/<username>/source/OpenDevin
export WORKSPACE_BASE=$(pwd)/workspace;

echo $WORKSPACE_BASE
/home/<username>/source/OpenDevin/workspace  →workspaceのパスがちゃんと設定されているか確認

docker runコマンドでコンテナを起動


sudo docker run \
    -it \
    --pull=always \
    -e SANDBOX_USER_ID=$(id -u) \
    -e WORKSPACE_MOUNT_PATH=$WORKSPACE_BASE \
    -v $WORKSPACE_BASE:/opt/workspace_base \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -p 3000:3000 \
    --add-host host.docker.internal:host-gateway \
    ghcr.io/opendevin/opendevin:0.5

以下のようなメッセージが表示されて、コンテナイメージのダウンロード&コンテナ起動までしばらく時間がかかるので気長に待ちましょう。

b0a0cf830b12: Pull complete
72914424168c: Pull complete
80818bc858ed: Pull complete
805c2b19c211: Pull complete
7a89e8daeeae: Pull complete
5978226c46e8: Pull complete
d4f5063afb90: Pull complete
5e2aeee19aad: Pull complete
af39984e9a9b: Pull complete
7a56b8630e74: Pull complete
afbd856ba10e: Pull complete
9042c36bafe8: Pull complete
bb9295491475: Downloading [=>                                                 ]  100.2MB/2.986GB
93dbe80758ac: Downloading [================>                                  ]  95.69MB/293.1MB
1f7a720eebab: Download complete
f4add590015d: Download complete
a87083ed3b75: Download complete
4a972f437a13: Download complete
5b28fa007f09: Download complete
c0cab20196f6: Download complete
f861e0754638: Download complete
4f4fb700ef54: Download complete

以下のようなメッセージが表示され、エラーが出なければOKです。

Status: Downloaded newer image for ghcr.io/opendevin/opendevin:0.5
Starting OpenDevin...
Setting up enduser with id 1000
Docker socket group id: 999
systemd-journal:x:999:
Group with id 999 already exists
Running as enduser
INFO:     Started server process [33]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://0.0.0.0:3000 (Press CTRL+C to quit)

ブラウザでhttp://127.0.0.1:3000/にアクセスして以下のような画面が表示されれば一旦OKです。

3.Open Devinを使ってみる

Open Devinを実際に動かすには何かしらの大規模言語モデルのAPIキーが必要になります。
今回は、ClaudeのAPIを利用する例で説明します。

3-1. Claude APIキーを発行する

まず、以下のサイトからClaud APIキーを発行します。

https://console.anthropic.com/

Googleアカウントでログオン後に「Get API Keys」→「Create Key」からAPIキーを発行できます。
発行されたAPIキー(sk-ant-api03-xxxxxx)を控えておきます。

【注意点】
Plans & Billingであらかじめクレジット課金しておかないとAPIコールを投げた際にエラーになると思いますので、必要最小限課金しておく必要があると思います。
※Open AIのAPIも同様(以前は使った分請求だった気がしますが課金方式が変わったと思われる)

3-2.Open Devinで利用するLLMとAPIキーを設定する

今回はClaudeの一番安いモデル(claude-3-haiku)を利用します。

http://127.0.0.1:3000/index.htmlの画面で、以下の通り設定して「Save」ボタンを押します。

設定項目 設定値
Agent CodeActAgent
Model claude-3-haiku-20240307
API Key sk-ant-api03-xxxx
Language English

以下のようなUpenDevinの画面が表示されます。
最初は、画面下のメッセージがInitializing agent (may take up to 10 seconds)...と表示されています。

しばらく待つとメッセージがAgent is initialized, waiting for task...に変わるまで待ちましょう。

これでOpen Devinが利用できる状態になります。###

補足

Open Devin環境で生成AIとやり取りして開発した成果物(フォルダ、コードなど)は最初に作成したworkspaceフォルダ内に自動で生成されます。

以下の手順でWindowsPC上から直接workspaceフォルダにアクセスできます。
DebianOS上で以下のコマンドを実行して表示されたパスエクスプローラパスにコピペします。

wslpath -w ~
\\wsl.localhost\Debian\home\shara

以下のようにDebianOS上のディレクトリを参照できます。

3-3.DjangoのTodoアプリを作らせてみる

以下の1~7をやらせたい想定

# 1. Djangoのインストール(pip install Django)
# 2. プロジェクトの作成(django-admin startproject config .)
# 3. アプリケーションの作成(python manage.py startapp myapp)
# 4. settings.pyの設定(言語とタイムゾーンの設定)
   settings.py内にデフォルトで存在しているLANGUAGE_CODEとTIME_ZONEの設定値を以下の値に置き換える。

   LANGUAGE_CODE = 'ja'
   TIME_ZONE = 'Asia/Tokyo'

# 5. モデルの定義(models.py)
   - アプリケーションに必要なモデルを定義する
# 6. マイグレーションの実行
  python manage.py makemigrations
  python manage.py migrate

# 7. 開発サーバの起動(python manage.py runserver)

まず最初にDjangoのインストールだけを指示してみる。

DjangoでシンプルなTODOアプリを作りたいです。
まず、Djangoの最新バージョンをインストールしてください。

すると、以下の通りDjangoのインストールだけではなくTODOアプリを作成するための以下の後続タスクも自動で実行されました・・。

STEP 1 プロジェクト作成(django-admin startproject todo_app)
STEP 2 プロジェクトディレクトリへ移動(cd todo_app)
STEP 3 アプリの作成(python manage.py startapp tasks)
STEP 4 モデルのオープン(tasks/models.py)
STEP 5 モデルの定義(tasks/models.py)
STEP 6  admin.pyの設定  →ここでAPIの1分当たりの時間制限に引っかかりエラーになる・・・。

指示してないこともいろいろ自動で実行してしまい、APIのCALL数制限に引っかかってしまうのでちょっと微妙・・・。

ただし、各種コマンド実行、ディレクトリ移動、ファイルオープン、コードの設定を全部自動でやってくれるのはすごい・・・。

workspaceフォルダ内を見るとDjangoのプロジェクトファイル群が実際に生成されています。

例えばmodels.pyを見るとTODOアプリとして標準的に必要な定義が以下の通り自動で設定されています。

from django.db import models

class Task(models.Model):
    title = models.CharField(max_length=200)
    description = models.TextField()
    completed = models.BooleanField(default=False)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

余計な作業は実施してほしくないので、今度は以下のようにDjangoインストールだけ実施するように指示出しを修正してみる。

※一旦workspaceフォルダ内を削除しておく

DjangoでシンプルなTODOアプリを作りたいです。
まず、Djangoの最新バージョンをインストールしてください。インストールが終わったら教えてください。後続の作業は実施しないでください。

以下の通り、Djangoのインストールだけ実施して、ユーザインプット待ち状態になった。
いい感じですね。

続いて、プロジェクト作成を指示。

では次に、Djangoのプロジェクトを作成してください。
実行コマンド:django-admin startproject config .

以下の通り、コマンド実行してDjangoのプロジェクフォルダが生成されました。
いい感じ。

では、次にアプリケーションの作成(アプリ名はmyapp)をお願いします。

これも問題なくタスクが完了。

次にsettings.pyの言語とタイムゾーンの設定を日本語設定に変更させてみます。

プロジェクトの言語設定を日本語にしたいです。
settings.py内にデフォルトで存在しているLANGUAGE_CODEとTIME_ZONEの設定値を以下の値に置き換えて。
LANGUAGE_CODE = 'ja'
TIME_ZONE = 'Asia/Tokyo'

以下の通り、settings.py内に設定が自動追加されました。

ただし、実際にはデフォルトで以下の設定があってここの値を書き換えてほしかったのですが、新規にエントリーを追加してしまったようです(ここは微妙)

追加で以下の修正依頼を出してましたが正しく修正してくれませんでした。

LANGUAGE_CODEとTIME_ZONEは新規に追加するのではなく、settings.pyに既存で存在する以下の設定値を日本語向けに修正してほしいんですよね。

LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'

ちなみ、画面のCode Editor欄でファイルを選択するとコードが表示されるので画面上で直接コード修正もできます。(ただし保存ボタンが見当たらず変更が反映されない・・)

次にTODOアプリのモデル(models.py)を作成してもらいます。

TODOアプリに必要なモデルの定義をお願いします。

以下の通り、models.pyにモデルの定義が自動設定されました。
これもいい感じ。

from django.db import models

# Create your models here.
class Todo(models.Model):
    title = models.CharField(max_length=100)
    description = models.TextField()
    completed = models.BooleanField(default=False)

TODOタスクに「優先度」を付けたいので追加の指示出しをしてみます。

タスクに優先度をつけたいです。

以下の通りpriorityフィールドが自動で追加されました。
これもちゃんと操作してくれてる・・・。

from django.db import models

# Create your models here.
class Todo(models.Model):
    title = models.CharField(max_length=100)
    description = models.TextField()
    priority = models.IntegerField(default=3)

最後にマイグレーションを実行させてみます。
以下のような雑な指示出しをしてみました。

モデルの定義をDBに反映したいです。

裏では以下のようなやり取りが自動実行されていました。

  • マイグレーションコマンドを実行(makemigrations)するがエラーになる
  • myappアプリがDjangoプロジェクトに追加されてないことを検知し修正を試みる
    →settings.pyのINSTALLED_APPにmyappを追加するのが正解だが、した図のようにmodels.pyにmyappを追加してしまってエラーになっていました。

タスク内容によってはまだ精度が微妙といった感じです。

裏で動いていたタスク内容

20:26:42 - opendevin:INFO: codeact_agent.py:270 - Cost: 0.00 USD | Accumulated Cost: 0.04 USD
20:26:42 - ACTION
**CmdRunAction**
THOUGHT:はい、わかりました。モデルの変更をデータベースに反映させましょう。

まずはマイグレーションファイルを作成します:
COMMAND:
python3 manage.py makemigrations myapp
20:26:42 - OBSERVATION
CmdOutputObservation(content="\x1b[31;1mNo installed app with label 'myapp'.\r\n\x1b[0m", command_id=-1, command='python3 manage.py makemigrations myapp', exit_code=2, observation='run')


==============
STEP 18

20:26:45 - opendevin:INFO: codeact_agent.py:270 - Cost: 0.00 USD | Accumulated Cost: 0.04 USD
20:26:45 - ACTION
**CmdRunAction**
THOUGHT:申し訳ありません。myappアプリがまだDjangoプロジェクトに登録されていないようですね。

まずはsettings.pyファイルを編集して、myappアプリをINSTALLED_APPSに追加しましょう。
COMMAND:
edit 33:34 <<EOF
    'myapp',
EOF

==============
STEP 19

20:26:47 - opendevin:INFO: codeact_agent.py:270 - Cost: 0.00 USD | Accumulated Cost: 0.04 USD
20:26:47 - ACTION
**CmdRunAction**
THOUGHT:申し訳ありません、settings.pyファイルを編集する必要がありますね。
COMMAND:
edit 33:34 <<EOF
    'myapp',

==============
STEP 20

20:26:49 - opendevin:INFO: codeact_agent.py:270 - Cost: 0.00 USD | Accumulated Cost: 0.05 USD
20:26:49 - ACTION
**CmdRunAction**
THOUGHT:申し訳ありません、settings.pyファイルを間違って編集してしまいました。正しく編集しましょう。
COMMAND:
edit 33:34 <<EOF
    'myapp',


==============
STEP 21

20:26:51 - opendevin:INFO: codeact_agent.py:270 - Cost: 0.00 USD | Accumulated Cost: 0.05 USD
20:26:51 - ACTION
**CmdRunAction**
THOUGHT:大変申し訳ありません。settings.pyファイルを正しく編集できていませんでした。
COMMAND:
edit 33:34 <<EOF
    'myapp',
EOF

上記結果はClaudeの一番安いモデル(claude-3-haiku)を利用しましたが、高性能なclaude-3-opusを使っても基本的に操作間違いする部分は同じだったり、うまくタスクを実行できないケースがまだまだある。

生成AIの精度がもっと向上する&高精度AIエージェント(自律的に目標を達成するために環境と相互作用し、様々なタスクを自律的に実行する能力を持つ)が実現すればOpen Devinのような開発環境を利用するのが当たり前になる日もそう遠くないのかもしれません。

参考URL

OpenDevinリポジトリ
WSL2にDebianのインストールと初期設定

Accenture Japan (有志)

Discussion