今回は、GAEのCloudEndpointsについて説明する予定…でした。
しかも、昨日担当のえがわさんに
Google Cloud Endpointsは、明日(12/25)に @vvakame さんが詳しく説明してくれるそうなので、そちらを読むといいと思います。とか書かれててすごい申し訳ないんですが、ちょっと挫折しました。
そのため、わかめ担当分は2012年にわかめが書いた記事とかライブラリのまとめを紹介してお茶を濁したいと思います。
僕がCloudEndpointsを諦めた理由
のまえに、一応諦めた理由を書いておきたいと思います。
GoogleAppEngineとは、PaaS型のWebアプリホスティングのサービスです。Google様の超絶なるインフラを間借りさせていただき、あまつさえGoogleのエンジニア様がメンテナンスとかを全部やってくれるため、僕ら利用者はアプリのコードだけゴリゴリ書いとけばええねん!!最高!!わかめが務めているTopgate社でもゴリゴリやってます!!
で、CloudEndpointsというのは、そのGAEの1つの機能なんですね。
これの何がすごいって、サーバ用のコードを書いた事がない人でもちょろちょろとアノテーションのついたコードを書くとAndroidとサーバを繋ぐライブラリを自動生成してくれるという夢のようなライブラリです!やったねたえちゃん!ネットワークの知識がなくても簡単に自分だけのWebサービスが作れるよ!!
まだ、正式にリリースされていないのですが、ローカルではみんな試すことができます!!よーしじゃあやってみよう!!というエントリになる予定でした。
で、無理ぽ…てなるまでの過程を箇条書きでお伝えします。
- まずはいつも使ってるGAE用フレームワークのセットアップするかー
- あ、あれ…EclipseプラグインのCloudEndpoints周りの機能が動かない…
- 公式のサンプルプロジェクトで試すかー
- あ、あれ…ライブラリが生成されたフリして一番肝心の独自のjarが生成されない…
- ちょっと不安だけど本体は動いてるようなので自前プロジェクトでも同じことやるかー
- あ、あれ…やっぱり上手く動かない…
- コマンドラインから直接コマンド叩いてみるかー
- あ、あれ…やっぱり独自のjarが生成されない
- AndroidプロジェクトのBackendプロジェクト生成から試してみるかー
- や、やった!!CloudEndpoints周りのファイルが正しく生成されているように見えるよ!!
- あ、あれ…プロジェクト生成位置が指定できないし動かすとなんか正しく動かなくなる…
- と、とりあえずGAEプロジェクトをcurlで叩いてみよう…
- あ、あれ…もしかしてJPA必須なんですか…JPAとか誰も使ってないだろ…
- \(^o^)/これは(今はまだ)実用に適さない……正式リリース間近という噂は一体なんだったのか…
こんな感じでした。2日全力で取り組んでもモノになる気がしなかったので諦めました…サーセン…。
わかめが書いた記事について
@vvakame 2012年分の執筆とかライブラリなどのわかめアウトプットまとめとか面白そうだなぁーーとおもいますた
— 八木さん (@sys1yagi) 12月 23, 2012
とのアドバイスを頂いたため、ありがたくこの作戦で行くことにしました。わかめはありがたいことに、ほぼ毎月日経ソフトウェアさんに記事を書かせていただいています。
実は既に一覧化してあるので、今回は特に苦労した号の愚痴でも書いていこうと思います。
2012年03月号 FragmentとActionProvider
ぶっちゃけ、ActionProviderって使い道なくね???コマル-
2012年05月号 Wi-Fi Directについて
Amazon オンライン(無料)
いや、マジでICS時点ではクソですよこのAPI。本当にひどい。15分に1回くらいOS毎リブートするもんね、使ってると。フレームワークレベルで内部状態の遷移がおかしい感じで、ちょっと足を踏み外したりオラオラしたりするとすぐに…。゚(゚´Д`゚)゚。
その時のまとめを見ると、心が折れかけている様子が分かると思います。
JellyBean以降だとマシになってるのかな…誰か教えてください。Wi-Fi Direct NSDとかもあって期待どおりに動いてくれるとすると大変良い機能だと思うんですけどね…。
記事を書くの自体はなんとでもなるんだけど、サンプルアプリの作成と下調べがやっぱり苦労一番つらい…。
しかし、どの程度バグが無くて安定して使えるのかわからんのでちょっと怖いです…。弊社のプロジェクト1つに突っ込んで様子を見ていますが、アクセス数が少ない状態では特に問題は発生していないようです。識者の方はコードレビューしてくれると嬉しいです(;´Д`)
その時のまとめを見ると、心が折れかけている様子が分かると思います。
JellyBean以降だとマシになってるのかな…誰か教えてください。Wi-Fi Direct NSDとかもあって期待どおりに動いてくれるとすると大変良い機能だと思うんですけどね…。
記事を書くの自体はなんとでもなるんだけど、サンプルアプリの作成と下調べがやっぱり苦労一番つらい…。
2013年01月号 Network Service Discoveryについて
この号も結構な難産でした。苦しんでいるのは毎回ネットワーク系ですね…。NSDは大変おもしろいサービスで、ゲームとかの実装に役立てると大変便利そうです。ですが、こいつも案外じゃじゃ馬で、とりあえず1回繋ぐだけだと特に苦労はしないんですが、1ゲーム終えてからもう一回繋ごうとすると非常に苦労します…。もしかしたら、サーバソケットは常に開きっぱなしで接続されても拒否するとかなのがベストな実装なのかもしれません。この記事では、苦肉の策としてゲーム終了後に最初のActivityに飛ばして、もう一回ゲームをするときはActivityのレベルからNSDのセットアップをやり直しています。Wi-Fi Directの時と違って、一応そういう雑な扱いでもそれなりに動いてくれたのでそれでよしとしてしまいました…。
記事を書くの自体はなんとでもなるんだけど(ry
記事を書くの自体はなんとでもなるんだけど(ry
書きたいんだけど書けない記事について
本当に動かなくて記憶に残ってる辛かったヤツってWi-Fi絡みの2つくらいだけです。あと、最近はJellyBeanのネタに困ってます…。一応、連載終了まで乗り切ったのでネタ不足の心配はなくなりました!
次は書きたいんだけどまぁ需要が圧倒的に無さそうなので編集さんに提案すらしていないネタについて。
Mavenについての解説と、導入した時のご利益と開発する時の利点や運用について書いたりすると幸せなのでは…と思ったり。しかし、某uPなんとか社でもzaki導師がいるのにy@nzmに伝道されてなかったりするし広く流布するには難易度が高そうで辛い…。
APTについての解説と、現時点での自動生成系ライブラリ作成のわかめ流ベストプラクティスとかを書いていきたいなぁ…と思ったり。僕が作ってるJsonPullParserについて、"導入が難しい!わからない!"とか言われる事が多くて、どこがやねんオラァぐらいに思ってるんですがまぁそのあたりのコストを下げるために、巷にAPT系便利ライブラリをガンガン増やしていく作戦ですね!
あとは、なんかコード書く際の精神論とか書いてみたい気がするんだけど、例えば川峠のようにゲーム系ジャンルの人とかにまで普遍的に適用できるかっつーと非常に怪しいのでどの程度の広さに通用するのか謎です。
何か、読んでみたい記事がある人はわかめとどこかの雑誌の編集部にお願いしてみよう✩
次は書きたいんだけどまぁ需要が圧倒的に無さそうなので編集さんに提案すらしていないネタについて。
Mavenについての解説と、導入した時のご利益と開発する時の利点や運用について書いたりすると幸せなのでは…と思ったり。しかし、某uPなんとか社でもzaki導師がいるのにy@nzmに伝道されてなかったりするし広く流布するには難易度が高そうで辛い…。
APTについての解説と、現時点での自動生成系ライブラリ作成のわかめ流ベストプラクティスとかを書いていきたいなぁ…と思ったり。僕が作ってるJsonPullParserについて、"導入が難しい!わからない!"とか言われる事が多くて、どこがやねんオラァぐらいに思ってるんですがまぁそのあたりのコストを下げるために、巷にAPT系便利ライブラリをガンガン増やしていく作戦ですね!
あとは、なんかコード書く際の精神論とか書いてみたい気がするんだけど、例えば川峠のようにゲーム系ジャンルの人とかにまで普遍的に適用できるかっつーと非常に怪しいのでどの程度の広さに通用するのか謎です。
何か、読んでみたい記事がある人はわかめとどこかの雑誌の編集部にお願いしてみよう✩
謝辞
原稿を書くにあたり、muo氏の添削とmstssk氏のわかめアイコン作成にはいつも助けられているので殿とかで言ってもらえれば舌打ちしつつ紙1枚ザルに投入したりしたいと思います!!いつもお世話になっております!!!
ライブラリの整備
雑誌のために書いたサンプルコードは、基本的に再利用可能な部品を用意して読者が自分のアプリに簡単に組み込めるように留意しつつ書いています。そのため、僕の雑誌記事のサンプルコードは新機能のためのライブラリの宝庫といってもいいでしょう(ドヤァ
本エントリを書くにあたり、適当に1つのリポジトリにまとめました。しかし、まとめた後に動作確認していないので、動かなかったらごめんね✩雑誌記事のサンプルコードそのままのほうがちゃんと動作確認してあるので信頼性高いです。
将来的には、Gradleを使った新ビルドシステムが開発中との噂ですし、そのうちbuild.gradleに書くだけでライブラリが使えるようになる日が来るでしょう!MavenCentralにjarを上げるのとかは簡単だしね✩
本エントリを書くにあたり、適当に1つのリポジトリにまとめました。しかし、まとめた後に動作確認していないので、動かなかったらごめんね✩雑誌記事のサンプルコードそのままのほうがちゃんと動作確認してあるので信頼性高いです。
将来的には、Gradleを使った新ビルドシステムが開発中との噂ですし、そのうちbuild.gradleに書くだけでライブラリが使えるようになる日が来るでしょう!MavenCentralにjarを上げるのとかは簡単だしね✩
その他のライブラリの紹介
番宣の時間です。JsonPullParser
こちら。POJOにアノテーションを付けるだけでJSONとPOJOを相互に変換するラッパクラスを自動生成します。リフレクションを使わないのでそれなりに高速に動作しますし、ProGuardなどの難読化にも強いです。提灯記事はこちら。結構マジメにWikiが書いてあるはずなので目を通してみてください。
Memvache
こちら。GoogleAppEngine/Java 用ライブラリ。Datastoreへのアクセスを自動的にMemcacheへのアクセスに変換します。Filterを1枚噛ませるだけでON/OFFできるので超簡単!しかし、どの程度バグが無くて安定して使えるのかわからんのでちょっと怖いです…。弊社のプロジェクト1つに突っ込んで様子を見ていますが、アクセス数が少ない状態では特に問題は発生していないようです。識者の方はコードレビューしてくれると嬉しいです(;´Д`)
Blaz-db
こちら。SQLite(Android or JDBC)上で使える、KVSライクなDatabaseを作るライブラリです。現在とあるプロジェクトで利用するためにちまちま作業してます。まだ使うのはちょっと早いかも…>< 使い勝手的には結構いいと思うんですが、速度面は何も気にしてないので結構遅そう。あとはH2DatabaseとかだとTEXTがCLOBとかの扱いになってしまい検索対象にならないのも辛い…。GAE/JのDatastoreとMySQLあたりにも対応しておきたいんですが…。