sfdxのカスタムプラグインを作ってみる #salesforce

sfdxにも少しずつ慣れていきたいなと思い、色々試してみようとしているところです。

手始めに

$ sfdx help

とヘルプコマンドを打ち、そこで初めて、sfdxはプラグイン機構を備えていることを知りました。

f:id:jappy:20171215004240p:plain

sfdxのカスタムプラグインはどんな感じに作られるのか、試してみました。

作ったもの

https://github.com/tq-jappy/sfdx-hello-plugin

$ sfdx hello:sayHello

と打つと、

Hello sfdx!

とコンソールに出力するだけのものです。

作り方を学ぶ

これまで、趣味と実益を兼ねて、RedmineやJenkinsのプラグインの作成(や改修)に関わってきましたが、プラグインの作り方を学ぶには、似たような動作をする既存のプラグインを真似するのが一番の近道だと思っています。

とはいえ、sfdxの場合、まだそんなに数が豊富にあるわけではないので、「そもそもどうやって作ればいいんだろう?」と思って検索したところ、例えば以下のようなリポジトリが見つかりました。

github.com

あと、作者の方の紹介記事もありました。

www.wadewegner.com

これらを踏まえて、作りました。

作り方まとめ

基本的には、sfdxのプラグインは普通のNode.js開発の要領で作っていけばよいみたいですね。

エントリポイント(メイン) である index.js の中で、 topics, namespace, commands をそれぞれ exports してあげるのがルールなようです。
ただ、コマンド体系が複雑でなければ、namespaceは省略してもよいみたいです。プラグインの作法としてはさておき、動作上は問題ありませんでした。

コマンドのロジックは以下のコードです。 context の中には認証情報なども含まれていそうなので、うまく駆使すれば色んな用途を満たすプラグインが作れるんじゃないかなと。

(function() {
  'use strict';

  module.exports = {
    topic: 'hello',
    command: 'sayHello',
    description: 'display hello message',
    run(context) {
      console.log('Hello sfdx!');
    }
  }
}());

JavaScriptで作成することから、jsforce(やその他のJS系のSalesforceライブラリ)と組み合わせるとよさそうですね。

今のプロジェクトでは、sfdxは実戦投入できていないものの、Jenkins, jsforce, gulp, jsforce-metadata-toolsを使ったCIを組んでおり、その中でApexのテスト結果をJenkinsのJunit/Coberturaレポート形式に出力する、みたいなこともしているのですが、そういう部分をsfdxのプラグイン化することで、sfdxへの移行も緩やかにしていけそうな気がしました。