スプラトゥーンのスコア管理サービスを作ってみた

自分用に作ったものだけど、一応アカウント管理つけてサーバ上に置いてあるので、
使ってみたい人はどうぞ。サポートとか一切ありませんが、オープンソースなので、pull requestは歓迎します。GitHub リポジトリはこちら (2時間ぐらいで作ったのでソースコードが汚い。)
2015/09/06 コード整理のため、一旦非公開にしています。


http://splatoon.iruca.cc/


※ときどきサーバが落ちてるかもしれません。
※バグがあったらコメントかGitHubのIssueをくれれば直すかもしれません。

どんなサービスなのか

下の画像のようなやつを計算して出してくれます。
自分の得意なステージや苦手なステージを見つけたり、
レギュラーバトルで平均塗りptの目標を立てたり。

内部的なこと

アカウント登録に使うメールアドレスは、パスワードを忘れたとき用にしか使ってません。
なので、パスワード忘れてもいいや、って人や、忘れることがない人は、
hogehoge@example.comとか好きなアドレスで登録して使ってもらったらいいと思います。


武器やマップは、選択しなくても登録できます。その場合、マップごとの集計とかはされません。
人が増えるようなことがあったら、各マップや各武器ごとの集計とか紹介するかも。

それにしても

スプラトゥーン面白すぎ。(Wii Uと一緒に買った勢)

ワークショップ「スタートアップのための新規サービスの作り方」に参加してきた。

概要

5月30日(土)に、株式会社アキュトラスで行われたワークショップ、
「スタートアップのための新規サービスの作り方」に参加してきました。
某大手IT企業に勤めていらっしゃる(と同時に親友である)川鯉氏が、
わざわざ香川まで来て開催してくれました。(Thanks!!!)
非常にためになる内容だったため、内容をまとめておこうと思います。

新規サービスを作る前に

新規サービスを思いつきで作ってしまうと、失敗した時に大きなロスがでます。
場合によっては、そこで試合終了ということにもなりかねません。
出資を受けている場合などは、出資元にも迷惑をかけることになります。
それを防ぐために、まずは課題を明確にし、インタビューによって
課題解決のためのソリューションをしっかりと考えます。


インタビューでは、同じ課題を抱えている人の特徴を考察したりして、
しっかりと情報を集めておきます。ここで集めた情報は、ソリューションを
考えるときなど、いろいろと役に立ちます。


今回のワークショップでは、時間の都合でインタビューについては省略しますとのこと。
インタビューだけで1冊の本になっちゃうぐらい大事なことらしいです。
(インタビューのワークショップは、今度、岡山で開催いただけるかも、とのことでした!)


まずは、課題を決めるために、参加者から課題を募り、列挙しました。
本来は、みんなが課題と思っていることの方がやりやすいのですが、
今回は人数の都合や時間の都合などもあり、仮想顧客を参加者の中から1人選びたく、
集まった課題から1つを決めました。
今回は「女の子とお近づきになれない」という課題に決定されました。笑

カスタマージャーニーマップの作成

次は、カスタマージャーニーマップを作成します。
カスタマージャーニーマップで、課題に対するユーザの行動を分析して、
感情の起伏を確認します。そして、感情が下がっているポイントについて、
さらに詳細な課題を確認していきます。


今回のカスタマージャーニーマップでは、
オンラインゲーム(MMORPG)で、女の子と出会いたいが、
遠方の人が多く、なかなかオフ会が成立しないことが課題とされました。
(オフ会が成立すれば、女の子とお近づきになるきっかけが生まれる!?)


ポストイットのめくり方

ポストイットのめくり方に関する説明がありました。
下に引っ張るか、横にめくりましょう、とのこと。
下に引っ張るのが、一番よさそうでした。


バリュープロポジションキャンバスの作成

次は、バリュープロポジションキャンバスを作ります。
カスタマージャーニーマップから、顧客が嬉しいこと、悲しいこと、顧客の望むものを抽出していきます。
そして、顧客に提供する価値を考えていきます。


顧客に提供する価値がたくさん出てきました。
ここから、1つを選び、それにそって顧客の嬉しさが増す要素、顧客の悲しさが低減される要素を考えていきます。


今回は、「場所をサジェストする」という価値に対し、
「条件をゆずってサジェストできる」←「相手から感謝される」という嬉しさを増幅させる
という感じにまとまりました。


ビジネスモデルキャンバスの作成

9つのブロックに分けて、ビジネス全体を俯瞰するために、
ビジネスモデルキャンバスを作成します。
戦略的にビジネスモデルを考えるためのフレームワークとのこと。
今回、顧客はお金がなくて遠方に行けないユーザ、ってことだったんですが、
ここで「顧客はお金がなくて遠方に行けないのに、そのお金がない顧客からお金をとるの?」という疑問が。
顧客に提供する価値が、「条件をゆずって(場所を)サジェストできる」だったので、
顧客は「オフ会に参加するユーザ」ではないのか、と。
そこで、顧客は「オフ会に参加するユーザ」に変更しました。


利益は、サジェストする場所への交通費実費にマージンを乗せることにしました。
また、有料会員には、サジェストする件数を増やしたりしてはどうか、ということで、
有料会員による収入も追加しました。


ユーザーストーリーマッピングの作成

いよいよ、ユーザーストーリーマッピングの作成です!
時間の都合で、かなりおしていたんですが、なんとか終えることが出来ました。


みんなの集中力もMAXです!!
結構、「〜〜をしてくれる」的なものが出てきていましたが、
そのたびに「それは、ユーザの行動じゃなくて、システムがやってくれることだよね」って指摘を入れました!
MVPもしっかりと意識して、作っていきます。
(MVP=顧客に価値が提供されるかを確かめるための最小限の製品)



そして、なんとか完成しました!
MVPは、最終的に4つの付箋に絞られました。
最後に、川鯉氏が結果を講評してくれました。
もう、くたくたのヘロヘロですが、最高に面白い内容でした。

この先は・・・

必要最低限の付箋まで絞れたら(今回は4枚)、これをプロダクトバックログとして、
カンバンを作成します。ここから先は、アジャイル開発なりなんなりで、
実装していく感じですね。

まとめと感想

これまで、こういう検証を行ったことがなかったのですが、
最後に出てきたアウトプットは、非常に納得のいく内容になっていて、驚きました。
また、今回はビジネスモデル検証でちょっと詰まったのですが、
川鯉氏曰く、あんまりビジネスモデル検証で詰まることは少なく、
今回はエンジニア寄りの人が多かったからかも、とのこと。
いろんな専門家の人が集まれば、もっと柔軟にスムーズに
検証が進んでいったりするのかな、とか。


最後に、わざわざ香川まできてくれた川鯉氏、ありがとうございました!
参加者のみなさまは、おつかれさまでした!!
また次回の開催が楽しみです!

妖怪ウォッチ 第20話 時刻表備考の謎

妖怪ウォッチが好きすぎて、メダルの置き場がなくなってるどるとんです。
アニメもアホほど再生しまくってますが、ふと、ある場面に引っかかりました。
それは、第20話の「コマさんシーズン2 田舎者はバラ色に エピソード4」で
社長が旅行に行くときのシーンで映し出される空港の時刻表。



問題のシーン。huluで見まくってます。


ここに映し出される、以下の謎ワード。
これが気になってしまい、調べました。

  • ネリシア
  • トネリシアホテル
  • 永夜メロオット
  • 永夜メロオ
  • ユーアール永夜オ
  • ユーアール
  • 永夜オオトリヤ
  • ユーアール永夜オオトリヤ
  • KLPHO
  • SYUFK
  • FGHUY
続きを読む

sensu + puppet を導入してみた。

今まではnagiosを使っていましたが、サーバを追加するたびに、
監視サービスを設定するのが面倒になっていました。
ちょうど、社内のサーバを新サーバに移行する機会があり、
別のサービスを検討したところ、sensuにたどり着きました。
参考サイトの記事を読んで、puppet と一緒に導入することを決めました。
詳しい内容は他サイトに譲るとして、いくつか備忘録的なものをメモ。

続きを読む

TeamPass 2.1.21 でフォルダの日本語が文字化けする問題

Teampass 2.1.20になってから、長いフォルダ名は、
ツリー上では省略して表示されるようになった。

  • items.php 217:222
// resize title if necessary
if (strlen($folder->title) > 20) {
	$fldTitle = substr(str_replace("&", "&", $folder->title), 0, 17)."...";
} else {
	$fldTitle = str_replace("&", "&", $folder->title);
}


この処理が原因で、日本語が中途半端なところで途切れて、文字化けしてしまう。
なので、mb_strlenとmb_substrを使って解決。

// resize title if necessary
if (mb_strlen($folder->title) > 15) {
	$fldTitle = mb_substr(str_replace("&", "&", $folder->title), 0, 12)."...";
} else {
	$fldTitle = str_replace("&", "&", $folder->title);
}

capistrano3 + git で submodule も一緒にデプロイしたい場合

生まれて初めて(?)git submodule を使った気がする。
capistrano3 で submodule を含むリポジトリをデプロイしようとすると、
submodule の内容は空っぽになってました。
capistrano2 だと、

set :git_enable_submodules, 1

これでいけるんだけど、、、と思って調べていたら、task を追加してあげるという方法があるらしい。

以下に、task のコードをそのまま引用。

namespace :git do
  desc 'Copy repo to releases'
  task create_release: :'git:update' do
    on roles(:all) do
      with fetch(:git_environmental_variables) do
        within repo_path do
          execute :git, :clone, '-b', fetch(:branch), '--recursive', '.', release_path
        end
      end
    end
  end
end

これを、lib/capistrano/tasks/git.cap として保存する、と。
試したんだけど、なんかうまくいかない。なんでじゃ!と思って Capfile を見ると
末尾に以下のような記述があった。

# Loads custom tasks from `lib/capistrano/tasks' if you have any defined.
Dir.glob('lib/capistrano/tasks/*.rake').each { |r| import r }

拡張子が rake のファイルを読み込むようになってた。。
ということで、lib/capistrano/tasks/git.rake に名前を変更したら、うまくいったというお話。(´・ω・`)