Subscribed unsubscribe Subscribe Subscribe

Kentaro Kuribayashi's blog

Software Engineering, Management, Books, and Daily Journal.

Acme::Youpy - Create your own youpy!

Perl

ネット中のそこかしこで目撃されているにもかかわらず、誰もそれが実際にはなんなのかを知らない……。Bus error吐いたり寝返りで地震を起こしたり窓の外で光ったりyoupyが人間に見えた人は、抽象化能力が高くてプログラマに向いていたり怪しげなビデオを枕元においていったりする、謎の存在、id:youpy……。あまりにもわからなさ過ぎるので、もうこうなったらみんなで、俺の/私の考えるyoupyを作ってしまえばいいんじゃないかと思い、Google Codeを利用して、youpy作成プロジェクトを立ち上げた。

また、このyoupyの活動の様子をTwitterにて観察することができる。以下をご覧いただきたい。

youpyの使い方

以下、youpyの使い方を解説する。
まず、以下のようにして、svnリポジトリからコードをチェックアウトする。

$ svn checkout http://acme-youpy.googlecode.com/svn/trunk/ acme-youpy

youpyは設定ファイルに基づいてプラグインを読み込み、動作する。youpyの機能を実装した例として、現在のところ、ふたつのプラグイン(function)が用意されている。

設定については、exampleディレクトリ下に配された設定例を参考にしてほしい。

debug: 1
functions:
  - name: TimeTone
    config:
      username: username
      password: password
  - name: Shigo
    config:
      username: username
      password: password

functionsに、プラグインをname, configからなるハッシュの配列として記述すればよい。設定の詳細については、それぞれの機能を実装したモジュールのPODにあたっていただきたい。

$ ./youpy -c [設定ファイル]

として起動する。設定ファイルが指定されなかった場合、youpyと同一ディレクトリにある.youpyというファイルを読み込む。

youpyの作り方

以下、youpyの作り方を解説する。
前述の通り、youpyの具体的な機能は、プラグインによって実装される。全ての機能は、Acme::Youpy::Functionのサブクラスとして、Acme::Youpy::Function::というプレフィックスを付された形で実装されなければならない。
以下は、youpy実行時現在の時間を、Twitterに投稿する機能を実装したモジュールである。

package Acme::Youpy::Function::TimeTone;

use strict;
use warnings;
use Net::Twitter;
use POSIX qw(strftime);

use base qw(Acme::Youpy::Function);

sub execute {
    my ($self, $ctx, $config) = @_;
    my $twitter = Net::Twitter->new(
        username => $config->{username},
        password => $config->{password},
    );
    $twitter->update(strftime("%Y/%m/%d %H:%M:%S", localtime));
}

1;

要するに、Acme::Youpy::Functionを継承し、executeメソッドにより、実際の機能を実装すればよい。そして、設定ファイルにしかるべく設定を書き込み、youpyを実行する。
なお、現在のところ、某Plaggerにて用意されているような数々のユーティリティのようなものは存在しないし、また、「それplaggerをyoupyにリネームすればできるよ」といった揶揄を受け入れる用意はない。

Join our project!

上記を参考に、それぞれで思い思いのyoupyを作るのも良いだろうし、より優れたyoupyを作るべくこのプロジェクトに協力してくださる方は、このエントリのコメント欄にてGoogleのアカウント名を知らせていただきたい。随時、プロジェクトメンバに追加する。