yonet77的な雑記帳

日々思いついたネタなどを書き留めておきます

Dreamforce 2012に参加したよ - 1日目 -

突然ですが、Dreamforce2012に参加してきました。
実はSan Franciscoに来るのは10数年ぶりでして、当時の記憶は幾分残ってましたが、泊まったホテルとかは思い出せず。。ちなみに、初めて1人旅したのがSan Franciscoだったので、勝手に感慨深く思ってましたw

それはさておき、Dreamforceは初参加でしたので、色々と圧倒されまくりな4日間でした。(あー疲れた...w)
(忘れないうちに)覚えている限りで所感を残しておこうと思います。

1日目 (9/18)

参加したセッションはこんな感じでした。

  • Building Desktop & Mobile HTML5 Applications with Sencha and Force.com
  • Apex Design Patterns
  • Introduction to Force.com Canvas Apps
  • Test Driven Development Fundamentals on Force.com


 

Building Desktop & Mobile HTML5 Applications with Sencha and Force.com

Javascript UI FrameworkであるSenchaを使って、Force.comと組み合わせて、いかにしてMobileアプリやらWebアプリを作りましょうか?といった話でした。
Salesforce.comでもSencha(というかExtJSといった方が良いかな?)は使われていて、開発者コンソールや、レポートビルダー等で見かけることができます。
その他、おそらくRemoteActionにも使われているのではないでしょうか?

自分もExtJSを使っておりまして...個人的には結構気に入ってます。
※ちなみに、ライセンス形態としては、商用版とオープンソース版の2種類が用意されています。

セッションの内容としては、このために書いた..と思われるブログが2つあって、それを見た方が早そうですのでご紹介します。

  1. Developing Mobile Applications with Force.com and Sencha Touch - Part 1 | Blog | Sencha
  2. Developing Mobile Applications with Force.com and Sencha Touch - Part 2 | Blog | Sencha

ちなみに、既に日本語訳までも!w(素晴らしいです)

  1. Force.comとSencha Touchを使ったモバイルアプリケーション開発 Part1 | 株式会社ゼノフィ
  2. Force.comとSencha Touchを使ったモバイルアプリケーション開発 Part2 | 株式会社ゼノフィ

個人的には、Part2 で取り上げられている "Step 8: Adjusting the Model and Adding a Data Proxy" が非常にタメになりました。
SalesforceでExtJS4を使ってみようか (1) - yonet77的な雑記帳にて、ExtJSからForce.comにデータを連携するProxyクラスを(頑張って)自作してましたが、"Step8"のやり方を勉強して、現在製作中のアプリをより良い方向に変えていきたいと思います。。

あと、発表して頂いた方に自分が作っている最中のアプリを紹介することができました。(I can't speak English.. なので、どこまで伝わったか疑問ですが。。)
汗かきながら説明している自分がなんだか滑稽でしたが、まぁせっかく来たんだし、と。
日本にもExtJSを使ってForce.com上でアプリ作っているヤツもいるんだゼ!と知らしめる(?)ことができて何よりでした。

 

Apex Design Patterns

GoFデザインパターンをApexでやってみたよ!という類いの話です。
紹介したパターンはこんなところでした。

  1. Singleton
  2. Strategy
  3. Decorator
  4. Facade
  5. Composite
  6. Bulk State Transition(これは自作した...?)

ここでは、

  • こんなところで問題が起きたよ
  • このパターンを使えばいいんじゃない?
  • コード書いてやってみよう!

という順番で各パターンを説明してました。

何を隠そう、デザインパターンは詳しくない(おい!)のですが、内容自体は割とよく見かける話でした。個人的にはCompositeパターンの例がなかなか面白かったです。
こんな感じにCompositeパターンを使った演算子の実装を紹介していました。

■実装

public interface Expression {
    Expression add(Expression expr);
    Expression set(String name, Boolean value);
    Boolean evaluate();
}

public abstract class Composite implements Expression{
    public List<Expression> children {get; private set;}
    public Composite(){ this.children = new List<Expression>(); }
    public Expression add(Expression expr){
        children.add(expr);
        return this;
    }
    public Expression set(String name, Boolean value){
        for(Expression expr : children) expr.set(name,value);
        return this;
    }
    public abstract Boolean evaluate();
    public Boolean hasChildren{get{ return !children.isEmpty(); }
}

public class AndComposite extends Composite{
    public override Boolean evaluate(){
        for(Expression expr : children) if(!expr.evaluate()) return false;
        return true;
    }
}

public class OrComposite extends Composite{
    public override Boolean evaluate(){
        for(Expression expr : children) if(expr.evaluate()) return true;
        return false;
    }
}

public class Variable implements Expression{
    public String name {get;private set;}
    public Boolean value {get;private set;}
    public Variable(String name){ this.name = name; }
    public Expression add(Expression expr){ return this; }
    public Expression set(String name, Boolean value){
        if(this.name != null && this.name.equalsIgnoreCase(name))
            this.value = value;
        return this;
    }
    public Boolean evaluate(){ return value; }
}


■使用例:

//1 OR (2 AND 3)
Expression expr = (new OrComposite())
    .add(new Variable('1'))
    .add((new AndComposite())
        .add(new Variable('2'))
        .add(new Variable('3'))
    )
    .set('1',false)
    .set('2',true)
    .set('3',false);

System.debug(expr.evaluate());
//FALSE OR (TRUE AND FALSE) => FALSE

expr.set('3',true);

System.debug(expr.evaluate());
//FALSE OR (TRUE AND TRUE) => TRUE

なるほどねーと思いました。そもそもの話で、GoFパターンをちゃんと理解しておかないとなーと常日頃思ってますので、引き続き精進しようと思います。。。

 

Introduction to Force.com Canvas Apps

このDreamforceで何度もデモを見させられたCanvas Appsの紹介でした。
New at Dreamforce 12: Force.com Canvasが参考になるのではないでしょうか。
すごーくざっくり言うと、"FacebookアプリのForce.com版"といった感じでしょうか。。
Canvasアプリを新たに作成するときには、テンプレートが用意されているので、それに従って作れば「あっ!」という間にHeroku上にCanvasアプリが作成されます。
既にあるものをForce.comに組み込むこともできるみたいです。
ここらへんの情報は色々出回っているので、既にご存知かと思いますが、最後に大事なポイントを。

 

Test Driven Development Fundamentals on Force.com

TDDの基礎...という感じでした。"on Force.com"とありますが、別にForce.comに限った話ではなく、割と一般的な話でした。とはいっても、非常に大事なテーマなので、どっかの誰かに聞かせてやりたい気持ちで一杯です。
大きなポイントとしては、

  1. あるユースケースに従って、テストコードを書く
  2. テスト:Red
  3. 実装する
  4. テスト:Green
  5. リファクタする
  6. 次のユースケースを読み込む(そして「1.」へ戻る..)

といった"黄金の回転"を回し続けていくことが大事なんだよ、ということを語ってくれていました。

セッションでは、この回転を途中まで紹介して、残りの回転は各自(以下を参考にして)やってみよう!という締めでした。
knthornt/Dreamforce-2012---TDD-Session · GitHub


最後に、質問セッションにて「TDDの中で、リファクタする最も良いタイミングはどう思いますか?」的な質問を投げてみました。
回答としては(多分)「テストがGreenになった後ならいつでもいいと思うし、自分で『このコード気持ち悪いな』と思ったらリファクタすべきじゃないかな」といった感じでした。(英語を全て聞き取れなかった... orz)
とにかく

マイクを手に取って、英語で質問する

ということを経験してみたかったので、内容はさておき、緊張感Maxの状態でやり遂げられて良かった...と思います。(すげー汗かきました...)


とまぁ、1日目としてはこんな感じでした。2日目以降はそのうち....