おどおどしつつCatalystをモバイルサイト開発に導入してみた:Catalyst基本の基本習得編
以前の日記で触れたように、仕事でPerlでモバイルサイトを新たに開発する機会があったので、Catalystをベースで開発してみることにした。
かなり篭っていたので本blogもしばらく更新がご無沙汰だったんだけど、ようやく一段落したので、これまでの足跡をまとめてみる。
前述のとおりCatalyst自体初利用なので、素人クサイ箇所も多々見受けられますがご愛嬌ということで。。
逆に、これから同様な導入を検討している人には参考になるかも。はてブの状況とかをみると、Perlの流行りっぷりに興味はあるものの、基本部分からの習得になるので、まして最近のモダンな流れまで考えると道のりが遠すぎると感じて、躊躇している人ってけっこう多いんじゃないかと思うんだよね。
僕もPerlの使用自体はかなり慣れていたんだけれど、モダンな書き方なんてほとんど触れてなかったし、Template-ToolkitやDBIx::Classを導入したのもつい最近ですから。
しかも恥ずかしながら社内では技術マネージャーなんかやってる身でありまして、これでも僕が社内では一番Perl事情に詳しい方だったりする。他のメンバーはむしろ基本仕様に漸く慣れてきたくらいで、モダンな書き方なんて意識外だったりして。
でも、世間的にもこういう層が結構多いんじゃないかと思っています。そういう人たちの裾野を広げる助けになれば。
当初はモバイルと関連がない基本部分(Catalyst/DBIx::Class/Template-Toolkit/FormValidator::Simple/Email::MIMEとかとか)から書いて行こうかとしたんだけど、これだけでも膨大になりそうだったのでまずは基本の基本編から。
これまでの開発手法
社内では、以下のようなフレームワークでこれまで開発してました。
- 自前MVCフレームワーク
- 1コントローラー1アクション
- テンプレートはHTML::Templateを利用
- バリデーションは自前だが依存度が高く、トリッキーで分かりにくい
- O/Rマッパーは使用せず、SQL手書き
- メール受信は、MIME-Toolsを利用
- メール送信は、sendmail直接呼出し(!)
- テスティングフレームワークなんてない
- ロガーはLog::Log4perlを利用*1
- 端末判定、絵文字処理は独自([c:110]みたいな表現を内部使用)→その後絵文字入出力はEncode::JP::Mobileを利用した版に移行
おぉ今考えるとなんてレガシーなんでしょ。でも開発着手されたのも昨年くらいで、そんなに昔ではないんだよね。
ただ、モバイルのメディアをスモールスタートで立ち上げるのって、自社開発、受託開発を問わずほとんどの場合スピード命!になるので、目の前の手間ひま削減のために、旧来の独自手法で再開発ってのはよくある話なんだろうね。
でも長い目で見ると、どうしても独自に実装した部分ってのは汎用性や安定性に欠けることが多いので、やっぱりCPANで出回ってるなどの標準的なモジュールを積極的に導入していくべき。わざわざ車輪を再開発してたりする間に競合にサービスで出遅れちゃっていたらお話にならない訳で。でも日々の地道なキャッチアップを怠った時間が長ければ長いほど追いつくのも大変になるので、ますます旧来の方法でいいや、ってなるんだろう。
今回は、そもそもの独自FWを設計した人間が退職するタイミングだったので、比較的容易に説得できた。それでも、ビジネスの遅れは許容できないので、非常に短期間で習得せざるをえなかったんだけど。。
Catalystの導入
まずは親玉のFWの習得から。以前の日記でも触れたように、ある程度体系化された二次情報はことごとく陳腐化してしまっている。
そこでやっぱり一念発起して一次情報(POD)をひととおり読破することにした。
とはいえマニュアルだけでもこんなにあるので、ここで面食らう。ここで脱落する人も少なからずいるんじゃないかしら?
「それらしき」タイトルのファイルを読み漁っていたら、なんとなく読むべき順番が見えてきた。これから習得する人は以下の順で読んでいけばいいのでは。
まずはマニュアルイントロを読もう。
次は、チュートリアルが揃っているようなので、ここから読んでいったら把握しやすいと思います。
- Catalyst::Manual::Tutorial::Intro
- Catalyst::Manual::Tutorial::CatalystBasics
- Catalyst::Manual::Tutorial::MoreCatalystBasics
- Catalyst::Manual::Tutorial::BasicCRUD
これ以降もチュートリアルは続くんだけど、とりあえず上記のだけ読めば、Catalystが何をしてくれるモンなのか、というのは分かってきます。これ以降の章でもセッションやら認証やらCatalystの上で開発していくのに非常に有用な話が出てきますが、これはまた後で戻ってきてからでいいと思います。
もちろんCatalystの哲学やら、クックブックやらあるんだけど、これらは理解が深まるにつれ、都度参照すれば十分じゃないかしら。
次の段階としては、Catalystおよびプラグイン群が何をしてくれるかを把握していきました。が、その前にプラグインを構成するそもそもの各モジュールについても理解が浅かったので、ある程度学習が必要でした。
- O/Rマッパー:DBIx::Class
- テンプレートエンジン:Template
- バリデータ:FormValidator::Simple
- メール送受信:Email::MIME/Email::Send/Email::Simple::Creator*2
次回はこれらを習得した経緯からまとめてみたいと思います。