アーカイブ

2010 年 4 月 のアーカイブ

slim3 と Velocity の連携 その3 Controller で値の入出力、バリデーションチェック

2010 年 4 月 16 日 tdtsh Comments off

前々回前回にわたり、slim3とVelocityのインストールをして、基本的なController、Model、Serviceの各クラスの作り方を書きました。

slim3では、1つのページ(URL)に1つのControllerクラスを作ります。

フレームワークにより、1つのサーブレットで沢山の機能を持ついわゆるマジックサーブレットにはならない事が強制されます。

しかもマッピングの為の設定ファイルを書かないで済むみます。

設定ファイルと言えばslim3というよりGAEの事ですが、スキーマレスでRDBMSの物理設計や論理設計をすっ飛ばして開発出来るのは非常に楽です。

一応元RDBMS屋な自分としては涙目な訳ですが、これも時代の流れと諦めてます。

mavenでJavaBeanからOracleとかのDDLを生成した時にも感動しましたが、ソレとは比較にならない位開発の負荷が激減します。

代わりにGAEでは機密性をどう担保するの?とかバックアップとらんでえーの?とかデータの一貫性大丈夫?とか運用フェーズでの苦労は増えそうな予感がします。

あとslim3では、URLが判ればソースコードの場所がすぐ判ります。

保守フェーズではコレは非常に重要なことです。
一度でも他人の作ったWEBアプリケーションを保守したヒトなら判るでしょう。

代償?として、slim3ではControllerのコードを沢山書く事になる訳で、1つ1つのControllerのコードをいかにスリムにするかが、生産性を落とさない為に重要になってきそうです。

その為には、slim3に既に用意されている機能をフル活用し、slim3の制約を受け入れ、自己流のコードを少なくするする方向で設計・開発する事が重要でしょう。

また、slim3をさわる方は、おそらく業務アプリケーションを請負で作っている方が主流なんだと思いますが、いわゆるWEB屋の現場では「ページ作るヒト」 = 「WEBデザイナ的なヒト」 という現場も結構あるんじゃないでしょうか。

「Controllerを作るヒト」 = 「perlやphpならちょっと書けるWEBデザイナ」位を想定して、手順化や規約作りをしておいた方がよさそうです。

まだチョットしか触ってませんが、slim3が感動的な位よさげなもので熱くなってしまいました。

前置きが長くなりましたが、今回はControllerを作りこんでいきます。
入会フォーム的なものを作る前提で書いています。

 
 


ControllerクラスでHTTPリクエストの引数を取得する

Controller で HTTPリクエストのパラメータ (GET、POSTの引数)は、親のControllerクラスのasString(), asShort(), asInteger(), asLong(), asFloat(), asDouble(), asBoolean(), asDate() and asKey()を使えば取得できます。

public class IndexController extends Controller {
    public Navigation run() throws Exception {
		String email = asString("email");
		....

 
 


VMファイル側でフォームの値を保持する

で、VMファイル(VTLを書いたTempleteファイル、index.vmとか)側で、普通は、フォームに一度入力した値を保持しときますよね。
slim3 には Struts で言う所の ActionForm に相当するクラスが無い様です。
JSPならサンプルが有るんですが、VTL用に方法を考えないといけません。

とりあえず、Requestパラメータは RequestHandler によってRequestのAttributeにコピーされているそうなので、こうしました。

<input type="text" name="email" value="$!request.getAttribute('email')" />

 
 


Controllerクラス と VTL でバリデーションチェックをする

slim3のControllerにはバリデーションチェックも用意されています。

これもslim3-demoを参考にしました。

public Navigation run() throws Exception {
	if (!validate()) {
		return forward("/path/to/failed.vm");
	}
	return forward("/path/to/success.vm");
}

protected boolean validate() {
	Validators v = new Validators(request);
	v.add(meta.email, v.required(), v.maxlength(256), v.minlength(6)
		, v.regexp("\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*([,;]\\s*\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*)*"));
	return v.validate();
}

うーん、簡単です。

詳しくは、org.slim3.controller.validator.Validators クラスのAPIを見て、との事です。

 
 


バリデーションチェックの結果をVMファイルで表示する

で、結果をView側で表示する訳ですが、JSPを使用する場合に、エラーメッセージを参照するのは簡単です。

${f:h(errors.email)}

で、VelocityのVTLではどーしたもんかなぁと小一時間悩みましたが、エラーメッセージはRequestスコープのAttribute(errors)にセットされているのでそれを使います。

#if($request.getAttribute("errors").email)
	<font color="red">$!request.getAttribute("errors").email</font>
#end

Velocityのmacroにしようと挑戦しましたが、出来ませんでした。

 
 
余談ですがRequestスコープのAttribute(slim3.controller)にControllerもセットされる様です。
 
 


バリデーションエラーメッセージのプロパティ名を日本語化

さて、バリデーションチェックが便利になりましたが、表示されるエラーメッセージのプロパティ名がクラスのフィールド名になってしまいます。

先述の例では、こんな感じです。

emailは必須です。

ソースコードを読みあさる事数時間、しばし悩む。
あとになってしっかりドキュメントに書いている事に気がつきました。

ここです

ロケールによって属性名を変更したい場合は、label. というエントリを /src/application[_locale].properties に定義して下さい。

src/application_ja.properties に書き込めばよいです。

書式はこうです。

label.email=メールアドレス

native2asciiする必要がありますので、実際にはこうなります。

label.email=\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9

エラーメッセージはこうなりました。

メールアドレスは必須です。

 
 


バリデーションエラーの場合 type=”text”のフォームの色を変える

slim3-demo を動かしてみると、エラー時にフォームの表示を工夫しています。
JSPの場合タグライブラリのerrorClassを使えば良いようです。

<input type="text" ${f:text("email")} class="${f:errorClass('email', 'err')}"/>

slim3-blankでは最初から、スタイルシート側 で inputタグのクラスがerrの場合の色指定をしています。
スタイルシートをいじれば色々と応用できそうですね。

VMファイルでこれを実現するのには、org.slim3.jsp.Functions の errorClassメソッドをパクってVelocityServlet側で同様の機能を実装しちゃいました。

<input type="text" name="email" class="$p.errorClass('email', 'err')" value="$!request.getAttribute('email')" />

 
 


 
 

今回、思ったほど進みませんでした。
次回は、更新系の処理を完成させたいです。

カテゴリー: Google App Engine, slim3 タグ:

slim3のインストール、Velocity との連携 その2

2010 年 4 月 15 日 tdtsh Comments off

前回、slim3とVelocityのインストールをして、Controllerクラスを作ってみました。
その続きです。
 


Modelクラスの作成

  • パッケージ・エクスプローラにてプロジェクト直下の build.xml をダブルクリックする
  • 右側のアウトライン・ビューにて、[gen-model]タスク※を右クリックする。
    ※[gen-model]が複数ある場合は、◎みたいなアイコンの方
  • [実行(R)] – [1 Ant ビルド Alt+Shift+X, Q] (1番目の項目) をクリックする
  • [構成の編集]ダイアログにて、[gen-controller[デフォルト]]のチェックを外し、[gen-model]にチェックを入れ、[実行(R)]ボタンをクリックする。
  • [Ant Input Request]にて、任意の文字列 (例:Member)を入力する
  • 下記ファイルが生成されている事を確認する。

    • src/my/package/model/Member.java
    • test/my/package/model/MemberTest.java

 
実に簡単です。

 

  • あとは、フィールドとかゲッターとかセッターとかを必要に応じて付け足します。

    永続化するフィールドに @Persistent アノテーションは要りません。

    フィールドを永続化したくない場合は、
    @Attribute(persistent = false)
    アノテーションをつけます。
  • 明示的にインデックスづけを中止するアノテーションもあります。
    @Attribute(unindexed = true)
  • 以下のものについては、@Attribute(lob = true) アノテーションをつける事で永続化できます。インデックスは作成されません。

    1. シリアライズ可能( implements Serializable 的な )クラス
    2. バイト配列( byte[]な )クラス
    3. 長いテキスト文字列(500バイトより大きいString型)
    4. コレクション

      • java.util.ArrayList<...>
      • java.util.LinkedList<...>
      • java.util.HashSet<...>
      • java.util.LinkedHashSet<...>
      • java.util.TreeSet<...>
      • java.util.List<...>
      • java.util.Set<...>
      • java.util.SortedSet<...>

 


1対多の Modelクラスを実装する

さきほどこさえたMemberクラスに対し、Circleクラスをこさえて 1対多のリレーションを実現します。
いよいよ、slim3の有難味が分かり始める予感。

リレーションシップ (Slim3 日本語サイト(非公式))

を読みながら、eclipseのエラーメッセージに従い実装していくと、結果こうなりました。

private ModelRef circles = new ModelRef(Circle.class);
public ModelRef getCircles() {
	return circles;
}

ドキュメントによると、保存はこんな感じ。

Circle circle = new Circle();
Member member = new Member();
member.getCircles().setModel(circle);
Datastore.put(circle, member);

参照はこんな感じ。

Key memberKey = ...;
Member member = Datastore.get(Member.class, memberKey);
Circle circle = member.getCircles().getModel();

うん。覚えやすそうです。
関連(例では多の方のCircle)はレイジーにロードされるそうです。

 


Serviceクラスの作成

  • パッケージ・エクスプローラにてプロジェクト直下の build.xml をダブルクリックする
  • 右側のアウトライン・ビューにて、[gen-service]タスク※を右クリックする。
    ※[gen-service]が複数ある場合は、◎みたいなアイコンの方
  • [実行(R)] – [1 Ant ビルド Alt+Shift+X, Q] (1番目の項目) をクリックする
  • [構成の編集]ダイアログにて、[gen-controller[デフォルト]]のチェックを外し、[gen-service]にチェックを入れ、[実行(R)]ボタンをクリックする。
  • [Ant Input Request]にて、任意の文字列 (例:MemberService)を入力する
  • 下記ファイルが生成されている事を確認する。

    • src/my/package/service/MemberService.java
    • test/my/package/service/MemberServiceTest.java

 
Serviceに関する説明は、今の所Slim3公式サイトにもSlim3 日本語サイト(非公式))にもありません。

slim3-demoをチェックアウトして、ソースコードを見てみる事をオススメします。
実に判りやすいです。

永続化層の操作を中心としたビジネスロジックをServiceで実装して、Controllerで利用すれば良いと思います。
とりあえずは、slim3-demoを参考にして、CRUDを実装しときます。
必要に応じてあとで付け足すことにします。

public class MemberService {

	private MemberMeta mMeta = MemberMeta.get();

	public Member get(Key key, Long version) {
		return Datastore.get(mMeta, key, version);
	}

	public List getAll() {
		return Datastore.query(mMeta).asList();
	}

	public void insert(Member member) {
		SLog.log.info("insert ("+ member.getClass().getName() + ")");
		Transaction tx = Datastore.beginTransaction();
		Datastore.put(tx, member);
		Datastore.commit(tx);
	}

	public Member update(Key key, Long version, Map input) {
		SLog.log.info("update()");
		Transaction tx = Datastore.beginTransaction();
		Member member = Datastore.get(tx, mMeta, key, version);
		BeanUtil.copy(input, member);
		Datastore.put(tx, member);
		Datastore.commit(tx);
		return member;
	}

	public void delete(Key key, Long version) {
		SLog.log.info("delete member ()");
		Transaction tx = Datastore.beginTransaction();
		Member member = Datastore.get(tx, mMeta, key, version);
		Datastore.delete(tx, member.getKey());
		Datastore.commit(tx);
	}
}

 


次回は、更新系のControllerを作りこんだり、バリデーションチェックをしたりします。

カテゴリー: Google App Engine, slim3 タグ:

slim3のインストール、Velocity との連携

2010 年 4 月 14 日 tdtsh Comments off

重量級のフレームワークはGAE/J上でspin-upの速度が遅い。JDOでDatastoreを操作してもsipn-upが遅い。その上トランザクションの要件を満たそうと思うと、難易度が高い。

App Engineではどの言語を使えばいいのか – ひがやすを blog

悩んだ挙句、オレオレフレームワークを捨て、Slim3に移行する事に決めました。

でもやはり、toCのWEB屋にとってJSPはキツイ。
保守フェーズ(運営)は主にエディターとかWEBデザイナとかが担う訳でして、彼らが扱いやすいVelocityが使いたい訳です。慣れてるし。

多少の性能ダウンは覚悟で、slim3 と Velocityと連携させます。
まぁvmファイルの数が少ない内はVelocityも早いですし。

GAE/Jのロードマップ上、スピンダウン/スピンアップの回避が出来る方法が提供されるかも知れない様ですから、それにちょっと期待します。

最初の方は、基本的に、スタートガイド (Slim3 日本語サイト(非公式))に書いている事と同じです。

eclipseは日本語化された3.4を使用し、Google Plugin for Eclipse や Google App Engine JAVA SDKのインストールは終わっているものとします。
因みにOSはWindowsでJDKは6u17です。

 


slim3ブランクプロジェクトのインストール

  • Downloads – slim3 – Project Hosting on Google Codeより、最新バージョンのSlim3ブランクプロジェクト(2010-04-13時点ではslim3-blank-1.0.1.zip)をダウンロードする
  • ダウンロードしたzipファイル(slim3-blank-X.X.X.zip ※Xは可変)を解凍する
  • 解凍したslim3-blankをeclipseのワークスペースにインポートする為に、eclipseを起動する
  • [ファイル(F)] – [インポート(I)] をクリックする
  • [一般] – [既存プロジェクトをワークスペースへ]を選択し[次へ(N)]クリックする
  • [ルート・ディレクトリーの選択(T)]にて、先ほど解凍したslim3-blankディレクトリを指定し、[終了(F)]をクリックする

 


Eclipseの設定

  • [ウィンドウ(W)] – [設定(P)]をクリックする
  • 設定の左ペインより、[Java] – [コード・スタイル] – [インポートの編成]をクリックする
  • [.* (例 'java.lang.Math.*) に必要な静的インポート数(S)]に1を設定し、[適用(A)]をクリックする
  • 設定の左ペインより、[Java] – [エディター] – [コンテンツ・アシスト] – [お気に入り] をクリックする
  • [新規タイプ(T)]ボタンをクリックする
  • [新規型お気に入り]にて、下記を追加し、[適用(A)]をクリックする

    • org.hamcrest.CoreMatchers
    • org.junit.Assert
    • org.junit.matchers.JUnitMatchers
  • 設定の左ペインより、[一般] – [ワークスペース]をクリックする
  • [自動的にリフレッシュ(R)]にチェックを入れ、[OK]をクリックする

 


libにあるslim3-gen-xxx.jarをアノテーション処理のファクトリパスに追加

  • パッケージ・エクスプローラにてslim3-blankプロジェクトを選択する
  • [プロジェクト(P)] – [プロパティー(P)]をクリックする
  • [Javaコンパイラー] – [注釈処理] – [ファクトリーパス]をクリックする
  • [JAR の追加(J)]をクリックする
  • [JARの選択]ダイアログにて、[slim3-blank] – [lib] – [slim3-gen-1.0.1.jar]を選択し、[OK]をクリックする
  • [OK]をクリックする

 


ブランクプロジェクトの実行

  • パッケージ・エクスプローラにてslim3-blankプロジェクトを選択し、右クリックする
  • [実行(R)] – [Webアプリケーション]をクリックする

 


プロジェクト名を好みの名前にリネーム

  • パッケージ・エクスプローラにてslim3-blankプロジェクトを選択し、右クリックする
  • [リファクタリング(T)] – [名前変更(N)]
  • [Javaプロジェクト名の変更]にて、新しい名前を入力する

 


slim3.rootPackageの変更

war/WEB-INF/web.xml を編集する。

<context-param>
  <param-name>slim3.rootPackage</param-name>
  <param-value>slim3</param-value>
</context-param>
↓
<context-param>
  <param-name>slim3.rootPackage</param-name>
  <param-value>my.package</param-value>
</context-param>

 


Velocityのインストール

詳細は、先日書いた手順を参照ください。

  • ライブラリをWEB-INF/lib/にコピー

    • velocity-1.6.2.jar
    • velocity-tools-1.4.jar
  • ビルドパスに追加
  • web.xml追記

    <servlet>
    	<servlet-name>velocity</servlet-name>
    	<servlet-class>
    		my.package.control.VelocityServlet
    	</servlet-class>
    </servlet>
    <servlet-mapping>
    	<servlet-name>velocity</servlet-name>
    	<url-pattern>*.vm</url-pattern>
    </servlet-mapping>
    

 


Velocityの依存性をwar/WEB-INF/lib/にコピー

以下をコピーしてビルドパスに追加する。

commons-beanutils-1.7.0.jar
commons-chain-1.1.jar
commons-collections-3.2.jar
commons-digester-1.8.jar
commons-lang-2.2.jar
commons-logging-1.1.jar
commons-validator-1.3.1.jar

 


Velocity設定ファイルをコピー

以下をwar/WEB/INF/にコピーする。

	VM_global_library.vm
	velocity.properties

 


appengine-web.xmlに静的ファイルとか追記

<static-files>
	<include path="/asis/**" />
	<include path="/css/**" />
	<include path="/images/**" />
	<include path="**.js" />
	<include path="**.css" />
	<include path="**.png" />
	<include path="**.jpg" />
	<include path="**.jpeg" />
	<include path="**.swf" />
	<include path="**.gif" />
	<include path="**.ico" />
	<include path="**.html" />
</static-files>
<resource-files>
	<include path="**.jsp" />
	<include path="**.vm" />
</resource-files>

 


Controllerクラスの作成

StrutsでいうActionクラスみたいなモンですが、設定ファイルが要りません。
1URL:1クラスで、URLのパスとクラスパスを対応させています。

  • パッケージ・エクスプローラにてプロジェクト直下の build.xml をダブルクリックする
  • 右側のアウトライン・ビューにて、[gen-controller-without-view]タスクを右クリックする。

    gen-controllerとの違いは、*.jspを生成しないこと。Velocoty使うのでjsp要らないので。
  • [実行(R)] – [1 Ant ビルド Alt+Shift+X, Q] (1番目の項目) をクリックする
  • [Ant Input Request]にて、”/hoge/”と入力する
  • 下記ファイルが生成されている事を確認する。

    • src/my/package/controller/hoge/IndexController.java
    • test/my/package/controller/hoge/IndexControllerTest.java
  • IndexController を編集して、forward先を”index.vm”に変更する
  • war/hoge/index.vm を作成する。(VTLが使える)

 


Controllerの処理結果をVelocity(VTL)に受け渡して表示するには

Controller側に用意されている、各スコープ(Application/Session/Request)のattributeに値を設定するメソッド

  • requestScope()
  • sessionScope()
  • applicationScope()

の内、requestScope()を利用します。

注意点として、Antタスクgen-controller生成されたControllerのJavaソースファイルは、
Windows XP + eclipse 3.4の環境ではファイルエンコーディングがsjisになる。

下記の様にマルチバイトの文字列をハードコードする際には、ブラウザで表示する際の文字エンコーディングにあわせて、Controllerクラスのファイルエンコーディングを適宜変換 (utf-8などに) しておかないと文字化けする。

public class IndexController extends Controller {
    @Override
    public Navigation run() throws Exception {
		String message = "Controllerからのメッセージです";
        requestScope("message", message);
        return forward("index.vm");
    }
}

VelocityServletの子クラス側で、RequestからAttributeの値を取り出し、VelocityのContextにセットする。

protected Template handleRequest(HttpServletRequest req,
	HttpServletResponse res, Context ctx) throws Exception {
	String templateName = "index.vm";
	ctx.put("message", req.getAttribute("message"));
	return getTemplate(templateName);
}

最終的に、index.vm 側で出力出来るようになります。

<p>$message</p>

 


log4j設定

詳細はココココ を参照ください。

Velocityの依存性をwar/WEB-INF/lib/にコピーし、ビルドパスに追加する。

log4j-1.2.15.jar
apache-log4j-extras-1.0.jar

src/log4.properties を編集する

log4j.rootLogger=INFO, A1
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.encoding=UTF-8
log4j.appender.A1.layout=org.apache.log4j.EnhancedPatternLayout
log4j.appender.A1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}{Asia/Tokyo} %-5p [%F:%L] - %m%n
log4j.logger.org.apache.velocity=WARN,A1
log4j.logger.org.apache.struts=WARN,A1
log4j.logger.org.apache.commons.beanutils=WARN,A1
log4j.category.ActionCommandBase=WARN,A1
log4j.category.AbstractSelectLocale=WARN,A1
log4j.category.BeanUtilsBean=WARN,A1
log4j.category.ConvertUtilsBean=WARN,A1
log4j.category.AbstractConverter=WARN,A1
log4j.category.DataNucleus.JDO=WARN, A1
log4j.category.DataNucleus.Persistence=WARN, A1
log4j.category.DataNucleus.Cache=WARN, A1
log4j.category.DataNucleus.MetaData=WARN, A1
log4j.category.DataNucleus.General=WARN, A1
log4j.category.DataNucleus.Utility=WARN, A1
log4j.category.DataNucleus.Transaction=WARN, A1
log4j.category.DataNucleus.Datastore=WARN, A1
log4j.category.DataNucleus.ClassLoading=WARN, A1
log4j.category.DataNucleus.Plugin=WARN, A1
log4j.category.DataNucleus.ValueGeneration=WARN, A1
log4j.category.DataNucleus.Enhancer=WARN, A1
log4j.category.DataNucleus.SchemaTool=WARN, A1

WEB-INF/appengine-web.xml を修正します。

<system-properties>
<property name=”java.util.logging.config.file” value=”WEB-INF/classes/log4j.properties”/>
</system-properties>

 
 
次回、とりあえずModelクラスとServiceクラスをつくってみます
 


参考サイト

スタートガイド (Slim3 日本語サイト(非公式))

【slim3】 JSPの開発手順および注意事項 – 炸裂!情熱の右フック!!

ふじやん雑記帳 – Slim3

カテゴリー: Google App Engine, slim3 タグ:

Google App Engine for Java で セッションの_ah_SESSIONが増え続ける

2010 年 4 月 12 日 tdtsh Comments off

Google App Engine/Java (以下 GAE/J) でセッションを有効にすると、Datastore上に_ah_SESSIONがどんどん増え続けます。

削除用サーブレットが用意されているので、Cronで実行すれば良い。

WEB-INF/web.xml

<servlet>
	<servlet-name>_ah_sessioncleanup</servlet-name>
	<servlet-class>com.google.apphosting.utils.servlet.SessionCleanupServlet</servlet-class>
</servlet>
<servlet-mapping>
	<servlet-name>_ah_sessioncleanup</servlet-name>
	<url-pattern>/_ah/sessioncleanup</url-pattern>
</servlet-mapping>
<security-constraint>
	<web-resource-collection>
		<web-resource-name>session-cleanup</web-resource-name>
		<url-pattern>/_ah/sessioncleanup</url-pattern>
	</web-resource-collection>
	<auth-constraint>
		<role-name>admin</role-name>
	</auth-constraint>
</security-constraint>

WEB-INF/cron.xml

<?xml version="1.0" encoding="UTF-8"?>
<cronentries>
	<cron>
		<url>/_ah/sessioncleanup?clear</url>
		<description>Clean up sessions</description>
		<schedule>every 12 hours</schedule>
	</cron>
</cronentries>

■参考サイト
GAE/J でセッションを有効にすると_ah_SESSIONがどんどん膨れ上がる件 – TsutomuUchimaの日記

Provide a servlet for session cleanup – Google App Engine for Java | Google グループ

カテゴリー: Google App Engine タグ:

eclipse (3.4 Ganymede) に Force.com IDEをインストール

2010 年 4 月 12 日 tdtsh Comments off

@ITの連載にのっかって、Force.comをいじってみようと思います。

前回、Force.com Free Editionのアカウントを作成しました。
結構時間が空いたので色々忘れていましたので、取りあえず、「アプリケーション開発の第一歩(ビデオ) (6:16)」をやってみました。

説明のスピードが速いので、とても6分ではフォローできませんでしたが、一時停止ボタンを駆使しながらブラウザで色々設定していたら、簡単なWEBアプリが出来ました。
コーディング不要の開発環境は、以前Javaベースのやつを触ったことがありますけど、こっちの方が遥かに直感的で判りやすいです。
これはイイですね。

業務アプリケーションって、結局その業務を判っている人が作れるなら作る方が、絶対イイもん出来ます。
ちょっとしたトレーニングと時間さえあれば、いわゆる非技術者でも作れそうです。

でも私はThinkPadユーザなので、ポインティングデバイスはトラックポイントです。
WEBブラウザベースの開発は手が疲れるので、eclipseに開発環境を作ってゴリゴリとコードを書きたいです。

早速挑戦してみます。
 


eclipseに Force.com IDEをインストール

  • Eclipseを起動する。
  • [ヘルプ] – [ソフトウェア更新] – [使用可能なソフトウェア]タブ – [サイトの追加(A)]をクリックする。
  • ロケーションに、http://www.adnsandbox.com/tools/ide/install/を追加する。
  • [http://www.adnsandbox.com/tools/ide/install/]のチェックボックスをチェックし、[インストール(A)]をクリックする。
  • [インストール]で[次へ(N)]をクリックする。
  • [ライセンスのレビュー]で、[使用条件の条項に同意します(A)]を選択し、[終了(F)]をクリックする。

 


セキュリティトークン取得

  • Salesforce.comログインする。
  • 画面上部の[設定]をクリックする。
  • 左ペインの[私の個人情報] – [私のセキュリティトークンのリセット]をクリックする。
  • 右ペインの[セキュリティトークンのリセット]ボタンをクリックする。
  • 登録したメールアドレスあてのメールを確認する.

 


eclipseプロジェクト作成

  • eclipse上部メニューから [ファイル(F)] – [新規(N)] – [その他(O)]をクリックする。
  • [ウィザードを選択]ダイアログボックスで、[Force.com] – [Force.com Project]を選択し、[次へ(N)]をクリックする。
  • 下記必要項目を入力し、[次へ(N)]をクリック。

    • [Project name:]に任意の文字列を入力
    • [Username:]に登録したメールアドレスを入力
    • [Password:]にパスワードを入力
    • [Security Token:]に先ほど確認したセキュリティトークンを入力
    • [Environment:]Production/Developper Edition のままでよい
  • [Choose Initial Project Contents]ダイアログにて、[Apex and Visualforce (classes, triggers, pages, components, and static resources)]を選択し、[終了(F)]をクリックする。

 


カテゴリー: force.com タグ: