LoginSignup
25
24

More than 5 years have passed since last update.

ターミナルからApexを実行できるforce.com CLIの使い方

Last updated at Posted at 2014-04-01

はじめに

Salesforceの開発をしていると、検証用に条件を少しだけ変えたSOQLをいくつも実行したり、ちょっとしたApexを書いて実行する機会が多々あります。
すでにSalesforceにはそういったことを実現させる機能が用意してあって、それがこの「開発者コンソール」と呼ばれるものです。
(Salesforceにログインした後、ログインユーザ名をクリックして表示されるメニューから起動)

SS 2014-04-02 0.00.12.png

ただこのコンソールの動作が不安定&遅いこともあり、上に挙げたことのような「ちょっとしたこと」ならローカルから実行できないかなーと思ってました。

そこで発見したのがforce.com CLIというツールです。
(Salesforceの公式ブログはこちら

予想以上に便利だったのと、日本語で紹介しているサイトがあまりなかったのでその使い方をまとめてみます。

(注意)
以下、コマンド部分の

~ $ 

はカレントディレクトリを指します。

インストール方法

さっそくインストールします。
なお、mac book air(Mac OS X 10.7)でやってます。

go言語をインストール

動かすにはgo言語が必要とのことなので、
Homebrewでインストールします。
こちらの記事を見ながらやりました。
http://sixeight.hatenablog.com/entry/2013/12/12/031752

~ $ brew install go

$GOPATHを設定

これも、先ほどの記事にならって~/.go/1.2/に設定。

~ $ mkdir -p ~/.go/1.2/
.zshrc
# 以下の2行を追記した
export GOPATH=$HOME/.go/1.2
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

force.com CLIをインストール

いよいよforce.com CLI本体のインストールです。

~ $ go get -u github.com/heroku/force

すると...

go: missing Mercurial command. See http://golang.org/s/gogetcmd
package github.com/heroku/force
        imports bitbucket.org/kardianos/osext: exec: "hg": executable file not found in $PATH
go: missing Mercurial command. See http://golang.org/s/gogetcmd
package github.com/heroku/force
        imports bitbucket.org/pkg/inflect: exec: "hg": executable file not found in $PATH

あれ、エラー。
どうやら、私のMacにはMercurialが入ってなかった模様。
Mercurialをインストールして、もう一度試します。

# pipはhomebrewでインストールされてた?
~ $ sudo pip install mercurial

# シンボリックリンク作成
# (パスはインストールされた場所に応じて変更してください)
~ $ sudo ln -s ~/.pyenv/versions/2.7.5/bin/hg /usr/local/bin

# 今度こそ
~ $ go get -u github.com/heroku/force

無事にインストールできました。

使ってみる

それでは、実際にターミナルから使ってみましょう。

ログイン

ログインは"force login"コマンドを使います。

~ $ force login

すると、ブラウザでアプリの認証画面が開くので「許可」します。
SS_2014-04-02_0_52_29.png

SOQLを実行

SOQLを実行するには"force query"コマンドを使います。

~ $ force query "SELECT Id, Name FROM User"
 Id                 | Name
--------------------+---------------------
 00510000002bhRwAAI | さんぷる 太郎
 (1 records)

Apexを実行

Apexを実行するには"force apex"コマンドを使います。
apexコードの記述方法は2通りあります。
1. "force apex"を実行した後、入力を受け付けるモードになるので
コードを記述し、Ctrl-Dを押す
2. ローカルファイルにapexコードを記述し、"force apex [ファイル名]"という形で実行する。

1.だとカーソル移動がうまくできないので、個人的には2.の方法が好きです。

force.com CLIのいいところ

SOQLの結果をjson形式で取得できる!

force queryコマンドのオプションにformat:jsonを指定すると、結果をjson形式で取得することができます。

サンプル
~ $ force query "SELECT Id, Name FROM User" format:json
{
 "Done": true,
 "Records": [
  {
   "Id": "00510000002bhRwAAI",
   "Name": "さんぷる 太郎",
   "attributes": {
    "type": "User",
    "url": "/services/data/v29.0/sobjects/User/00510000002bhRwAAI"
   }
  }
 ],
 "TotalSize": 1
}
~ %

一旦実行結果をファイルに出力しておいて、javascriptでごにょごにょする、といったことが簡単にできるかも...

ちなみに、format:はcsvもあるよ、とREADMEに書いてあったのですが
記事執筆時点では実装されてないっぽいです。

apex実行結果のログが表示される!

開発者コンソールのログと同じものが出力されます。なので、

CreateEvent.cls
Event e = new Event(
    Subject = 'force.com CLIで作成',
    StartDateTime = Datetime.now(),
    DurationInMinutes = 60
);

insert e;

// デバッグログ出力
System.debug('現在のEventは' + [SELECT Id FROM Event].size() + '件です');
サンプル
~ $ force apex CreateEvent.cls | grep USER_DEBUG
01:13:15.116 (116262542)|USER_DEBUG|[10]|DEBUG|現在のEventは1件です

というように、System.debugだけを出力してファイルにログを保存、とかもできそうです。

おわりに

いかがでしたでしょうか。
ちょっとしたApexを実行するだけでなく、たとえばテストを開始する時、新規作成した組織にデータを流し込む...などといったことも
ターミナルから簡単に行えそうな気がします。

おまけ

似たような機能を提供するツールとしてJSforceというのもあるみたいなんですが、
こちらは全く触ったことがないので試してみる機会があればまたまとめようと思います。
(リンク)
http://jsforce.github.io/start/

25
24
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
25
24