> ## Documentation Index
> Fetch the complete documentation index at: https://docs.devin.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# API 連携

> Devin は、アプリケーション内でサードパーティ API の統合、設定、テストを行えます。

<div id="integrating-sendgrid-into-an-application">
  # アプリケーションへの SendGrid の統合
</div>

サンプルアプリケーションは、Python 製 Web フレームワークである Django で作成されたオンライン教育プラットフォームです。最近、このアプリケーションに SendGrid のメール API を統合するための [PR](https://github.com/uncc-hice/edukona_backend/pull/47) (プルリクエスト) が作成されました。このチュートリアルでは、Devin による SendGrid 実装を一から行い、その過程を通じてサードパーティ API とどのように連携できるかを紹介します。

<div id="initial-prompt">
  #### 初期プロンプト
</div>

プロンプトの中で、SendGrid のフックを Devin にどのように、どこに統合してほしいかを具体的に指示し、上記の PR がマージされる前のコミットハッシュまで Devin に戻させて、統合作業用のクリーンな開始地点を用意します。ライブの Devin セッションは[こちら](https://app.devin.ai/sessions/05d9bf38b65d4aa9a16a5c16c8b5fc5e)から確認できます。

<Frame>
  ![Devin](https://cdn.sanity.io/images/2mc9cv2v/production/01469dde6757a54d39579647204db2d8ad316b75-1334x536.png)
</Frame>

Devin はコードベースを調査し、アプリケーション内に既存のメール送信機能との競合がないことを確認します。

<Frame>
  ![Devin](https://cdn.sanity.io/images/2mc9cv2v/production/daa91bce25d55187d9f637c3e195c65650eb9128-1256x592.png)
</Frame>

<div id="implementing-sendgrid">
  #### SendGrid の実装
</div>

次に SendGrid API の実装に進み、API クレデンシャルの入力を求めてきます。これらは Devin の環境内で [Secrets](/ja/product-guides/secrets) として設定しておくことで、以後は ENV 変数としてアクセスできるようになります。

<Frame>
  ![Devin](https://cdn.sanity.io/images/2mc9cv2v/production/1dc4794dca5a5eec9632fa106930b4ba623449f7-1310x1622.png)
</Frame>

適切な API クレデンシャルが設定できたので、Devin は SendGrid の実装を完了します。

<Frame>
  ![Devin](https://cdn.sanity.io/images/2mc9cv2v/production/101faac5f7d36b18c622cef27a9f700f4a22547f-1294x1634.png)
</Frame>

ドキュメントの冒頭で参照した、実際にマージされた PR と Devin の SendGrid 実装を比較すると、いくつか顕著な改善点が見られます。

* Devin は SendGrid をビューと同じファイルではなく、新しい email.py モジュール内で設定しています。また、SendGrid のレスポンスコードに基づいてメール送信が成功したかどうかを示すために True または False を返します。
* Devin は print ではなく Python の組み込み logging モジュールを使っています (これは PR レビュアーが特にコメントしていたパターンです) 。
* Devin は From メールアドレスをハードコードするのではなく設定可能にしつつ、ENV 変数が存在しない場合のデフォルト値も追加しています。
* Devin は mailInstructor メソッドに例外処理を追加しています。

コアとなる実装が完了したので、自分のメールアドレスで instructor アカウントを追加することでアプリケーションのテストを Devin に依頼できます。アプリケーションをテストするために、PostgreSQL サーバーや関連する Python ライブラリなど、すべての依存関係のインストールと設定も行う必要があります。

<Frame>
  ![Devin](https://cdn.sanity.io/images/2mc9cv2v/production/162781b998d454f43ffb8ff226a8f7b50568800e-1282x796.png)
</Frame>

<div id="debugging">
  #### デバッグ
</div>

Devin はすぐにエラーになります。これは、私が SendGrid アカウント用の FROM アドレスを一度も指定していなかったためです。Devin は実際に [Browser](/ja/work-with-devin/devin-session-tools#interactive-browser) で API ドキュメントを開き、ここで何が起きているのかを確認し、エラーメッセージや実装のベストプラクティスを把握します。

<Frame>
  ![Devin](https://cdn.sanity.io/images/2mc9cv2v/production/808fb112960206f72c6f451ad12a89c1dea709bd-1308x1062.png)
</Frame>

私は Secrets ダイアログに戻り、Devin が参照できるように SENDGRID\_FROM\_EMAIL 変数を追加します。

<Frame>
  ![Devin](https://cdn.sanity.io/images/2mc9cv2v/production/7c0db2df23075a74594b00fd254f27c7745bf2a2-1520x744.png)
</Frame>

また、API 用のサブアカウントを設定していないため、デフォルトの SendGrid ユーザー名「apikey」を使用するよう Devin に指示します。

<Frame>
  ![Devin](https://cdn.sanity.io/images/2mc9cv2v/production/77939146f2fd5baba1ac90ecac5111e4901db2b3-1312x1394.png)
</Frame>

<div id="adding-knowledge">
  #### Knowledge の追加
</div>

Devin は、私のリクエストや実装要件が汎用化できると判断し、今後利用できるようにするために [Knowledge](/ja/product-guides/knowledge#what-is-knowledge) を追加するよう提案します。

<Frame>
  ![Devin](https://cdn.sanity.io/images/2mc9cv2v/production/528762e066c609f5c408fcb4a55eadead2b59d0e-2522x828.png)
</Frame>

必要に応じて、今後チームが実施するセッションでこれらの手法が有用になる場合に備え、さらに具体的な内容を追加するよう Knowledge を編集することもできます。

<div id="testing">
  #### テスト
</div>

<Frame>
  ![Devin](https://cdn.sanity.io/images/2mc9cv2v/production/4d8fcae26a4eb91b734d53ec23e09a0aaca31f51-1346x1312.png)
</Frame>

環境設定とセットアップを数分行うと、Devin は正常にセッションを完了し、受信トレイにメールが届きます。今回は SendGrid のテンプレートに実際の内容は設定していませんが、API リクエストは正常に動作しているので、これで Devin の作業は完了です。

<Frame>
  ![Devin](https://cdn.sanity.io/images/2mc9cv2v/production/36f648f15ccc4fc49c89ec2d9e6de8ace491ff2e-1406x882.png)
</Frame>

PR を送信する場合、Devin はアプリケーションに加えたすべての変更内容とその仕組みの詳細を含むメッセージ案を、すでに作成してくれています。

<Frame>
  ![Devin](https://cdn.sanity.io/images/2mc9cv2v/production/1a3375d78dce3cb1122332bd8566041946a73791-2206x1094.png)
</Frame>

今すぐサインアップして[Devin をお試し](https://cognition.com/get-started#company)いただき、チームのバックログで長らく懸案になっている API 連携に取り組んでみてください。
