APEXをSublimeで設定 + ログをローカルに出力する方法

APEXの開発をしていてデバッグログを確認する方法がSalesforce上で確認するしかなく、非常に使いづらかったので、MavensMate経由でローカルに出力するようにしました。

##今回やりたいこと
・APEXをSublimeText + MavensMateで開発する環境を構築する
・APEXでログをローカルに出力

##環境
Windows10 64bit
SublimeText3 + MavensMate(すでにインストールしていること)
※インストール出来ていない方は以下でインストールしてください。
SublimeText3 → https://www.sublimetext.com/3
MavensMate → https://github.com/joeferraro/MavensMate/tree/master/docs

##Windowsの注意点
アカウント名で全角（例：山田太郎）を使うとエラーになります。もしアカウント名に全角を使っている場合はこの機会に新しくアカウントを作り直しましょう。

##MavensMateの注意点
MavemsMateのサポートが終了したようです（2017/10/04現在）。本設定を行う方は自己責任でお願いします。

##SublimeText側の設定
MavensMateのインストールを行います。
SublimeText3を開き、Command + Shift + P。するとこんな画面がでるので、
![image.png](https://qiita-image-store.s3.amazonaws.com/0/202761/47d9c5d1-5b1b-d869-04b9-a1a3c300a63f.png)
「install」と入力し、「Pachage Control: Install Package」が選択されていることを確認し、Enter キーを押します。
すると、パッケージの候補と共に、またフォームが表示されるのでmavens mateをインストールします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/202761/39535112-cf66-8e2a-28e3-b8d3aad09173.png)

##MavensMate側の設定
MavensMate Desktopを開き、新規でプロジェクトを作成します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/202761/32f19f4e-5f98-221c-7d63-e4533caabeeb.png)
開発はSandboxでしている前提で、開発環境に接続します。
Salesforce Environment TypeでSandboxを選択し、Connectボタンを押下します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/202761/08bdaba4-7bcd-585f-b51a-4d3388d55f92.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/202761/6553188a-27e4-7f7d-262f-ed9f5040f5f2.png)
Sandboxに接続できたら次にworkspaceの設定を行います。
歯車のマークをおしてworkspace（開発するフォルダ）を設定します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/202761/e6ca0149-331d-7b38-0587-9d9eaa983e9b.png)
workspaceの場所はどこでもよいですが、特にこだわりがなければC:\Users\\[ユーザ名]\workspaceなんかにしてけばOKです。ちなみにユーザ名に日本語は使えないので注意してください。
MavensMateでは\(円マーク)はエスケープされてちゃうので、\\で書き直してください。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/202761/ed585de1-bf8e-9fc1-354b-5443dbd4e1e1.png)
指定した場所にフォルダの作成も忘れずにしてください。（自動で作成されたかもですが）
![image.png](https://qiita-image-store.s3.amazonaws.com/0/202761/51c53291-745e-99c4-d763-d6f4fa36a5c2.png)
ここまで設定出来たらNew ProjectでCreate Projectをクリックしてください。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/202761/02d9f85e-1220-a04e-cf62-b54fbfb94280.png)
Edit Projectの画面でSelect allして、Update Projectをクリックしてください。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/202761/b15ba353-b536-11e7-99b6-953903ba2ff1.png)
ソースがworkspaceに落ちていることを確認してください。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/202761/198829d8-fd00-f58e-a2d7-94f14049cfad.png)

##ログ出力の設定
- MavensMateでCTRL+Shift+Pで「VBScript」をインストールします。

- ログ出力用のフォルダを作成します。どこでもよいのですが、私はworkspaceに「debug」というフォルダを作成し、「logs」「log_archive」を作成しました。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/202761/538b87e5-ed6d-8346-022b-6193fe55aab5.png)

- MavensMateの設定をします。以下のように設定画面でMAVENSMATE LOGS LOCATIONにログ出力フォルダを設定します。場所は「C:\\Users\\[ユーザ名]\\AppData\\Roaming\\MavensMate-Desktop\\Log」です。上記で作成したフォルダではないので注意してください。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/202761/309335c4-57d4-4493-2b31-b83cc7cb2160.png)

以上でデバッグログが出力されるようになります！
![image.png](https://qiita-image-store.s3.amazonaws.com/0/202761/3377ab90-082c-6aea-3976-eb739d35ed27.png)


##ログのローテート
今の設定ではログが吐き出しっぱなしなので、ローテートの設定を行います。
- 以下のファイルをdebug配下に保存します。


```bat:delDir.bat
echo @off
set YYYYMMDD=%DATE:/=%
cd C:\Users\NaotoKoyama\workspace\プロジェクト名\debug\logs
findstr "CODE_UNIT_STARTED CODE_UNIT_FINISHED SOQL_EXECUTE_BEGIN SOQL_EXECUTE_END VF_SERIALIZE_VIEWSTATE_BEGIN VF_SERIALIZE_VIEWSTATE_END USER_DEBUG" .\*.log >> ..\log_archive\%YYYYMMDD%.txt
del /Q *.log
```

```vbnet:delDir.vbs
Set WSHShell = CreateObject("WScript.Shell")

WSHShell.Run "cmd.exe /c C:\Users\NaotoKoyama\workspace\プロジェクト名\debug\delDir.bat"

```

- タスクスケジューラの設定を行います。
コンピュータの管理でタスクの作成をクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/202761/fc3532a8-c123-0067-544a-d512c89f7493.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/202761/953612f5-b160-cad3-8ae6-41271e458c66.png)

トリガーの編集では毎日1時間毎に実行されるように設定します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/202761/2cbc775b-7c5c-04c2-a424-b6903840880e.png)

操作の編集では作成したVBScriptを設定します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/202761/89eadd83-2ce8-e36d-e11b-3e36b470cbdf.png)
以上で毎日1時間毎にlogsフォルダのログがlog_archiveにローテートされます。

手動でローテートしたい場合はSublimeTextでdelDir.vbsを開いて、Ctrl + Bを押したらOKです。ただし初回のみ、表示 > シンタックス > VBScriptをチェックをする必要があります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/202761/e1726dd1-99da-35c7-a3f8-3127a450b66e.png)
またローテートする際はfindstrの内容のみが抽出されるので、自分がローテートしたいものだけを設定も可能です。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/202761/276717d5-11e8-cf58-9ef1-9c7855c80e28.png)

##ログが出力されない場合
まずはSalesforceのデバッグログでユーザ追跡フラグでログインユーザのアカウントがデバッグを出力する設定となっているか確認してください。
もしそれでも出力されない場合はMavensMateにログインしているかを確認してみてください。