Gulpを使ってSalesforceにDeployできる『gulp-jsforce-deploy』を試してみました。
Setup
gulpのインストール
いらないかもしれないけど一応。
$ sudo npm install gulp -g
作業環境準備
$ cd desktop $ mkdir work $ cd work $ npm init $ npm install gulp gulp-zip gulp-jsforce-deploy --save-dev
- npm initのnameなどはデフォルトでOKです。
- npm installで『gulp』『gulp-zip』『gulp-jsforce-deploy』の3つのパッケージがインストールされます。
- 『--save-dev』でpackage.jsonのdevDependenciesに自動で書き込まれます。
プロジェクトのファイル構成
次のファイル構成で用意します。
├── gulpfile.js ├── package.json └── pkg ├── classes ├── objects ├── package.xml ├── pages └── staticresources
gulpfile.jsの内容は次のとおりです。
var gulp = require('gulp'); var zip = require('gulp-zip'); var forceDeploy = require('gulp-jsforce-deploy'); gulp.task('deploy', function() { gulp.src('./pkg/**', { base: "." }) .pipe(zip('pkg.zip')) .pipe(forceDeploy({ username: process.env.SF_USERNAME, password: process.env.SF_PASSWORD //, loginUrl: 'https://test.salesforce.com' //, pollTimeout: 120*1000 //, pollInterval: 10*1000 //, version: '33.0' })); });
package.xmlの内容はこんな感じ。
<?xml version="1.0" encoding="UTF-8"?> <Package xmlns="http://soap.sforce.com/2006/04/metadata"> <types> <members>*</members> <name>ApexClass</name> </types> <types> <members>*</members> <name>ApexPage</name> </types> <types> <members>*</members> <name>CustomObject</name> </types> <types> <members>*</members> <name>StaticResource</name> </types> <version>36.0</version> </Package>
Apexクラスの用意
お試し用のApexクラスを用意します。
public with sharing class MyApexController { public MyApexController() { System.debug('Hello! Gulp-JSforce-Deploy!!'); } }
デプロイコマンドの実行
次のようにユーザ名とパスワードを指定してデプロイできるみたいです。
$ SF_USERNAME=username@example.com SF_PASSWORD=yourpassword gulp deploy
ただ毎回入力するのは少し大変。今回はもう一つ用意された方法を確認してみました。『.env』ファイルを用意する方法です。
SF_USERNAME=<ユーザ名> SF_PASSWORD=<パスワード>
この『.env』ファイルはgitリポジトリには追加せずに利用するものだと思います。特にGitHubなどのパブリックなリポジトリの見えるところには追加しないように注意した方がよさそうです。
giboコマンドでgitignoreの作成
次のコマンドで.gitignoreを作成できます。
$ gibo SublimeText OSX Windows Node >> .gitignore
次のコマンドでSublimeTextで.gitignoreファイルを開けます。(事前に設定が必要)
$ subl .gitignore
先頭に.envを追記します。
この設定で『git add .』コマンド実行時に『.env』ファイルが対象外になると思います。
formanの準備
デプロイ時にformanコマンドを利用するのでGemからインストールしておきます。
gem install foreman
こちらの解説がわかりやすかったです。
以上でSetup完了です。
Salesforceにデプロイ
.envファイルを用意したら次のコマンドでデプロイできます。
$ foreman run gulp deploy
- ユーザ名とパスワードが間違っている場合でも、エラーにはならないので注意してください。
- Deploying to server...が実行されずに処理が終了します。
- XMLファイルがない場合はエラーになります。
- Error on pkg/classes/MyApexController.cls : Must specify the metadata file
正しく設定できていればデプロイが正常実行されてSalesforce内にApexクラスが作成されていると思います。
サンプルプロジェクト
ApexページとApexクラスをDeployできるサンプルプロジェクトです。
関連記事
おまけ
Building Static Filesの方法についてJSforceブログに紹介されています。