こんにちは、a-knowです。あっという間にゴールデンウィークも終わりですね。みなさまおのおの、思うような休日を過ごされましたでしょうか。
私はといえば、昨日まではもう、ちらっと大阪の方に遊びに(飲みに)行ったぐらいで、特に取り立ててコレといったことはしてなかったのですが、その昨日(5月7日)、香川は高松のサンポートにて開催された「四国GTUG GAE開発入門講座」に参加してまいりました〜。GAEを使っての開発は(期間だけでいえば)もう1年以上やってるんですけど、いつか導入したいと考えているフレームワークであるSlim3の説明も聞けるということで、喜び勇んでの参加でした。
しかもこの講座、午後から開始ということもありましたので、午前中に香川に乗り込んで、おいしいうどんに舌鼓&高松市美術館にて開催中だった「トリックアートの世界展」も楽しむことができました♪ 特にこのうどんは・・・、、っと、今日の本題はうどんの話ではないので、置いといて・・・。とにもかくにもおかげさまで、休日らしい休日を満喫させて頂きました♪
で、例の如く今回も、お話の内容を走り書きしてきましたので、どなたかの参考になればと思い、こちらにも書いておきたいと思います。特に、今回の講座は全体的にタイトスケジュールだったこともあったので、もし復習などを考えておられる方がおられたら、チラ見してみて下さいなっ。
今回の講座で使用されたスライド
が、発表者の@patorashさんから公開されています♪ 非常に助かりますね〜!下記の走り書きメモも、このスライドと合わせてお読み頂ければよろしいかと思います!
また、twitterのハッシュタグは「#shikokugtug」です!・・・とはいえ、今回はあまり呟く余裕もなかったですけどね〜(苦笑)
四国GTUG GAE開発入門講座 走り書きメモ
- 発表者 自己紹介
- 尾古さん(@patrash)フリーランス、ネットワークエンジニアからPHPプログラマで5年その後Android開発者へ
- GAEとは
- Google app engineの略
- 利用可能言語はJava、Python
- データストアはbigtable
- 基本無料、従量課金制
- サーバセットアップなどの手間いらず。負荷があがると自動的にスケールアウト。
- サブドメイン運用、共用SSL使える。独自ドメインも使えるが、その場合SSL不可。
- GAEの従量課金とは?
- 課金を各リソースにセント単位で割り当て可能。
- 課金枠を使い切ったら500エラーを返してそれ以上課金されない。
- Google Checkoutで支払い。(クレカ必須)
- 今までとこれから
- 今まではアクセス量を想定してサーバ能力を決めて、それで対応できてきた
- これからはクライアントのスポット的に爆発的に増加するということも、個人レベルで非日常じゃなくなる
- そこでクラウド。
- AmazonEC2 or GAE に絞った場合・・・
- Amazonは言語・データストア自由。仮想サーバ、基本有料でサーバ管理者要。
- GAEはJava/Pythonしか使えないしbigtableの縛りあり。Googleサーバの一部を利用。でも従量制だしサーバ管理者不要。
- 手間が少なくて安いGAEに決まりでしょ!
- PythonじゃなくてJava?
- Python知らない、正直どっちでもいいと思う。
- Androidをやってたのでやりやすいと思った、程度の理由なので。
- Slim3FWも使えるし。
- GAE/JAVA
- JSP/Servlet
- Bigtable
- JDO・JPA(遅い)
- Low Level API(速い)
- Slim3
- Bigtableが扱いやすい
- Low Level APIをラップ
- WebAPIが作り易い
- JSONとの親和性が高い
- Antでコード生成ができる
- テストが作り易い
- Bigtableが扱いやすい
- 従量課金なので「速い」は「正義」!コスト削減に繋がる
- 開発環境の準備
- (予め配布の圧縮ファイルを解凍)
- Eclipse Helios
- Google Plugin(@Eclipse Marketplase)
- 一緒にGAE/JAVA SDKのインストールが可能
- Slim3 Plugin(Slim3公式サイトより)
- プロジェクトの生成が楽!
- Properties Editor(@Eclipse Marketplase)
- 多言語対応に必須(今回ではエラーメッセージの置換で利用してる)
- Hello Worldをやってみよう
- 新規プロジェクトでSlim3が現れてるはず、それでファイル一式自動で作ってくれます
- build.xmlを開いて見てみる。Antを使うためのxmlファイル。直接編集はしません
- outlineより、gen-controller[default]を右クリック・run as ・一番上のant build
- コントローラのパスを求められる、今回は/だけで。成功したらコンソールに結果がでる。gtug.controllerにindexControllerができてるはず。index.jspもできてます
- プロジェクト上で右クリック・run as・web application。
- GAEにデプロイしてみよう
- GAEアカウント要。個人認証有り。基本は携帯キャリアのメール。他国を選べばSMSもいける?
- GAEへのデプロイの仕方・実演
- 事前にGAEアカウントを取得・application ID取得要。プロジェクトを右クリック・Google・AppEngineSettingでアプリケーションIDやバージョンなどを設定。10コまでバージョン管理できるよ!
- slim3で掲示板を作ってみる
- https://github.com/patorash/SampleBBS にアクセスしてDownloadsからzipでダウンロード
- EclipseのメニューのFile→import。GeneralのExisting Projects into Workspaceを選択。Select archive fileよりDLしたzipを選択してfinish。
- GAEのデータストアの説明
- bigtableを拡張したもの。KVSで高速動作。
- テーブル→カインド
- 行→エンティティ
- カラム→プロパティ
- エンティティのサイズは1MBまで。大きなファイル用にはblobストアがある
- エンティティ内に子カインドが持てる(エンティティグループ)
- トランザクションは1エンティティグループのみ。ルートのエンティティに対してトランザクションが効く
- bigtableを拡張したもの。KVSで高速動作。
- なぜSlim3を使うと幸せになれるのか?
- Antによるコードの自動生成が楽
- Modelを使うことでカインドのプロパティを明示的に定義できる
- グローバルトランザクションが使える。(複数のエンティティグループを扱うトランザクション。GAEは標準では1つのエンティティグループのトランザクションしか扱えない)
- とにかくSlim3本を読んでね!
- Modelを作成
- データストアの定義を行う。
- クラス名=カインド名
- Modelのインスタンス=エンティティ
- 各クラスのメンバ変数(名)=プロパティ(名)
- 同じく、outlineのgenmodelから自動生成できるよ!(build.xml選択状態でoutlineに出る)
- Eclipseならsetter/getterも自動生成できるよ!
- インポートの編成もEclipseでポチっとな!
- データストアの定義を行う。
- Serviceの作成
- データストアを操作するためのクラス。
- これもbuild.xmlから自動生成
- Create,Read,Update,Delete を定義しとくと楽
- BeanUtil.copyは引数で渡されたMapを元に各プロパティに値をセットしてくれる(プロパティ名とMapのkey名称が一致してないとダメ)
- IDから登録時のkeyの生成を「Datastore.createKey(meta, id)」でやってる(登録対象エンティティのmetaが必要)
- グローバルトランザクションの開始は「Datastore.beginGlobalTransaction()」
- Controllerの作成
- 同じく自動生成。
- Viewが必要ない場合(APIなど)はgen-controller-without-viewでControllerのみ作成できる。
- タイムゾーン設定を忘れずに!(TimeZone.setDefault(TimeZone.getTimeZone("JST"));)
- Viewを整える
- warディレクトリ以下のJSPファイル。
- 基本的に処理はController側で行い、jspは渡されたデータを出力するのみ。(MVCモデルの基本的な思想)
- (jspファイルのインポート・cssのお話。jspのimportを使えば、作っておいたテンプレートを読み込ませることができるから、画一的なレイアウト・その調整が楽。)
- 引数のないメソッドであればjspから直接呼び出せる(らしいです)(thread.createdString とか thread.key.idとか)
- POSTされたデータを検証する
- 検証はController内部で。Validatorsクラスにrequestを引数で渡すカタチで。
- 検証不可時はerrorsオブジェクトがjspに渡されるので、それを用いてエラーメッセージを。
- エラーメッセージの日本語化はpropertiesで!
- ルーティングする
- なにもしないと「/read/4」は「readパッケージの4controller」を見に行ってしまう。
- ルーティングを行う。AppRouter.javaで行う。(addRouting("/read/{id}", "/read?id={id}");)
- AppRouterは自分で書く。(自動生成はないよ)
- (/create だけとかなら、AppRouterは必要なし!(規約。自動でCreateControllerが呼び出される))
- ルーティングを行う。AppRouter.javaで行う。(addRouting("/read/{id}", "/read?id={id}");)
- なにもしないと「/read/4」は「readパッケージの4controller」を見に行ってしまう。
- 感想(ぼくの)
- Slim3便利。今までずっとSlim3使わずゴリゴリやってきてるからこそわかるw
- Datastore.createKey()がおもしろいと思った
- 本筋じゃないjspとかデザインの構成要素とかのお話が自分にはためになったw
- 講座の時間がもっと欲しかった!><
- 自作アプリ、現時点ではフルでJDO使用。追加したい機能の追加がひと通りできたら、やっぱりはやめにSlim3で一気にリプレースしたいなー。
- Slim3便利。今までずっとSlim3使わずゴリゴリやってきてるからこそわかるw
講座中、なんども紹介されてたSlim3の本はコレです。ほんともう僕も買います。