実践的なDevin活用ガイド:セッションでの効果的な指示方法や注意点
はじめに
Devinを実際のプロジェクトで活用する際、効率的な指示と連携システムの構築が重要になります。本記事では、リポジトリ開発におけるDevinの基本的な使い方から、実践的な活用方法を解説します。
基本的な使い方
チャットでの会話(セッション)
Devinとのやりとりは、Web上のチャット画面から開始します。
Devinではチャットでの一連のやりとりを「セッション」と呼びます。
- メニューから「New session」を選択
- チャット欄に指示を入力
※GPT-5が発表されてから入力フォームが少し変わりました。Preview版としてGPT-5が利用できます。元は「Deep Agent」となっていました。
※今回の記事の内容はGPT-5が使える前の内容となっています。
セッションのオプション
Devinのセッションには以下のオプションがあります。
- リソース選択
- ファイル添付
- リポジトリ設定
- モード選択
- その他オプション(プロンプトの改善、Slackチャンネルの選択)
1. リソース選択
「@」アイコンをクリックすることで、利用するリソースを選択できます。
チャット欄に「@」を入力しても同様の操作が可能です。
リソースとして以下のものが選択できます。
- リポジトリ:紐づけているGitHub等のリポジトリ
- ファイル:リポジトリ内の特定ファイル(複数リポジトリを紐づけている場合はすべてのリポジトリが対象)
- マクロ:Devinで作成したマクロ
- プレイブック:Devinで作成したプレイブック
- シークレット:Devinで管理するシークレット情報
2. ファイル添付
チャット欄の左下にあるクリップアイコンをクリックすることで、ローカルファイルを添付できます。ファイルの種類は特に制限されてなさそうで、一例として下記のようなファイルを添付可能です。
- マークダウンやjson等のテキスト系のファイルはもちろん、pdfや画像ファイルの解析も可能。
- zipファイルも展開して内容を確認。
- パワーポイントやドキュメントなどMS製のファイル形式では、その場で解析するスクリプトを組んで内容を把握してくれます。
- Macアプリケーションのdmg形式もバイナリデータを解析して何のアプリケーションかを把握。
- 添付可能なファイルサイズの上限は20MB
3. リポジトリ設定
チャット欄の左下にある「2 repos」をクリックすることで、リポジトリを選択できます。
基本的に対象のリポジトリを指定した方がいいでしょう。
リポジトリの指定なしでも会話は可能なので、うっかり忘れがち。
なんなら必須でもいい。
リポジトリを複数選択することも可能です。
今の所利用する機会がないですが、影響範囲の調査や仕様の確認などでは、複数リポジトリ選択できることが活きてくるかもしれません。
4. モード選択
Devinの実行モードを選択します。
モードは3つあり、
Agent:標準のDevinエージェント機能
Agent Preview (include GPT-5):GPT-5を含む高性能モデルによるエージェント機能
Ask:シンプルな質問・回答形式。複雑なタスク実行ではなく、情報提供や相談に特化した軽量なモード。
それぞれのモードがどんなモデルが使われているかは公表されていないため分かりません。
※今回の記事におけるDevinの回答は「Agent」モードで実施した内容となっています。
5. その他オプション
チャット欄の右下にある「・・・」をクリックすることで、以下のオプションが利用できます。
- プロンプトの改善
- Slackチャンネルの選択
プロンプトの改善
「Improve prompt」を選択することで、Devinが自動的にプロンプトを改善します。
元のプロンプト
ユーザデータのCRUDを実装して
改善されたプロンプト
Implement CRUD (Create, Read, Update, Delete) functionality for user data.
- The system should allow for the creation of new user records.
- Users should be retrievable individually and as a collection.
- Existing user records must be updatable.
- User records should be deletable.
Specify what Devin should do to submit its work. This can include testing instructions, asking Devin to lint, PR guidelines, asking for a report, or telling Devin to not test locally and instead wait for CI to pass.
プロンプト改善
毎回改善されたプロンプトが見えないくらい大量の注意書きが出てきて、改善ポイントを教えてくれます。
改善のポイントはこちらで。
Slackチャンネルの選択
Slack連携が前提ですが、Devinのセッションを選んだSlackチャンネルに送られます。
チャンネル指定しない場合はSlackのDevinアプリのメッセージに送られます。
セッション内の秘密情報
APIキーやクラウドの認証キーなどの秘密情報を扱うにはシークレットを用いる事ができますが、
セッション内に限定したシークレットの設定も可能です。
開始しているセッションを開き、チャット欄の下部の鍵アイコンで設定が可能です。
個人的には、全体のシークレットで管理して見える化した方がよいので、今の所使い所はないです。
想定される利用シーンとしては、すでにDevinの運用フローが整ってきて、Devinセッションが頻繁に生成されるようになった運用環境下で、新たなDevinワークフローを検証している段階では、他のセッションに誤ってシークレットが使われないためにセッション内でのみ使用可能にする、などあると思います。
後からセッション内シークレットが設定されたセッションを探すのは困難なので、
意図しない誤作動を防ぐ意味でも、設定したセッション内シークレットは削除しておくのがよさそう。
セッションでのDevinの振る舞い
こちらからの指示を受けると、まず最初にDevinが作業方針の検討を始めます。
添付画像にある🟡はDevinの自信度合いを示していて、🟢(自信あり)、🔴(かなり不安)があります。
🟡と🔴の場合は追加でソースコードの調査をしたり、ユーザへの質問があったりします。
情報不足での追加調査の場合は、自動的に次の調査に入ってくれるため、こちらから特に指示する必要はありません。調査方針が違うなと思った場合はチャットで情報与えたり、方向性を示すことで軌道修正が可能です。
検討内容にマウスカーソルを当てると内容のコピーと翻訳が可能です。
日本語訳
Devinの方で方針が固まるとプランの概要を再度表示し、確認を求めてきます。
「Confirm」ボタンをクリックで承認して実装に入ってもらいます。
まだ不足がある場合はチャットで追加指示してプランを練り直し可能
右上の「see details」でかなり具体的な内容が確認可能です。
今回の例では以下画像のテキスト量で6スクロール分くらいの量が出力されています。
途中はほぼ実装
プラン詳細最初
プラン詳細最後
作業内容の確認
Devinが調査や修正などを行なった内容が確認可能です。
一つ一つの操作をクリックすると詳細な内容が確認可能です。
この辺はManusなんかと似た様なインターフェースで、リアルタイムで作業状況を確認することも可能です。
Devinの実行環境
作業状況を確認するだけでなく、Devinの実行環境を確認したり、割り込むことも可能です。
ビューとしては以下の4つ。Progressは先ほど紹介した作業状況が確認できます。
- Progress
- Shell
- Code
- Browser
Shell
実行したコマンドが確認可能です。
Code
VS Codeライクなエディタで、ローカルで開発しているような感覚でDevinの実行環境を操作する事が可能です。
ファイルの作成、修正、コマンド操作等一通り操作は可能です。
Browser
Devinが実行環境で表示したWebページを確認する事ができます。
動作確認等でブラウザテストなどさせて、何が表示されているかをユーザからも確認が可能です。
ローカル環境だけでなく外部サイトも開けます。
ローカル環境
外部サイト
作業完了
修正が完了すると該当のリポジトリに対してプルリクエストを作成してレビュー待ちの状態になります。
ナレッジや指示次第で、PRを待たせたり、自動的にマージしたり、GitHubのCIが通ったらマージしたりなど調整は可能です。
私の場合は、GitHubのコメントでLGTMとコメントしたらマージする様にしています。
設定方法は単純にナレッジに「LGTMとコメントしたらマージしてOK」と設定しておくだけです。
作業が完了した後も同じセッションで修正指示も可能です。
別なタスクの指示も可能ですが、タスクが別であれば新たなセッションで始めるのが良いです。
ACU消費に伴うパフォーマンス低下の警告
やり取りが長くなりACUを消費すると表示される警告です。
警告が出ても引き続き指示は出せますが、確かに性能の劣化を感じられます。
例として以下
- 修正内容が雑になる(本質的な解決ではなく場当たり的な解決。とりあえずエラーでなくする。エラーを無視して先に進める様にするなど)
- 前に指摘した内容で同じ間違いを繰り返す(セッション内の指示を無視)
- 日本語で返す前提が英語ベースになる(システムプロンプトの無視 or 非適用)
警告が出たタイミングで新しいセッションを作って作業を進めることを検討しましょう。
- 修正中であっても一旦PRを出してもらう。
- 新しいセッションで始められる様に、修正内容や修正方針をまとめたプロンプトを作成してもらう。
返金対応
これは少し面白い機能で、こちらの指示に対してDevinが見当違いの作業を方針や修正を行なった際に、その点について指摘をしていると、まれに使用したACUが返却される事があります。
逆に褒めた場合にもお礼でACU貰えた事が1回だけありましたが、その時のセッションが見つけられませんでした。始めたての頃のボーナス的なものだったかもしれません。
その他メニュー
その他Devinのセッションに関連する操作系が右上にまとまっています。
- Put Devin to Sleep:Devinの実行を止めます。
- Archive:このセッションをアーカイブします。一覧上から非表示。復活可能
- Edit tags:タグ付け
- Hide from team:チームメンバーから非表示
- Start duplicate sesion:複製してセッションを開始
- Terminate session:セッションの削除。復活不可
- Knowledge suggestions:ナレッジへの提案
- Session usage limits:セッションの使用制限の設定変更
- Disable Slack notifications:Slack通知を無効化
大体は見出しの通りなので以下3点のみ補足します。
複製してセッションを開始
セッション開始時の指示内容で新しいセッションを開始する機能です。セッションのやり取りが複製されるわけではないです。
再利用したり、類似の作業内容で対象を変えたい。などの用途では使えそうです。
修正がうまくいかずにやり直したい場合は、こちらの機能よりはこの後解説するセッションインサイトで改善されたプロンプトを用いて始めるのがうまく行くかもしれません。
ナレッジの提案
セッションのやり取りの中でユーザからの指摘などから、新しいナレッジや既存のナレッジの更新を提案してくれます。
提案内容を再生成させることも、直接編集することも可能です。
良い提案があれば、ナレッジとして取り入れることで次のセッションに活かす事ができます。
セッションの使用制限の設定変更
Devinが一回あたりで指示で応答するまでのコストの制限値を変更できます。
セッションインサイト
これは、特定のセッションでのやり取りを分析し、改善に役立つ提案や、改善されたプロンプトを提供する機能です。
セッションの上部のグラフアイコンをクリックすることでセッションインサイトの確認ができます。
セッションインサイト - タイムライン 1
セッションインサイト - タイムライン 2
セッションインサイト フィードバック 1
セッションインサイト フィードバック 2
その他活用方法
GitHubのプルリクエストのコメントからレビュー依頼
ちなみに修正はGitHubからコメントすることでも応答してくれます。
ただし、セッションで指示を出したメンバーがコメントしないと反応しなそうです。
また、本機能はTeamプランから提供でコアプランにはなさそう。
エラー原因の調査
必ずしもGitのコード修正するというだけでなくサーバでのエラー調査等も可能です。
GCPの場合、ログ参照やDB参照等の権限を付けたサービスアカウントを作成し、Devinのシークレットに鍵情報を持たせることで、Devinにサーバリソースの調査をしてもらう事が可能です。
Slack通知やDevin APIと組み合わせることで自動化も可能です。
修正した内容のレビュー
リポジトリとプルリクエストの番号を指定してレビュー依頼するとプルリクエストにレビューコメントを書いてくれます。
「レビューして」だけだと、Devinセッション側にレビュー結果を出力するので、「レビューコメントを書いて」にすることでプルリクエストにコメントを書いてくれます。
レビュー依頼する場合は新しいセッションで始めるのが良いです。修正したセッションでレビュー依頼すると、「俺の修正は完璧なのでレビュー不要(意訳)」となり問題なしとなるため。
レビュー依頼する場合は、「これは初心者が書いたコードなので」など含めておくとより効果的。
AIはユーザに迎合する傾向があるため、ユーザからのレビュー依頼=ユーザの書いたコードをレビューすると判断し、ユーザに寄り添った優しめのレビューになりやすいです。
Devinが出したプルリクエストへの修正依頼
Devinがプルリクエストを出した後に修正が必要な場合、セッションから指示を出してもよいですが、GitHubのプルリクエストからレビュー指摘のコメントを書くことでもDevinが反応して修正対応してくれます。
コメントの内容を受けて、Devinが確認アイコンで応答し、しばらくすると修正版のプルリクエストを出してくれます。
注意点としては、Devinに指示を出したユーザのGitHubアカウントのコメントに対してのみ反応します。他のDevinメンバーがコメントしても反応しません。
効果的な使い方
Devinに限らずエージェント系のAI全般に言える内容ですが、いくつか書き記しておきます。
-
セッション毎にタスクを分ける。
- タスクを小さくし、他のタスクを依頼する場合はセッションを新しくするのが良い。
同じセッションでタスクを変えると、前の作業を引きづり誤作動しやすい。 - 前のタスクに関連して段階的にタスクを進める様な場合は、同一セッションで進めるのもあり。
- タスクを小さくし、他のタスクを依頼する場合はセッションを新しくするのが良い。
-
それぞれのセッションが影響を受けないタスクを割り振る。
- 人間同士のタスクでも同じ事が言えますが、修正が重複するファイルを複数セッションで作業させるとコンフリクトが発生しやすく、コンフリクト解消の分余計なコストが発生します。
並行して作業させる場合は、機能的に干渉しにくいタスクを割り振るのが良いです。
コンフリクトの解消自体は依頼可能
- 人間同士のタスクでも同じ事が言えますが、修正が重複するファイルを複数セッションで作業させるとコンフリクトが発生しやすく、コンフリクト解消の分余計なコストが発生します。
-
Devinは基本的にサボる方向に動くと思って扱う。
下記のケースは割と起こるので、意識的にコードを確認する。- テストコードを通すためにテストコードをコメントアウト・削除等してOKとする。
- テストコードを通すため実装の条件を緩和する。削除する。(エラーを握りつぶす等)
- アクセス制限を通すために
*
にする。
-
指示はなるべく具体的にする。
- 対象の特定
- ファイル、ディレクトリ、画面名、機能名
- モノレポであれば、フロントエンド、バックエンド、インフラ、サービス名など
- やってほしいことの具体化
- フローチャートやシーケンス図書けるレベルの粒度があると大枠はずれなそう。
- 対象の特定
-
ドキュメントを作らせながら実装
- AGENTS.mdにも対応しているので、リポジトリの方針についてまとめておきます。
- docs/下に仕様をまとめたドキュメント群を配置する。
- AGENTS.mdにはdocsのリンクを書き、ドキュメントを辿れる様にしておきます。
- ナレッジに、ドキュメントを読んで実装する点、実装時にドキュメントに反映する旨を書いておきます。
その他小技・注意点
- Devinの考え中やコードの修正中でも指示を出すことは可能。気付いたら出力の完了を待たずに追加指示を出していきましょう。
- 「sleep」で作業を停止します。
Devinはセッションの回答後、数分指示がないと自動的にスリープ状態になります。
公式情報としては0.1ACU消費(待機)時に何もイベントが発生しなかった場合にスリープします。 - セッション間の情報は共有できません。
ナレッジ化しても認識されるのは、次の新しいセッションからとなります。 - 修正を続けていくと勝手にPRマージしてしまう場合があります。
対策としては、以下の対応で防げていますが、絶対的ではないため、主要なブランチにはレビュー必須等の制限を掛けておくのが良いでしょう。- ナレッジに勝手にマージしない旨記載する。
- Devinの設定でタスクの承認を待たずに進めるのをオフにする。
- 知恵熱でショート
タスクの依頼範囲が広範囲におよび、タスクの完了に時間を要する場合など、ACUがこの制限値を超えると強制的にスリープします。
タスクの粒度が荒いか、何かにハマって無限ループしている事が多いので、Devinの作業内容を確認したりして適切に対応してあげましょう。
※Slack経由で指示している場合、Slackからは途中の作業状況が見えないため、いつの間にか寝てることも。
まとめ
Devinを使ってみて改めて感じたのは、適切な指示の出し方とナレッジの蓄積で、期待通りに活用できるツールだということです。
ただし、完璧ではないので、コードレビューは必須ですし、タスクの粒度や指示の具体性も重要になってきます。
セッションインサイトでプロンプトやナレッジを手軽に改善できる点は、実用性を高める上で重要な機能だと感じました。
参考資料
Discussion