GAEのスタディからやりなおし

=前置き=

前回GAEをいじってから、だいぶ時間が経ってしまった。以前にGAEをいじって作ったサンプルはあるが、挙動の理解がだいぶ怪しい。ということで、基本的な学習からやり直す。ということで、そのログ。たぶん長くなる。
→だいぶ長くなった。ただの学習ログなので、他の人が読む意味はあまりないかも。


まずは、GAEまわりの説明やエントリを見ていって、「わからない単語」とか「何故そうするのかわからないこと」を列挙するところから始める。

=わからないものの列挙=

まずは、大元のGoogle App Engineの説明ページから見ていく。


「Webアプリケーション」:Webで動かすアプリケーションだろう。この理解で問題ないはず。
「(Googleの)インフラストラクチャ」:要は「インフラ」で、アプリを乗っけるやつだろう。
「(データストアへ)リモートアクセス」:なんだろう。GAEの外側からアクセスできるといことだろうか。不明。
「(GAEで)フックを使用」:"フック"って何?
「インデックス作成の仕組み」:"インデックス"は半端にしか知らない。つまり、ちゃんと知ってるよりたちが悪い。調べる必要あり。


一ページ目はこんなとこか。以下のをちゃんと調べる必要がある。

  • リモートアクセス
  • フック
  • インデックス


次。「スタートガイド」と「アプリケーション ギャラリー」があるようなので、「スタートガイド」を見てまた「わからないもの」を列挙しつつ、後で「アプリケーション ギャラリー」のやつをいじって具体的なコードの学習をすれば良いかな。


ということで、スタートガイドを見ていく。


(最初のページ)
Python」:ちゃんと学んだことはないが、読むくらいはできるプログラミング言語。機能一覧くらいは確認した方が良いかも。
「プロジェクト」:アプリを作るためのコードとかその他もろもろ。
「ゲストブック」:"掲示板"みたいなもののことだったはず。


(概要)
「Webアプリケーション フレームワーク"webapp"」:後で説明が出てきそうなので保留。
「データモデリングAPI」:たぶん「データベースに入れるデータをいじる関数」ということだろう。これも説明が出てくるはず。
Django(テンプレートを使用する方法)」:聞いたことはあるが、さっぱり知らない。調べる必要あり。


(開発環境)
「URLをフェッチ」:フェッチもぼんやりとは知っているが、URLに対するフェッチの意味は知らない。
「メールの送信」:「知らないこと」とは違うけど、メールが送信できるのは知らなかったのでメモ。

  • (URLの)フェッチ


(Hello,World!)
CGI標準(を使用してWebサーバと通信)」:通信まわりのことは「CGI標準」とやらを調べれば良さそう。
環境変数」:どうやらここでも「環境変数」は使えるらしい。自分の知ってるものと同じものなのかは調査しておきたい。
「(POSTのデータについては)標準入力ストリーム」:どういうストリームなのかよく分からない。POSTと他の何かの比較もしておきたい。
「標準出力ストリーム」:HTTPがどうのと言ってるから、たぶんブラウザに送るあれこれだろう。
「リクエスト ハンドラ」:「ハンドラ」とは「扱うもの」みたいな意味だから、「リクエストに応じて何かを返すもの」というあたりだろう。サンプルから考えて。
「設定ファイル」:「URL」→「スクリプト」のマッピング。重要っぽいのでメモ。
「ポート」:よくわかってないけど、必要なのはテストの時だけっぽいので、今回は保留。

  • (サーバにおける)環境変数
  • (サーバにおける)標準入力ストリーム
    • および、POSTやその他のものとの関係


(webappフレームワークの使用)
フレームワークCGI標準のラッパ:要は「CGI標準ってめんどいよね。だから簡単に使えるようにしたよ」ということらしい。
webappもDjangoフレームワーク:つまり、「CGIを扱うライブラリ」みたいなものらしい。
「RequestHandlerクラス」:これは上の「リクエスト ハンドラ」に相当するのかな。
「WSGIApplication」:「URL」→「スクリプト(ハンドラ)」へのマッピングっぽいけど、設定ファイルとは別なの?動的にできるってこと?
CGIアダプタ」:よくわからない。下の説明を見る限り、run_wsgi_app()のことらしい。
「プロダクション ランタイム環境」:よくわからないが、実行するだけの環境のことだろうか。


(ユーザー サービスの使用)
テスト中は適当なユーザ名が使えるらしい:便利っぽいメモ


(webbappを使ったフォームの操作)
ユーザからの入力の処理まわりについて:概要メモ
MainPageの挙動:「POST」という処理を使い、「/sign」ページに情報を渡す?
Guestbookの挙動:「POST」でデータを渡された場合?に、「content」という名前に入っている情報を表示する


(データストアの使用)
「クエリ エンジン」「トランザクション」:データベースまわりの単語ももう一度確認しておきたい
データストアの流れ:ストア用のクラスを作る→それにデータを詰める→putでセーブ
上書き:「クラスを作る」代わりに、該当部分を持ってきて変更してputすれば良いらしい
データロード:「クラス名.gql("〜")」でも持ってこれるらしいし、こっちの方がわかりやすそう。
GQL:SQLに似た感じのもの。これの代わりに関数だけで処理もできるっぽい。


(テンプレートの使用)
コード内で直接HTML書くのは変更とかめんどい→テンプレートを使えばOK:見た目はテンプレートで。中身はコードで。これもDjangoというのでできて、しかもGAEのSDKにすでに入っている。
雛形HTML+データマッピング→(render)→最終的なHTML:雛形部分を外部に作れる。


(静的ファイルの使用)
単にフォルダを作成しても、そこにアクセスできるわけではない:app.yamlで、「URL→フォルダ」のマッピングの指定が必要


(アップロード)
特になし



GAEのページだけだけど、意外と色々情報があったので、ひとまずここで中断。


=雑多な思考メモ=


サーバの挙動は「何かを受け取る」→「それに応じた処理をする」→「対応する出力を返す」というものだと思われ、それの一番簡単なサンプルが「Hello,World!」のページの「簡単なリクエスト ハンドラの作成」のところのサンプルだろう。「何を受け取ろうが」「内部処理は何もせずに」「同じ出力を返す」というサンプル。これを思考のベースにすればOKかな。


あと、「この前簡単なアプリを作ったはずなのに、なんでPOSTとか良くわかってないんだろう」と思ったけど、webappが代わりにやっていてくれた、ということなのかな。



=今回のまとめ=


「設定ファイル(app,yaml)」で、「URL→スクリプト」の対応付けをするよ。
スクリプト」の役目は「入力を受け取る」「内部で何かする」「HTML的なものを出力する」だよ。たぶん。


それとは別に「WSGIApplication」で「URL→ハンドラ」の対応付けがあるよ。「設定ファイル」とどう違うのか良くわからないので調査が必要だよ。
さらに「スクリプト」の中身が細分化できるよ。そうすると、「入力→ごにょごにょ→出力」は「RequestHandler」でやることになるらしいよ。


「Get」は、ブラウザ?からの依頼に応じて、HTML的なものを出力するためのものっぽい。
→URLで直接値を指定して、HTML的なものを出力するっぽい
YouTubeの個別ページで、動画のIDを渡すイメージ
「Post」は、ページからページ?に情報を渡すための処理?っぽい。
→入力フォームにて入れたデータを渡して、HTML的なものを出力するっぽい
掲示板とかで、入力したテキストを渡すイメージ


「クラスで表現したデータの格納」は、「データストアの使用」というページのGreetingクラスのようにすればOKっぽい。
そして「クラス名」=「データベース名」といことっぽい。(クラスごとにデータベースが用意される?)


=思考のまとめ=


「ログインの任意化」のやり方はなんとなくわかった。「普通のURL→普通の画面」にしておき、ボタンか何かで「ログイン用のURL」に飛ばし、「ログイン用のURL→ログイン画面」にして、「環境変数」か何かに情報を入れて戻せば良い。のかな。ここはいじりながら試した方が良いかもしれない。
ログインに飛ばして戻る方法も、「リダイレクト(標準ログイン画面(ログイン後のURL))」で良いっぽい(未確認)。


「値をURLに入れずに渡す」方法として「POST」だとか「環境変数」があるっぽいので、次はここらへんを調べるべきかな。
→少しだけ調べた。CGIには「標準入出力」と「環境変数」があるらしい。「環境変数」では「アクセスした人のブラウザ情報」とかが入ってるらしい。環境変数での独自データの受け渡しは難しいかな。


例えばYouTubeあたりだったら、「動画IDをURLに含めて渡す」→「Getでその動画IDを取得」→「該当するデートをロードしたりなんやかんや」→「HTMLを出力」という感じかな。で、投稿の際はPostの方を使う、と。投稿したことないからわからんけど。


とりあえず、「アクションゲームの投稿サイト」の作り方はおぼろげながらわかった気がする。すぐに作るのはやっぱり難しそうなので、簡単なゲームのランキングサイトをまずは作るかな。前回のレース的アクションゲームはやっぱりアレかなぁと思うので、また新しく何か作ろう。


わからないことがわりと多いけど、わかったこともわりと多かったので、次からはさっそく作成に移ろう。6時間以上使えるわけだから、ネタ出しから始めても明日中にはなんとかなるんじゃなかろうか。