Apexとは?
salesforceではフローという機能を使用してノーコード開発を行うことができます。
一方でsalesforceApexにはApexというjavaライクな言語を使って機能開発を行う機能もあります。
ぱっと見、ノーコード開発ができならプログラミング言語は不必要かと思われますが、複雑な機能を作り込む場合にはテストを書いたりできるApexの方が開発しやすい場面が多くなります。
LSPとは
Language Server Protcol の略で、VSCodeなどで機能開発を行うときにユーザーにいろんなサポートを提供してくれます。
この機能があるとないとだとかなり開発体験が変わってきます。
例)
- 変数名を提案してくれる
- 関数やメソッドにジャンプすることができる
- 関数やメソッドを使っているところを一覧にして見ることができる
- 構文エラーなどを検知して知らせてくれる
この記事で扱うこと
Apexは標準でVSCodeを使用することを推奨しており、ApexのLSPもVSCodeの拡張機能に含まれているのでそちらには触れません。
この記事ではneovimでApexのLSPを使用する方法
を取り扱っています。
VSCodeのようにパッとできるものではありませんが、この記事を見て皆さんのneovim上でのApexのでの開発体験が良くなれば幸いです。
事前準備
ApexのLSPを使用するためにはjavaが必要です。
要件を調べて必要なバージョンのjavaのインストールを行なっておいてください。
java setupページ: https://developer.salesforce.com/docs/platform/sfvscode-extensions/guide/java-setup.html
ubuntuであれば、以下のコマンドでOKです
(動作保証の一番古い11を入れてますが、お好みで21とか17とか公式の推奨する新しいバージョンも試してみてください)
$ apt install -y openjdk-11-jdk
Neovimの拡張機能について
ApexのLSP導入に関して、以下の拡張機能が必須です。
- nvim-lspconfig
LSPファイルの準備
-
ダウンロードしたファイルを、適当な場所に配置します
例)
/root/.local/share/nvim/lsp_servers/apex-jorje-lsp.jar
LSPの設定
- nvim-lspconfigの設定を開き、以下のコードを貼り付ける
nvim_lsp['apex_ls'].setup{
cmd = { 'java', '-jar', '/root/.local/share/nvim/lsp_servers/apex-jorje-lsp.jar' },
filetypes = { 'apex' },
on_attach = custom_attach,
flags = {
debounce_text_changes = 150,
},
settings = {
apex = {
enable_semantic_errors = true,
enable_completion_statistics = true,
}
}
}
- init.luaを開き、clsクラスやtriggerクラスをApexクラスとして認識できるよう以下のコードを追加
vim.filetype.add({
extension = {
cls = 'apex',
trigger = 'apex',
cmp = 'html',
}
})
- ApexのファイルをNeovimで開いて、:LspInfo コマンドを実行し以下のようにLSPが認識されていればOK
Client: apex_ls (id: 3, bufnr: [1, 47, 21])
filetypes: apex
autostart: true
root directory: /usr/projects/salesforce/hoge
cmd: /usr/bin/java -jar /root/.local/share/nvim/lsp_servers/apex-jorje-lsp.jar
LSPがうまく動かない時
ubuntuであれば、以下のディレクトリにLSPのエラー情報が書き込まれています。
/root/.local/state/nvim/lsp.log
必要であればLSPのインデックスデータベースの初期化も試してみてください。
https://developer.salesforce.com/docs/platform/sfvscode-extensions/guide/apex-language-server.html#reset-apex-indexing