見出し画像

Einstein for Developers を使ってみよう!

こんにちは、co-meetingの町田です。
今回は Salesforce が提供している コーディング支援ツールの Einstein for Developers (Beta) を使ってみようということで、色々調べてみました。
※ この記事は ゆるっとSalesforceトーク #36 Einstein for Developers で発表した内容となっています。


まずは、Einstein for Developersの概要を確認してみます。

Einstein for Developersとは

 ChatGPTのような自然言語で対話できる生成AIがコーディング支援を行うツールです。
Winter '24リリースのタイミングでオープンベータとなり、誰でも使えるようになりました。
Einstein for Developers is Now in Open Beta | Salesforce Developers Blog

公式ページの概要には以下のように書かれています。

Einstein for Developers is an AI-powered developer tool that’s available as an easy-to-install Visual Studio Code extension built using CodeGen, the secure, custom AI model from Salesforce. The extension is available in the VS Code marketplace and the Open VSX registry. Note that the extension does not use customer data to train our LLM.

// DeepL翻訳
Einstein for Developersは、SalesforceのセキュアなカスタムAIモデルであるCodeGenを使用して構築された、簡単にインストールできるVisual Studio Code拡張機能として利用可能な、AIを搭載した開発者ツールです。この拡張機能は、VS CodeマーケットプレイスとOpen VSXレジストリで入手できます。なお、この拡張機能では、LLMの学習に顧客データは使用されません。

Einstein for Developers (Beta) | Salesforce for VSCode

Einstein for Developers は Salesforce が構築したLLMの CodeGen2.5 が、コーディング支援を行ってくれる拡張機能となっています。
CodeGen2.5は、プロジェクトのソースコードを学習することが可能なため、各プロジェクトに合わせたコードを生成することができます。
また、以下の規約に他の Einstein for Developers ユーザーに共有されないことが明記されています。

Submitted Code will not be shared with any parties other than Salesforce or used to improve Einstein for Developers or train a global model.

// DeepL翻訳
提出されたコードは、Salesforce 以外のいかなる当事者とも共有されず、開発者向け Einstein の改善やグローバルモデルのトレーニングに使用されることはありません。

Additional Terms of Use for the Einstein for Developers Extensions (Beta)

次に、スクラッチ組織で使用するためのセットアップ手順を紹介します。

スクラッチ組織向けセットアップ手順

こちらは VSCode でスクラッチ組織を使った開発を行うためのセットアップ手順となっています。
本家の Einstein for Developers Setup | Salesforce for VSCode を参考にしています。
SFDXプロジェクトがない場合は、Salesforce DX プロジェクトの作成 を参考に SFDXプロジェクトを作成してください。

まずはセットアップ前に確認する項目です。

セットアップ前に確認する項目

以下3点となります。

  • DevHub組織は Developer,Enterprise,Partner Developer,Performance, Unlimited のいずれかのエディションであること

  • DevHub組織の拡張ドメインが有効であること

  • Visual Studio Code のバージョンが 1.82.0 以上であること

すべての項目を満たしていることを確認できたら、スクラッチ組織の定義ファイルを編集します。

スクラッチ組織の定義ファイルを編集する

Salesforce DX プロジェクト作成後、config/project-scratch-def.json の features EinsteinGPTForDevelopers を追加します。

// config/project-scratch-def.json
{
  "orgName": "mcho company",
  "edition": "Developer",
  "features": ["EinsteinGPTForDevelopers"],
}

スクラッチ組織を作成し、デフォルト組織に設定

追加できたらスクラッチ組織を作成し、デフォルト組織に設定します。
スクラッチ組織のエディションは Developer, Enterprise である必要があります。

sf org create scratch -e {enterprise|developer} -a {ALIAS} -v {DEVHUB_ORG_NAME} -d

次にVSCodeのセットアップです。

VSCode に Einstein for Developers をインストール

Einstein for Developers (Beta) をインストールします。
単体でインストールも可能ですが、Salesforceの拡張機能をまとめた Salesforce Extension Pack (Expanded) に同梱されているのでこちらがおすすめです。

Einstein for Developers を有効化

Einstein for Developers のインストールが完了すると、ステータスバーにアイコンが表示されます。

Einstein for Developersのアイコン(赤丸)

こちらをクリックすると、ドロップダウンが表示されます。その後下記画像と同様になるようクリックし設定します。

適当なApexファイルを開き、コードをタイプすると、ステータスバーのアイコンにスピナー及びチェックマークが表示され、コードがサジェストされます。

サジェスト完了後にチェックマークが表示される。
サジェストされたコード

以上でスクラッチ組織とVSCodeで開発を行う際に、Einstein for Developersを使えるようになりました。

次にどんな機能があるのか紹介します。

Einstein for Developersの機能

自然言語によるコード生成

Natural Language to Code Generation | Salesforce for VSCode

自然言語を入力することでコードを生成してくれます。
サイドバーの Einstein アイコンなどから入力画面を開き、プロンプトを入力することで使用できます。

自然言語によるコード生成

インラインの自動補完

Automatic Inline Completions | Salesforce for VSCode

コード入力中に、自動で候補をサジェストしてくれます。
有効化の手順などは「Einstein for Developers を有効化」を参照してください。

サジェストされたコード

テストコードの生成

Test Case Generation | Salesforce for VSCode

※ Apexファイルのみで使用できます。
"Einstein: Generate a Test" コマンドを実行することでテストファイルやテストメソッドが生成できます。

// 実際に生成されたテストコード
@isTest
private class CopipeLabControllerTest {
  @isTest
  static void testGetRecords() {
    User adminUser = createAdminUser();
    System.runAs(adminUser) {
      // Create test data
      List<CopipeLab__c> testRecords = new List<CopipeLab__c>();
      testRecords.add(new CopipeLab__c(Name = 'Test Record 1'));
      testRecords.add(new CopipeLab__c(Name = 'Test Record 2'));
      insert testRecords;

      // Perform test
      Test.startTest();
      List<CopipeLab__c> result = CopipeLabController.getRecords();
      Test.stopTest();

      // Assertions
      System.assertEquals(2, result.size(), 'Unexpected number of records');
      System.assertEquals(
        'Test Record 1',
        result[0].Name,
        'Incorrect record name'
      );
      System.assertEquals(
        'Test Record 2',
        result[1].Name,
        'Incorrect record name'
      );
    }
  }
}

プロンプト履歴の表示

"Einstein: Show Prompt History" コマンドなどで開けます。
こちらには自然言語によるコード生成とテストコードの生成の履歴が表示されます。

プロンプト履歴

以上が主要な機能となっています。

最後に、Tipsです。

Tips

"SFDX: SObject 定義を更新" を行うとカスタムオブジェクトの情報を認識してくれる

使い始めは、"TestObject__cのモックデータをすべてのフィールドに値を設定して作って" とプロンプトに送信しても、デタラメなモックデータが作成され使い物になりませんでした。
しかし、VSCode のコマンドパレットから "SFDX: SObject 定義を更新" を実行したところ、それぞれのフィールドの型に合わせた値でモックデータを作成するコードを生成してくれました。

// Propmt
TestObject__cのモックデータをすべてのフィールドに値を設定して作って

// 出力例
@isTest
public class cuhacker_TestDataFactory {
    public static TestObject__c createTestData() {
        TestObject__c testData = new TestObject__c(
            Name = 'Test',
            Field1__c = 'Value of Field1__c',
            Field2__c = true,
            Field3__c = 100.25,
            Field4__c = System.today().addDays(1)
        );
        return testData;
    }
}

終わりに

そのまま使えるコードはなかなか生成されませんが、SObjectレコードのオブジェクトAPI名を取得したい、等のApex特有のコードを手軽に生成できるのは便利だと思いました。
今後のアップデートに期待です!

この記事が気に入ったらサポートをしてみませんか?