SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Webアプリケーションフレームワーク「Catalyst」入門

初めてのCatalyst入門(11)
プラグイン&モジュール大全

ロギングからTwitter対応まで


JSON形式でデータを返す

 最近ではAjaxアプリケーションだけでなく、Web APIのレスポンスとしても直接JSON形式でデータを返す場合が増えてきているので、JSON形式に変換するモジュールも併せて紹介します。

オブジェクトを簡単にJSON化して返す

 ここでは、先ほどのCatalyst::View::REST::XMLと同様に、オブジェクトの配列やハッシュデータなどを簡単にJSON化するビューモジュールである、Catalyst::View::JSONを紹介します。

 Catalyst::View::JSONは、少々高機能な実装が提供されており、JSONPに対応させるためのCALLBACKメソッドの指定や、JSON形式へのエンコードをカスタマイズする方法なども提供されています。

 Catalyst::View::JSONをインストールするには、rootユーザーで次のコマンドを実行します。

[リスト15]Catalyst::View::JSONのインストール
# perl -MCPAN -e 'install Catalyst::View::JSON'
Catalyst::View::JSONの例

 まずはビューモジュールを作成してみましょう。「PluginSample1/lib/PluginSample1/View/JSON.pm」というファイルを新規作成し、次の内容で保存します。

[リスト16]JSON.pm
package PluginSample1::View::JSON;
use base qw( Catalyst::View::JSON);
1;

 先ほどのXML形式に変換する場合と同様に、ダミー情報をJSON形式に変換してみましょう。ダミーのユーザー情報をStashに登録し「PluginSample1::View::JSON」にforwardするだけです。

[リスト17]JSON形式でデータを返す
sub json :Local {
  my ( $self, $c ) = @_;
  $c->stash->{user} = $self->users();
  $c->forward('View::JSON');
}

 このアクションを呼び出して得られるJSON形式のレスポンスデータは次のようになります。

[リスト18]JSON形式でのレスポンス結果(適宜改行しています)
{"user":
  [
    {"name":"Makoto","age":33},
    {"name":"Mayu","age":28},
    {"name":"Shin","age":37},
    {"name":"Yoshi","age":40}
  ]
}

Twitterに投稿する

 最後に、Web APIを呼び出す例として、Twitterにつぶやきを手軽に投稿できるプラグインを紹介します。

Twitterにつぶやきを手軽に投稿するモジュール

 CPANには、TwitterにアクセするためのモジュールとしてNet::Twitterが公開されています。このモジュールは、つぶやきの投稿だけではなく、Twitterで提供されているすべてのAPI実行に対応しています。

 CatalystのプラグインとしてはCatalyst::Plugin::Twitterというものがありますが、Basic認証を基本としており、2010年8月31日を持ってBasic認証が廃止されたことから、ここではOAuth認証でNet::Twitterを利用する方法を説明します。

 まずはTwitterのデベロッパーサイトからTwitterのAPIを使用するアプリケーションを登録します。

 この例では、常に単一のアカウントについてtweetさせるため、アプリケーションの種類として、クライアントアプリケーションを選択しています。ブラウザアプリケーションを選択した場合には、複数のアカウントから使用することが出来るようになります。しかし、そのために一度Twitterの認証URLにリダイレクトしなければならず、正しく認証が行われた後で、アプリケーション側のコールバックURLがアクセストークンを引き渡すために呼び出されることになります。

Twitterのアプリケーション登録申請画面
Twitterのアプリケーション登録申請画面

 アプリケーションの登録が終わったら、OAuth認証で必要となる、次の4つの値をメモしておきます。

  • Consumer Key
  • Consumer secret
  • (My) Access Token
  • (My) Access Token Secret 

 それではコードを記述する前に、Net::Twitterモジュールをインストールします。このモジュールをインストールするには、rootユーザで次のコマンドを実行します。

[リスト19]Net::Twitterのインストール
# perl -MCPAN -e 'install Net::Twitter'

 環境によっては、インストールエラーが発生するかもしれませんが、その場合には次のようにforceインストールすることで、エラーが発生しても強制的にインストールできます。

[リスト20]Net::Twitterのforceインストール
# perl -MCPAN -e 'force install Net::Twitter'
Net::Twitterの例

 このモジュールを使用するには、アプリケーションモジュールファイルで次のように指定します。YOUR_CONSUMER_KEYには、先ほどメモした値を設定しましょう。

[リスト21]tweetサンプル
sub tweet :Local {
  my ( $self, $c ) = @_;
  # consumer_key/consumer_secretを設定
  my $nt = Net::Twitter->new(
    traits => ['API::REST', 'OAuth'],
    consumer_key => YOUR_CONSUMER_KEY,
    consumer_secret => YOUR_CONSUMER_SECRET,
  );
  # access_token/access_token_secretを設定
  $nt->access_token(MY_ACCESS_TOKEN);
  $nt->access_token_secret(MY_ACCESS_TOKEN)_SECRET);
  $nt->update('Tweet from Catalyst application.');
  $c->response->body('Tweet!');
}

まとめ

 本記事では、Catalystアプリケーション開発時に有効なプラグインや、ハッシュ値などのデータをJSONやXML形式に変換するビューモジュール、そしてTwitterに投稿するプラグインなどを紹介しました。

 次回も引き続き、Catalystで有用なプラグインやモジュールを紹介します。

参考資料

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
Webアプリケーションフレームワーク「Catalyst」入門連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 花田 善仁(ハナダ ヨシヒト)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/5390 2010/09/08 17:56

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー