2010-09-01

外部ファイルの置き場所としての Google App Engine

さて、前回(→ 外部ファイルの置き場所を求めて……)の記事では、外部 CSS ファイルの置き場所として Google App Engine (以下、GAE) にたどりつくまでを書いた。

GAE でやってみることにしたのは「静的なコンテンツを動的に生成しても良いじゃないか」と思いついたためだ。「なんとゼイタクな」とか「ムダなことを」なんていう声が頭の中を駆け巡りもしたが、現在のコンピュータ(とインターネット)にまつわる技術は、ある意味、計算と通信の資源を湯水のごとく使うことで発展してきたようなものだ。安価で(無料あるいはそれに近い価格で)提供される資源は、どんどん使うことが正義なのだ。ムーアの法則が成立する状況が続く限り「豊穣の時代」が続くのだ。いいじゃん、これぐらい。

「静的なコンテンツを動的に…」に思い至ったのは、コンテンツを要求する側(ブラウザ)にとっては HTTP の向こう側で何が起こっていても関係ないんだ、と気付いたから。ま、当たり前のことなんだけどね。

GAE アプリの作り方

GAE に登録

まずは、アカウントの登録。アカウント自体は Google アカウントだが、App Engine を使い始めるには携帯電話を使った認証が必要になる。具体的には、登録の際にロケーションと携帯電話のキャリアを選び、その SMS あるいは携帯電話用のメールアドレスを指定する。すると、携帯電話に認証コードがメールで送られてくる。そこに書かれたコードを登録画面で入力する、というものだ。

わたしの場合、iPhone のメールアドレス(i.softban.jp)を指定した。すぐに「Google App Engine Code」というタイトルのメールが送られてきた。中にあった 7 桁の番号を登録画面に入力して登録完了。

アプリケーション ID の登録

アカウント登録が完了したら、先にアプリケーション ID を登録してしまう方が良い。この ID を SDK でアプリケーション名として使うことになるからだ。また、この ID はそのままアプリの URL にもなる(独自ドメインを使う場合は別)。具体的には、helloworld という ID なら http://helloworld.appspot.com/ でこのアプリを開くことになる。

ID の登録は GAE の The Administration Console から行う。

アプリケーション ID は先着順。凡人がパッと思い付く程度の名前はもう大抵取られているよ。GAE を使う上で、ここが一番の難関かもよ(´・ω・`)。

SDK をインストール

アプリの開発をするには SDK が必要で、Mac 版も用意されいる。ダウンロードした SDK のパッケージを開くと GoogleAppEngineLaucher.app がぽつんと入っている。これを /Applications にコピーすれば OK。

初回の起動時に、何やらコマンドラインのツールのシンボリックリンクを /usr/local/bin に作っても良いか、と確認してくる。OK を押せば確かに /usr/local/bin シンボリックリンクができている。おそらく、これは、ユーザが Terminal 上からも GAE Launcher の機能を使えるようにするための作業だろう。

初回起動時に現れる確認ダイアログ
シンボリックリンク張っても良い? ここに張ったよ!
GAE アプリの開発手順

SDK を使った GAE アプリの開発手順はおおよそこうなる。

  1. GoogleAppEngineLauncher.app でアプリを作る。
  2. アプリのコードを書く。
  3. GoogleAppEngineLauncher.app で実行「Run」する。
  4. ブラウザで http://localhost:8080/ を開く。
  5. アプリの動作確認を行う。
  6. (十分な確認の後) GoogleAppEngineLauncher.app から配備「Deploy」する。
  7. 配備が完了したら、http://<application_id>.appspot.com/ でアプリが稼動している。

注意するのはアプリを作る際に、名前としてアプリケーション ID を指定することぐらい。ID を先に作っておく方が良いのはこのため。アプリを作って、コードも書いて、動作確認もして、いざ配備(deploy)ってときになって、「ID 取れなかったよ、名前変えないと」なんてことになると面倒だろう? Launcher 上の名前は簡単に変えられるけど、アプリ画面のデザインに関係していたら……。やはり、名前(アプリケーション ID)は先に取っておくべきだ。

手元の Mac や PC での動作確認が何の設定もなしに行えるのはとても簡単。ウェブアプリの開発環境として大きなメリットだろう。ついでに言えば GAE の本番環境への配備(deploy)もボタン 1 つで済んでしまう。この手軽さはもっと宣伝されても良いことだと思うゾ。

静的コンテンツを組込む

今回、作りたいのは CSS ファイルの内容を返してくれるアプリだ。始めは CSS のデータを吐く Python のコードを書くつもりだったが、調べてみるとアプリの一部として静的コンテンツも組込めることがわった。考えてみれば当たり前の話で、ウェブアプリと言えども画像のようなコンテンツをふくむわけだ。CSS や JavaScript のファイルだってあるだろう。簡単にできるに越したことはない。このアプリの最初のバージョンでは、アプリの構成要素の一部として CSS ファイルを組込むというシンプルな方法を採用してみる。

app.yaml の編集

スタート ガイド: Python - 静的ファイルの使用」と「Google App Engineを使って無料でサイトを立ち上げる方法」の記述を参考に、以下のような app.yml にしてみた。

Launcher が自動生成したものに 7 行目と 8 行目を足しただけだ。後は、stylesheets ディレクトリに CSS ファイルを置けば完成。ローカルの環境で CSS にアクセスできることを確認したら配備を実行。

これで、たとえばアプリケーション ID が stylerepo だとしたら、http://stylerepo.appspot.com/stylesheets/mac.css という URL で stylesheets ディレクトリに置いた mac.css という CSS ファイルにアクセスできる。この ID は実際に今回作ったものなので、以下のリンクから CSS ファイルが取得できる。

GAE は Google のサービスを補完する

実際のところ、↑で作ったものはアプリと呼べるようなものじゃない。言うなれば、静的コンテンツをアプリの殻(それもごく薄い殻)でくるんだだけだ。けれど、その薄い殻を使えば GAE でコンテンツの配信ができる。この殻にくるむことができるのは何も CSS ファイルだけに限定されているわけではない。他の Google のサービスでは扱えないどんなコンテンツも GAE なら扱える。何よりこのことに気付けたことが大きい。

とは言うものの、Google に置けないコンテンツって、実はそれほど残っていないんだよな。テキスト系は PDF をふくめて Docs があるし、画像は Picasa、動画は YouTube。ソースコードも OK (Google Code)。コンテンツ単体での配信なら道具立ては十分なのか。音楽ぐらい?

Blogger がコンテンツ配信の仕組みとしてはちょっと特殊なのか。複数のタイプのコンテンツを組み合わせるものだし、テンプレートをいじれば仕組みにも(制限はあるけど)ユーザが手を入れられる。

さて、今後の展望も少しだけ。静的コンテンツを動的に提供するという方法に気付いたら、いろいろと試してみたくなる。

簡単(そう)なところでは、もういっそのこと CSS をデバイスに合わせて切り替えるのはアプリにやらせてみる、とか。ブラウザが HTTP を介してデータをリクエストするわけだから、アプリ側でユーザエージェントの判別をしてしまえば良い。

ま、Blogger は CSS の外出しぐらいにしておいて、それより GAE そのもので何か作ってみるのもおもしろそうだ。

関連リンク

関連記事

0 件のコメント:

コメントを投稿