Installing Apex Stem

•Apex Stem ドキュメント
Apex StemInstallationUnlocked PackageSalesforce
Two install paths for every framework: Unlocked Packages (framework tests excluded from RunLocalTests) and git submodules. Current versions and install IDs.

Apex Stem の各フレームワークは Unlocked Package(2GP、名前空間なし)と git submodule の2つの経路で導入できます。どちらも中身は同じソースです。プロジェクトごとに選べますし、org によって使い分けても問題ありません。

Which path should I take?

Unlocked Package(推奨)Git Submodule
向いている場面新規プロジェクト、本番 orgsubmodule 運用中の既存プロジェクト、コントリビュータ
デプロイ時のフレームワークテストRunLocalTests から除外。validate がフレームワークのテストを実行しない(=落ちない)ローカルテストとして毎回実行される
org のカバレッジ計算フレームワークのコードは計算から除外コードもテストも計算に含まれる
バージョンの可視性sf package installed list で正確なバージョンが見えるsubmodule の git タグを確認する
アップグレード次バージョンをインストールするだけ(上書き)git submodule update --remote
ディレクトリ階層retrieve 直後はフラット。npx apex-librarian arrange で復元できる(後述)submodule がそのまま保持する

パッケージ経路を用意した理由は、実レコードを作るフレームワークテスト(たとえば ApexBlueprint の結合テスト)が、org 固有の入力規則や必須項目と衝突しうるためです。パッケージとして導入すれば、それらのテストはあなたの org では一切実行されません。この失敗クラスが丸ごと消えます。

Current versions

FrameworkVersionInstall command
ApexEloquentv3.10.0sf package install -p 04tgK000000JQYHQA4 -o <your-org> -w 10
ApexBlueprintv2.1.0sf package install -p 04tgK000000HuDtQAK -o <your-org> -w 10
ApexTracev1.5.0sf package install -p 04tgK000000HuAfQAK -o <your-org> -w 10
ApexToolsv1.1.0sf package install -p 04tgK000000HuCHQA0 -o <your-org> -w 10

各フレームワークは完全に独立しています。インストール順の制約も相互依存もありません。必要なものだけ入れてください。

ブラウザからインストールする場合は https://login.salesforce.com/packaging/installPackage.apexp?p0=<install ID> を開きます(Sandbox は test.salesforce.com に読み替え)。過去バージョンの install ID は各リポジトリの GitHub Releases に載っています。

ApexEloquent / ApexBlueprint / ApexTrace / ApexTools

Git submodule

BASH
cd /path/to/your/project
git submodule add https://github.com/krile136/ApexEloquent.git  force-app/main/default/classes/ApexEloquent
git submodule add https://github.com/krile136/ApexBlueprint.git force-app/main/default/classes/ApexBlueprint
git submodule add https://github.com/krile136/ApexTrace.git     force-app/main/default/classes/ApexTrace
git submodule add https://github.com/krile136/ApexTools.git     force-app/main/default/classes/ApexTools
git submodule update --init --recursive

sf project deploy start -d force-app/main/default/classes/<Name> で通常のソースフォルダと同じようにデプロイできます。submodule を使うプロジェクトをクローンするときは git clone --recurse-submodules を忘れずに。

Restoring the directory layout

Salesforce の org には Apex クラスのフォルダという概念がありません。そのため、パッケージでインストールしたクラスを sf project retrieve で手元に取得すると、すべて classes/ 直下にフラットに落ちてきます。

上の表のバージョン (ApexEloquent v3.10.0 / ApexBlueprint v2.1.0 / ApexTrace v1.5.0 / ApexTools v1.1.0) 以降、全クラスが自分の置き場所を @directory doc コメントタグとして持っています。retrieve のあとに npm モジュール ApexLibrarian を 1 回実行するだけで、submodule 導入時と同一のディレクトリ階層に戻せます。

BASH
npx apex-librarian arrange

.cls-meta.xml も必ずペアで移動します。仕組みと他のコマンド (check / stamp) の説明もリンク先にまとめています。

Next steps