最新版のVSCodeに対応したSalesforce開発環境構築（投稿時点）

# 概要

最新版のVisualStudio CodeでSalesforce開発環境を構築する手順を残したいと思います
長年、Eclipseを開発環境として使っていましたが、Salesforce DXの登場でEclipse版の開発終了？で対応するAPIバージョンが古い状況です
開発コンソールもありますが、ソースコードのバージョン管理や使い勝手などを含めて考えると手元に開発環境があると便利です


# 構築手順

**こちらをおすすめします！**
下記ではサードパーティー製の拡張機能の導入手順になりますが、
Salesforce公式拡張機能を用いた開発手順「[Visual Studio CodeでSalesforceの開発環境を構築する](https://qiita.com/shunkosa/items/e6248520bff90f397158)」をおすすめします！

## 公式拡張機能を用いた開発手順の補足

VS CodeのRemote Containerに対応しましたので、導入手順は「[リモート開発 - コンテナ](https://developer.salesforce.com/tools/vscode/ja/user-guide/remote-development/)」になります。
公式手順のため、丁寧に解説されているので、導入手順は割愛します。
※注意点としてはDockerfileのベースイメージがlatestタグになっているので扱う時は要注意！

Remote Containerとは何かというと、開発環境（Salesforceに限らず）で必要な環境一式（JDK、拡張機能など）をコンテナに閉じ込めることで、誰でもボタン一つで開発環境を導入することができるようになります。また、壊れても容易に環境を再構築できるのがメリットです。


**上記の理由により下記は読んでも役に立たないと思います。**


## 1. ForceCodeの導入

VS Codeの拡張機能で「ForceCode」（2018.12.26時点で3.11.3）と検索してインストールする~~と古いバージョン（2018.9.25時点で3.6.3）が表示されるので、リポジトリから最新バージョン（2018.9.25時点で3.9.1）を取得します~~
※プロジェクトがマージされたようです

~~https://github.com/daishi4u/ForceCode のルートにある「forcecode-x.x.x.vsix」をローカルにダウンロードし、拡張機能の「VSIXからインストール」でインストールできます~~

~~※ForceCode 0.x.x版では最新版のVS Codeに対応していないが、上記のリポジトリは0.x.x版からForkして機能拡張されたバージョンになっています（Salesforce DX経由）~~

インストール後はVS Codeの「再読み込み」を実施すると適用されます

ついでに「Salesforce Extension Pack」もインストールすることで、コードに色がつき見やすくなります

## 2. ログイン

1. メニューの「表示」-「コマンドパレット」-「ForceCode: ForceCode Menu」を選択
![vscode_forcecode_menu.png](https://qiita-image-store.s3.amazonaws.com/0/30522/8a676e9b-58a1-66a0-b32b-67292a13c069.png)
2. 接続する組織では「New Org」を選択
![vscode_forcecode_neworg.png](https://qiita-image-store.s3.amazonaws.com/0/30522/844a1447-28dc-f158-6b00-4c058de4b66c.png)
3. 組織種別では「本番組織（Production/Developer）」か「Sandbox」を選択
![vscode_forcecode_orgtype.png](https://qiita-image-store.s3.amazonaws.com/0/30522/9e50f48e-623a-c789-8503-a5db89fb0fea.png)
4. 保存方法では「自動保存（Yes）」か「手動保存（No）」を選択
![vscode_forcecode_savemode.png](https://qiita-image-store.s3.amazonaws.com/0/30522/52edc763-6771-1593-a846-a4f66576c572.png)
5. OAuthによる認証のため、ブラウザが起動し、接続先の組織にログインし、当プラグインからの接続を許可  
    ※旧バージョンのForceCodeでは自動生成されるforce.jsonに認証情報が保存されていましたが、OAuthになったことでセキュリティが向上しました
6. 認証が完了次第以下のようなファイルが生成されます
![vscode_forcecode_directory.png](https://qiita-image-store.s3.amazonaws.com/0/30522/e3ca5741-1d64-c771-4cca-d28691ae48a4.png)


## 3. ForceCode Menuを開く

設定完了後に下部に「ForceCode Menu」が表示されます
当メニューで様々な機能を実行できます
![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f33303532322f32633763366339382d623233312d336330662d333635322d6434303731393662373764622e706e67.png](https://qiita-image-store.s3.amazonaws.com/0/30522/dde8d7d6-868e-61e1-fadf-f7e8f38193e5.png)

詳細は割愛させて頂きます


# 機能紹介

## 組織からソースを取得

既存のpackage.xmlがある場合は、srcフォルダ配下にpackage.xmlを配置し、ForceCode Menuで「Retrieve Package/Metadata」で組織のコードがローカルに反映されます
![vscode_forcecode_retrieve.png](https://qiita-image-store.s3.amazonaws.com/0/30522/ce817f7e-994c-a5c9-a210-a35465ffe34f.png)

package.xmlがない場合は、手で作るか、retrieve時に取得したいパッケージを選択すると生成されます

※0.x.x版の**「Refresh from server」はメニュー上に表示されるが機能しない**ので、「Retrieve Package」を使用してください

## 変更通知

今まで同一組織で複数人が同時開発していた際に、組織のコードとローカルのコードに差異が発生しているかはローカルに組織のコードを取得されるまではわかりませんでしたが、当プラグインでは組織のコードに変更があった際にリアルタイムで通知してくれる機能があります。検知した際には「組織のコードをローカルに反映」、「Diffを確認」、「無視」の操作が選べます

デフォルトで無効になっているので、`.forceCode/接続アカウント名/setting.json`の`checkForFileChanges`をtrueに変更すること

![vscode_forcecode_conflict.png](https://qiita-image-store.s3.amazonaws.com/0/30522/ce129b85-7d34-229a-003f-f23e05aa74ae.png)