Running Lean 覚え書き②

Running Lean 覚え書き① - uramonk's blog

第2章は実例なので飛ばして、第3章の「リーンキャンバスの作成」覚え書きです。
第1章で示されていた「プランAを文章化する」に該当します(第2部)。

第3章 リーンキャンバスの作成

リーンキャンバスを使ってビジネスモデルを1ページの図に書き出す。

「RUNNING LEAN 実践リーンスタートアップ」を読んだ - Step by Step!
f:id:uramonk:20150802232129j:plain

見込み客を考える
  • 顧客とユーザーを区別する
    • 製品にお金を払ってくれる人が「顧客」、「ユーザー」はお金を払ってくれない。
  • 顧客セグメントを細かく分ける
    • あらゆる人をターゲットにした製品は効果的に作れない
  • 顧客セグメントごとにリーンキャンバスを作成する
リーンキャンバスをスケッチする
  • 15分程度で一気にスケッチする
    • 考えていることをすべて書き、最もリスクの高い部分を見つける
  • 空欄OK
    • 空欄の場所が最もリスクのある部分だったり、テストが必要な部分だったりするかもしれない
  • 簡潔に書く
  • 今わかる範囲で書く
  • 顧客主導型を使う(顧客の立場にたって考えることだと思われる)
顧客とセグメント
UVP(独自の価値提案)

リーンキャンバスの中で最も重要で難しい部分。
UVPには差別化要因が欠かせない。

  • 変わったものにする
    • 最も重要な課題からUVPを導き出し、それが解決に値するものであればなお良い
  • アーリーアダプターをターゲットにする
    • 最初からメインの顧客に対応する準備はできていない
  • 成功ストーリーに注目する
    • 「機能」とそれを使うことによる「利点」、それによってどういう「成功ストーリー」となるかを考える
    • UVPの公式
      • 「明確な見出し」=「顧客が望む結果」+「明確な期限」+「それが達成されなかった時の代替案」
      • 「顧客が望む結果」だけでも良い
  • 言葉をよく選ぶ
  • 誰が、何を、なぜに答える
    • 顧客は誰か、製品は何か(★なぜとはどういうものか?)
  • 優れたUVPを調べる
  • 印象に残る言葉であるハイコンセプトピッチを作る
ソリューション

課題に取り組むための簡単なもので良い。

チャネル

スタートアップが失敗するのは顧客への経路が作れないこと。
最初の目標は学習であり拡大ではないので、見込み客に到達するチャネルならなんでも良い。

  • インバウンドチャネル
    • 顧客にこちらを見つけてもらう
  • アウトバウンドチャネル
    • こちらから顧客に接触する
      • 展示会や営業電話など
  • 最初は自ら手動(直販)で販売し、あとから自動化する★
収益の流れとコスト構造
  • 収益の流れ
    • MVPは顧客の上位の課題を解決し、それが解決に値する課題である
    • よって課金できるだけの十分な価値を提供する計画が必要
    • 課金は最初の検証、最も難しい行為
  • コスト構造
    • インタビューのコストや、構築にかかるコストなど
主要指数

ビジネスがどれだけうまく言っているかを住めす数値。
デイブ・マクルーアの海賊指数を使う。

  • 獲得(Acquisition):ユーザーはどうやってあなたの製品を見つけるのか
    • Webサイトであれば登録した時点
  • アクティベーション(Activation):ユーザーは最初の体験に満足したか
    • サービスを使って満足した時点★
  • 定着(Retention):ユーザーは再度戻ってくるのか
    • 再度ログインしてくれた時点
  • 収益(Revenue):どうやってお金を儲けるのか
    • お金を払ってくれる時点
  • 紹介(Referral):ユーザーは他のユーザーに紹介してくれるのか
    • ソーシャル機能などで共有した時点
圧倒的な優位性

ここを埋めるのが最も難しい。(★難しいのはUVPなのでは?)
本物の圧倒的な優位性は、簡単にコピーしたり購入したりできないもの。

  • 内部情報や信頼性、コミュニティや既存顧客など

海賊指標が「リーン・スタートアップ」の本で言っていた、スタートアップ企業がすべき評価基準なのだと思います。
なにかアイデアが生まれた時、まずはこのリーンキャンバスを作るところから始めようと思います。

Running Lean 覚え書き①

「Running Lean」リーンスタートアップの実践的な内容を記載した本を読んでいます。
内容をまとめ、かつわからない部分を覚え書きとして記述しようと思います。

Running Lean ―実践リーンスタートアップ (THE LEAN SERIES)

Running Lean ―実践リーンスタートアップ (THE LEAN SERIES)

1章 メタ原則

  • Running Leanの本質は3つの手順に分けられる。
    • プランA(おそらく起業アイデア)を文章化する
    • プランで最もリスクの高い部分を見つける
    • プランを体系的にテストする
手順1:プランAを文章化する
  • プランAはそのままでは役にたたない→テストすることが必要
  • リーンキャンバスに書き出し誰かと共有する
    • 「ソリューション」に夢中になりがちだが、それでは製品にはならない→ビジネスモデルの全体像を把握する
手順2:プランで最もリスクの高い部分を見つける
  • 最も大きなリスクは、誰も欲しくないものを作ること
  • スタートアップの3つのステージ★
    • 第1ステージ:課題/解決フィット
      • 「解決に値する課題はあるか?」
      • 顧客が必要としているものか?(必要性)
      • 顧客はお金を払ってくれるか?誰が払ってくれるか?(成長性)
      • 解決可能か?(実現性)
    • 第2ステージ:製品/市場フィット
      • 「誰かに必要とされるものを構築したか?」
    • 第3ステージ:拡大
      • 「どうやって成長を加速させるのか?」
  • 製品/市場フィット前は学習とピボット、後は成長と最適化に集中する
    • ピボットでビジネスモデルの仮説を検証する→うまくいくプランを探す
    • 最適化でビジネスモデルの仮説を改善する→うまくいくプランに近づける
  • 資金調達は製品/市場フィット後
手順3:プランを体系的にテストする
  • 学習ループ(構築ー計測ー学習)によってプランをテストする
  • イテレーションは、「課題を理解する」→「ソリューションを決定する」→「定性的に検証する」→「定量的に検証する」の順番
    • 前2つで課題/解決フィットを目指し、後ろ2つで製品/市場フィットを目指す★

ここでわからなかったのがイテレーションのステージ(2つの★の箇所)部分です。
スタートアップは3つのステージに分かれているのに、イテレーションではステージ1と2が同じイテレーション内にあります。
たしかに課題を見つけてソリューション決定するだけでは意味が無いので、検証するのは理解できますが、なぜステージ1と2と記述しているのかがよくわからないです。

追記

不明点ですが、イテレーションとあるので、1回のイテレーション(=学習ループ?)で「課題を理解する」→「ソリューションを決定する」→「定性的に検証する」→「定量的に検証する」を全て行うと思っていたのですが、最初は「課題を理解する」のみで学習ループを繰り返し行うのようです。

CefSharp.Wpfの日本語入力

CefSharpですが、デフォルトのままだと日本語入力ができないです。
下記サイトに解決方法がありました。

CefSharp.Wpf Can‘t support other Input Method · Issue #583 · cefsharp/CefSharp · GitHub

Cef.Initialize(new CefSettings());

cefbrowser.PreviewTextInput += (sender, e) =>
{
    foreach (var character in e.Text)
    {
        cefbrowser.SendKeyEvent((int)0x0102, character, 0);
    }

    e.Handled = true;
};

ただし、IMEの枠?が表示されてしまい、インラインで入力ができないです。
解決方法は調査中です。

ニコニコ動画をフルスクリーンで表示する

ニコニコ動画WPFのWebBrowerで表示し、自動的にフルスクリーンにしたかったですが、JavaScriptを実行するにはFormのWebBrowserでないとできないようです。
また、WebBrowserのロードが読み終わってから操作しないとHtmlElementがNullになってしまうとのこと。

youtube - Null Value from GetElementById using C# - Stack Overflow

ちなみにニコニコ動画のプレイヤーのIDやフルスクリーン化の方法は下記サイトを参考にしました。

d.hatena.ne.jp
qiita.com

実際に作ったコードは下記です。

private void browser_DocumentCompleted(object sender, System.Windows.Forms.WebBrowserDocumentCompletedEventArgs e)
{
    System.Windows.Forms.HtmlDocument document = browser.Document;
    if(document != null)
    {
        System.Windows.Forms.HtmlElement player = document.GetElementById("external_nicoplayer");
        if(player != null)
        {
            player.InvokeMember("ext_setVideoSize", new object[] { "fit" });
        }
    }
}

これでフルスクリーン再生はできるようになりましたが、WPF(Form)のWebBrowserはIE7ベースが原因なのか、動画再生しようとすると下記の様なスクリプトエラーが発生します。

f:id:uramonk:20150716003430p:plain

代替案としてCefSharp.Wpfを試していますが、こちらはFlash Playerがインストールされていないと出てしまいます。

ちなみに下記サイトを参考にレジストリを操作することでIE10相当に変えられますので、これでスクリプトエラーは出なくなると思いますが、
あまりレジストリを変える方法は取りたくないので試してません。

Internet Feature Controls (B..C) (Internet Explorer)

ニコニコ動画ログイン失敗時の処理

APIを使ってニコニコ動画にログインする方法については探すとたくさん見つかりましたが、ログイン失敗時にどのような応答があり、それに応じて処理をしているところがみつからなかったので、自分で調査して実装しました。

ニコニコ動画サイトでの確認

ニコニコ動画のログイン画面で、メールアドレスやパスワードを入力せずにログインボタンを押した時のレスポンスをChromeデベロッパツールで確認しました。

NetworkタブのNameが「login?site=niconico...」となっているところのRequest URLを見ると、「message=cant_login」とあったので、おそらくこれでログイン失敗が判別できるのかなと仮定。

f:id:uramonk:20150714214319p:plain

ソースコードでの確認

ソースコードのログインする箇所で、HttpWebResponseのResponseUri.AbsoluteUriを確認したところ、Chromeで見たものと同じURLがあり、「message=cant_login」もあったので、とりあえずこの文字があったらログイン失敗ということで判別はできました。

HttpWebRequest request = HttpWebRequest.CreateHttp(Constants.LoginUrl);
request.CookieContainer = new CookieContainer();
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = contentBytes.Length;

using (Stream stream = request.GetRequestStream())
{
    stream.Write(contentBytes, 0, contentBytes.Length);
}

HttpWebResponse response = null;
try
{
    response = (HttpWebResponse)request.GetResponse();
}
catch(WebException ex)
{
    // プロトコルエラーなどの処理
}
catch(Exception e)
{
    // 他のエラー処理
}
if(response != null)
{
    if(response.ResponseUri.AbsoluteUri.Contains("cant_login"))
    {
        // ログイン失敗!
    }
    else
    {
        // ログイン成功!
    }
}

正直判別方法はもうちょっとどうにかすべきですが、まずはこれで出来たということで。
やはりWeb関連はまだまだ勉強不足。

ニコニコ動画のオススメ動画表示アプリ

ニコニコ動画のTOPに「あなたにオススメの動画」が表示されていますが、よくあそこから動画を見るので、勉強がてらオススメ動画表示アプリを作ってみました。

github.com


まだまだ未完成でログインダイアログ作ってないのでそのままだとログインできないですし、エラー処理など省いてます。
調査したところ、オススメ動画一覧を取得するAPIがないようなので、視聴履歴を取得しそこからさらに関連する動画を取得し、似たようなものを作ってみました。

明日はとりあえずログインダイアログ作ってアプリの体裁を整えられたらと思います。
また、できればブラウザも組み込みたいです。いまはクリックで外部ブラウザ起動しているので。

Terrianの作成とHeightmapとしてExportする

参考書でTerrianのCreateと、HeightmapとしてExportするにはメニューにあるTerrianから行うと合ったのですが、Unity5ではメニューからTerrianが消えていました。

TerrianのCreateはHierarchyでCreate->3D Object->Terrianで作成できます。

TerrianをHeightmapとしてExportする方法は下記サイトで分かりました。

qiita.com

HierarchyビューにあるTerrianオブジェクトを選択し、Inspectorビューで歯車のボタンを押すと一番下にありました。

f:id:uramonk:20150711212920p:plain