gihyo.jpキーパーソンインタビュー~気になる“あの”人に逢ってきた!

#02面白法人カヤック村瀬大輔氏に訊く―Perl開発の楽しさ・面白さ

連載第2回目は、湘南にオフィスを構える面白法人カヤックにて、⁠こえ部」を担当する傍ら、ラボチームBM11に所属し、オープンソースソフトウェア「Ark」「nim」などの開発を行うPerl Mongerである村瀬大輔氏(ネット上ではtypesterのほうが著名ですね)に会ってきました。

ちょうどgihyo.jpでの特集ついに出た!最新Perlフレームワーク「Ark」徹底解剖が一段落したタイミングで、Ark開発の裏側、さらに村瀬氏ご自身の開発に対するスタンス・考え方について迫りました。

聞き手:馮 富久(株式会社技術評論社、http://twitter.com/tomihisa

村瀬大輔氏。1981年2月生まれ。2004年9月株式会社カヤックに入社。カヤックでは自社サービス「こえ部」を担当する傍ら、ラボチームBM11に所属し「Ark」⁠kamaitachi」といったオープンソースプロダクトを開発。また「Shibuya.pm」「YAPC::Asia」にスピーカーとして参加するなど、Perlプログラマとして活躍の場を広げている。
村瀬大輔氏。

Arkお勧めポイント

Q:まず、連載でフォーカスした「Ark」について伺います。開発者である村瀬さんから見て、Arkのお勧めポイントを教えてください。

A:私はPerlを使った開発をしていて約2年ほどPerlフレームワークのCatalystを使っています。Catalystに対する印象は使いやすい一方でCGI環境では使えないという不満がありました。元々Arkを作ろうと思ったのは、その不満を解消したかったからです。

そのため、Arkの基本的な使い方はCatalystを踏襲していて、これまでCatalystを使っていたデベロッパであれば、新たに開発方法を身に付けることなく、すぐに開発を始められます。この点は、まずお勧めポイントの1つです。

また、CGIにこだわったのはWebアプリケーションのリソース占有に関する問題です。常駐型のWebアプリケーションの場合、システムリソースを占有し続けるというデメリットがありますが、CGIであればリクエストごとにリソースを占有する、つまりリクエストがないときにはリソースをまったく使わないという点で小規模なアプリケーションでは有効です。もちろん、Catalyst同様FastCGIやmod_perlなどもサポートしていますのでリクエスト数の多い実用的なWebアプリケーションを作成することもできます。

ですので、たとえば最初はCGIでサービスを開発しはじめ、その後アクセス数が増えてきたらFastCGIにスイッチするというようなことがアプリケーションのコード変更なしに行えるというのもお勧めポイントですね。

あとは、⁠オフラインの)ローカルで開発を進めることを想定している点もArkの特徴の1つです。

PerlでWebアプリを開発する方へのアドバイス

Q:村瀬さんは豊富なPerlアプリケーション開発の実績があると伺っています。これまでのご自身の経験から、PerlでWebアプリを開発する方へのアドバイスをいただけますか。

CPANに触れる

A:Perの魅力、それは何と言ってもCPANです。CPANには本当に豊富なPerlモジュールが集まっていて、自分が欲しいと思ったモジュールがほとんどあると言っても過言ではありません。それらを組み合わせることで、自分が考えている機能を実現できます。Perlでアプリケーションを開発する方は、ぜひCPANを活用してください。

CPANを活用する

CPANモジュールを検索できるサイトとして「The CPAN Search Site」があります。最初は、ここでいろいろなモジュールを探していくことをお勧めします。

CPANを見ているだけで、自分が何を作りたいかを見つけられることもあります。そして、組み合わせて見てください。そのとっかかりとして、Arkを活用してもらえたら嬉しいです。ArkでもいろんなCPANのモジュールセットアップを使っています。

流行りのプロダクトを見る

ただ、初めてPerlの開発をする人や経験が浅い人には、どうやってCPANを活用したらいいか難しいかもしれません。

そこで、オープンソースで今、流行っていると思ったプロダクトに触り、そのプロダクトの中で使われているCPANモジュールを見てみることでCPANを学習できます。そのようなプロダクトはPerlコミュニティを引っ張る人たちによって開発されていて、そのプロダクトの中で使われているCPANモジュールは定番なものや、先端なものが多く、モダンなCPANモジュールを知るためには一番の近道と言えます。

そのような(学習の意味での)目的で個人的にお勧めするプロダクトは、Plagger、Catalyst、HTTP::Engine、DBIx::Classなどです。またそれらのプロダクトのコミッターが作っている他のプロダクトも参考になるでしょう。

ちなみにArkの中で使用しているお勧めモジュールとしては

などがあります。どちらも大変軽量で高速に動作するモジュールになります。

ただ、トレンドを追うのはとても大変な作業でもありますし、すべてを把握するのは難しいです。そこで、最近であればTwitterやWassrなどのマイクロブログなどを活用し、コミュニティやオンライン・雑誌の記事で著名な方の発言を閲覧すると良いでしょう。

私のTwitterアカウントはtypesterです。よかったらフォローしてください。

あとは、とにかくドキュメントを読む癖を付けることをお勧めします。

Arkの今後

Q:Arkの今後のロードマップ、展開について教えてください。

A:いろいろ考えていまして、大きく4点の検討事項があります。

自社サービス向けにモバイル対応

まず、社内からの要望として挙がったものとして、モバイル対応があります。すでに自社のモバイル開発チームによってモバイル用のArkコンポーネントが整備されているので、次のアップデートではこのモバイル機能を取り込む予定です。

また、CGIやテンプレート機能の拡張を予定しています。とくに先ほど挙げたText::MicroTemplateを常用できるように拡張したいです。

その他、Javaのjarファイルのようにアプリケーションをパッケージ化してアップロードできるような仕組みも実装する予定です。

受託案件向けのワークフローや規約の策定

次に、受託案件で使えるような規約の策定、さらに複数メンバーでの開発に耐えられるようなワークフローの準備をしたいですね。Perlフレームワークは自由にCPANモジュールを組み合わせて使用できるように、あえて規約がゆるいものが多いため、開発者の書き方や癖によるコーディング内容の差異が大きくなります。それを防ぐような仕組みを用意したいです。また、可能な限りArkにサンプルを付属させて、それを参考に開発してもらえればと思います。

サンプルアプリケーションの準備

今の話にも繋がりますが、Arkで作ったサンプルアプリを弊社ラボにアップしていきます。それらは参考用としてぜひ使っていただきたいですが、あくまでサンプルですので、実装については開発者の皆さまご自身のアイデアを盛り込んでいただきたいですね。

Arkの拡張ドキュメント

最後に、これはArk開発時の目標の1つでもありますが、ドキュメントの拡充です。今後は、モバイル対応などをしたうえでそれらのドキュメントやArkプラグインの書き方など、応用的な使い方に関するドキュメントを用意していく予定です。

Javaプログラミングから―初めてのプログラミング

ご自身のプログラミング経験など、体験を元にPerlやプログラミングの楽しさについて語ってくれた村瀬氏
ご自身のプログラミング経験など、体験を元にPerlやプログラミングの楽しさについて語ってくれた村瀬氏
Q:続いて、村瀬さんご自身についていくつか質問させてください。まず、初めてプログラミングをしたのはいつ頃でしょうか?

JDKでGUIプログラミング

A:PCに触ったのは15年ぐらい前、中学の時ですね。当時Windows 95が出たころでした。それから、プログラミングを行ったのは高校に入ってから、まさにJavaが出たときです。初めてのプログラミングはJava 1.0(JDK 1.0.2)だったと思います。

古くから開発をされている方はご存知かと思いますが、当時のJavaと言うとブラウザ上で稼働するAppletが主流でした。しかし、僕はApplet開発ではなくて、Windows上で動くGUIアプリの開発をするのが好きでしたね。無料でWindowsアプリを開発できることが大変魅力的でした。

転機を迎えたblosxomとの出会い

それから、大学に入ってUNIXを触り、LinuxでC言語開発をするという流れだったように思います。そのころ、ちょうどブログブームがあったかと思うのですが、当時触れたblosxomに影響を受けたことを強く覚えています。

blosxomは、Perlベースのブログエンジンでオープンソースで提供されていました。blosxom自体はとてもシンプルで、拡張するには自分でプラグインを書いたりHackする必要があったのですが、その思想がとても格好良く思えたのです。このプロダクトの思想というのは、今回発表したArkでも踏襲しています。

こうして、blosxomにはまっていくうちに、Perlに触れ、他の方が作ったプラグインやコードを読むことでPerl開発の知識の習得を行っていました。

Perlの学習について

少し質問から離れますが、僕は今お話ししたように他の方をコードを見たりドキュメントを読んでPerlを学習してきました。そのため、あまり本を読んで勉強することが少ないのですが、その中でも2冊ほどお勧めしたい本があります。1冊はPerlベストプラクティス⁠オライリー・ジャパン⁠⁠、もう1冊がモダンPerl入門⁠翔泳社)ですね。

どちらもPerlをきちんと覚えるための内容が、体系立てて紹介されています。ぜひ推薦したい書籍です。

Djangoがおもしろい

Q:村瀬さんというと、Perlデベロッパの印象が強いのですが、ご自身で他のLL(Lightweigt Language)に触れる機会はありますか? あるいは気になる言語などがあれば教えてください。

A:もちろんPerl以外の言語にも触れた経験はあります。実はPerlの前にRubyに触れていました。

フレームワークとしては、PythonフレームワークのDjangoの独自性がおもしろいと思っています。一般的にフレームワークというのは開発効率を高めることが目的となり、⁠機能で見ると)画一的になる部分が見られますが、Djangoは独自性が強く,他のフレームワークにない機能を実装していて、かつそれが他のフレームワークでも取り入れたらいいのではないかと言うものが多く、注目しています。

ただPythonとPerlを比べるとやはり、TMTOWTDI(There's More Than One Way To Do It. ⁠やり方はひとつじゃない⁠⁠)というスローガンに見えるようなPerlの自由さが好きですね。

もちろん、自由の裏返しとして、人によってコードの書き方が全然違ってしまう、といった面もありますが、個人的には逆にそれが面白いと思っているので、これからもPerlに注力していきたいです。

フレームワークのメリット・デメリット

Q:今、フレームワークに関してのお話が少し出ました。村瀬さんが考えるフレームワークのメリット・デメリットがあれば教えてください。

A:最大のメリットは、やはり開発効率の向上、つまり開発スピードが上がる点ですね。たとえば、ログイン処理など同じ実装であれば何度も同じコードを書く必要がなく、フレームワークとして提供されていれば良いわけです。

一方で、画一的になる部分があるため、複数のサービス同士で同じ機能が出てきてしまうことがあります。フレームワークを使うにあたっては、開発者自身のクリエイティビティやマインドをどう反映させられるかこれが大切です。この2点を意識しないと(できあがったものが)皆同じようなアプリケーションになってしまったり、ユーザにとって魅力的ではないものになる危険性があると感じます。

Arkに関して言えば、自分用の雛形を用意することができるため、先ほどのログイン処理のように共通して使える機能など、自分が欲しい機能だけをあらかじめ用意しておき、あとは自由に開発を行えるという柔軟な開発が行えます。

それから、これは⁠Perlの⁠フレームワークという条件になるのですが、Perlは自由に開発がしやすい分、規約の作り方が大事になります。とくに複数メンバーでの開発をするとなったときはもちろん、これからPerlを開発したい人に対して、見やすいコードを書くというのはけっこう難しかったりします。これらの課題は、ArkやCatalystなど、Perlのフレームワークが解決することでもあり、また、解決できると思っています。

ArkとKAMAITACHI

Q:これまで開発してきたものの中で、とくに印象に残っているプロダクトは何でしょうか? また開発するモチベーションなどがあれば教えてください。
>

A:まずは、今回の連載でもご紹介したArkですね。今後もどんどん開発を進めていきたいと思っています。それから、Flash Media ServerのPerl実装「kamaitachi」は、印象に残っています。RTMP(Real Time Messaging Protocol)に対応しており、Flashやflvの配信を行うサーバになります。

その他、im.kayac.comというHTTPベースのシンプルなメッセージングAPIや、TTYshareというターミナルをログができるアプリケーションも印象に残っています。これらは、もともと自分の環境に最適化するために開発したものでもあるので、日常的に役立っていますね。

開発のモチベーション―人に伝える嬉しさ

開発モチベーションに関して、きっかけとして⁠自分のために作る⁠という意識はとても大切だと思っていて、開発における大きなモチベーションになりうると考えています。さらに、それを人に対して発表するという意識を持つことで、もう1ランク上の開発ができるように感じます。その点で、コミュニティの存在は非常に大きいです。

僕自身の経験をお話しすると、コミュニティに参加したのは、shibuya.pmのセミナーを聞きに行ったのが最初でした。そのとき、発表している方たちが皆、格好良く見え楽しそうに感じて「自分も発表する側に行きたい」と思ったのです。そこで、次のshibuya.pmにはスピーカとして申し込み、発表させていただきました。実際に発表してみて、最初に考えていた以上に、発表することの楽しさ・嬉しさを肌で感じることができたんです。

話を戻しますが、自分にとって印象に残っているプロダクトは数多くありますが、共通していることとして、開発することの楽しさ、人に伝える、使ってもらうことの嬉しさを感じたものは印象に残りますね。

モバイルデバイスに対して

Q:最近、iPhone 3G SやAndroidケータイなど、モバイルデバイス分野で大きな発表がありました。開発者としてモバイルデバイスに対して興味はありますか?

A:Perlエンジニアとして見ると、実はそれほど関わる部分がなくて興味がないというのが本音です(笑⁠⁠。ただし、一エンジニアとして見るととても興味があります。とくに、自分が持ち歩けるデバイスの中に、自分が書いたプログラムが入っているというのは、エンジニア冥利に尽きるのではないでしょうか。

また、今挙げた2つのうち、Androidはオープンソースでもありますので、iPhoneに比べてプライベートAPI(OS制約が強いもの)がありません。コアアプリである電話アプリやメールアプリさえも公開されています。これらをHackしたり自分で作ったものに置き換えられるという点は、開発者心を刺激しますね。

もちろん、iPhone OS 3.0にしても、Android OSにしても大変素晴らしいOSですし、これからどんなアプリケーションが生まれるのか、また、自分自身エンジニアとして何を作れるのか楽しみに考えています。

みんなでPerlを楽しみましょう!

Q:最後に、gihyo.jpの読者に向けてメッセージをお願いします。

A:Arkに関してはこれからどんどんドキュメントを充実させていきますので、Perlを触ったことがない方にも、ぜひ触って開発をしてもらいたいですね。まずそこからPerlの世界に入ってもらえれば嬉しいです。そこでPerlがおもしろいと思ったら、次はCPANに触れて、CPANを使ってみてください。さらにPerlやCPANの魅力を感じたら、今度はぜひ皆さんでPerl開発を行い、CPANに登録してみてください。

みんなでPerlを楽しみましょう!

村瀬氏も所属する、面白法人カヤックのラボBM11(ブッコミイレブン)⁠。過去2年、年間で77個、88個とプロジェクトをリリースしてきており、2009年は99個リリース予定。要注目です!
ご村瀬氏も所属する、面白法人カヤックのラボ「BM11(ブッコミイレブン)」。過去2年、年間で77個、88個とプロジェクトをリリースしてきており、2009年は99個リリース予定。要注目です!

おすすめ記事

記事・ニュース一覧