みなさん、こんにちはCLBです。
今回は SFDX プロジェクトでフォルダ階層を分ける事が可能なのかどうか試してみました。
ネタバレ
できる。
事前準備
用意する開発ソフト・拡張パックは以下の通り。
- Visual Studio Code(VS Code)
- Salesforce Extension Pack
- Salesforce Developer Edition の組織。無い人はサインアップしてください。
プロジェクトの作成
- 適当な場所にフォルダを作成する。
- そのフォルダで
force:project:create
をしてプロジェクトを作る。 - 作成したプロジェクトのフォルダをVS Codeで開く。
細かい部分については、 https://base.terrasky.co.jp/articles/5f2tk 等を参考にしてみてください。
クラスを作る
- VS code でコマンドパレットを開いて、
>SFDX create apex class
を選択する。 - 作成するクラス名に適当な名前 (ClassFooとか) をつけて作成する。作成するフォルダに関してはデフォルト(
force-app/main/default/classes/ClassFoo.cls
)とする。 - そのあと、
classes
配下にfoo
フォルダを作成し、作成したクラスをそのフォルダに移動する。(force-app/main/default/classes/foo/ClassFoo.cls
)になる。 - 作成したクラスに適当なメソッドを作成する。
public with sharing class ClassFoo {
public ClassFoo() {
}
// 適当なメソッド
public void foo() {
System.debug('Hello');
}
}
デプロイしてみる
スクラッチ組織にデプロイしてみる。
時刻 sfdx force:source:push --json --loglevel fatal
時刻 sfdx force:source:push --json --loglevel fatal
が終了コード 0 で終了しました。
=== プッシュされたソース
STATE FULL NAME TYPE PROJECT PATH
───── ───────── ───────── ────────────────────────────────────────────────────────
Add ClassFoo ApexClass force-app/main/default/classes/foo/ClassFoo.cls
Add ClassFoo ApexClass force-app/main/default/classes/foo/ClassFoo.cls-meta.xml
問題無くできた。
スクラッチ組織の開発者コンソールから呼び出してみる。
ClassFoo foo = new ClassFoo();
foo.foo();
これも正常終了。
他のクラスからの呼び出し
さっきと同じ手順で force-app/main/default/classes/
に bar
フォルダを作成し、
ClassBar.cls
を作る。
そしてそのクラスから先ほど作った ClassFoo.cls
を呼び出すようにする。
こんな感じ
public with sharing class ClassBar {
public ClassBar() {
}
public void callFoo () {
ClassFoo foo = new ClassFoo();
foo.foo();
}
}
ClassBar.cls
をデプロイする。問題無くできた。
(デプロイ実行結果は省略)
スクラッチ組織の開発者コンソールから呼び出してみる。
ClassBar bar = new ClassBar();
bar.callFoo();
これも正常終了。問題なさそう。
結論
- フォルダを分割する事はできる。
- 他のフォルダクラスを呼び出す際にもフォルダ名をつける必要は無い。(つまりリファクタをする必要もない。)