とあるStartupに勤めるエンジニアの技術ブログ

Salesforce、テスト関係の技術ブログなどを書く予定

Salesforce移行ツールでLightningコンポーネントを扱う

開発者コンソールで開発するようにLightning Components Developer's Guideに書いてあります。
しかし、開発者コンソールで開発するとソースコードリポジトリ管理できなかったり他人と共有するのが難しくなってきます。
Lightningコンポーネントも他のリソースと同様にSalesforce移行ツールでデプロイ・取り出しができるようになっていますので、Salesforce移行ツールを利用することでリポジトリ管理できるようになります(もちろんSalesforce移行ツールを利用しなくてもMetadata APIを利用すれば同様のことができます)。

準備

Lightningコンポーネントソースコードなどを準備します。

ソースコードを準備する

src
 |--sampleCmp
    |--sampleCmp.cmp
    |--sampleCmp.css
    |--sampleCmpController.js
    |--sampleCmpHelper.js

package.xmlを準備する

src/package.xml

<?xml version="1.0" encoding="UTF-8"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
    <types>
        <members>sampleCmp</members>
        <name>AuraDefinitionBundle</name>
    </types>
    <version>32.0</version>
</Package>

Salesforce移行ツールでデプロイする

Salesforce移行ツールを使ってソースコードをデプロします。

ビルドファイルを準備する

build.xml

<project name="LightningSample" default="deploy" basedir="." xmlns:sf="antlib:com.salesforce">
  <property file="build.properties"/>
  <property environment="env"/>

  <target name="deploy">
    <sf:deploy username="(ユーザID)" password="(パスワード)" serverurl="https://login.salesforce.com" deployRoot="src"/>
  </target>
</project>

ターミナルからSalesforce移行ツールを実行する

> ant deploy

Salesforce移行ツールソースコードを取り出す

Salesforce移行ツールソースコードを取り出します。

ビルドファイルを準備する

build.xml

<project name="LightningSample" default="deploy" basedir="." xmlns:sf="antlib:com.salesforce">
  <property file="build.properties"/>
  <property environment="env"/>

  <target name="retrieve">
    <mkdir dir="code"/>
    <sf:retrieve username="(ユーザID)" password="(パスワード)" serverurl="https://login.salesforce.com" retrieveTarget="code" unpackaged="src/package.xml"/>
  </target>
</project>

ターミナルからSalesforce移行ツールを実行する

> ant retrieve

注意点

開発者コンソールを利用しないとエラーチェックが緩くなり、下記のような問題があります。開発者コンソールで開発していると遭遇しないようなエラーに遭遇することもあるので注意が必要です。

  • Developers ConsoleだとSave時にエラーになるソースコードでもデプロイできてしまう
  • ApplicationとComponentのような排他的なファイルも同じディレクトリに置けてしまう(デプロイできるのは片方のみ)

Force.com Adevent Calendar 改め Salesforce1 Advent Calendar になりました!

Salesforce1 Advent Calendar 2014 - Qiita 1日目です。

Force.com Advent Calendarを始めたのは3年前の2011年からになります。
Salesforce1、Wave、Lightningなど次々に進化していっているので、より包含した名称を使うこととして、「Salesforce1 Advent Calendar」に改名してみました。

せっかくなので、これまでのAdvent Calendarを振り返ってみようと思います。

https://atnd.org/events/22909: title

みんなで2周書いていた苦しい時代でした。
あれ?Node.js、Database.comの投稿がいくつか。。。そういえば、Database.comはどうなったんでしょうねぇ(遠い目)。

今見返すと、Node.js、.NET、CI、モバイル(Titanium)、開発環境など今でも話題になっている分野の投稿がたくさんあったりなかなか多彩です。

電子書籍化されたのもいい思い出です。
記事を投稿していただいた皆さん、履歴書に書けますよ〜(黒歴史がまた1ページ)。

https://atnd.org/events/33649: title

少し顔ぶれが増えたような感じですが、まだみんなで2周書いてたりしてますね(汗)。
CTIのネタがあったり、実践的なマニュアルの作り方があったり、RubyからSalesforceに接続したり、なかなか幅広い投稿があった感じです。皆さんなかなかネタが見つからなかったのか、Cloudforceネタが結構あったりしますね。
そういえば、VisualforceのApexタグにパススルーが出てきたのはこのくらいでしたか。

Force.com Advent Calendar 2013 : ATND

書いてくれる人も増えてきて、ようやく1週+αくらいで回せた年でした。
この年は1回目のSalesforce $1M Hackathonが開催されました。なかなかエキサイティングなイベントでしたが、リモートからの応援しかできなかったのが残念だったなぁ、という思い出です。
Salesforce1が発表されたのでSalesforce1ネタが投稿されています。Dreamforceで発表された技術を使ってネタを書いてみるにはいいくらいの時期ですね。

関西のユーザグループUmekitaforceができたのもこのあたりなんですねぇ。

Salesforce1 Advent Calendar 2014 - Qiita

そして、今年になります。
今年のDreamforceではWave、Lightningが発表されました。
Waveについてはまだまだ情報も少ないですが、Lightningについてはすでに試せるようになっているので、今年もいくつか投稿があると思います。最新の話題なだけにLightningに興味がある人は今年のAdvent Calendarは見逃せないでしょう。

以上、次の方よろしくお願いします!

AndroidStudio+SalesforceMobileSDKによるAndroid開発環境構築

MacAndroid StudioSalesforce Mobile SDKを利用したAndroidアプリ開発環境を構築するためのメモ書きです。

事前準備

Java SE Developer Kit 7をインストールする

公式サイトからJDKをダウンロードしてインストールする
http://www.oracle.com/technetwork/java/javase/downloads/index.html

Android Studioをインストールする

公式サイトからAndroid Stadioをダウンロードしてインストールする
http://developer.android.com/sdk/installing/studio.html

インストール先: /Applications/Android\ Studio.app

Android SDK ManagerでSDKをインストールする
今回インストールしたPackage

検証バージョン: 0.8.14(2014/11/22時点)

Node.jsをインストールする

公式サイトからNodeJSをダウンロードしてインストールする
http://nodejs.jp/

Gradleをインストールする

公式サイトからGradleをダウンロードしてインストールする
http://www.gradle.org/downloads

Salesforce Mobile SDK for Android

npmを利用してforcedroid(Salesforce Mobile SDK for Android)をインストールする

> sudo npm install -g forcedroid

ANDROID_HOMEを設定する

export ANDROID_HOME=(Android SDKをインストールしたディレクトリ)
...

検証バージョン: 2.3.1(2014/11/22時点)

Androidアプリを作成する

Salesforceで接続アプリケーションを作成する

  1. Developer Edition にログインする
  2. 接続アプリケーションを作成する(コンシューマ鍵、コールバックURLをあとで利用する)

forcedroidでアプリケーションを作成する

Salesforce接続処理が組み込まれたアプリケーションのサンプルプロジェクトを作成する

> forcedroid create
Enter your application type (native, hybrid_remote, or hybrid_local): native
Enter your application name: Test
Enter the target directory of your app: Test
Enter the target android api for your application (number between 8 (Froyo) and 19 (KitKat): 19
Enter the package name for your app (com.mycompany.my_app): com.example.test
Do you want to use SmartStore in your app? [yes/NO] ('No' by default) 

Android Studioにインポートする

下記の手順でサンプルプロジェクトをインポートする

  1. Android Studioを起動し、Import Project...をクリックする
  2. 上記で作成したディレクトリを選択してOKボタンをクリックする
  3. Create project from existing sourcesを選択してNextボタンをクリックする
  4. Project name、Project locationを確認してNextボタンをクリックする
  5. Source filesを確認してNextボタンをクリックする
  6. Librriesの名称を確認してNextボタンをクリックする
  7. Modulesの名称を確認してNextボタンをクリックする
  8. Project SDKを確認してNextボタンをクリックする
  9. Manifestファイルを確認してNextボタンをクリックする
  10. Open Module Settingsを開く
  11. Module「Test」のSourcesタブを開き、srcのマークをSourcesに変更する
  12. Module「Test」のDependenciesタブを開き、libs(Library)を追加する
  13. Test/res/values/bootconfig.xmlを開き、remoteAccessConsumerKey、oauthRedirectURIをSalesforce接続アプリケーションの設定値に書き換える

サンプル・アプリケーションを実行する

Android Studioからインポートしたプロジェクトを実行する

  1. サンプルプロジェクトを開き、Runボタンをクリックする

補記

Salesforce Mobile SDKのバージョンによって動作させるまでの最低限の手順が異なるので注意が必要です

今年もあの季節がやってきました!

そう、技術系Advent Calendarの季節です。

普段あまりアウトプットしないエンジニアもこのときばかりはこぞって投稿します(もしろ、このときのためにブログを持っている人も何人か。。。)

 

ということで、今年はForce.com Advent Calendar改めSalesforce1 Advent Calendarを立ててみました!

 

Salesforce1 Advent Calendar 2014 - Qiita

 

昨年までより少し範囲を広げてForce.com から Salesforce1に。ついでにATNDからQiitaに。Salesforce1にかすってる投稿であればOKです(過去いくつか小説も…)。まだ半分ちょっとくらいなので、まだまだ参加者募集中です。

 

ちなみに、Salesforce DUG Tokyoでは、今年のDreamforceのMiniHackの問題をみんなでやってみるもくもく会(11/28)をやります。Advent Calendarネタは参加レポートでもよいかなと思います。

 

Salesforce DUG Tokyo DF14 MiniHack Moku-Moku Meetup - Salesforce DUG Japan | Doorkeeper


さぁ、みんなで盛り上げましょう!

Enjoy Advent Calendar!

 

最後に。。。
はてなブログのAndroidアプリが出たッ!

Salesforce DUG Tokyo #7に参加してきた!

Salesforce DUG [Tokyo] Meetup #7 - Salesforce DUG Japan | Doorkeeper
参加と言いながら、一応主催者側なので早めに開場入りしてセッティングから。今回は皆さま集まりが早い。

Winter'15リリースノート輪読(@yonet77さん)

DreamforceではLightingやWaveに話題をかっさらわれてあまり新機能がないかな、と思っていてもかなりのボリューム。アクションリンクやオンラインストレージとの連携は地味に普段の使い勝手がよくなりそうなところです。
パイロットのものも結構ありますが、Quick Deployとか早くリリースされるといいですね。

あと、全部やらせてしまって、すみません、すみません、すみません。

Do you known issues ? - Practical use of known issue -(@xlouderさん)

Known Issuesはとりあえずfeedlyに突っ込んでほぼ毎日見てます。
OEMパートナーとしてサポートもしていると結構見てないと、どきどきすることもあったりなかったりとか。レポーターが多いと早く直るかもしれないので、知人の人がレポーターにいたら手伝ってあげるといいかもですね。

$1 Million Hackthon Challenger(チーム、オークニーさん)

今回のHackthonは過酷なものになったようです。
いきなりSwiftBlueToothすれ違い通信に挑戦するとかなかなかのチャレンジャーだったりしたようですが、そのおかげもあって今回の発表内容はProjectXばりのアツい内容でした。

発表ではこんな言葉を残していました。
「体力的にも、メンタル的にも厳しかった…」
「笑顔が消えた…」
「寝袋持参はアメリカン・ジョークじゃなかった…」

もう涙なしでは…。

ついでにMVPな方々に英語でビジネスプラン含めてプレゼンするとかかなりハードな審査だった模様。結果は置いといて、確実に日本にもHackthonの経験が蓄積されているので、来年も頑張りましょう!(いつか参加できるのか。。。)

Dreamforce2014 ~Mini Hack~(@pomu0325さん)

Dreamforceの会場では、Demo Paloozaと呼ばれるハイテンションにS1活用事例をLT形式で発表するところがあるとか。
そして、主に「Mini Hack」のご紹介。なかなかコードレスで作るとかパズル要素があって面白そうです(普段から限界に挑戦していないと分からなそうですが。。。)。また似た問題に出くわすかもしれないので、要学習ですね!

中の人からSalesforce1 World Tour Tokyoについて

2014/12/4はSalesforce World Tour Tokyo - セールスフォース・ドットコムがあるので、空けておくようにとのこと!
なんだかここに書くのは憚れる内容だったので、あとはtwitterまとめでも見てください。

twitterまとめ

twitterのツイートをまとめました。編集可にしているので、追加・削除・デコよろしくお願いします!

enjoy meetup!

第2回 日本Seleniumユーザーコミュニティ勉強会に参加してみた

第2回 日本Seleniumユーザーコミュニティ勉強会 - connpass に参加しました!
「勉強会はブログを書くまで」ということで、ざっくりと感想まで。
ハッシュタグ#seleniumjp」に勉強会中のツイートが流れてます。

Seleniumをもっと知るための本の話(玉川竜司さん)

エンジニアたるもの英語情報を読むといいよ、というお話。耳が痛いですね。
英語の技術書を読むには、このあたりを利用するとよいそうです。特に、Safari Books Onlineについては定額サービスで面白いですね。

脱・独自改造!GebでWebDriverをもっとシンプルに(玉川紘子さん)

Geb(じぇぶ)の紹介でした。
WebDriverをJavaで書くとDOMを操作するときのような煩雑さがあり、テストコードが長くなってしまいがち。Gebを利用すると、要素検索などをjQueryライクに記述でき、かなりスッキリとしたテストコードが書けるとのこと。

GebはGroovyで利用するライブラリで、Javaで利用する場合はFluentLeniumがあるようです。

海外のSeleniumカンファレンスではどんな発表がされているのか2014(伊藤望さん)

Selenium Conference に動画や資料が上がっているので、見てみると面白いよ、というお話。
いろいろおもしろいタイトルの発表があるようです(笑)。

  • OSSを使い早く失敗するために、エンタープライズの雲の上に築かれたドラゴンをどう調教したか」
  • Seleniumのノードには、宝の島から海賊が奪った戦利品よりも素晴らしいお宝が眠っている」
ハイパフォーマンスSeleniumテスト@サイボウズ(宮田淳平さん)

Kintone中の人によるテスト自動化に関するお話。
Platformerということもあり、自動化には結構力が入っている感じでした。大規模なアプリケーションに対して、テストケースの軽量化、並列化を行って、テスト実行が30分以内で収めているところに並々ならぬ意気込みを感じました。

「テストコードの品質は製品のコードと同様に重要になってくる」

この言葉にはテスト自動化で苦労してきた重みを感じました。

社内勉強会で利用した書籍たち。

継続的デリバリー 信頼できるソフトウェアリリースのためのビルド・テスト・デプロイメントの自動化

継続的デリバリー 信頼できるソフトウェアリリースのためのビルド・テスト・デプロイメントの自動化

実践アジャイルテスト テスターとアジャイルチームのための実践ガイド (IT Architects’Archive ソフトウェア開発の実践)

実践アジャイルテスト テスターとアジャイルチームのための実践ガイド (IT Architects’Archive ソフトウェア開発の実践)

クックパッドアプリの開発を支援するAppiumの話(松尾和昭さん)

クックパッド中の人によるモバイルアプリのテスト自動化に関するお話。
Appiumでテスト自動化する範囲、ユニットテストで自動化する範囲、人間系でテストする範囲を意識的に分けて、最適な分担を戦略的に考えているところは参考になりました。

感想

翻訳本執筆者、テスト自動化を支援する立場、プラットフォーマー、B2Cサービス提供者の違いが出て、楽しく聴くことができました。
特に、プラットフォーマーはバッチサイズを極力小さくするためにテスト実行時間にこだわるところ、B2Cサービス提供者はツールと人間のテストをうまく使い分ける戦略にこだわるところには哲学を感じました。

enjoy selenium!

Chatterが有効化されているか判定する

ChatterのプロファイルベースのロールアウトがSummer'14からGAとなりました(有効化するためにはサポートへの連絡が必要です)。
これによって、組織としてはChatterを有効化してもユーザレベルではChatterを無効化することができるようになりました。そのため、利用しているユーザがChatterを利用できるか判定するための方法が変わってきます。

ということで、Chatterが利用できるか判定する方法を調べてみました。

有効化していない場合

組織単位でChatterが有効化されているかチェックする

ConnectApi.OrganizationSettings o = ConnectApi.Organization.getSettings();
System.debug('Chatter=' + o.features.chatter);
有効化した場合

ユーザごとにChatterが有効化されているかチェックする

ConnectApi.UserSettings u = ConnectApi.Organization.getSettings().userSettings;
System.debug('Chatter=' + u.hasChatter);

基本的には、ConnectApiを叩けば値を取得できます。UserSettingsクラスのhasChatterはChatterのプロファイルベースのロールアウトを有効化していない状態でも値を取得できましたので、有効化した場合の書き方をしておけば、どちらの状況でも対応できそうです。

ただ、UserSettingsのhasChatterはAPIレファレンスに載っていないようなので今後変更になるかもしれません。

Enjoy Chatter!

2014/8/17追記:APIリファレンスに掲載されていることを確認