こんにちは!サースプラスカンパニーの野村です!
新年度が始まり、所々で桜が咲き始めたらしいのでお花見にでも行きたいところですが、僕は虫が苦手なのでレジャーシートにそれなりのサイズの虫がいたら即帰路についてしまいそうです。
今回はSalesforce開発における「SFDX」という概念の中の仕組みのひとつであるSalesforce CLIを使って簡単な機能を開発してみたいと思います。
目次
0.SFDXってなぁに?
Salesforce DX(Developer Experience)の略称で、ソースコードの管理をできるようにしたり、コード補完などをしてくれる開発ツールを提供したりCI/CDを実現したり…そういったモダンな開発環境を構築できる機能群や手法を総称してこう呼ぶようです。
従来のSalesforceの開発ってシンプルにいうと「Salesforce上でwebから設定を変える→テスト→変更セット作って本番環境へリリース」みたいなイメージが多いかと思います。 これを「変更セット開発モデル」と呼称します。
そんな中で
変更セット作成時に項目の取り込み漏れによるリリースミスが発生しがち
Apexの開発するのはいいんだけど、都度テストを手動で走らせるの面倒
それなりに開発が複雑化してくると、こんな悩みを抱えることってないでしょうか?
Salesforce DXにおいては、そういった問題を改善し得るツールの提供や、ツールを用いた運用改善における方法論が用意されています。
今回使用するSalesforce CLIは、そんなツールの一部という位置づけです。
前置きはここまでにして、さっそく使ってみましょう。
当記事では、「時間帯に応じて挨拶文を表示するLWC」を実装&デプロイし、Salesforceのホーム画面へ表示させるところまでをSalesforce CLIの機能を用いて実現します。
Salesforce CLIの導入と、それを用いての開発の流れを追うことを主題として据えるため、他要素はなるべくシンプルにします。
1.Salesforce CLIの導入
インストーラから入れるか、Node.jsが入っていればコマンドから入れるという選択肢があります。
今回は後者で実施します。Node.jsが導入されている前提で、以下のコマンドを実行します。
npm install sfdx-cli --global
インストール後、sfdx --version を実行し、バージョン情報が表示されればインストール成功です。
2.プロジェクト作成~スクラッチ組織の作成
2-1 Salesforceプロジェクトの作成
Salesforce CLIの導入を行い、コマンドが使えるようになりました。
さっそくサンプルの実装を…行いたいのですが、その前段階の作業として、Salesforceのプロジェクトを作成します。
任意のディレクトリにて以下のコマンドを実行し、GreetingComponentプロジェクトを作成します。
sfdx force:project:create -n GreetingComponent
成功するとプロジェクトを構成するデフォルトファイルが生成されプロジェクト作成が完了
します。やったー。
2-2 DevHub組織の設定
今回の開発では「スクラッチ組織」という組織を作成し、そこに開発したモジュールをデプロイし、動作を確認します。
聞きなれない単語かと思いますが、これは開発用に簡単に生成・破棄ができる小さなSalesforce組織のことです。個々の開発者用の専用開発環境(組織)というイメージです。
例えば、何か機能開発を行うにしても、組織をチームで共用している場合は色々不都合が発生するかと思います。
このスクラッチ組織を利用すれば開発担当個人が各々で生成できるため、他人のリソースを汚さないで自分の開発ができます。
このスクラッチ組織を作成するには、前準備としてSalesforce上の任意の組織のDev Hubの設定を有効化し、Salesforce CLI経由でログインしておく必要があります。
今回はハンズオン組織で検証しました。
設定画面から検索欄に「Dev Hub」と入力した上で検索し、表示される以下の画面から「Dev Hubを有効化」のスライドボタンにて有効化します。
次に、以下のコマンドでDeb Hub組織へのログインを行います。-dオプションでデフォルトのDev Hub組織として設定し、-aオプションにてエイリアスとして「DevHub」を設定します。
sfdx auth:web:login -d -a DevHub
するとブラウザ経由でユーザ名、パスワードの入力が求められるので、Dev Hub設定を有効化した組織のユーザーID、パスワードを入力しログインします。
ログインに成功すると、ターミナルに以下のように表示されます。
これにより、スクラッチ組織の作成権限を得ることができます。
2-3.スクラッチ組織の作成
次にスクラッチ組織の作成を行います。
その前段階として、先ほどプロジェクトを作成した際に生成された「config/project-scratch-def.json」を編集し、スクラッチ組織名を変更しておきます。
このファイルにはスクラッチ組織の初期設定が記載されています。
今回は組織名(orgName)をデフォルト値から「GreetingComponentOrg」に変更します。
編集が完了したら、GreetingComponentディレクトリに移動し、以下のコマンドでスクラッチ組織を作成しましょう。
オプション-aを用いて組織名と同じ「GreetingComponentOrg」をエイリアスとして設定します。
sfdx force:org:create -s -f config/project-scratch-def.json -a GreetingComponentOrg
これでDevHub組織の下にGreetingComponentOrgというスクラッチ組織が作成されました。
デフォルトだとスクラッチ組織の寿命は7日間です。
--durationdayオプションで1~30日から選択することができます。
以下のコマンドで認証済みの組織を確認することができます。
sfdx force:org:list --verbose --all
ここまでの作業で作成したDevHub組織と、そこにぶら下げたスクラッチ組織の情報を確認することができました。やったー。
2-4 スクラッチ組織のユーザ設定
スクラッチ組織は作成した時点でシステム管理者アカウントが用意されています。 2-3で確認したスクラッチ組織の情報に「USERNAME」としてユーザ名が表示されているので、それをもってユーザ情報を確認します。
sfdx force:user:display --targetusername ユーザ名
以下のコマンドにて、このユーザの初期パスワードを設定します。
sfdx force:user:password:generate --targetusername ユーザ名
上記の赤く塗りつぶされた箇所にパスワードが出力されます。
これでスクラッチ組織にログインできるようになりました!
以下のコマンドからさっそくログインしてみましょう。
sfdx force:auth:web:login -r https://test.salesforce.com
コマンドを実行するとブラウザ経由で組織へのログインを促されます。
ユーザIDと、先ほど出力したパスワードを入力してログインしてください。
その後、登録されているご自身のメールアドレスへ送付された認証コードの入力を促され、
最後に初回ログイン時はSalesforce CLIへのアクセス許可を求められるので「許可」ボタンを押して許可します。
すると、スクラッチ組織へログインできます。
自分だけの開発組織です^^
3.ソース実装-デプロイ-動作確認
3-1 ソース生成+実装
前準備が長かったですが、開発環境が整ったのでようやく実装に移ります。
以下のコマンドでLWCのひな型を作成します。GreetingComponentという名前で作成します。
sfdx force:lightning:component:create --type lwc -n greetingComponent -d force-app/main/default/lwc
LWCを構成するhtml、javascript、xmlが作成されました。
それぞれ以下のように実装します。(大した内容ではないのと、LWCの説明まですると長くなってしまうのでコードの細かな説明は割愛します。)
greetingComponent.html
<template>
<lightning-cardtitle="greetingComponet">
{greetingMessage}
</lightning-card>
</template>
greetingComponent.js
import { LightningElement, track } from 'lwc';
import getGreetingMessage from '@salesforce/apex/GreetingComponentController.getGreetingMessage'
export default class GreetingComponent extends LightningElement {
greetingMessage;
connectedCallback() {
getGreetingMessage().then((result) => {
this.greetingMessage = result;
})
}
}
greetingComponent.js-meta.xml
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
<apiVersion>54.0</apiVersion>
<isExposed>true</isExposed>
<masterLabel>greetingComponent</masterLabel>
<targets>
<target>lightning__HomePage</target>
</targets>
</LightningComponentBundle>
greetingComponent.jsよりApexのコントローラを呼んでいます。
続いてそのコントローラーの実装を行っていきます。
greetingComponentで表示する「あいさつ文 + ユーザ名」返すメソッドを持っただけの単純なコントローラクラスです。
以下のコマンドでApexクラスを生成します。
sfdx force:apex:class:create -n GreetingComponentController -d force-app/main/default/classes
GreetingComponentController.cls
public with sharing class GreetingComponentController {
@AuraEnabled(cacheable=true)
public static String getGreetingMessage() {
// 現在時刻を取得
Datetime currentDatetime = Datetime.now();
Integer currentHour = currentDatetime.hour();
String greetings;
if (5 <= currentHour && currentHour <= 11) {
greetings = 'おはようございます!';
} else if (12 <= currentHour && currentHour <= 17) {
greetings = 'こんにちは!';
} else {
greetings = 'こんばんは!';
}
return greetings + ' ' + UserInfo.getLastName() + ' ' + UserInfo.getFirstName();
}
}
GreetingComponentController.cls-meta.xml
<?xml version="1.0" encoding="UTF-8"?>
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
<apiVersion>54.0</apiVersion>
<status>Active</status>
</ApexClass>
3-2 デプロイ
ここまで来たら後はデプロイです!
Apexのデプロイ
sfdx force:source:deploy -m ApexClass -u ユーザ名
LWCのデプロイ
sfdx force:source:deploy -m LightningComponentBundle -u ユーザ名
成功しました^^ ここでコードエラーなどがあればエラーとなりデプロイが失敗します。 そういった場合はコードを見直してリトライします。
デプロイしたリソースをスクラッチ組織から確認してみましょう。
Apex
LWC
それぞれスクラッチ組織に反映されてることが確認できました。
3-3 動作確認
作成したGreetingComponentをスクラッチ組織のホームページに表示します。
問題なく動作しているのが確認できました。
まとめ
今回はSalesforce CLIの導入~リソースのデプロイまでの一連の流れを簡単に確認しました。
やや駆け足になりましたが、体系的に知りたい方はTrailheadでハンズオン形式で学べるので色々触ってみてください!
今回触れた以外箇所以外にも、テストコードを実行したり、データ操作、メタデータの取得・反映など、様々なことがコマンドラインから実行可能になっています。
リソースとしてファイルをコマンド操作で簡単に取得できるようになったこともあり、git等でバージョン管理ができるようになったことや、Jenkins等と組み合わせてCI/CD環境を構築することも可能になっています。(それを手助けするサードパーティ製の製品などもあります)
コスト・時間とのトレードオフになる部分もありますが、なるべく属人的な作業を省いて効率化や運用の品質を上げる手段の1つとして覚えておくべきかと思います。
皆さんの日々のお仕事においても、煩雑に思えていたSalesforceの運用業務に改善の余地があるのではないでしょうか。
お伝えしきれなかったことも、公式サイト等でリファレンスが公開されておりますので、是非ご覧になってみてください。
ここまでご覧になっていただきありがとうございました!
また面白そうなものを見つけたら発信していきたいと思います!
Comments