CGIとMySQLだけを利用して動かせるWebアプリをArkで作ってみました。APIでタイムラインを取得MeCabで形態素解析して各発言を全裸にユーザーが各全裸発言をお気に入りできる(ユーザーと発言をひもづける)選択した発言をOAuthでTweetくらいの機能。PerlのCGIからpsgiを起動する方法については以前書いた通りで。cssなどはそこにシンボリックリンクを貼った。O/RマッパーはいまだにDBIx::Classしか使ったことないので普通にDBIx::Classを使っています。難しいことしてないし、もっと軽量なもので良いかも...。APIにアクセスしていると体感的にすごく遅いので、レスポンスはすぐに返してJavaScriptでAPI叩いてタイムラインを取得するようにした。実際、待ち時間の大部分はAPIからデータをとってきてるところのはず。OAuthで認証してログインする方法について書いてみます。ここで躓いた方もいたようで。log自分もソースを読んでやって色々ためしてみてようやくできた、というカンジですが。"Session"のプラグインを使用します。'*********',};1;のように書きます。"Session::Store::****"は自由に変更して良いと思います。上記は永続化せずにオンメモリだけで動かす用に書いています。"Ark::Plugin::Session::Store::Model"などを使ってDBにユーザー情報、memcachedにセッション情報を入れたりするかと思います(さくらレンタルサーバー用にはCache::FastMmapを使っています)。OAuthアプリの設定などについては他に詳しい記事があるので省略)。今回はlib/Hoge.pmに書いていますがこういった設定はconfig.plに書いておく方が良いと思います。あとはControllerで認証処理をするだけです。lib/Hoge/Controller/Root.pmを以下のように書きます。app.psgi"とか実行すればwebアプリが立ち上がります。"/"にアクセスすると、indexにて最初は$c->auth->userがundefを返すため"/login"へのリンクが表示されます。"/login"にアクセスすると、$c->auth->authenticate_twitterによってOAuthの認証画面へリダイレクトされます。このとき、内部ではNet::Twitterのget_authorization_urlが呼ばれます。webアプリの場合は引数にcallbackを与えておかないといけません(Net::Twitter::Role::OAuthを参照)。callbackのURLは"/login"でなくても良いですが、どうせもう一度同じ処理をすることになるので、同じURLのままで良いと思います。oauth_verifierというパラメータが付加されてきます。access_token_secretなどを取得します(その前段階としてsession情報などもチェックしています)。$self->persist_user($user_obj);といった処理が行われるので、ここで既に登録済みのユーザーを検出したり新規に登録するなどができます。A::P::A::S::DBIx::Classを使っているときなどはSchema/Result/User.pmにユーザー情報を定義し、Schema/ResultSet/User.pmでfind_userメソッドを実装しupdate_or_insert的なことをしてやれば良さそうです。今回のこの例ではA::P::A::Store::Nullを使っていて、これは無条件で新規にArk::Plugin::Authentication::Userオブジェクトを作成して返してくれます。してauthenticate_twitterで認証が完了すればA::P::A::Userオブジェクトが得られ、その後は$c->auth->userでUser情報を取得できます。"/"にアクセスすると今度はTwitterでのログインアカウントのscreen_nameが表示されるようになります。こんなカンジで簡潔にサクッとTwitterと連携するアプリを作ることができました。Arkについては知らないことだらけですが少しずついじって勉強していこうと思います。