カテゴリー別アーカイブ: 未分類

GAE+IntelliJ: 開発サーバーを起動マシン以外からアクセスできるようにする


最近AppengineアプリをIntelliJで開発しています。

Cloud EndpointsでAndroidと連携するサーバーアプリなのですが、開発環境のWiFiを使用してAndroid端末からDevサーバーにアクセスしようとするとRejectedとなってしまいます。

これは、開発サーバーのデフォルト設定がlocalhost限定でlistenしているからです。これを全IPアドレスでlistenするよう設定を変更するとWiFi経由でアセスできるようになります。

listenアドレスを変更するにはサーバーの起動オプションに–address=0.0.0.0を指定します。

以下はIntelliJの設定画面ですが、Eclipseやコマンド直接起動の場合でも応用できると思います。

Run_-_AppEngine_Dev_1_9_19

GAE: Cloud Endpointsでパスが重複すると言われる場合の対応


Google Cloud Endpointsを使用すると、簡単且つセキュアにRest APIのサーバーとクライアントを開発することができます。サーバーはApp Engine、クライアントはWeb(JavaScript)やAndroid、iOSがサポートされています。APIを中心に据えたスケーラブルでクロスプラットフォームなクラウドサービスを開発する際には非常に便利な仕組みです。

しかし、そもそも仕組みが複雑なためか、いろいろとハマりどころが出てきてしまいます。それでも自分で全てを開発する場合に比べ、圧倒的なコストダウンを実現することができますので、是非マスターしたいところです。

私の場合は、以下の点でハマりました。

クライアントIDに指定すべきものはサービスアカウントのIDだった

Androidでいうと、GoogleAccountCredential.usingAudience()に渡すクライアントIDですが、「AndroidアプリのクライアントID」を渡すと認証エラーになってしまいます。ドキュメントに書いてあるのだと思いますが、実際は「サービスアカウント」のクライアントIDを指定する必要があります。

認証情報_GAE

 

APIメソッドを色々追加したところ、Multiple methods with same rest pathと言われる

初期設定の難関をくぐり抜け、色々APIを追加していくと、そのうち上記のようなエラーに悩まされます。この場合、クライアントライブラリの構築も失敗しているような気がしますが、構築時にはエラーが出ないので、実際に接続しようとした時に気づくことになります。

@ApiMethodのnameだけでは一意にならない場合があるようで、その場合にはpathも指定してやれば解決します。(例:@ApiMethod(name = “updateState”, path = “update_state”))

なんだか面倒な感じです。使い始めたばかりなので理解が足りず何かが間違っているのかもしれませんが、今のところは上記のように回避しています。

 

mavenの.m2ディレクトリにある古いライブラリを削除する


参考: http://stackoverflow.com/questions/19310650/how-clean-old-dependencies-from-maven-repositories

mavenでプロジェクトをバリバリビルドしていると.m2ディレクトリのサイズがどんどん巨大になっていきます。.m2ディレクトリを削除して再度ビルドしてやれば必要な物だけダウンロードしなおしてくれますが、一旦削除してまたダウンロードするのもなんだかもったいない感じがします。

ここでは、最近使用していないものだけ削除する方法を紹介します。

LinuxやMacOSなどUNIX系環境のシェル上で、以下のようなコマンドを実行すると簡単に掃除できます。

上記の例では5分以上アクセスされていないpomファイルのあるライブラリを削除する記述となっています。aminのパラメータを調整すればお好みの条件で削除することが可能となります。