44
2009 4 18 Ruby Business Commons 根之木 礼司

20090418 イケテルRails勉強会 第2部Air編 解説

Embed Size (px)

DESCRIPTION

http://www.ustream.tv/channel/rubybizcommons2009年4月18日に行われたイケテルRails勉強会@東京の第2部資料。作成者はレイジ氏。

Citation preview

Page 1: 20090418 イケテルRails勉強会 第2部Air編 解説

2009年4月18日

Ruby Business Commons

根之木 礼司

Page 2: 20090418 イケテルRails勉強会 第2部Air編 解説

プロジェクトを作成する。

検索結果位置情報画面を表示する。

検索結果一覧画面を表示する。

各イベントのアクションを実装する。

①検索ボタンをクリック

②地図上のマーカーをクリック

AIRパッケージを作成する。

2

Page 3: 20090418 イケテルRails勉強会 第2部Air編 解説

プロジェクトを作成する。

まずは、プロジェクトを作成しましょう。※本当は、

・AIRアプリケーション記述ファイルの作成

・Google Maps API for Flashを使う為の準備

等が必要ですが、今回は時間の都合上、事前に準備した

プロジェクトを使います。

また、開発環境・実行環境が正しく構築できて

いるか確認してみましょう。

3

Page 4: 20090418 イケテルRails勉強会 第2部Air編 解説

AIRアプリケーションの作成方法に

ついて解説します。

①プロジェクト作成

②コーディング

③コンパイル

④アプリケーション実行

4

Page 5: 20090418 イケテルRails勉強会 第2部Air編 解説

5

Page 6: 20090418 イケテルRails勉強会 第2部Air編 解説

Flex Builder等の統合開発環境(IDE)を使わなくても、

以下の手順だけでプロジェクトを作成することができ

ます。

①任意の場所にフォルダを新規作成する。

②AIRアプリケーション記述ファイルを作成し、上記①

で作成したフォルダ直下に配置する。

6

今回の場合、Cドライブ直下に作成したIketeruGourmetフォルダ

がプロジェクトです。

今回の場合、application.xmlがAIRアプリケーション記述ファイルです。

Page 7: 20090418 イケテルRails勉強会 第2部Air編 解説

今回の勉強会では、以下のファイルも予め準備

しました。

①iconsフォルダ

⇒AIRパッケージ用のアイコンを格納。

②libsフォルダ

⇒Google Maps API for Flashを使用する為のライブラリ

map_flex_1_9.swcを格納。

③srcフォルダ

⇒Adobe Flexサンプル(dashboard)のプログラムを格納。

※イケテル勉強会向けに改造済。

④IketeruGourmet.p12ファイル

⇒AIRパッケージ作成時に必要な自己署名入り証明書。

7

Page 8: 20090418 イケテルRails勉強会 第2部Air編 解説

AIRアプリケーション記述ファイルはXMLで記述します。

今回の勉強会で使用したapplication.xml の内容は以下の

通りです。

8

<?xml version="1.0" encoding="utf-8" ?><application xmlns="http://ns.adobe.com/air/application/1.5">

<id>IketeruGourmet</id><filename>IketeruGourmet</filename><name>IketeruGourmet</name><version>v1</version><initialWindow>

<content>src/IketeruGourmet.swf</content><visible>false</visible>

</initialWindow><icon>

<image16x16>/icons/AIRApp_16.png</image16x16><image32x32>/icons/AIRApp_32.png</image32x32><image48x48>/icons/AIRApp_48.png</image48x48><image128x128>/icons/AIRApp_128.png</image128x128>

</icon></application>

必要なAIRランタイムのバージョン ※必頇

アプリケーションID ※必頇

アプリケーションのファイル名 ※必頇

インストーラに表示されるタイトル

アプリケーションのバージョン ※必頇

メインコンテンツファイル

成したメインウィンドウを直ちに表示したい場合はtrueを設定。

アプリケーションで使用するアイコンファイル

Page 9: 20090418 イケテルRails勉強会 第2部Air編 解説

9

Page 10: 20090418 イケテルRails勉強会 第2部Air編 解説

まずは、メインとなるMXMLファイルが必要です。

必ず1つは作成しましょう。

10

今回の場合、赤枠の部分(画面全体)がIketeruGourmet.mxmlというメインのMXMLで実装されて

います。

Page 11: 20090418 イケテルRails勉強会 第2部Air編 解説

メインとなるMXMLファイルはWindowedApplication

コンポーネントを使用して実装します。

<?xml version="1.0" encoding="utf-8"?><mx:WindowedApplication

xmlns:mx="http://www.adobe.com/2006/mxml"xmlns:rbc="rbc.view.*"title="イケテルRails勉強会"status="Day by day, in every way, I'm getting better and better.“minWidth="1200" minHeight="700"width="100%" height="100%"backgroundSize="100%"applicationComplete="onApplicationComplete()">

~ ~ ~ ~ ~ 中 略 ~ ~ ~ ~ ~ ~

</mx:WindowedApplication>

11

IketeruGourmet.mxmlの最初と最後はWindowedApplicationコンポーネントの

タグで括られています。

【注意!】文字コードはUTF-8を使用してください!

Page 12: 20090418 イケテルRails勉強会 第2部Air編 解説

コーディングには、MXMLとActionScript

を使います。

MXMLとActionScriptの使い方は以下の

通りです。

・MXML

⇒ 画面をデザインする時に使用。

・ActionScript

⇒ プログラムを書く時に使用。

12

Page 13: 20090418 イケテルRails勉強会 第2部Air編 解説

MXMLファイルにActionScriptを書きたい場合は、

Scriptタグ内に書いてください。

<?xml version="1.0" encoding="utf-8"?><mx:WindowedApplication

xmlns:mx="http://www.adobe.com/2006/mxml"title="イケテルRails勉強会補習"width="100%" height="100%"layout="absolute">

<mx:Script><![CDATA[private function add():void {

c.text = String(Number(a.text) + Number(b.text));}]]>

</mx:Script>

<mx:TextInput id="a" x="10" y="10" width="40" height="20" text="1"/><mx:TextInput id="b" x="60" y="10" width="40" height="20" text="2"/><mx:TextInput id="c" x="110" y="10" width="40" height="20" editable="false"/><mx:Button id="cal" label="Add" x="10" y="40" width="60" height="20" click="add()"/>

</mx:WindowedApplication>13

Addファンクションはcalボタンをクリックした時に実行されます。

Page 14: 20090418 イケテルRails勉強会 第2部Air編 解説

前ページのMXMLファイルをコンパイルして実行する

と、以下の画面が表示されます。

14

「Add」ボタンをクリックすると・・・

左側のテキストボックスの加算結果が表示されます。

Page 15: 20090418 イケテルRails勉強会 第2部Air編 解説

MXMLやActionScriptには沢山のクラスがあります。

調べる際には以下のサイトを利用してみてください。

・Adobe Flex3 リファレンスガイドhttp://livedocs.adobe.com/flex/3_jp/langref/

⇒ クラスの一覧と使い方が掲載されています。

・Adobe Flex 3 Component Explorerhttp://examples.adobe.com/flex3/componentexplorer/explorer.html

⇒ クラスの使い方の実例が掲載されています。

15

Page 16: 20090418 イケテルRails勉強会 第2部Air編 解説

16

Page 17: 20090418 イケテルRails勉強会 第2部Air編 解説

コンパイルのコマンドオプションについて説明します。

①メインのMXMLファイルを指定します。

②swfファイルの出力先と名称を指定します。

※ AIRアプリケーション記述ファイルのcontentタグに記述した

名称を指定しましょう。

③コンパイル時に参照するライブラリを指定します。

※今回は、Google Maps API for Flashのライブラリを指定して

います。

【注意!】

上記①~③のファイルは、プロジェクトルートからの相対パス

で指定する必要があります。17

amxmlc src/IketeruGourmet.mxml -output src/IketeruGourmet.swf -library-path+=libs/map_flex_1_9.swc

① ② ③

Page 18: 20090418 イケテルRails勉強会 第2部Air編 解説

18

Page 19: 20090418 イケテルRails勉強会 第2部Air編 解説

アプリケーション実行のコマンドオプションについて説明します。

① AIRアプリケーション記述ファイルを指定します。

【注意!】

上記①のファイルは、プロジェクトルートからの相対パス

で指定する必要があります。

19

adl application.xml

Page 20: 20090418 イケテルRails勉強会 第2部Air編 解説

プロジェクトを作成する。

検索結果位置情報画面を表示する。

検索結果一覧画面を表示する。

各イベントのアクションを実装する。

①検索ボタンをクリック

②地図上のマーカーをクリック

AIRパッケージを作成する。

20

Page 21: 20090418 イケテルRails勉強会 第2部Air編 解説

検索結果位置情報画面を表示する。

Google Maps API for Flashを使って、地図を

表示する画面を作りましょう。

21

こんな画面を表示しましょう。

Page 22: 20090418 イケテルRails勉強会 第2部Air編 解説

Google Maps API for Flashの使い方 ※今回の場合

①http://code.google.com/intl/ja/apis/maps/documentation/flash/index.htmlにアクセス。

②API Keyを取得する。

③SDKをダウンロードして解凍する。

④解凍したフォルダ内のmap_flex_1_9.swcをC:¥IketeruGourmet¥libs

に配置する。

⑤コンパイル時にmap_flex_1_9.swcをライブラリパスに指定する。

22

このファイルのおかげで、Google Maps API for Flashが使えるようになる。※いつの間にかバージョンアップしているので、ファイル名が異なる場合アリ。(2009年4月18日現在の最新バージョンはmap_flex_1_9.swc)

Page 23: 20090418 イケテルRails勉強会 第2部Air編 解説

<maps:Map

id="map“

width="100%“

height="100%“

url="http://localhost/"

key="ABQIAAAA3hk8tSWJBtrv7SdGaRNVahT2yXp_ZAY8_ufC3CFXhHIE1NvwkxSwJelIuU1E96KfDhGIXqqayaU9HA"

mapevent_mapready="displayMap(event)"

/>

23

API Keyを設定する。

Google Mapsが表示される時に実行するファンクションを指定する。

API Key取得時に指定したURLを設定する。

Page 24: 20090418 イケテルRails勉強会 第2部Air編 解説

map.setCenter(

new LatLng(35.690137,139.692836),

16,

MapType.NORMAL_MAP_TYPE);

map.addControl(new ZoomControl());

map.addControl(new PositionControl());

map.addControl(new MapTypeControl());

24

地図の中心を定義する。引数1:緯度・経度⇒警固公園辺りを設定

引数2:ズームレベル引数3:地図タイプ⇒「NORMAL_MAP_TYPE:地図」を設定※その他に

HYBRID_MAP_TYPE:地図+写真PHYSICAL_MAP_TYPE:地形SATELLITE_MAP_TYPE:航空写真

拡大縮小コントロールを表示する。

位置コントロールを表示する。

地図選択コントロールを表示する。

Page 25: 20090418 イケテルRails勉強会 第2部Air編 解説

プロジェクトを作成する。

検索結果位置情報画面を表示する。

検索結果一覧画面を表示する。

各イベントのアクションを実装する。

①検索ボタンをクリック

②地図上のマーカーをクリック

AIRパッケージを作成する。

25

Page 26: 20090418 イケテルRails勉強会 第2部Air編 解説

検索結果一覧画面を表示する。

MXMLを使って、Railsアプリケーションから

取得したデータを一覧表示する為の画面を作

りましょう。

26

こんな画面を表示しましょう。

Page 27: 20090418 イケテルRails勉強会 第2部Air編 解説

属性visibleに"true"を設定した列のみが画面に表示される。

また、属性dataFieldの値はRailsから返ってきたデータ(XML)のタグ名

と合わせている。

<mx:DataGrid id="dataGrid" width="100%" height="100%"><mx:columns>

<mx:DataGridColumn headerText="名称" dataField="restaurant_name" visible="true" width="180"/><mx:DataGridColumn headerText="URL" dataField="tabelog_url" visible="false"/><mx:DataGridColumn headerText="総合評価" dataField="total_score" visible="true" width="45"/><mx:DataGridColumn headerText="料理・味" dataField="taste_score" visible="true" width="45"/><mx:DataGridColumn headerText="サービス" dataField="service_score" visible="true" width="45"/><mx:DataGridColumn headerText="雰囲気" dataField="mood_score" visible="true" width="45"/><mx:DataGridColumn headerText="シチュエーション" dataField="situation" visible="false"/><mx:DataGridColumn headerText="価格(夜)" dataField="dinner_price" visible="true" width="90"/><mx:DataGridColumn headerText="価格(昼)" dataField="lunch_price" visible="true" width="90"/><mx:DataGridColumn headerText="カテゴリ" dataField="category" visible="false"/><mx:DataGridColumn headerText="最寄り駅" dataField="station" visible="false"/><mx:DataGridColumn headerText="住所" dataField="address" visible="false"/><mx:DataGridColumn headerText="電話番号" dataField="tel" visible="false"/><mx:DataGridColumn headerText="営業時間" dataField="business_hours" visible="false"/><mx:DataGridColumn headerText="休日" dataField="holiday" visible="false"/><mx:DataGridColumn headerText="緯度" dataField="latitude" visible="false"/><mx:DataGridColumn headerText="経度" dataField="longitude" visible="false"/><mx:DataGridColumn headerText="メモ" dataField="memo" visible="false"/><mx:DataGridColumn headerText="画像" dataField="image_url" visible="false"/>

</mx:columns></mx:DataGrid>

27

Page 28: 20090418 イケテルRails勉強会 第2部Air編 解説

プロジェクトを作成する。

検索結果位置情報画面を表示する。

検索結果一覧画面を表示する。

各イベントのアクションを実装する。

①検索ボタンをクリック

②地図上のマーカーをクリック

AIRパッケージを作成する。

28

Page 29: 20090418 イケテルRails勉強会 第2部Air編 解説

各イベントのアクションを実装する。

①検索ボタンをクリック

Action Scriptを使って、検索ボタンをクリック

した時に動作するプログラムを書きましょう。※検索ボタンをクリックすると、以下のことができるように

します。

・検索条件をRailsに渡して、検索してもらう。

・検索結果の店舗の場所を地図上に表示する。

・検索結果を一覧表示する。

29

Page 30: 20090418 イケテルRails勉強会 第2部Air編 解説

var httpService:HTTPService = new HTTPService();

⇒ Railsと通信する為のオブジェクトを生成する。

httpService.url = "http://localhost:3000/restaurants.xml";

⇒ RailsへのリクエストURLを設定する。

httpService.resultFormat = HTTPService.RESULT_FORMAT_E4X;

⇒ Railsから返されるデータ形式を設定する。

※今回は、XML形式でデータを返してもらうように設定する。

httpService.addEventListener(ResultEvent.RESULT, resultHandler);

⇒ Railsとの通信に成功した場合に実行するファンクション名を

設定する。

httpService.addEventListener(FaultEvent.FAULT, faultHandler);

⇒ Railsとの通信に失敗した場合に実行するファンクション名を

設定する。

30

Page 31: 20090418 イケテルRails勉強会 第2部Air編 解説

var parameters:Object = new Object();

⇒ Railsへ渡すパラメータのオブジェクトを生成する。

parameters.Prefecture = cboPrefecture.selectedItem.data;

⇒ パラメータ1:コンボボックスで選択した都道府県をパラメータ

に設定する。

parameters.SortOrder = cboSortOrder.selectedItem.data;

⇒ パラメータ2:コンボボックスで選択した並び順をパラメータに

設定する。

parameters.PageNum = cboPage.selectedItem.data;

⇒ パラメータ3:コンボボックスで選択したページをパラメータに

設定する。

parameters.ResultSet = "large";

⇒ パラメータ4:結果形式を設定する。

※今回は、食べログAPIで定義されている“large”を設定する。

httpService.send(parameters);

⇒ Railsと通信を行う。31

Page 32: 20090418 イケテルRails勉強会 第2部Air編 解説

var itemList:XMLList = e.result.Items.Item;

⇒ Railsから返ってきたデータをXMLListという型の変数itemList

に代入する。

sharedVariable.searchResult = this.xmlListToArrayCollection(itemList);

⇒ ①itemListをxmlListToArrayCollectionというファンクションに

渡してArrayCollectionという型に変換する。

②上記①で変換したArrayCollectionをsharedVariableオブジェクト

のsearchResultに代入する。

※これにより、 GoogleMaps.mxmlとSearchResult.mxmlの

onChangeSharedVariableファンクションが実行される。

32

何故そんなことが起こるのか?には理由があるのですが、今回は時間の都合上説明を割愛します。「事前に準備しておいたプログラムにそのように動作するような仕組みが仕込んであったんだな。」

と思っておいてください。

Page 33: 20090418 イケテルRails勉強会 第2部Air編 解説

map.clearOverlays();

⇒ 地図上のマーカーをクリアする。

var marker:Marker

= new Marker(

new LatLng(result.latitude, result.longitude),

new MarkerOptions({draggable:true, hasShadow:true}));

⇒ 検索結果の緯度・経度上にマーカーを生成する。

その際に、マーカーの属性として、

①マーカーをドラッグで移動可能

②マーカーに陰影をつける

を設定する。

map.addOverlay(marker);

⇒ マーカーを地図上に表示する。33

Page 34: 20090418 イケテルRails勉強会 第2部Air編 解説

dataGrid.dataProvider = sharedVariable.searchResult;

⇒ Railsから返ってきたデータを検索結果一覧に表示する。

※<mx:DataGridColumn>の属性dataFieldの値とRailsから返って

きたデータ(XML)のタグ名を合わせているのがポイント。

これにより、↑のようにコーディングが楽になっている。

34

<mx:DataGridColumn headerText="名称" dataField="restaurant_name"<mx:DataGridColumn headerText="URL" dataField="tabelog_url"<mx:DataGridColumn headerText="総合評価" dataField="total_score"<mx:DataGridColumn headerText="料理・味" dataField="taste_score"<mx:DataGridColumn headerText="サービス" dataField="service_score"<mx:DataGridColumn headerText="雰囲気" dataField="mood_score”

Page 35: 20090418 イケテルRails勉強会 第2部Air編 解説

プロジェクトを作成する。

検索結果位置情報画面を表示する。

検索結果一覧画面を表示する。

各イベントのアクションを実装する。

①検索ボタンをクリック

②地図上のマーカーをクリック

AIRパッケージを作成する。

35

Page 36: 20090418 イケテルRails勉強会 第2部Air編 解説

各イベントのアクションを実装する。

②地図上のマーカーをクリック

地図上に表示されたマーカーをクリックすると、

該当の店舗情報が吹き出しに表示されるように

しましょう。※吹き出しに表示するのは、

・食べログの情報:店名、住所、電話番号、URL

・第1部にて自分で登録した情報:メモ、画像

の6項目です。

36

Page 37: 20090418 イケテルRails勉強会 第2部Air編 解説

marker.addEventListener(MapMouseEvent.CLICK, ファンクション);

⇒ マーカーがクリックされた時に実行されるファンクションを定義する。

var infoWindowOptions:InfoWindowOptions = new InfoWindowOptions();

⇒ 吹き出しに表示する情報を定義するオブジェクトを生成する。

infoWindowOptions.contentHTML

= "店名:"+ result.restaurant_name + "<br/>" +

"住所:"+ result.address + "<br/>" +

"TEL:"+ result.tel + "<br/>" +

"URL:"+ "<a href='" + result.tabelog_url + "'><b>ココをクリック!</b></a>" + "<br/>";

⇒ 吹き出しに表示する文言を設定する。

infoWindowOptions.width = 350;

⇒ 吹き出しの幅を設定する。

marker.openInfoWindow(infoWindowOptions);

⇒ infoWindowOptionsに定義されている情報を元に吹き出しを表示する。

37

Page 38: 20090418 イケテルRails勉強会 第2部Air編 解説

プロジェクトを作成する。

検索結果位置情報画面を表示する。

検索結果一覧画面を表示する。

各イベントのアクションを実装する。

①検索ボタンをクリック

②地図上のマーカーをクリック

AIRパッケージを作成する。

38

Page 39: 20090418 イケテルRails勉強会 第2部Air編 解説

AIRパッケージを作成する。

AIRでは、インストールファイルを作ることが

できます。

今回作成したアプリケーションでインストール

ファイルを作り、実際にインストールしてみま

しょう。

39

Page 40: 20090418 イケテルRails勉強会 第2部Air編 解説

AIRパッケージ作成のコマンドオプションについて説明します。

①自己署名入り証明書とパスワードを指定します。

②作成するAIRファイルの名称を指定します。

③AIRアプリケーション記述ファイルを指定します。

④AIRファイルにパッケージ化するファイルやディレクトリを

指定します。

空白文字で区切って、任意の数のファイルとディレクトリを

指定できます。

40

adt -package -storetype pkcs12 -keystore IketeruGourmet.p12 -storepass iketeru IketeruGourmet.air application.xml icons libs src

① ② ④③

Page 41: 20090418 イケテルRails勉強会 第2部Air編 解説

Adobe Flex3 リファレンスガイド

⇒ http://livedocs.adobe.com/flex/3_jp/langref/

Adobe Flex3 ヘルプ

⇒ http://livedocs.adobe.com/flex/3_jp/html/help.html

Adobe Flex3 デベロッパーセンター

⇒ http://www.adobe.com/jp/devnet/flex/

41

Page 42: 20090418 イケテルRails勉強会 第2部Air編 解説

42

Page 43: 20090418 イケテルRails勉強会 第2部Air編 解説

RBC には「rbc-incubator」というQ&A

窓口があります。

本日の内容で分からないことがあれば、

[email protected]

までメールをお送りください。

43

Page 44: 20090418 イケテルRails勉強会 第2部Air編 解説