AntでForce.comのソースコード中の文字列を置換する
Force.comでパッケージ開発しているリリース組織用に名前空間をセットしたり、開発用/テスト用/本番用で外部参照するURLを変えたり、スクリプトをキャッシュさせないためにURL末尾にユニーク文字列を追加したりしたくなることがあります。
そんなときは、Antのreplaceタスクで書き換えてしまうのがお手軽です。
前提とするファイル構成
ここでは下記のようなファイル構成となっているとします。
[プロジェクト] ├ build.properties ├ build.xml ├ [build](自動で作成する) ├ [resource] | ├ [SampleResource] | └ [...] └ [src] ├ [pages] | ├ SampleView.page | └ SampleView.page-meta.xml ├ [staticresources] | ├ SampleResource.resource | └ SampleResource.resource-meta.xml └ [...]
ソースコード中の文字列を置換する
ここでは名前空間を本番用に置換するためのビルドファイルをサンプルとしました。
そのまま書き換えてしまうとビルドのたびにソースコードが変更されてしまうので、一旦コピーして変換するようにします(ソースコード (1))。
その後、名前空間を本番用に変換します(ソースコード(2))。
ここでは、「NAMESPACE」という文字列を「sampleapp」という文字列に置き換えています。
最後に、ソースコードをデプロイします(ソースコード(3))。
<target name="release"> <echo message="release: ${now}" /> <echo message="username: ${sf.username}" /> <echo message="serverulr: ${sf.serverurl}" /> <!-- (1)前回のソースコードを削除してソースコードをコピーする --> <delete dir="${build.dir}/src" /> <copy todir="${build.dir}/src" preservelastmodified="true"> <fileset dir="${src.dir}" /> </copy> <!-- (2)ソースコードを変換する --> <replace dir="${build.dir}/src" token="NAMESPACE" value="sampleapp"> <exclude name="**/*.xml" /> </replace> <!-- (3)ソースコードをデプロイする --> <sf:deploy username="${sf.username}" password="${sf.password}" serverurl="${sf.serverurl}" maxPoll="${sf.maxPoll}" deployRoot="${build.dir}/src" /> </target>
まとめ
もうほとんどForce.comは関係なく、Antの話になってしまっていますが、Force.comのパッケージ開発でちょっとAntに詳しくなっておくとリリース作業を大幅に自動化できます。
他の高機能なビルドツールに比べてAntはお手軽に導入でき、学習コストも低いので個人的にはとてもオススメです。
Enjoy Deploying!
AntでForce.comのStatic Resourceファイルを作成する
Force.comで開発していく上で、Static Resourceファイルを作成するのは手動で行うには面倒です。
Static Resourceファイルはファイル拡張子だけ変更してアップロードしてしまう方法もありますが、そうしてしまうとどんどんファイル数が多くなってしまいので、ZIP圧縮でファイルを一つにまとめてしまったほうがすっきりします。
とはいえ、JavaScriptやCSSを変更するたびに手作業で 不要ファイルを除去→ZIP圧縮→ファイル名変更 するのはさすがに厳しいです。そこで、AntでStatic Resourceファイルを作成させてしまえばいいんじゃないか、というわけです。
前提とするファイル構成
ここでは下記のようなファイル構成となっているとします。
[プロジェクト] ├ build.properties ├ build.xml ├ [build](自動で作成する) ├ [resource] | ├ [SampleResource] | └ [...] └ [src] ├ [staticresources] └ [...]
Antの呼び出し部分
以下のようにarchiveタスクにリソース名(SampelResource)を指定すると、src/staticresource/SampelResource.resourceを作成するようにAntマクロを作成してみました。中間ファイルとしてbuild以下にZIP圧縮前のファイルをコピーしています。
<target name="make"> <archive resource="SampleResource" /> </target>
Antマクロ
実際にStatic Resourceファイルを作成しているAntマクロは下記のようになっています。属性として指定されたリソース名に基づいて処理を実行します。一旦build以下にStatic Resourceに含めたいファイルのみコピーしてからZIP圧縮していますので、不要なファイルを開発組織にデプロイすることもなくなります。
<macrodef name="archive"> <attribute name="resource" /> <sequential> <echo message="compress: @{resource}" /> <delete dir="${build.dir}/@{resource}" /> <copy todir="${build.dir}/@{resource}" preservelastmodified="true"> <fileset dir="${resource.dir}/@{resource}"> <patternset> <include name="**/*.gif"/> <include name="**/*.png"/> <include name="**/*.js"/> <include name="**/*.css"/> </patternset> </fileset> </copy> <zip basedir="${build.dir}/@{resource}" destfile="${src.dir}/staticresources/@{resource}.resource" /> </sequential> </macrodef>
元ファイルは こちら です。
まとめ
これでStatic Resourceファイルを手軽に作成できるようになりました。
本格的にやるのであればGruntなどを使ってもいいところですが、インストールするものが多くなってしまうので、Antでちゃちゃっとやるのもいいと思います。
Enjoy Deploying!
Salesforce1 Platform Mobile Hack Challenge 2014 Japan 結果発表にビックリ!
本日、Salesforce1 Platform Mobile Hack Challenge 2014 Japanの結果発表がありました!
入賞のお知らせ
— pomu0325 (@pomu0325) April 15, 2014
を見て、
のんきにこんなことを呟いていたら、
100万円は誰がゲットしたんだろ
— Akira Kuratani (@a_kuratani) April 15, 2014
中の人から「メール見て」と(汗)。
えと、ありがとうございます!
各所からすごいアプリが登録されてたので、とりあえず動画で笑いが取れればいいや、くらいで完全に想定外でした。
これから各所で公開処刑されるわけですが、頑張っていこうと思います。
Enjoy Hackathon!
Salesforce1 Style Guid
少し前ですが、Salesforce社よりSalesforce1のスタイルガイド(Product Style Guide, Visual guidelines for Salesforce1)が公開されています。Salesforce1 Platform Mobile Hack Challenge 2014 Japanでモバイルアプリを作成するにあたり読み返してみました。
このスタイルガイドは、Salesforce1上に作成するモバイルアプリのデザインを規定するものではなく、Salesforce.com社がSalesforce1に実装するアプリのデザインのルールをまとめたものになります。そのため、スタイルガイドに従ってアプリを作成すれば、似たデザインのアプリを作成できます。
ちなみに、PDFファイルがページの一番下にあります。アイコンのパディングのピクセル数など細かなことはPDFファイルのほうに記載してありますので、ちゃんと理解したい人はこちらを読むことになります。英語版のみの提供となっていますが、スタイルガイドなので図が多くすぐに読みことができます。
自作のPublisher ActionやらFlexible Pageやらの作るうえでのベストプラクティス、使ってはいけないケースなどが載っています。
例えば、Publisher Actionでは使ってはいけないケースとして「複雑なウィザード形式のもの(Complex wizard like multi-step flows.)」的なことが書いてあります。ごめんなさい。
OneStarterのようなSalesforce1のスタイルを適用できるjQueryプラグインも公開している人がいるようなので、標準のSalesforce1の画面と似た画面を作らないといけないようなよくある状況に追い込まれた人は使ってみてもいいかもしれません。
OneStarter
enjoy design!
Salesforce1 Platform Mobile Hack Challenge 2014 Japan に参加しました!
Salesforce1 Platform Mobile Hack Challenge 2014 Japan2014 Japan Salesforce1 Mobile Hack Challenge | Developer Force.com は、Salesforce1 Platformを利用するモバイルアプリケーションを期間内に作成し、応募するものです。なんと賞金総額160万円、一等賞には100万円が贈られます。何がすごいかというとSalesforce1 Platformを使って、しかもモバイルアプリケーションを作るエンジニアの絶対数が…(げほげほっ)。
嘘です。Herokuエンジニア入れたら大量にいます(参加してくるのかな?)。
一応Salesforce界隈で飯を食ってるエンジニアなので、諸々の勉強を兼ねて参加した次第です。
ちなみに、期待の受賞者発表は4月15日までに行われるようです。
Salesforce1 Mobile Hack Challengeのエントリは終了しました。年度末のお忙しい中アプリケーションをご登録頂いた皆様有難うございました。審査の後、勝者は4月15日までにDeveloper... http://t.co/n44nCJyAGd
— Force.com Japan (@developerforcej) 2014, 3月 31
続きを読む
Javaパッケージ名ってどうやってつけてますか?
下書きのまま、投稿し忘れてたエントリーがあったので、年を越さないうちに。
Force.com Advent Calendar 2013に参加するにあたって、Javaアプリ(?)を作る機会があったわけですが、Javaのパッケージ名をどうしようかとちょっと調べてみました。
Javaのパッケージ名は、ドメイン名を逆順に並べることで一意性を担保しているわけですが、個人でなかなかドメイン名を取得されている方は少ないんじゃないでしょうか?(エンジニアならドメインぐらい安いんだから取得しとけ、と言われると…)
なんかないかな〜、と調べていたら、こんなサービスがありました!
財団インターネット法人 パッケージ名登録サービスです。
→ Package BOFホームページ
パッケージ名登録サービスを利用すると、一意なパッケージ名を取得できます。
"jp.gr.java_conf.xxxx" (xxxxは任意)
便利だ〜。
ローンチが1998年、遡ること15年前。そんな昔からあったのか、知らんかった〜。
SDUG Meetup #4 LT「Salesforce1 パブリッシャーアクションの歩き方(Visualforce編)」
Force.com Advent Calendar 2013 4日目が空いてしまっているので、保守エントリーを。
2013年12月18日にSalesforce Developer User Group [Tokyo] Meetup #4 : ATNDが開催されました。
Heroku ConnectやForce.com CLIなどのツール系の話あり、Salesforce $1M Hackthonの参加報告があったり、飛び入りLT多数、などかなり盛りだくさんな感じでした。なんとなく感じたのは、だんだんとForce.com+Herokuの組合せの話題も多くなってきたのかな、ということ。
今後も統合(連携?)がますます進んでいくでしょうし、楽しみな分野です(早くAPIコール数を消費しないようにならないかな)。
さて、Salesforce $1M Hackthonの参加報告でも少しだけ登壇したのですが、それとは別にSalesforce1ネタでLTしました。
発表資料はこちらです。あまりドキュメントのない状態で手探りだった自社製品のSalesforce1対応のフィードバックをまとめました。よろしければ見てやってください。
発表時に見せたパブリッシャーアクションのソースコードはこちらです(gistを貼り付けてみたかっただけです)。
Salesforce1 Quick Action by Visualforce Page sampl ...
前回からちょっと期間が空いてしまったので、次回はもう少し早めにやりましょう〜!
Enjoy Salesforce1!