みなさんこんにちは。Salesforce 中の人、マスコット担当しょっさんです。
本日Perfumeはかしゆかのお誕生日です。ゆかちゃん誕生日おめでとう (∩´∀`)∩ワーイ
今年もゆかちゃんの誕生日をお祝いして、Advent Calendarを記していきます。
今年は久しぶりにゆかちゃんプログラムを作ります。そして、誰でも Lightning Web Component が作れるよう、その開発プロセスをじっくりと示していきます。画像豊富です。安心してください。
前提条件
- Visual Studio Code をインストールしている
- Salesforce CLI をインストールしている
- VS Code 向け Salesforce 拡張機能のインストール が完了していること
準備が良ければ、Visual Studio Code(以下 VSCode) を起動しましょう。
Salesforce DX プロジェクトを作ろう
Lightning Web Component を開発するには、Salesforce DX プロジェクトを作成する必要があります。安心してください。画像たんまりで進めていきます。
プロジェクトディレクトリを作成する
VSCodeのコマンドパレット
を出しましょう。Macだと⌘+⇧+P
で出現します。スゴイ。
パレットが表示されたら、おもむろに sfdx
と打ってみましょう。きっと上位にSFDX: Create Project
が表示されるはずです。そちらを選択してENTER
キー。
次に、Salesforce DXプロジェクトのテンプレートを指定します。defaultのStandard
のままで大丈夫です。自分で一からプロジェクトファイルを定義したいんだ、という玄人かマニア以外はStandard
で十分問題がありません。
最後にプロジェクトを命名します。今回はYUKA
にしました。誕生日だから。
プロジェクトのディレクトリを作るフォルダを指定して完了です。
プロジェクトが正しく作り上げられると、左側のファイルリストがこのようになります。だいたいこれっぽくなっていればOKです。問題ありません。
Salesforce組織と繋げよう
Salesforce DXプロジェクトをデプロイする該当の組織を認証して繋げましょう。普段お使いの組織を認証して接続しても良いのですが、悪影響を及ぼさないために、今回は Scratch Org を利用します。
もしDevHub
を有効化していない場合は、組織の Dev Hub 機能の有効化を実施しておいてください。
またコマンドパレットを出します。そして今回はauth
と打ってみましょう。ここからSFDX: Authorize a Dev Hub
を選択してENTER
。
もし、使用中の組織にYUKA
LWCアプリケーションをデプロイしてやるぜ、という強者の方はSFDX: Authorized an Org
でも構いません。
次に該当の組織に名前を割り当てられます。名前を付けておくと選択するときに便利です。VSCodeから利用するときは、ログインのアカウント名で区別がつきますのでつけても付けなくとも大丈夫です。
ENTER
すると、いつものログイン画面が出てくるので、該当のSalesforce組織にログインしましょう。うまく行けば、こちらの画面になります。この画面が出てきたらブラウザは用なしです。VSCodeへ戻りましょう。
Scratch Orgを作る
先ほどScratch Org
を作ることを選択された方は、次のコマンドでScratch Org
を作成しましょう。
またコマンドパレットを開いてscratch
と入力します。SFDX: Create a Default Scratch Org...
しか出てこないはずなので、そのままENTER
。
次にSalesforce DXプロジェクトのScratch Org用ファイルを指定します。defaultのままで問題ないです。このままENTER
しましょう。
Scratch Org
にも名前が付けられます。今回はYuka
って名前を付けてみました。Scratch Org
の場合、テンポラリのアカウント名などが割り当てられるため、名無しにしてしまうと判別がつきにくい場合があります。Scratch Org
を作るときは名前を付けた方が、一般の人間にはちょうど良いと思います。
最後に、このScratch Org
の生存期間を指定します。Scratch Org
はCI/CDなどで一時的にまっさらな組織を作って好き勝手やり放題にするための組織です。最大30日しか生きることのできない組織です。使いたい期間を指定してあげましょう。そうScratch Org
の生殺与奪はあなたに任されています。
今回はDefaultの7
日のままにしています。
Lightning Web Componentアプリを動かそう
Salesforce DXプロジェクトを実装する準備ができました。ここからは実際にLightning Web Component(LWC)のアプリを作ってデプロイしていきます。
まずはひな形を作りましょう。今回もコマンドパレットです。lwc
と入力してみてください。一番上がSFDX: Create Lightning Web Component
と予想されます。それを選択してENTER
。
どこのフォルダにつくるのかを指定できます。素人はdefaultに作りましょう。余計なことはしないが吉です。
おめでとうございます。lwc
ディレクトリ配下にyuka
ちゃんのフォルダができました。満足です。
恥ずかしいけどアプリを作ってみよう。
ここからはコーディングです。作成された .js,.html,*.xmlについて修正が必要です。ちなみにこれらは何かというと。
- yuka.html ... コンポーネントを表示するための一般的なHTMLファイルです。これがないと何も表示されません。なおLightning Design Systemのタグ/CSSが利用できます。
- yuka.js ... 背後で動くJavaScriptです。サーバサイドのApexなどをコールする場合にも使います。特に動的な処理が必要なければ、なにも書かずともコンポーネントは表示できます。表示するだけならな。
- yuka.js-meta.xml ... このLWCを制御するためのメタデータです。アプリとして利用する市内などの制御をさせます。
と言うことで、今回は「縦」と「横」の長さを入力すると「床の面積を表示する」というHello Worldに毛の生えたような内容のプログラムを作ってみます。これくらいの内容の方が何やってるか分かりやすいからいいんです。うろたえるな。
画面表示です。lightning
系のタグで全部作ってあります。html
のタグじゃないけどなんとなく分かりそうな感じがするでしょう。
なお、lightning-card
のicon-name
で指定可能なアイコンはiconsにあります。
<template>
<lightning-card title="Yuka" icon-name="standard:data_cloud">
<lightning-layout>
<lightning-layout-item flexibility="auto" padding="around-small">
<lightning-input
label="TATE"
type="number"
min="1"
max="65535"
value="0"
onchange={handleTateChange}
>
</lightning-input>
<lightning-input
label="YOKO"
type="number"
min="1"
max="65535"
value="0"
onchange={handleYokoChange}
>
</lightning-input>
<lightning-button label="Yuka" onclick={handleClick}>
</lightning-button>
</lightning-layout-item>
</lightning-layout>
</lightning-card>
</template>
こちらがJavaScriptです。
TATE
とYOKO
の内容が書き換えられると、Yuka
インスタンスのtate
とyoko
変数が変動します。
YUKA
ボタンをクリックすると、onclick
で指定されたhandleClick
が実行されて計算結果がポップアップで表示されるという、たったそれだけのゆかちゃんプログラムです。
import { LightningElement } from 'lwc';
export default class Yuka extends LightningElement {
tate = 0;
yoko = 0;
handleTateChange(event) {
this.tate = event.target.value;
}
handleYokoChange(event) {
this.yoko = event.target.value;
}
handleClick() {
alert(this.tate * this.yoko);
}
}
最後はメタデータです。isExposed
をtrue
にして見えるようにしてあげます。どこで見えるようにするかをtarges
に追加していきます。今回はLightningアプリケーションビルダーでコンポーネント配置できるようにLightning__AppPage
を一つ選んでいます。
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
<apiVersion>58.0</apiVersion>
<isExposed>true</isExposed>
<targets>
<target>lightning__AppPage</target>
</targets>
</LightningComponentBundle>
ここまでできたらファイルを保管してデプロイしましょう。
LWCアプリをデプロイしよう
さきほどのyuka
ディレクトリを右クリックしてSFDX: Deploy Source to Org
を選んでみましょう。
もしここで「Default Orgが設定されてねぇよ、なめんな」みたいなエラーが出てきたら、一度 VSCodeを再起動してみましょう。たぶんうまく行きます。というか、Default Orgがちゃんと定義されないのバグだと思う。みんなはうまく行きました?私はいつもうまくいきません。
デプロイがうまく行くと、VSCodeの下の画面がこんな風になってるはずです。
=== Deployed Source
STATE FULL NAME TYPE PROJECT PATH
─────── ───────── ──────────────────────── ────────────────────────────────────────────────
Changed yuka LightningComponentBundle force-app/main/default/lwc/yuka/yuka.html
Changed yuka LightningComponentBundle force-app/main/default/lwc/yuka/yuka.js
Changed yuka LightningComponentBundle force-app/main/default/lwc/yuka/yuka.js-meta.xml
11:12:38.618 ended SFDX: Deploy Source to Org
LWCアプリを配置して動かしてみよう
デプロイがうまく行ったとすると、VSCodeの左下はこんな風になってるはずです。ここでコンセントYuka
の左側にある窓ボタンを押してみましょう。今接続している組織をオープンするボタンです。
開くと颯爽とSalesforceの設定画面が出てくるでしょう。Lightning アプリケーションビルダー
を表示して「新規」ボタン。あたらしいLightningアプリを作ります。
最初に「Lightningページを新規作成」と出てきますから、騙されたと思って「アプリケーションページ」のまま「次へ」を押していきます。
このアプリケーションの構造を決めます。一つのコンポーネントしか配置する予定がないので「1つの範囲」で十分ですが、いろいろお試し下さい。あなたの自由です。ここはあなたの好きなように選択して、好きなようにコンポーネントを配置してみましょう。複数配置も思いのままです。
さてここで左側をよく見てください。ここまでしょっさんの教えを聞いて正しくやってきた方にはご褒美のyuka
が「カスタム」の下にいるはずです。やったぜ。これをドラッグ&ドロップして好きな位置にコンポーネントを配置しましょう。
私は1つの範囲
で一旦さみしくそのまま配置してみました。配置が完了したら「保存」を押していきます。
初めてであれば「ページが保存されました」と共に「有効化」を推してきます。有効化しないとアプリへ反映されません。「有効化」しましょう。
有効化する際に確認画面になります。イロイロ気になるでしょうが「保存」してください。
Salesforce側からナビゲーションメニューへ追加することを強く推奨してきますが、放置して「完了」で良いです。今は。
おめでとうございます。これでついにYUKA
ちゃんのアプリケーションがリリースされました。
LWCアプリを試してみる
リリースが正しく反映されているか不明なので、2回くらいブラウザをリロードしておいてください。3回祈らずとも2回で十分です。
では、リリースされたYUKA
ちゃんを実行してみましょう。
左上の9つの丸があるところを押すとアプリケーションを直接アクセスできます。当然yuka
と入力してください。正しくリリースされていれば、このようにYUKA
ちゃんがいるはずです。
おもむろにTATE
とYOKO
に何かを入れてYuka
ボタンをクリックしてみましょう。
なんと!!!! 計算された結果が表示されました。おめでとうございます