概要
SalesforceのAppExchangeアプリの開発時、スクラッチ組織へのソースプッシュ時に起こるIn field: apexClass - no ApexClass named HogeClass found
の対策方法
対象の読者の方は
- パッケージ開発をされている
- スクラッチ組織やxml形式のメタデータ、Gitの知識がある
- 上のエラーが出て困っている
以上です。よろしくお願いします。
エラーの経緯
結論を述べる前に経緯を書きます。
あるスクラッチ組織で開発をしていたのですが、30日の期限の中で開発が間に合わなかったので、ソースをブランチで管理したまま、スクラッチ組織を作り直そうと思いました。
プロファイルやカスタムオブジェクトなど、さまざまなメタデータの変更点はあったのですが、sfdx force:source:pull
を行い、基本的な変更点はバージョン管理してから作り直しました。
mainブランチのコードでスクラッチ組織を作り、ブランチを切り替えてからsfdx force:source:push
をしたところ、掲題のエラーが出たというわけです。
調べてみる
一度削除して該当クラスを作り直す方法と、設定>開発からコンパイルする方法がありましたが、そもそもスクラッチ組織にソースをプッシュできていないので、関係なさそうでした。
解決方法
アテをつけて色々やってみたところ、以下の方法で解決しました。
.forceignoreに以下のコードを追加
**/profiles/**
**/appMenus/AppSwitcher.appMenu-meta.xml
この状態でsfdx force:source:push
を実行。
その後、追加したコードを削除してsfdx force:source:push
を実行。
以上です。
考察
エラーの詳細を読むと、プロファイルとAppSwitcherが新規作成したApexクラスを探せていないようでした。
ここで、自分で当てをつけて「先にクラスプッシュすればいけるんじゃね…?」と思って試したらいけた感じです。
あくまで推測の域を出ませんが、コンパイルの順序を考えたときに、基本はプロファイルから行われるからこのようなことが起こるのかなーとか考えました。
また余裕がある時に調べてみます。
その他
Salesforceのパッケージ開発にご興味がある方は、採用やっているのでぜひ来てください!
Apexの経験やSalesforceの経験があれば嬉しいですが、Javaなどの経験でも大歓迎です!
カジュアル面談もやってるのでぜひ〜