IntelliJ IDEA と有償プラグインで作るSalesforce開発環境

# ご挨拶
こんにちは！ @allegrogiken です。今年は業務でSalesforce上の開発に触れる機会があったので、Salesforceのアドベントカレンダーに参加してみました。
一年で Apex, Visualforce, Lightning Component などのコーディング作業全般、およびソースコード管理とCI/CDに関する試行錯誤をやりましたが、その中でも情報が少ない IntelliJ IDEA を使った開発について触れてみようと思います。

# 目指したこと
経緯はさておき、私の関わったプロジェクトでは下記を満たす開発環境を目指しました。

 - 非SFDXプロジェクトの開発ができる
 - 開発環境のセットアップ自体が簡単である
 - git clone して直ぐに開発を始めることが出来る

## それまでの開発
私がSalesforceの開発に着任した当初は「Sublime Text」と「Mavensmate」を組み合わせた開発をしていました。これはひと工夫しないとGitの作業コピー上でのコーディング作業が出来ないという問題があり、コミット漏れが多発していました。masterが信頼できないという辛い状況です。

またエディタは Apex, Visualforce などに特化した構文解析を持っていませんでした。変数名や予約後などほんのり入力補完が効く程度で、大きな組織のモジュールを保守していくには効率が悪くつらい状況でした。

そして何より、Mavensmateは2017年以降更新されていませんでした。Salesforceは年に3回のサイクルでアップデートされるのでこれは大きな不安でした。

# [IntelliJ IDEA](https://www.jetbrains.com/idea/) + [Illuminated Cloud](http://www.illuminatedcloud.com) との出会い

開発メンバーの一人が IntelliJ IDEA 使いだったのですが、雑談の延長上でプラグインを調べてみると専用のプラグインとして「Illuminated Cloud」が提供されていることを知りました。

公式のドキュメントがそこそこ充実していて、Salesforce自体も存在を認識しており（そういうスライドがあった）、かなりの頻度で更新されていました。現状がマズいということは誰もが理解できる状況でしたし、30日間の試用期間があったので「とりあえずやってみる」決断はすぐに得られました。

▼ 開発風景です
![開発風景](https://qiita-image-store.s3.amazonaws.com/0/126660/fdc24961-9866-594b-f559-8f08871a4acf.png)


## 使用感

試用期間を経て、メリット・デメリットを下記の通りチームで認識しました。

 - :o: コーディング補完、リファクタリング機能が強力
 - :o: アップデート頻度が高い。最新のAPIバージョンにしっかり追従してくれる
 - :o: Anonymous Apex / SOQL がサクっと扱えて開発者コンソール要らず
 - :o: デバッグログ、Apexテストを簡単に取り扱える
 - :o: 静的リソースをフォルダとして扱い、手軽にzipとしてデプロイできる
 - :o: 従来形式・SFDX 両対応
 - :x: プラグインが有償(個人:90ドル/年, 法人:135ドル/年)
 - :x: 組織ログインする時にOAuth認証を使えない
 - :x: 情報が少ない（特に日本語）

非DXプロジェクトであれば、現時点で最もおすすめしたいIDEです。開発者コンソールを極限までリッチにしたようなUIで、Trailheadを一通り終えた初学者でもスムーズに開発に入れると思います。
変数名のサジェストや一括リネーム、コードフォーマットなど IntelliJ IDEA 自身が持つ機能が非常に強力ですし、SObjectの項目名補完が Apex, SOQL, Lightning Component など至るところで効いてくれるのは純粋に嬉しいポイントです。オブジェクトの設計など裏方がカオスになりがちな状況をサポートする環境として非常に助けになります。
値段分の価値は十分にあるということで、向こう一年は使ってみることになりました。

▼ SOQLの入力補完が効くイメージ
![Peek 2018-12-05 21-07.gif](https://qiita-image-store.s3.amazonaws.com/0/126660/a785af3e-e31f-a9a4-fa24-e13d9acbd106.gif)

## インストール

IntelliJ IDEA は公式サイトから Community Edition を選んでダウンロード・インストールしましょう。
Illuminated Cloud 2 は IntelliJ IDEA のプラグイン検索からインストールできます。一時期は Illuminated Cloud（無印） と 「2」が混在していましたが、今は「2」だけになっています。初めて使うマシンであれば、30日間はトライアル期間があります。

## Gitリポジトリから開発をはじめる

最低限、 `src/package.xml` を置いたGitリポジトリをプロジェクトとして読み込み、組織ログイン情報を選択すれば10分ほどで開発を始められるようになります。この導入手順は少しクセがあり、記事としてまとめたい気持ちがありますが・・資料として [プラグイン開発元のフォーラム](https://bitbucket.org/RoseSilverSoftware/illuminatedcloud/issues/688/make-it-easy-to-wrap-an-illuminated-cloud) があります。

## 他の選択肢

#### VSCode + 公式Extension
VSCodeとその拡張である「SalesforceDX Extension」がそこそこ前から公式に提供されていましたが、現行の組織に対する開発をSFDXに移行する決断ができず見送られました。
しかし、Winter19からは 非SFDX の組織にも対応しました。コミュニティ的な盛り上がりもあり、今後はこちらを中心に開発する方が増えていきそうな気がしますね！

導入方法は、 @shunkosa さんのこの記事がキレイにまとまっています。
https://qiita.com/shunkosa/items/e6248520bff90f397158

#### VSCode + ForceCode(非公式Extension)
こちらは非公式の拡張です。Mavensmateを使わずエディタと組織を繋いで開発するなら、Winter19よりも前はこれ一択だったように思います。ただし、こちらもメンテナンスをしない宣言が作者から表明されていました。今はメンテナーが切り替わり、軽い開発ならば充分に使えるレベルになっていると思います。
構文解析などは公式のExtension Packを使いますが、DXとはフォルダ構成が違うので若干の歪みがあるようで入力補完は最低限の印象です。公式が非SFDXにも対応したので、こちらは淘汰されていく運命にあるかもしれません。

#### IntelliJ IDEA + JetForcer
Illuminated Cloud 以外にもプラグインがありました。軽く触っただけですが、Lightning Component 開発時の入力補完が弱かった印象があり見送りました。
ただし、このプラグインは買い切りの有償ライセンスで Illuminated CLoud よりも3割くらい安いという魅力もあります。気が向いたらもう一度触るかも。

# まとめ
2016年から2018年の夏にかけて、Salesforceの開発環境は混沌としていました・・
来年以降は、VSCode + 公式Extension を基本軸において問題なさそうですが、今回紹介したIntelliJ IDEA + Illuminated Cloud での開発体験もなかなか価値があると思います。
もう少し情報が増えると嬉しいので、ぜひ試用版から触ってみてください。