Paradigm Shift Design

ISHITOYA Kentaro's blog.

mojoliciousでOAuth2

Hi, perl apprenticeなkent013です。

Mojolicious::Liteは何となく1ファイルに全て押し込む的な発想(単に慣れてないだけ)が嫌いなので、Mojoliciousを単体で使ってみようとか思ってます。
だけど、その辺に落ちているコードはLite用で苦労してます。
ま、勉強っつーコトで。

掲題のOAuth2ですが、mojolicious素敵だからさくっとできるんだろうなー。凄いんだろうなー!
って期待してやってみましたが、Railsomniauthほどではないけど、簡単。

1, Mojolicious::Plugin::OAuth2をインストール

Mojolicious::Plugin::OAuth2をインストールするのに、

cpanm Mojolicious::Plugin::OAuth2

ってしたら、

FAIL Installing Mojolicious::Plugin::OAuth2 failed.

とか言われちゃって、Issue上げそうになりましたが、

mojo version

したら、マイナーバージョンが違ったのでアップデートしたら直りました。あぶねぇあぶねぇw

2, startupでpluginの読み込み

libの[AppName].pmのstartupに、

$self->plugin('o_auth2',
            facebook => {
              key => '[APP Key]',
              secret => '[APP Secret'
            });  

と書いておく。Liteだと、

plugin 'o_auth2',
   facebook => {
      key => '[APP Key]',
      secret => '[APP Secret]' 
   };

って、書くみたい。大分違うので戸惑う…本当はconfファイル書くべきなんだろうけど、まだよく分からないので、ペンディング。

3, ルーティング

bridgeするなら、

my $r = $self->routes;
$r->get('/auth')->to('auth#auth');
$r->get('/login')->to('auth#login');
$r->get('/logout')->to('auth#logout');

$r = $r->bridge('/')->to(cb => sub {
  my $self = shift;

  if ($self->session('login_name')) {
    return 1;
  }
  else {
    $self->redirect_to('/login');
  }
});
$r->get('/')->to('main#top');

のように、bridgeの前にlogin/logout/authを書く。authはfacebook authしてくれる奴。
名前は適当。Liteだとunderとか使うのがいいみたい。
本当は、bridgeの中でsessionがinvalidだったらreturn 1するみたいな処理も書かないといけないとおもう。

4, 認証周り

sub auth {
  my $self = shift;
  $self->get_token('facebook', callback => sub {
    my $token = shift;
    my $ua = Mojo::UserAgent->new;
    my $me = $ua->get(
      'https://graph.facebook.com/me?access_token=' . $token)->res->json;
    $self->session('login_name' => $me->{name});
    $self->session('token' => $token);
    $self->redirect_to('/');
  });
}

sub login {
  my $self = shift;
  $self->session(expires => 1);
}

sub logout {
  my $self = shift;
  $self->session(expires => 1);
  $self->redirect_to('/login');
}

logoutはセッション消してからloginに転送するだけ。 loginはログインっぽい表示するページ authはfacebookにログインしてsessionにデータ書き込んで/へ転送する。

OAuth2プラグインのgithubページによると、

get '/auth' => sub {
  my $self=shift;
  $self->get_token('facebook',callback=>sub {
    ...
  });
};

とあって、作者のMarcusさんのEasily integrating your Mojolicious app with Facebook.という記事には、

get 'hello' => sub {
  My $self=shift;
  #redirects the gets the token asynchronous
  $self->get_token('facebook', callback => sub {
    my $token=shift;
    my $me=$self->client->get(
      'https://graph.facebook.com/me?access_token='.$token)->res->json;
    $self->render( text =>
        "Hello ".$me->{name} );
  });
}

とあるんだけど、この$self->clientがそんなメソッドないぜ!っつって怒られちゃう。
むがー!!!ってなってたら、最近のmojoliciousでは、UserAgentを使うように変更されたそうで。
Mojo::Client has been deprecateでRiedelさんがいってはりました。

5, しょかん

というわけであとは、facebookAPIキーとれば動きます。
かなり簡単。イロイロ外してるところはあるかもしれませぬが。
でもサポートしてるサービスが少ないのが玉に瑕かな。まー、追々ということで。

OSXでperl実行環境を作ってyanchaを動かす。

ちょっと落ち着いたのでブログ。
もう10日経ったのか...!!!って感じです。

いまさらかよ!って感じですが、自社でチャットツールを作ろうとしています。
その参考として@uzullaさんたちがhachioji.pmのメンバで作っているyanchaをインストールしようかと思って。

yancha (旧名yairc) はログの保全、リアルタイム性、モバイル端末への対応を重視した、Perlで作成されたチャットシステムです。
サーバサイドはPerl、クライアントサイトはHTML+JSで作成され、PocketIOによりWebsocketで通信しています。
https://github.com/uzulla/yancha より

で、ほぼ生粋のぺちぱーであまのじゃくな僕は、mongerのみなさんにバカにされつつも、PHPにこだわってきた個人的な恨み経緯があるので、ちょろーっと触った事があるくらいなんですよね、perl

まぁ、そういうわけで、環境構築から頑張らなきゃいけないなーって気が重かったんだけど、マジで簡単っす。
世の中進歩してるもんだ。こういう地道な改善、大変だよな。頭が下がる。

あ、ちなみにOSXでやってます。

1, perlbrew

perlbrewは、perlのrvmみたいなもんで、pythonpython_selectですかね。
PHPってそんなんあったっけ?いつから、世の中こんなに便利になったんだろう。

インストールはperlbrew + cpanminus + local::lib で環境構築あたりを見てもらったりすればいいのではないかと。 で、インストールできたら、

perlbrew list

とタイプすると、perlbrew経由でインストールしたバージョンがでます。

perlbrew switch perl-5.16.1

とすればバージョンが切り替わります。
後でインストールするライブラリとか、OSX標準のperlだとエラーになったりするので、お気をつけ。

2, cpanminus

で、cpanmperlのパッケージマネジャ。gemとかpearみたいなもんだろうと。
cpanはよりもスリムアップして使いやすくなったからcpanmというらしい。

perlモジュールのinstallにcpanmを使うをみればインストールできます。

3, Plack

PlackPSGI(Perl Server Gateway Interface)のリファレンス実装だそうです。
JavaServlet APITomcatみたいなもんかな。

で、これをインストールするには

cpanm Task::Plack

でオッケー。Lionでエラーになるとかいうのがあったけど、もうパッチあたってて大丈夫だった。

4, MySQL

まぁ、適当に入れればいいと。僕はportsでインストールしました。

port install mysql55 +server

あと、workbenchをわすれずに。 workbench動かす時は、パスの設定が重要。
How to setup MySQL Workbench to work with MacPortsが詳しい。
ただしパスが/macportsになっているので、/opt/localにすべし。

sudo launchctl load -w /Library/LaunchDaemons/org.macports.mysql5.plist

すると自動起動する。

5, DBD::mysql

あと、データベースの抽象化レイヤ入れる。

cpanm DBD::mysql

で終わり。ただし、実行前に、 PATHに

/opt/local/lib/mysql55/bin/

が入っていることを確認すること。mysql_configが見当たらなくておこられる。

6, Yancha

本題。githubのリポジトリから、適当な場所に

git clone https://github.com/uzulla/yancha/

して、yanchaディレクトリに移動し

cpanm --installdeps .

すればインストール終了。簡単過ぎる…何か罠があるのでは…

あとは、yanchaディレクトリにある、start.shを動かすか

twiggy -l :3000  chat.psgi 

ってして、http://localhost:3000にブラウザでアクセスすればOKです。
Twitter使う場合とかは、config.pl読んでね。

しょかん

perlのセットアップすると、「miyagawaさん、やべぇ…」ガクブルってなるねw

株式会社エングラフィアを起業しました。

おひさしぶりであります。

この2-3ヶ月怒濤だったわけで、目下、なお渦中なのですが、9月30日付けで名古屋大学大学院情報科学研究科 博士後期課程を満期退学して、10月1日付けで「株式会社エングラフィア」を起業し、代表取締役社長に就任しました。
要約すると、まだ学位取れてないけれど、見切り発車で会社作ったよ!頑張るよ!です。


タイミングとしては、高専を3年次にやめたとき、大学卒業したとき、修士卒業したとき、博士を3年で卒業できない事が分かった1年前も、ずっと起業する起業する!と言い続けてきた気がします。
出資してくださった某高専の某同級生にも「お前はいつもいつも、やるやる詐欺だな!」と言われ続け、不義理に不義理を重ねておりましたが、いざ起業して開業式に来ていただいても「オフィスにきてもまだ信じられない!」と言われる始末でありまして。

本日、無事会社の登記が完了し、株式会社として正式に発足しました。
起業の目的は、「人の役に立つサービスを開発・運用する」という、まだ曖昧模糊としたものですが、これからサービスを作り続けて行く中でアイデンティティを確立して行けたらなと考えています。

目的は目的ということで、生きて行くためには仕事が必要です!
私にWebデザインはできませんが、株式会社リオと強固な協力体制を敷いています。
Webサイト、Webシステム、スマートフォン・タブレットアプリなど、お心当たりがありましたら、仕事ください!まずは飲み会からお願いします!


…あ、名前は、エングラフィア(Engraphia)といいます。
エングラフィアは造語で、グラフは情報科学で「人と人のつながり」とか「知識」とかそういうネットワーク構造であらわせるものを指します。
en(強化する) + graph(人と人のつながり、知識)+ ia(場所)
という意味です。

えぇ、すでに株式会社円グラフという宛名の領収証が2枚あります。
覚えていただければ幸いです!


ちなみに、大学院の時のひとつ年下の先輩、土田 貴裕さんと2人で創業です。
場所は総武線水道橋駅、徒歩2分。気が向いたら、お気軽にお越し下さい。お茶くらい出します。
会議机とホワイトボードを揃え(てもらい)ましたので(ている途中)、ちっさいミーティングとか勉強会ができたらなと思ってます。

Webサイトは、
http://engraphia.com
です。Bootstrap満開なので、かっこいいデザインにしてくれるデサイナのかた、待ってます!

あ、あと、学位は来年の1月になんとか取れそうな雰囲気です!
本当は、この記事を10月1日に上げたかったのですが、記事を落ち着いて書けるような状態ではなく。


最後になりましたが、発起人のみなさま、会社設立にあたってお世話になったみなさま。ファミール、高専Wakhok、名大、リオなどこれまで私を温かく見守ってきてくださったみなさま。そして、家族、とりわけ両親と森井家、天野家のみなみなさま。
これから、どうなるのか自分でもドキドキですが、みなさんをいい意味でドキドキさせられるように、気合いを入れていきますので、よろしくお願いいたします!

MFMailComposeViewControllerの確認画面を超絶無視する方法

MFMailComposeViewControllerの確認画面がうざい。
一律に、確認しないとメールを送れないようにするんじゃなくて、所定の手続きを踏んでユーザに確認すれば、確認画面を出さないでバックグラウンドでメールを送れるようにして欲しい...

で、skpsmtpmessage Quick SMTP client code for the iPhone を使おうかと思ったけど、デフォルトで設定されているE-Mailアカウントを使えない。
それじゃ意味がなさすぎるので。

なんか方法ないかなーってさまよってたら、cocoa touch - iPhone send email not using MessageUI - Stack Overflowというのを見つけた。Sendボタン押しちゃうわけね。絶対、審査とおんないんだろうなぁ。

通んないのかなぁ。とりあえず投げてみてから考えるか。っつーわけで、実装してみた。

まず、MFMailComposeViewControllerの設定。ちなみにSimulatorではメールを送れない。あと、サブジェクトがないとAlertが出てうざいので、ちゃんと埋めておく。

/*!
 * submit content
 */
- (id)submitContent:(PhotoSubmitterContentEntity *)content 
      andOperationDelegate:(id<PhotoSubmitterPhotoOperationDelegate>)delegate{
    MFMailComposeViewController *mailComposeViewController = [[MFMailComposeViewController alloc] init];
    if([MFMailComposeViewController canSendMail] == NO){
        [self completeSubmitContentWithRequest:mailComposeViewController andError:nil];
        return mailComposeViewController;
    }
    
    mailComposeViewController.mailComposeDelegate = self;
    [mailComposeViewController setToRecipients:[NSArray arrayWithObject:self.sendTo]];
    
    NSString *subject = nil;
    NSString *body = nil;
    if(content.comment == nil && self.defaultSubject != nil){
        subject = self.defaultSubject;
    }
    if(content.comment != nil && self.commentAsSubject){
        subject = content.comment;
    }
    if(content.comment == nil && self.defaultBody != nil){
        body = self.defaultBody;
    }
    if(content.comment != nil && self.commentAsBody){
        body = content.comment;
    }
    
    if(subject == nil || [subject isEqualToString:@""]){
        subject = @"tottepost photo";
    }
    [mailComposeViewController setSubject:subject];
    [mailComposeViewController setMessageBody:body isHTML:NO];
    
    
    NSDateFormatter* dateFormat = [[NSDateFormatter alloc] init];
    [dateFormat setDateFormat:@"M/d/y h:m:s"];
    
    NSDateFormatter *df = [[NSDateFormatter alloc] init];
    df.dateFormat  = @"yyyyMMddHHmmssSSSS";
    NSString *filename = nil;
    NSString *mimeType = nil;
    if(content.isPhoto){
        filename = [NSString stringWithFormat:@"%@.jpg", 
                     [df stringFromDate:content.timestamp]];
        mimeType = @"image/jpeg";
    }else{
        filename = [NSString stringWithFormat:@"%@.mp4", 
                     [df stringFromDate:content.timestamp]];
        mimeType = @"video/mp4";
    }
    
    [mailComposeViewController addAttachmentData:content.data 
                                        mimeType:mimeType fileName:filename];
    if(self.confirm == NO){
        [mailComposeViewController view];
    }else{     
        dispatch_async(dispatch_get_main_queue(),^{
            [self presentModalViewController:mailComposeViewController];
        });
    }
    return mailComposeViewController;
}


で、composeし終わってMFMailComposeViewControllerが表示されそうになったら、controllerのsubviewを辿ってsendボタンを探す。探すのは再帰になるのでこんな感じのメソッドを作る。

/*!
 * find views named
 */
- (NSArray *)searchForViewsNamed:(NSString *)name 
                        fromView:(UIView *)view found:(NSMutableArray *)found{
    if(found == nil){
        found = [[NSMutableArray alloc] init];
    }
    
    for (UIView *subview in [view subviews]) {
        if([NSStringFromClass([subview class]) isEqualToString:name]){
            [found addObject:subview];
        }
        [self searchForViewsNamed:name fromView:subview found:found];
    }
    return found;
}


でUINavigationBarの右側にあるSendボタンを探すので、こうなる。

/*!
 * on composed
 */
- (void) mailComposeController:(MFMailComposeViewController*)controller 
 bodyFinishedLoadingWithResult:(NSInteger)result error:(NSError*)error
{
    if(self.confirm == NO){
        id button = nil;
        NSArray *views = 
          [self searchForViewsNamed:@"UINavigationBar" 
                           fromView:controller.view found:nil];
        if(views.count == 0){
            return;
        }
        views = [self searchForViewsNamed:@"UINavigationButton" 
                                 fromView:[views objectAtIndex:0] found:nil];
        if(views.count == 0){
            return;
        }
        for (UIView *v in views) {
            if(v.frame.origin.x > 200){
                button = v;
            }
        }
        
        if(button == nil){
            return;
        }
        [button sendActionsForControlEvents:UIControlEventTouchUpInside];
        [self checkForSizeConfirmWindow];
    }
}


でもって、sendボタン押した後、写真のサイズが大きすぎると、選択するUIActionSheetが出てしまう。出ている場合にはUIApplicationのkeyWindowからUIActionSheetを辿れるので、適当に選択するようにする。

/*!
 * select size confirm button
 */
- (void) checkForSizeConfirmWindow{
    UIActionSheet *actionsheet = nil;
    NSArray *buttons = [[NSMutableArray alloc] init];
    NSArray *views = 
      [self searchForViewsNamed:@"UIActionSheet" 
                       fromView:[UIApplication sharedApplication].keyWindow found:nil];
    if(views.count == 0){
        return;
    }
    actionsheet = [views objectAtIndex:0];
    buttons = [self searchForViewsNamed:@"UIAlertButton" 
                               fromView:actionsheet found:nil];
    if(actionsheet && buttons.count > 2){
        [[buttons objectAtIndex:1] sendActionsForControlEvents:UIControlEventTouchUpInside];
    }
}

で、これで黙ってSendできます。多分審査は通らないと思うけど、とりあえず出してみる。まぁ、確認画面が毎回出るだけなんだけど。

当然、AppStore通さないアプリなら問題なく使えます。

追記

審査とおった。多分、運だと思います。

せんでん

1タップで写真&動画を共有できるカメラtottepost
カメラのついたiPad/iPhoneで撮った写真や動画を、その場でFacebook/Mixi/DropboxなどのサービスにアップロードできるtottepostというiOSアプリを開発しています!詳しくは、iTunes App Storeをご覧ください。


ご購入はこちら!
1タップで写真&動画を共有できるカメラ - tottepost - ISHITOYA Kentaro

RestKit.hがみつからないよっておこられる場合の処方箋

tottepostのSalesForce対応で使わなければならないことになったので、今まで毛嫌いしていたRestKitに手を出しました。
で、案の定、色々トラブってます。


RestKitの名誉のためにいっておきますが、悪いのはRestKitではなくて、大分ましになったとはいえ、ちょっと頭の弱いXCodeちゃんのせいです。
愚痴を言い始めると一週間ぐらい酒が飲めそう…


で、掲題の件ですが、普通にBuildするときはおこられないのにArchiveするときだけ

Lexical or Preprocessor Issue - 'RestKit/RestKit.h' file not found 

とか言われる場合の対処法です。


1, 0.9.3以前から乗り換えた
Home · RestKit/RestKit Wiki · GitHub
あたりを読めば解決するかもしれません。

特に、Header Search Pathに書くべき値が、

"$(BUILT_PRODUCTS_DIR)/../../Headers"

になっているので気をつけてください。



2, 最初っから0.10.0以降を使ってる
とりあえず、色々BugFixされてるので、submoduleをアップデートしましょう
その上で、ProjectのBuild SettingsとTargetのBuild Settingsの両方に

 "$(BUILT_PRODUCTS_DIR)/../../Headers"

と書いてあるかを確かめてください。両方にないと、RestKitなんて見つからないよって言われます


以上、エラーエントリでした。

せんでん

1タップで写真&動画を共有できるカメラtottepost
カメラのついたiPad/iPhoneで撮った写真や動画を、その場でFacebook/Mixi/DropboxなどのサービスにアップロードできるtottepostというiOSアプリを開発しています!詳しくは、iTunes App Storeをご覧ください。


ご購入はこちら!
1タップで写真&動画を共有できるカメラ - tottepost - ISHITOYA Kentaro

1タップで写真&動画を共有できるカメラ、tottepost1.2リリース

前回のアップデートから日が開きましたが、tottepostのバージョン1.2をリリースしました。

tottepostは写真や動画を撮ったその場で手軽にアップロードするためのカメラアプリです。Facebook/Dropbox/Picasa/Flickr/Twitterなど主要なWebサービスに対応しています。詳しくは、iTunes App Storeをご覧ください。


今回は、
1, 動画撮影
2, 写真と動画の解像度選択
が主な変更点です。


動画に関しては、画面左下にあるスイッチをタップ(スライドしなくても変わります)すると、写真と動画を切り替えることができます。
解像度に関しては、設定画面から変更してください。Photo解像度はそのカメラの最大解像度になります。
動画はHighだとiPhone4、4SおよびiPad3で1080pが、iPod Touch 4thでは720pが撮影できるようです(機種ごとに違うので、設定画面に表示していません…)、が!ファイルサイズが大きくなりすぎるのでMedium(デフォルトです)で撮影されることを推奨します。


なお、LITE版もリリースしました。
LITEでは、解像度選択、アルバム選択ができなくなっています。


というわけで、今後ともtottepostをよろしくお願い致します!


ご購入はこちら!
1タップで写真共有 - tottepost - ISHITOYA Kentaro

ソーシャルゲームの健全化というはなし

「なんでソーシャルゲームってパチンコと同列にされるんですかね」
って、後輩が言う。


「ソーシャルゲームってデジタルコンテンツを売る仕組みじゃないですか。今までのデジタルコンテンツ屋さんができなかった、少額決済でデジタルコンテンツをお金に変える仕組み作ったじゃないですか。すごいことですよ。」



うん。僕もそう思うよ。でも、「ソーシャルゲームとパチンコが同一視されるのは仕方がないよ」とも思う。


DeNAの財務状況GREEの財務状況http://www.cyberagent.co.jp/ir/reference/chg/:CyberAgentの財務状況を見ればこれまでに売り上げが急激な勢いで伸びていて、DeNA、通期売上高134%増の1,127億円。2014年度売上高5,000億円を目指す :ベンチャーニュース:Venture Now(ベンチャーナウ)にもあるように今後もユーザー数、業績ともに一段の伸びが予想されていることは、共通認識としておいていいよね。


どの会社も業績が伸びててユーザー数が増える事が予想されるから、パチンコと同一視されるんだよ。
っていうのは刺さんなかったみたい。後輩は、あんまり納得してない顔をしていた。


なぜ、人は携帯ソーシャルゲームに嫌悪感を持つのか。 | More Access,More Fun!とか、ソーシャルゲームは金を搾取して、運営会社がモラルにかけている場合が多く嫌い - First Loungeとかよく言われてる事だよね。


まぁ、弱者をターゲッティングしてる"と思われてる"から問題になるんだよ。
ってのも刺さんなかったみたい。やっぱり後輩は、あんまり納得してない顔をしていた。


あんまりにもあんまり納得してない顔をされたので、どうやら論理的に伝える事ができていないようだ、と、そこでちょっと立ち止まって考えてみたという話。


そもそも、ソーシャルゲーム批判ってどんなの?

批判記事とか読んでみるといくつか類系があるんじゃないかな。

  • 妬み系
    • 儲かってるからむかつく
    • 働くのは俺たちで儲かるのはあいつらだよ(中の人)
  • 賭博法に抵触する系
    • 射幸心煽り過ぎ
    • 法に抵触するような事を公然とやってるのはどうなの
  • 犯罪の温床系
    • RMTとか
    • 青少年とか、PTAとか
  • 搾取かっこわるい系
    • 情報弱者、社会的弱者から薄く広く集金してる構造が悪い
    • 情報弱者に注意喚起するべきだ
    • ソシャゲーとか頭の悪い奴がやるもんでしょ
    • コンテンツの質が低い
  • ゲーム理解できない系
    • コンテンツの社会的認知度が低い
    • 非生産的
    • ゲーム脳とか
    • 共感できない

みたいな感じ。感じだからミッシーかどうかは気にしないで。

妬みは論外だけど。

まぁ、犯罪の温床、賭博法云々はいいのさ。それはシステムや運用で改善できる問題だから。
グリー株式会社 | ニュースリリース | プレスリリース 2012年 | プラットフォーム事業者6社によるソーシャルゲームの利用環境向上等に関する連絡協議会を設置
がうまく機能すれば自浄作用が働いて業界が健全化するさ。
しなければ、グリー、週刊誌に「摘発検討」と報じられる 「犯罪行為、一切ない」と反論が検討じゃなくて、実際に行政が介入して健全化の方向に持って行くよ。


で、他の批判にどうやって応対するかっていうと、今まではさ、


『「搾取かっこわるい」ってのは、第3者的な批判だよね。搾取されているといわれている人たちは、ゲーム内のその何かにお金を払うだけの価値を感じてるんだから。「ガチャ回してカードとって集めるだけとか、昔のRPGとかに比べてゲームの質が低いのに、そんなものにお金払うとか信じられない」とかいう人は、あなたの思う質の高いゲームについて、俺だってソーシャルゲームなんか作りたくねーよ! とかスクエアエニックスホールディングスの財務ハイライトとかを読んで考えたら良いとおもう。


だいたい、情弱だから社会的弱者だからソーシャルゲームやってるんだとか、大衆は無駄な時間使うもんだとか、そんな批判、無意味。誰がどんなものに価値を感じようとも問題ないでしょ。自分の金払って、楽しんで何が悪い訳?


だれか、パチンコをやっている奴は馬鹿だ、ギャンブルやっている奴は馬鹿だ。パチンコもギャンブルも社会的価値が低くて非生産的で、無駄な行為だ。って考えているひとに、ソーシャルゲームをパチンコやギャンブルと同列に扱うんじゃねぇ!って伝えて納得してもらう方法を、ぼくに伝授してくれさい。


多分、無理だよね。価値観が違うから。


分かってもらう必要なんかないよ。本人たちは楽しんでお金払ってるんだから、気にしなくて良いよ。価値観の違う人は、頭が固いし、ムリだって。


価値観は多様。多様な価値観は許容しなきゃいけないよね!*1


みたいな、価値観多様、分かんないなら分かんなくていいよでなんとかなってたわけっすよ。

で、最初に戻るわけ

世界で10億ユーザー目指して、ゲームで世界を幸せにしようぜ!っていってるわけじゃん。ソーシャルゲームが一般化しようとすればするほど、あるユーザーが感じている価値がみんなに理解できるようにならなきゃいけないんだよ。


「ガチャ回してカード集めてコンプリートする」っていう行為に対して10万円払うことが、「ぼくはそれに10万円払わないけれど、きみがそれにお金を払うことは理解できる」っていう程度に理解できるようにならないといけない。「ぼくはクルマに20万円かけてアルミホイール買う事はしないけれど、きみがアルミホイールを買う事は理解できる」程度に。


そうでなければ、いつまで経ってもパチンコと同じ。なんだか、怪しげで、無価値で、分かる人にしか分からないのに、金だけもうけてて。健全じゃねぇ!みたいな非難を甘んじて受けて行かなければならないよね。そういう意味で、ソーシャルゲーム業界に就職する人たちは、どことなくお金と引き換えにみたいな感じなんでしょ。


だから、健全化っていうのは、警察のお世話にならないように、犯罪を助長しないようにするってことと、ソーシャルゲームに対するイメージを良い方向に変えるってことの2軸になるんだとおもう。

ま、そういうわけだからして

南場智子氏の講演内容のsho_yokoi氏によるまとめ - Togetterで南場さんがいってる、

南場氏「DeNAで成し遂げたい事を三つ挙げたい。1つ目。social gameは悪者扱いされがちだが、これを→entertainment→culture、あるいは、→edutainment→education、あるいは、→ramificationとしていきたい」

って日本語でOKな言葉は、ゲームが文化として受け入れられなければ、モバイル50億の端末をターゲットにしたプラットフォームで世界一を目指す事なんてできないってことだよね、ってことで。


もうさ、二郎とかゲームじゃん。スーパーのスタンプもゲームだし、山崎パンの白い皿だってゲームだよね。そういうのお店の人がゲーム化できるプラットホーム作ればいいんじゃない?おばちゃんも500円券もらえるなら文句いわないよ。


あるいは、ゲーム内のカードが現実世界で使えるとかすればいいんじゃない?クーポンとかつまんないじゃん。敵と戦って手に入るのがネイルサロンの2000円引きクーポンなら、自称セレブも文句いわないよ。ガチャ回して手に入るのカードがゴルフ場で1ラウンド!なクーポンとして使えるならおっさんも文句いわないんじゃね。ゲームとの親和性が問題か。


まぁ,ソーシャルゲーム自体を理解してもらうってよりもページが見つかりません - MSN産経ニュースみたいな、野球界に寄付して知名度と信用を勝ち取るというコーポレイトハックてきなことでどうにかしてかなきゃいけないんだよね。


立ち止まって、考えただけで、まとまってなくて申し訳ありません。もう、眠くて面倒くさいので、書きっぱなしでいきます…。


せんでん

1タップで写真共有tottepost
カメラのついたiPad/iPhoneで撮った写真を、その場でFacebook/Mixi/DropboxなどのサービスにアップロードできるtottepostというiOSアプリを開発しています!詳しくは、iTunes App Storeをご覧ください。


ご購入はこちら!
1タップで写真共有 - tottepost - ISHITOYA Kentaro

*1:ぼくは、「多様な価値観」って言葉で物事を済ませる事を、ただの無関心だと思っています