Visual Studio CodeでAPEX開発

今までSalesforceのAPEX開発はSublime Text + MavensMateを使ってきましたが、MavensMateのサポートが切れていしまったので、いつまでも使っているわけにはいきません。
そこで新しくVisual Studio Codeを使ってくださいとのことですので、使い側をまとめていきます。

#MavensMateサポート終了
http://mavensmate.com/
>I’m sure some are wondering, "why now?". The past year has been one of the most challenging of my life: from becoming a first-time father to losing my best friend to cancer much, much too early. I simply have not had the time to properly devote to this project. And with the recent beta release of Salesforce’s official Visual Studio Code Extension, the Salesforce developer community is in great hands.

(Google翻訳)
>私はいくつかは "なぜ今？"と思っていると確信しています。去年は私の人生の中で最も挑戦していたことの1つです。初めての父親になって親友を癌に捨てることから、ずっと早くになりました。私はこのプロジェクトに専念する時間がなかっただけです。そして、Salesforceの公式のVisual Studio Code Extensionのベータ版がリリースされて以来、Salesforceの開発者コミュニティは大きな役割を果たしています。

忙しくなったんですね、この機能を今まで無料で提供してきたことにとても感謝です。

# Visual Studio Codeとは
以下VSCodeと呼びます。
Microsoftが開発したMac, Windows, Linux の軽量/高速な高機能開発エディターらしいです。ダウンロードは以下で可能です。
https://code.visualstudio.com/download

# 前準備
Salesforceで開発するために拡張機能を入れます。
左側のタブの一番下を選択して、テキストボックスに「forcecode」と入力してください。
ForceCodeが表示されると思うので、インストールしてください。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/202761/8b89f0f6-193a-31d2-d549-6a7cb0e46a35.png)
拡張機能を確認すると、Apexなど必要な拡張機能も追加でインストールしてくれます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/202761/52fbb2db-b578-c37f-4480-bf054889c46e.png)

# メタデータの取得
メタデータを取得するためにフォルダを作っておきます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/202761/ebfbb94a-f5df-b067-a49f-750b5b39ec0c.png)
VSCodeでそのフォルダを開いて、表示>コマンドパレット(Ctrl + Shift + PでもOK)を選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/202761/35d177c8-bcb7-c96a-9aeb-2b0f3453ae42.png)
forceと入力するといくつか候補が出てくると思いますので、「Force: Refresh from server」を選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/202761/0e09eb0e-0295-484e-6a40-68cb0ae2ea2b.png)
Salesforceのログイン情報が聞かれますので、入力します。
ユーザー名
![image.png](https://qiita-image-store.s3.amazonaws.com/0/202761/56ac29b8-01cc-80c9-311c-a18f09690fdb.png)
パスワード
![image.png](https://qiita-image-store.s3.amazonaws.com/0/202761/07ffa5ab-629a-3661-7cd3-f21269cb8ff4.png)
開発環境
![image.png](https://qiita-image-store.s3.amazonaws.com/0/202761/0ab09905-a257-31cb-314d-1c1cd836c1f9.png)
保存したときに自動でデプロイするか(Yesの場合自動でデプロイします)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/202761/fb176245-c198-ed6f-6258-ac6c4890aee3.png)
これで「force.json」が作成されるはずです。force.jsonにはログイン情報などが保存されます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/202761/2aa6b0d5-df97-4cb4-8814-cfb0dfd02eaf.png)
もう一度コマンドパレットから「Force: Refresh from server」を選択して、「Get All Files from org」を選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/202761/a7c17088-3068-d55f-8bb6-640dbab6053c.png)
メタデータを取得することができました。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/202761/8922b343-386a-1fea-64ef-2de1e3001cda.png)

## Enter Credentialsと出て取得できない場合
以下のように「Force: Refresh from server」を選択してもメタデータが落ちてこないで「Enter Credencials」が促される場合があります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/202761/21b3faac-6810-f752-f5f9-851891eb32b3.png)
Salesforceのログを確認すると、セキュリティトークンを発行していなかったためでしたので、その場合はセキュリティトークンを発行してください。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/202761/f53c1e6c-95ea-afa3-7973-d727f3235752.png)
あまりよくはないですが、ログインIPアドレスの制限をなくすことでも対応可能です。
（設定>ユーザ>今回のログインユーザ>プロファイルからログインIPアドレスの制限で指定可能）
![image.png](https://qiita-image-store.s3.amazonaws.com/0/202761/431f7d58-f34c-7632-6bcf-78d5e8198e0d.png)

#機能一覧（随時更新予定）
コマンドパレットから「ForceCode Menu」を選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/202761/6fa9d167-b459-2f90-24de-c71f5dbe379c.png)
下の方にある「Limits: 〇/〇」を選択しても表示されます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/202761/ecc2a9cc-e0ba-34d8-df50-6fb0c211b12c.png)

## クラスの作成
「Create Class」を選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/202761/2718ec8e-6c2e-7aeb-a801-b2043209bc3d.png)

いくつか種類があります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/202761/53e6ef40-4279-567a-7fb3-3eaaf898ee61.png)

###Custom
入力したクラス名そのままでファイルが作成されます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/202761/f893a208-1399-51e9-bd5c-881ab8751bec.png)
###その他
入力したクラス名の後ろに選択した値が付きます。
例えばクラス名「Controller」で入力したら「ControllerController.cls」が作成されます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/202761/c93d079d-3de3-d820-e331-6c7eebb56d46.png)

##単体テスト
「Run Unit Tests」を選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/202761/12e101fe-3f62-9662-bda8-e8914431de98.png)

開いているAPEXでテストメソッドが存在する場合、テストを実行します。
テストが完了すると、結果が出力に表示されます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/202761/14775279-4855-8af0-d510-76c9ad0f835b.png)
MavensMateみたいに複数のテストクラスを回すことはできない？

##匿名(anonymous)実行
「Execute Anonymous」を選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/202761/648327f3-9c59-bbc7-09a4-daf9841c4dfe.png)
開いているAPEXで匿名実行をします。

```java:例
Integer int1 = 0;

void myProcedure1() {
    system.debug('int1 : ' + int1);
    myProcedure2();
}

void myProcedure2() {
    int1++;
    system.debug('int1 : ' + int1);
}

myProcedure1();
```

![image.png](https://qiita-image-store.s3.amazonaws.com/0/202761/6df7da04-687f-527c-504d-ee9b1fd64aaf.png)

##SOQL実行
「SOQL Query」を選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/202761/780e8948-7fc6-9f02-7914-03f9c99bee80.png)
SOQLを入力します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/202761/9dba2337-893c-b053-ea52-eb2dfbfb0efb.png)
結果がJSON形式で表示されます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/202761/4e4c9df6-02ac-edb3-432a-f74d38b1bac8.png)


# 参考
https://johnaaronnelson.gitbooks.io/forcecode/content/#bundle-and-deploy-static-resource