Salesforce Platform Developer I：プラットフォーム開発の基礎とVSCodeからプロジェクト作成

# プラットフォーム開発の基礎
## 開発者ガイド
**・Apex 開発者ガイド**

https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_dev_guide.htm

**・Lightning Web コンポーネント開発者ガイド**

https://developer.salesforce.com/docs/component-library/documentation/ja-jp/lwc/lwc.get_started_introduction

**・Lightning Aura コンポーネント開発者ガイド**

https://developer.salesforce.com/docs/atlas.ja-jp.220.0.lightning.meta/lightning/intro_framework.htm

**・Visualforce 開発者ガイド**

https://developer.salesforce.com/docs/atlas.ja-jp.pages.meta/pages/pages_intro.htm

**・プラットフォームイベント開発者ガイド**

https://developer.salesforce.com/docs/atlas.ja-jp.platform_events.meta/platform_events/platform_events_intro.htm

**・Salesforce Developer の制限および割り当てクイックリファレンス**

https://developer.salesforce.com/docs/atlas.ja-jp.salesforce_app_limits_cheatsheet.meta/salesforce_app_limits_cheatsheet/salesforce_app_limits_overview.htm

**・SOQL および SOSL リファレンス**

https://developer.salesforce.com/docs/atlas.ja-jp.soql_sosl.meta/soql_sosl/sforce_api_calls_soql_sosl_intro.htm

## Salesforce Platform
**Salesforce Platform はテクノロジの集合体であり、その上にある他のテクノロジの開発をサポートします。
このプラットフォームが独自なのは、すべての Salesforce クラウドだけでなく、お客様やパートナーが開発したカスタム機能もサポートする点です。この機能は、シンプルなページレイアウトから本格的なアプリケーションまで広範囲に及びます。**

以下の機能を付けている
・Salesforce のコアプラットフォーム：カスタマイズ開発できる、堅牢なシステムを速いペースで構築できます。
・Heroku プラットフォーム：
　①Python、Ruby、Goなどを使用して非常に拡張性の高い Web アプリケーションやバックエンドサービスを構築する機能を開発者に提供します。
　②Salesforceのデータとシームレスに同期するデータベースツールも用意されています。
・豊富な Salesforce API：開発者はすべてのエンタープライズデータ、ネットワーク、および ID 情報を統合して接続できます。
・Mobile SDK：Salesforce アプリケーションと同じ信頼性とセキュリティを備えたネイティブ、HTML5、およびハイブリッドアプリケーションの開発を可能にするテクノロジのスイートです。

## メタデータ駆動型開発モデル
Salesforce Platform 上での開発と Salesforce 以外での開発の主要な違いの 1 つです。
Salesforce Platform はメタデータに対応しているため、ユーザ環境の重要な部分をユーザに代わって自動生成できます。
こうした事前作成済み機能によって開発時間が解放され、より高度なカスタム機能に取り組めるようになります。

## Salesforce のコアプラットフォームのテクノロジ
### Lightning コンポーネントフレームワーク
AngularJSやReactと似たUI開発フレームワーク。

Spring’19(API バージョン 45.0)から2つになる
　①Lightning Web コンポーネントモデル（VSCodeで開発）
　<font color="red">※JavaScriptボタンのサポートがよくない、Lightningレコードページから呼び出すアクションに指定できない。</font>
　②従来のAuraコンポーネントモデル（開発者コンソールとIDE両方開発可能）

利用箇所：
　Lightning：画面と画面のロジック作成

### Apex
Javaのような構文を持つSalesforce独自のプログラミング言語。**
利用箇所：
　Classic：カスタマイズ画面のバックグラウンドロジック作成
　Lightning：トリガーとプロセスの中に呼び出し可能のクラス作成

　<font color="red">※メソッド署名の前に @InvocableMethod アノテーション付ければ、プロセスビルダーなど他のツールがメソッドを実行できる</font>
　例えば：Apexのメソッド前に@InvocableMethod(label='Push Price Change Notification')追加すれば、プロセスビルダーに表示のApexクラスラベルは‘Push Price Change Notification’
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/424429/e3321038-8e48-8614-28ac-428861b6be1d.png)

### Visualforce
HTMLによく似たコードを使用してカスタムの Salesforceページを作成できるマークアップ言語で、ApexとJavaScriptの強力な組み合わせも利用できます。

このファイルには、Visualforceタブ、HTMLタブ、CSS、JavaScriptなどが使えます。

利用箇所：
　Classic：カスタマイズ画面作成
　Lightning：JavaScript含めている画面作成、アクション（画面ボタンなど）の呼び出し可能

## Lightning プラットフォーム API
|API|API でできること|
|:-:|:-|
|SOAP API|標準 SOAP プロトコルを使用して組織のデータを他のアプリケーションと統合する。|
|REST API|標準 REST プロトコルを使用して組織のオブジェクトにアクセスする。|
|メタデータ API|組織のカスタマイズを管理し、メタデータモデルを管理するツールを作成する。|
|Tooling API|プラットフォームアプリケーション用のカスタム開発ツールを作成する。|
|Marketing Cloud API|REST API で Marketing Cloud 機能を公開し、SOAP API でほとんどのメール機能に包括的にアクセスする。|
|Bulk API|大きなデータセットに対して読み込み、削除、非同期クエリを実行する。|
|ストリーミング API|セキュアかつ効率的に通知を送受信する。通知には、組織のデータ変更やカスタムイベントを反映できる。|
|Chatter REST API|Chatter、コミュニティ、おすすめ、ファイル、トピックなどの UI を作成する。|
|Mobile SDK|技術的にはソフトウェア開発キットであるが、ここにも含まれる。ネイティブまたはハイブリッドモバイルアプリケーションを Salesforce に直接統合する。|

## Heroku
AWS上に構築されて、Webアプリケーションの迅速な開発、リリース、拡張を可能にするWeb開発プラットフォームです。
Heroku ConnectによってSalesforceデータが Heroku Postgresデータと統合されるため、プラットフォーム間を移動する情報を管理する必要がありません。

DreamHouseのHerokuアプリ
https://ty-dreamhouse-web-app.herokuapp.com/?_ga=2.83565727.889171294.1620199644-955971840.1620140065

## IoT、ボット、その他
### IoT
Visualforce または Lightning コンポーネント、Heroku でホストされるマイクロサービス、スマートロック、証明、サーモスタットからの IoT インターフェースの組み合わせを使用して、プラットフォーム上に直接 IoT 制御機能を構築できます。

### Bots(自動応答ローボード)
従業員がデータを操作しやすくするため自動応答ローボード。
Apex のみでコーディングされています、Slack、Facebook Messenger、Amazon Alexa などのサービスに接続するボットをコーディングすることもできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/424429/09f45c80-f608-5feb-d7a9-aecf29126bb6.png)

### その他
**ApexおよびEinstein Vision API を使用してカスタム画像認識および分類エンジンを作成できます。**
・Apex、Lightning コンポーネント、Einstein Vision を使用して、猫の画像を認識し、分類します。
・Einstein Vision API を Raspberry Pi と組み合わせて猫の侵入を検出して食い止めています。
**Einstein Analytics、GeoJSON、Python を使用して Analytics グラフのためのカスタム地図を作成できます。**
**プラットフォームイベントと Lightning コンポーネントを使用して即時通知アプリケーションを作成することもできます。**


## Salesforce CLIインストール
・Windows、MacOS、Linux
下記のリンクからダウンロードして、インストールする
https://developer.salesforce.com/tools/sfdxcli

インストール結果確認
```sfdx --version```

salesforce DXプラグインバージョン確認
```sfdx plugins --core```

特定バージョンインストール
```sfdx plugins:install salesforcedx@49.14.0```
プレリリース
```sfdx plugins:install salesforcedx@pre-release```
早期リリース候補版をインストール
```sfdx plugins:install salesforcedx@latest-rc```

CLI にインストールされている他のプラグインのリスト確認
```sfdx plugins```

force 名前空間のコマンドファミリ (トピック) のリスト確認
```sfdx force --help```

使用可能なすべての Salesforce CLI コマンド確認
```sfdx commands```

プラグインをアンインストール
```sfdx plugins:uninstall salesforcedx```

## Visual Studio Codeインストール
①下記のリンクからダウンロードして、インストールする。
https://code.visualstudio.com/
②VSCode起動して、左のツールバーで拡張機能アイコンをクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/424429/a8feea44-60f3-34b8-09fd-ab3f6c3a8826.png)
③Salesforce Extension Pack を検索し、[Install (インストール)] をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/424429/f4a61a25-804e-3858-532d-39d727234cf3.png)

### 開発環境確認
①Visual Studio Code で、Ctrl+Shift+P (Windows) または Cmd+Shift+P (macOS) を押して、コマンドパレットを開きます。
②「sfdx」と入力して、Salesforce 拡張機能で提供されるコマンドを絞り込みます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/424429/0088bc5a-b949-c764-15cd-0b3075a991ec.png)

## Salesforce DXでプロジェクト作成
①Visual Studio Code で、Ctrl+Shift+P (Windows) または Cmd+Shift+P (macOS) を押して、コマンドパレットを開きます。
②SFDX: Create Project選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/424429/b0f45b0a-8cd9-1443-f480-468427f913dd.png)
③標準のプロジェクトテンプレート選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/424429/ada160bb-ca24-c88c-9058-565043db1676.png)
③プロジェクト名入力して、[Enter]キーを押す。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/424429/45756dd9-b1be-3a20-6c18-3a1cd92605f8.png)
④作成結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/424429/b9d0fd45-2882-3a25-24ea-cb46be503806.png)

## salesforce環境連結
①Visual Studio Code で、Ctrl+Shift+P (Windows) または Cmd+Shift+P (macOS) を押して、コマンドパレットを開きます。
②[SFDX: Authorize an Org (SFDX: 組織を承認)] を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/424429/81863c3d-4494-9e57-f433-0c294722f7c9.png)
③接続環境選択して、salesforceログイン画面表示
<font color="red">※Loginは本番、Trailhead環境
　Sandboxは開発環境</font>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/424429/0b88b5ee-d6c5-d461-b596-19df91140e66.png)
④ユーザとパスワード入力して、ログインする
<font color="red">※Trailhead練習の時、「playground Starter」の「ログイン情報を取得する」タブからログインユーザ名確認
　パスワードリセットされていない場合は、パスワードリセットをクリックして、設定のメールからパスワードリセットする必要。</font>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/424429/1712f3d7-8bed-5867-1585-c7e1201c1e26.png)
⑤接続完了待ち
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/424429/4b9768de-1ed2-669a-d354-c2fec8c69015.png)

## Lightning Webコンポーネント作成
①Visual Studio Code で、Ctrl+Shift+P (Windows) または Cmd+Shift+P (macOS) を押して、コマンドパレットを開きます。
②「SFDX: Create Lightning Web Component」を選択する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/424429/936c7002-691c-73ee-edab-e4d7b39deaea.png)
③ファイル名入力
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/424429/23594cd1-5442-a75e-3776-858626c9e2fc.png)
④フォルダ選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/424429/8ee22e43-f626-3af4-52c1-56584082cd13.png)
⑤ファイル作成完了確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/424429/76e87313-03c6-6827-9066-4a395b2ced7f.png)
⑥コードを書く
helloWorld.html
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/424429/149cf61d-7688-ebfd-75f2-ad07dea1737a.png)
helloWorld.js
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/424429/27228f3a-8580-5dc2-ce21-71cc00a4561e.png)
helloWorld.js-meta.xml
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/424429/22f41006-3cc7-af9a-fa67-02cfa0746bd0.png)
⑦リリースする
・force-app/main の下にある default フォルダを右クリックします。
・「SFDX: Deploy Source to Org（SFDX：組織へソースをデプロイ）」クリックする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/424429/e3598ded-c6fc-b376-b36a-309479c772a4.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/424429/fa29e4fb-9767-2018-b1cb-89372b2247c8.png)

<font color="red">**※[Hello World Lightning Web コンポーネントの作成]の挑戦が完成できない場合、以下の部分修正。**</font>
①言語は英語に変更
②[set]-[home]のデフォルトホームページ再設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/424429/b3dbb036-67fc-fa31-9255-149ff9633685.png)
③デフォルトホームページ設定後、もう一回編集画面開く、helloWorldコンポーネント再設定する。
④もう一度挑戦ボタン押す。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/424429/d15b4491-1511-79a5-9120-6d056d2b6d2a.png)