SlideShare a Scribd company logo
1 of 35
Perlでの”⼩小規模”アプリ
      制作事例例
   2013.03.29(⾦金金)
       @ruik



                     1
本Talkの⽬目的

     Perl  Casualは
「カジュアルにPerlを楽しみたい
 “初⼼心者”向けのイベント」




      “初⼼心者”でも
 “⼩小規模”アプリをCasualに
作っちゃえるんだという勇気を!
                     2
⾃自⼰己紹介




         3
⽊木村  塁             今年年の6⽉月から
                  年年末まで育児休業
    @ruik
                     を取得予定
年年齢: 30歳
職業: 会社員@KDDI
    ヒカリエ33〜~34階で過ごしています
    主にauユーザー向けのサービス企画
    ≠エンジニア
    「Googleの20%ルール」のような形で
    20%のリソースで新規サービスの企画&開発
    ⼤大学の頃Perlでコード書いたことある、って事で
    サーバサイドの実装を主に担当              4
Perlレベル




          5
6
いわゆる
「ライブラリの
  利利⽤用者」




           7
“⼩小規模”アプリ制作事例例




                 8
みんなでつくる
旅のしおり



      2010/12          開発開始
      2011/7              サービスリリース
      2013/5/31    サービス終了了予定
旅の経験をもっと⼤大切切に

         経験の記録




         旅のしおり

プランニング           経験の共有
Mash  Up

   ⼀一緒に⾏行行く⼈人皆で

   -‐‑‒    予定の追加
   -‐‑‒    写真などの思い出
   -‐‑‒    ⾏行行った場所(Check-‐‑‒in)

   ができる。
Real-‐‑‒Time



    旅のしおり画⾯面から、
    写真投稿やCheck-‐‑‒in、予定
    の追加などをすると・・・
Real-‐‑‒Time


        Facebookでも旅
         の情報をシェア
構成


         iPhoneアプリ
バックエンド
  サーバ



 やり取りは
  JSON   Androidアプリ
構成(当初)
アプリからのアクセス


   apache
     +
  mod_̲perl
構成(⾒見見直し後)
              外部からのアクセス


                apache

daemontools
でプロセス監視         starman
なんでMojolicious?
       Mojoliciousは
Catalystの作者が新たに作った
 Webフレームワークらしい

Catalystってのは俺でも知ってる

          じゃあ、
  Mojolicious  >  Catalyst
    ってことで、使おう
Mojoliciousでアプリを作る
  $  mojo  generate  app  sojorsojor

  ./
  ├──  lib
  │      ├──  Sojorsojor
  │      │      └──  Example.pm
  │      └──  Sojorsojor.pm              ディスパッチャ
  ├──  log
  ├──  public
  │      └──  index.html
  ├──  script
  │      └──  sojorsojor
  ├──  t
  │      └──  basic.t
  └──  templates
          ├──  example
          │      └──  welcome.html.ep
          └──  layouts
                  └──  default.html.ep
Mojoliciousでアプリを作る
                      lib/Sojorsojor.pm
  package  Sojorsojor;
  use  Mojo::Base  'Mojolicious';
    
  #  This  method  will  run  once  at  server  start
  sub  startup  {                                                lib/Sojorsojor/Api/
          my  $self  =  shift;                                        Friend.pm
                                                                           の
  #  Router                                                               list
          my  $r  =  $self-‐‑‒>routes;                                を実⾏行行する
    
  #  Normal  route  to  controller
          $r-‐‑‒>get('/api/friend')-‐‑‒>to(ʼ’api-‐‑‒friend#list');
  }

  1;
Mojoliciousでアプリを作る
  ./
  ├──  lib
  │      ├──  Sojorsojor            Controller
  │      │      └──  Api
  │      │      │  └──  Friend.pm
  │      │      │  └──  Search.pm
  │      │      │          ・
  │      │      │          ・
  〜~〜~〜~〜~〜~〜~〜~〜~〜~〜~〜~〜~〜~〜~〜~
  │      │      └──  Model           Model
  │      │      │  └──  Friend.pm
  │      │      │  └──  Search.pm
  │      │      │          ・
  │      │      │          ・
  〜~〜~〜~〜~〜~〜~〜~〜~〜~〜~〜~〜~〜~〜~〜~
  │      └──  Sojorsojor.pm
  ├──  log
  ├──  public
  │      └──  index.html
Mojoliciousでアプリを作る

   最終的に40個超のAPIを
     アプリ向けに⽤用意

    コピペコードが満載

    次こそはこの反省省を
      活かそう。。。
2つ⽬目の”⼩小規模”アプリ制作事例例




                      23
毎⽇日の買い物を楽しく




ソージャ!ソージャ!の
経験とコードを活かし    2011/4	
  	
  	
  	
  	
  	
  開発開始	
  
  て⼯工期短縮      2011/7	
  	
  	
  	
  	
  	
  	
  サービスリリース	
  
              2013/5/31	
  サービス終了予定
毎⽇日の買い物を楽しく




バーコードをスキャン   コメントや☆を共有
                         皆のコメントを⾒見見て、
                         ⼈人気商品をチェック!
ランキング   クエスト




        バッジ
構成


         iPhoneアプリ
バックエンド
  サーバ



 やり取りは
  JSON   Androidアプリ
Mojoliciousでアプリを作る
  ./
  ├──  lib
  │      ├──  Itemloupe
  │      │      └──  Api
  │      │      │  └──  Base.pm
                                      反省省を活かして、
                                    ソージャ!ソージャ!の
  │      │      │  └──  Friend.pm       Base.pm
                                    経験とコードを活かし
  │      │      │  └──  Search.pm    をちゃんと作成して、
                                       て⼯工期短縮
  │      │      │          ・
  │      │      │          ・
                                       処理理を共通化
  〜~〜~〜~〜~〜~〜~〜~〜~〜~〜~〜~〜~〜~〜~〜~
  │      │      └──  Model
  │      │      │  └──  Base.pm
  │      │      │  └──  Friend.pm
  │      │      │  └──  Search.pm
  │      │      │          ・
  │      │      │          ・
  〜~〜~〜~〜~〜~〜~〜~〜~〜~〜~〜~〜~〜~〜~〜~
  │      └──  Itemloupe.pm
  ├──  log
Mojoliciousでアプリを作る
                    lib/Api/Base.pm
  package  Itemloupe::Api::Base;

  use  strict;
  use  warnings;

  use  base  'Mojolicious::Controller';
  use  Itemloupe::Session;

  #  APIのアウトプットとなるJSONのパターンを定義
  sub  api_̲output  {
          my  ($self,  $data,  $error,  $type)  =  @_̲;
  〜~〜~処理理を書く〜~〜~
          $self-‐‑‒>render('json'  =>  $output);
  }

  1;
Mojoliciousでアプリを作る
                      lib/Api/Activity.pm
  package  Itemloupe::Api::Activity;

  use  strict;
  use  warnings;
                                                              コピペが減って
  use  base  'Itemloupe::Api::Base';
  use  Itemloupe::Model::Activity;                              すっきり

  sub  get  {
  〜~〜~〜~〜~〜~中略略〜~〜~〜~〜~〜~
  #  activity  get
          my  $activity  =  new  Itemloupe::Model::Activity;
          my  $result  =  $activity-‐‑‒>get($self-‐‑‒>uid,  $uid,  $p-‐‑‒
  >{'type'});
  #  output
          $self-‐‑‒>api_̲output($result,  $activity-‐‑‒>get_̲error);
  }
3つ⽬目の”⼩小規模”アプリ制作事例例




                      31
ランチガチャ
 コミュニ
ケーション
活性化の仕
          Lunch  Gacha!
組みづくり     http://lunch.7hongi.com


        ヒカリエで働く⼈人のためのランチスポットのリコメンドサービス
         社内のヒカリエ引越しPJと7hongiPJ(内製PJ)でコラボ




                                2012/8	
  	
  	
  	
  	
  	
  開発開始	
  
                                2012/10	
  	
  	
  	
  サービスリリース	
  
                                                                         32
構成


         HTML5+JS
バックエンド   のWebアプリ
  サーバ



 やり取りは
  JSON
さいごに  –  今⽇日伝えたいこと




                     34
何個か作っていれば、慣れる!




                 35

More Related Content

Similar to 130329 perl casual_ruik

BNN CAMP vol.3  インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 1
BNN CAMP vol.3  インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 1BNN CAMP vol.3  インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 1
BNN CAMP vol.3  インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 1Atsushi Tadokoro
 
Programming camp Codereading
Programming camp CodereadingProgramming camp Codereading
Programming camp CodereadingHiro Yoshioka
 
Symfony2 How to create your Bundle
Symfony2 How to create your BundleSymfony2 How to create your Bundle
Symfony2 How to create your Bundlechobi e
 
iPhoneアプリ開発の歩き方〜Swift編〜
iPhoneアプリ開発の歩き方〜Swift編〜iPhoneアプリ開発の歩き方〜Swift編〜
iPhoneアプリ開発の歩き方〜Swift編〜Yusuke SAITO
 
20120826i phonedeveloperworkshop
20120826i phonedeveloperworkshop20120826i phonedeveloperworkshop
20120826i phonedeveloperworkshopYoichiro Sakurai
 
go.mobile で Android 開発
go.mobile で Android 開発go.mobile で Android 開発
go.mobile で Android 開発Hiroshi Kurokawa
 
Mojoliciousでつくる! Webアプリ入門
Mojoliciousでつくる! Webアプリ入門Mojoliciousでつくる! Webアプリ入門
Mojoliciousでつくる! Webアプリ入門Yusuke Wada
 
Google Dev Fest 2010 Japan LT: OpenSocial JavaScript API is good, Lightweight...
Google Dev Fest 2010 Japan LT: OpenSocial JavaScript API is good, Lightweight...Google Dev Fest 2010 Japan LT: OpenSocial JavaScript API is good, Lightweight...
Google Dev Fest 2010 Japan LT: OpenSocial JavaScript API is good, Lightweight...Nobuhiro Nakajima
 
[出張!雲勉 in Tokyo] Swagger で簡単APIドキュメント作成
[出張!雲勉 in Tokyo] Swagger で簡単APIドキュメント作成[出張!雲勉 in Tokyo] Swagger で簡単APIドキュメント作成
[出張!雲勉 in Tokyo] Swagger で簡単APIドキュメント作成Tomoki Oyamatsu
 
1.29.user,user,user
1.29.user,user,user1.29.user,user,user
1.29.user,user,userTonny Xu
 
今流行りのウェブアプリ開発環境Yeoman
今流行りのウェブアプリ開発環境Yeoman今流行りのウェブアプリ開発環境Yeoman
今流行りのウェブアプリ開発環境Yeomantomo_masakura
 
Mashup Caravan in オープンソースカンファレンス2011 Hiroshima: infoScoop OpenSource
Mashup Caravan in オープンソースカンファレンス2011 Hiroshima: infoScoop OpenSourceMashup Caravan in オープンソースカンファレンス2011 Hiroshima: infoScoop OpenSource
Mashup Caravan in オープンソースカンファレンス2011 Hiroshima: infoScoop OpenSourcecmutoh
 
PhoneGapでWebアプリをスマホアプリ化
PhoneGapでWebアプリをスマホアプリ化PhoneGapでWebアプリをスマホアプリ化
PhoneGapでWebアプリをスマホアプリ化Takashi Okamoto
 
第8回 福岡西区勉強会
第8回 福岡西区勉強会第8回 福岡西区勉強会
第8回 福岡西区勉強会Shinya Kinoshita
 
Rescale で Singularity を使ってみよう!
Rescale で Singularity を使ってみよう!Rescale で Singularity を使ってみよう!
Rescale で Singularity を使ってみよう!Shinnosuke Furuya
 

Similar to 130329 perl casual_ruik (20)

BNN CAMP vol.3  インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 1
BNN CAMP vol.3  インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 1BNN CAMP vol.3  インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 1
BNN CAMP vol.3  インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 1
 
Programming camp Codereading
Programming camp CodereadingProgramming camp Codereading
Programming camp Codereading
 
Symfony2 How to create your Bundle
Symfony2 How to create your BundleSymfony2 How to create your Bundle
Symfony2 How to create your Bundle
 
SnapDishの事例
SnapDishの事例SnapDishの事例
SnapDishの事例
 
iPhoneアプリ開発の歩き方〜Swift編〜
iPhoneアプリ開発の歩き方〜Swift編〜iPhoneアプリ開発の歩き方〜Swift編〜
iPhoneアプリ開発の歩き方〜Swift編〜
 
20120826i phonedeveloperworkshop
20120826i phonedeveloperworkshop20120826i phonedeveloperworkshop
20120826i phonedeveloperworkshop
 
go.mobile で Android 開発
go.mobile で Android 開発go.mobile で Android 開発
go.mobile で Android 開発
 
Mojoliciousでつくる! Webアプリ入門
Mojoliciousでつくる! Webアプリ入門Mojoliciousでつくる! Webアプリ入門
Mojoliciousでつくる! Webアプリ入門
 
Sinatra and heroku for mac
Sinatra and heroku for macSinatra and heroku for mac
Sinatra and heroku for mac
 
Driverについて
DriverについてDriverについて
Driverについて
 
Google Dev Fest 2010 Japan LT: OpenSocial JavaScript API is good, Lightweight...
Google Dev Fest 2010 Japan LT: OpenSocial JavaScript API is good, Lightweight...Google Dev Fest 2010 Japan LT: OpenSocial JavaScript API is good, Lightweight...
Google Dev Fest 2010 Japan LT: OpenSocial JavaScript API is good, Lightweight...
 
[出張!雲勉 in Tokyo] Swagger で簡単APIドキュメント作成
[出張!雲勉 in Tokyo] Swagger で簡単APIドキュメント作成[出張!雲勉 in Tokyo] Swagger で簡単APIドキュメント作成
[出張!雲勉 in Tokyo] Swagger で簡単APIドキュメント作成
 
1.29.user,user,user
1.29.user,user,user1.29.user,user,user
1.29.user,user,user
 
Haikara
HaikaraHaikara
Haikara
 
今流行りのウェブアプリ開発環境Yeoman
今流行りのウェブアプリ開発環境Yeoman今流行りのウェブアプリ開発環境Yeoman
今流行りのウェブアプリ開発環境Yeoman
 
Mashup Caravan in オープンソースカンファレンス2011 Hiroshima: infoScoop OpenSource
Mashup Caravan in オープンソースカンファレンス2011 Hiroshima: infoScoop OpenSourceMashup Caravan in オープンソースカンファレンス2011 Hiroshima: infoScoop OpenSource
Mashup Caravan in オープンソースカンファレンス2011 Hiroshima: infoScoop OpenSource
 
OSC福岡 20111203
OSC福岡 20111203OSC福岡 20111203
OSC福岡 20111203
 
PhoneGapでWebアプリをスマホアプリ化
PhoneGapでWebアプリをスマホアプリ化PhoneGapでWebアプリをスマホアプリ化
PhoneGapでWebアプリをスマホアプリ化
 
第8回 福岡西区勉強会
第8回 福岡西区勉強会第8回 福岡西区勉強会
第8回 福岡西区勉強会
 
Rescale で Singularity を使ってみよう!
Rescale で Singularity を使ってみよう!Rescale で Singularity を使ってみよう!
Rescale で Singularity を使ってみよう!
 

130329 perl casual_ruik

  • 1. Perlでの”⼩小規模”アプリ 制作事例例 2013.03.29(⾦金金) @ruik 1
  • 2. 本Talkの⽬目的 Perl  Casualは 「カジュアルにPerlを楽しみたい “初⼼心者”向けのイベント」 “初⼼心者”でも “⼩小規模”アプリをCasualに 作っちゃえるんだという勇気を! 2
  • 4. ⽊木村  塁 今年年の6⽉月から 年年末まで育児休業 @ruik を取得予定 年年齢: 30歳 職業: 会社員@KDDI ヒカリエ33〜~34階で過ごしています 主にauユーザー向けのサービス企画 ≠エンジニア 「Googleの20%ルール」のような形で 20%のリソースで新規サービスの企画&開発 ⼤大学の頃Perlでコード書いたことある、って事で サーバサイドの実装を主に担当 4
  • 6. 6
  • 9. みんなでつくる 旅のしおり 2010/12          開発開始 2011/7              サービスリリース 2013/5/31    サービス終了了予定
  • 10. 旅の経験をもっと⼤大切切に 経験の記録 旅のしおり プランニング 経験の共有
  • 11. Mash  Up ⼀一緒に⾏行行く⼈人皆で -‐‑‒  予定の追加 -‐‑‒  写真などの思い出 -‐‑‒  ⾏行行った場所(Check-‐‑‒in) ができる。
  • 12. Real-‐‑‒Time 旅のしおり画⾯面から、 写真投稿やCheck-‐‑‒in、予定 の追加などをすると・・・
  • 13. Real-‐‑‒Time Facebookでも旅 の情報をシェア
  • 14. 構成 iPhoneアプリ バックエンド サーバ やり取りは JSON Androidアプリ
  • 16.
  • 17. 構成(⾒見見直し後) 外部からのアクセス apache daemontools でプロセス監視 starman
  • 18. なんでMojolicious? Mojoliciousは Catalystの作者が新たに作った Webフレームワークらしい Catalystってのは俺でも知ってる じゃあ、 Mojolicious  >  Catalyst ってことで、使おう
  • 19. Mojoliciousでアプリを作る $  mojo  generate  app  sojorsojor ./ ├──  lib │      ├──  Sojorsojor │      │      └──  Example.pm │      └──  Sojorsojor.pm ディスパッチャ ├──  log ├──  public │      └──  index.html ├──  script │      └──  sojorsojor ├──  t │      └──  basic.t └──  templates        ├──  example        │      └──  welcome.html.ep        └──  layouts                └──  default.html.ep
  • 20. Mojoliciousでアプリを作る lib/Sojorsojor.pm package  Sojorsojor; use  Mojo::Base  'Mojolicious';   #  This  method  will  run  once  at  server  start sub  startup  { lib/Sojorsojor/Api/        my  $self  =  shift; Friend.pm   の #  Router list        my  $r  =  $self-‐‑‒>routes; を実⾏行行する   #  Normal  route  to  controller        $r-‐‑‒>get('/api/friend')-‐‑‒>to(ʼ’api-‐‑‒friend#list'); } 1;
  • 21. Mojoliciousでアプリを作る ./ ├──  lib │      ├──  Sojorsojor Controller │      │      └──  Api │      │      │  └──  Friend.pm │      │      │  └──  Search.pm │      │      │          ・ │      │      │          ・ 〜~〜~〜~〜~〜~〜~〜~〜~〜~〜~〜~〜~〜~〜~〜~ │      │      └──  Model Model │      │      │  └──  Friend.pm │      │      │  └──  Search.pm │      │      │          ・ │      │      │          ・ 〜~〜~〜~〜~〜~〜~〜~〜~〜~〜~〜~〜~〜~〜~〜~ │      └──  Sojorsojor.pm ├──  log ├──  public │      └──  index.html
  • 22. Mojoliciousでアプリを作る 最終的に40個超のAPIを アプリ向けに⽤用意 コピペコードが満載 次こそはこの反省省を 活かそう。。。
  • 24. 毎⽇日の買い物を楽しく ソージャ!ソージャ!の 経験とコードを活かし 2011/4            開発開始   て⼯工期短縮 2011/7              サービスリリース   2013/5/31  サービス終了予定
  • 25. 毎⽇日の買い物を楽しく バーコードをスキャン コメントや☆を共有 皆のコメントを⾒見見て、 ⼈人気商品をチェック!
  • 26. ランキング クエスト バッジ
  • 27. 構成 iPhoneアプリ バックエンド サーバ やり取りは JSON Androidアプリ
  • 28. Mojoliciousでアプリを作る ./ ├──  lib │      ├──  Itemloupe │      │      └──  Api │      │      │  └──  Base.pm 反省省を活かして、 ソージャ!ソージャ!の │      │      │  └──  Friend.pm Base.pm 経験とコードを活かし │      │      │  └──  Search.pm をちゃんと作成して、 て⼯工期短縮 │      │      │          ・ │      │      │          ・ 処理理を共通化 〜~〜~〜~〜~〜~〜~〜~〜~〜~〜~〜~〜~〜~〜~〜~ │      │      └──  Model │      │      │  └──  Base.pm │      │      │  └──  Friend.pm │      │      │  └──  Search.pm │      │      │          ・ │      │      │          ・ 〜~〜~〜~〜~〜~〜~〜~〜~〜~〜~〜~〜~〜~〜~〜~ │      └──  Itemloupe.pm ├──  log
  • 29. Mojoliciousでアプリを作る lib/Api/Base.pm package  Itemloupe::Api::Base; use  strict; use  warnings; use  base  'Mojolicious::Controller'; use  Itemloupe::Session; #  APIのアウトプットとなるJSONのパターンを定義 sub  api_̲output  {        my  ($self,  $data,  $error,  $type)  =  @_̲; 〜~〜~処理理を書く〜~〜~        $self-‐‑‒>render('json'  =>  $output); } 1;
  • 30. Mojoliciousでアプリを作る lib/Api/Activity.pm package  Itemloupe::Api::Activity; use  strict; use  warnings; コピペが減って use  base  'Itemloupe::Api::Base'; use  Itemloupe::Model::Activity; すっきり sub  get  { 〜~〜~〜~〜~〜~中略略〜~〜~〜~〜~〜~ #  activity  get        my  $activity  =  new  Itemloupe::Model::Activity;        my  $result  =  $activity-‐‑‒>get($self-‐‑‒>uid,  $uid,  $p-‐‑‒ >{'type'}); #  output        $self-‐‑‒>api_̲output($result,  $activity-‐‑‒>get_̲error); }
  • 32. ランチガチャ コミュニ ケーション 活性化の仕 Lunch  Gacha! 組みづくり http://lunch.7hongi.com ヒカリエで働く⼈人のためのランチスポットのリコメンドサービス 社内のヒカリエ引越しPJと7hongiPJ(内製PJ)でコラボ 2012/8            開発開始   2012/10        サービスリリース   32
  • 33. 構成 HTML5+JS バックエンド のWebアプリ サーバ やり取りは JSON