ソフトウェアの価格戦略 -1 from “Don’t Just Roll the Dice.”
ISVをやっていると、いつか製品の価格を決めないといけない時が来ます。その時、あなたの製品はいくらに策定すればいいでしょうか?
例えば、あなたが「マック家計簿」と言う個人用アプリケーションを作って販売したいと仮定してみましょう。あなたはそのアプリケーションの値段をいくらにしますか?またそれは何に根拠した決定ですか?本屋に行けば「価格戦略」というカテゴリの本が並んでいたりもします。ただし、ああいう本はどちらかというと大手企業向けの内容が書かれていることが多く、読むときは何か理解できそうな気もします。ただし、それを自分の製品価格の策定に直接適用しようとすれば、自分のマーケットについては足りてない情報が多く、特にISVの特徴も考慮すると、そういう本から得た知識はあまり現実性がないことが多いです。結果、多くの場合、ISVをやっている人は個人的な価値基準に基づいて適当に製品の価格を決めたりもしているのが現状だと思います。
私も価格戦略と関連していろいろと調べてみたりもしましたが、ちょうど同じくISVの方がISVの価格戦略について書いた本を見つけましたのでその内容を要約しておきます。ちなみにその本とは「Don’t Just Roll the Dice. A usefully short guide to software pricing」で、Red Gate SoftwareのNeil Davidsonさんが書いてくれています。この本は購入もできますがPDFを無料で公開しており、Creative Commons attribution-noncommercial-no derivative works licenseを採用していますので、商用な目的ではない限り自由に配布できます。氏の好意に感謝しながら、以下、私なりの要約です。
Chapter 1. ほんの少しの経済学
先ず、あなたのアプリケーションをただで配布する場合を考えてみます。この場合、多くのユーザがあなたのアプリケーションをダウンロードして使用してくれます。(まあ、そのためには十分な認知度や品質が必要なんでしょうけど、その辺の話はまた別の機会にさせていただきます。)ここでは1,000人のユーザがダウンロードしたとします。もちろん、ただで配っていますのであなたの収益はありません。これをチャートに示すと以下の通りになります。
ここではシミュレーションをしているつもりなので、時間を過去に戻し、あなたがアプリケーションの価格を100ドルに策定していたとしましょう。ユーザは500人に減りました。更に200ドルに策定した場合を想定してみます。更にユーザ数は減り、300人が購入してくれました。500ドルに策定した場合は50人しか買ってくれませんでした。最終的に、一千ドルに策定したら誰も買わなくなりました。これらの価格設定に従った販売量を示したのが以下のチャートです。
上のチャートを経済学では「需要曲線」と呼んでいます。同じアプリケーションなのに価格が変わることでそれを購入する人の数が変わるのです。これを需要曲線として示すと以下のチャートになります。
ここで注意したいのは、「アプリケーションの販売量が一番多い価格があなたの収益が一番高い価格だとは限らない」ということです。じゃあ、上のチャートからアプリケーションの販売者であるあなたが最大の収益を得られる価格設定はいくらでしょうか?以下のチャートで分かるように、あなたは300ドルに価格を策定した場合に一番高い収益を得られます。
勿論、上の話は仮説であり、実際にあなたの商品をもって上記のような実験をやってみるのは難しいし、現実世界にはより多くの変数があります。ただし、ここでは価格の策定があなたの収益にどのように影響するかを理解することが大事です。(目的によっては、収益より販売量(無料の場合、ダウンロード数)を優先することもあり得ますが、ここでは収益最大化を目的にした場合を想定して話をしています。)
Chapter 2. 価格の心理学。あなたの商品の価値は何か?
前章で挙げた「需要曲線」には動的でしかも多数の影響要素が存在しますが、それでもあなたにできることはあります。先ず、あなたの商品は何かを定義してみます。あなたの製品はただのビットの羅列ではありません。あなたの製品はソフトウェアに文書、サポート、その商品の将来性などが含まれています。時にそれは、夢であったり、ライフスタイルであったりもします。イギリスで有名な会計ソフトとして「Sage software」というのがありますが、この商品のUXはひどいものです。それでもこの商品が会計ソフトとしては一番売れている理由にはそのソフトが長年に渡って築いてきた品質とサポートセンターの運用に対する安心感、そして未来にも法律の変化などにきちんと対応してくれるだろうと言う信頼にあります。
つまり彼らの商品の価値は「安心と保証」です。あなたはあなたの製品の提供する価値が何かをきちんと定義する必要があります。
Chapter 3. 認識価値(Perceived Value)
商品にはその商品が実際に提供する価値とその商品に対して意識されている価値があります。そしてこの二つの価値は異なる場合が多いです。あなたの製品がいくら優れていてもそれを顧客が知ってくれなければ、或は、その価値を理解できなければそれは売れなくなるでしょう。逆に、顧客があなたの製品を実際より高く評価しているならあなたの製品はうまく売れる筈です。
つまり、あなたは製品自体の価値を変えるのではなく、顧客があなたの製品に対して理解している価値を変えることで販売を増やすことができる訳です。そして、これがまさに、マーケティングというものが必要な理由の一つでもあります。マーケティングは製品自体を変えず、同じ製品に対する顧客の認識価値を大きく高めるためのとても有効な手段です。
なら、人々はある製品の価値をどのように決めるのでしょうか?一つ確実なのは彼らは何の情報もない状態では価値を評価できないということです。何かを評価するためには参考値が必要です。もしあなたの製品が家計簿ソフトなら、その評価の基準となる参考値は他の家計簿ソフトの値段となります。顧客はネットを検索し、他の家計簿ソフトの値段を調べ、あなたの値段と比較し、あなたの商品の価値を決めるのです。ただし、だからといって、他の競争製品の価格戦略をそのまま真似る必要はありません。もしあなたの製品が他より優れていたらそれを強調し、その価値を訴えるのです。顧客がその価値を理解し、認めるようになるとあなたはより高い価格で販売することができるようになります。不幸にも逆の場合なら、あなたはより低い値段を設定するしかないでしょう。(必ずそうである訳ではありません。それについては後述します。)
ここで再び言っておきますが、あなたの製品はただのビットの固まりではありません。前述した他に、マーケティング、ブランド、そしてパッケージングなどがあなたの製品の一部であります。これらを有効に利用すべきです。他に人のある製品に対する認識価値に影響する要素には下記のようなものがあります。
・味覚や美学:ある人はワインに多額の支出をしますがある人は安いワインでも満足します。ある人は製品のデザインを重視しますがある人は機能だけに興味があります。
・財政状態:同じ金額の価値に対する感覚が違うことからくる差です。
・知識:ハイテク製品、アンティックなど、専門知識の有無はその製品について感じる価値を左右します。
そして簡単なトリックですが、「fives and nines」は大抵の場合有効です。(fives and ninesとは数字のトリックで、2ドルより1.99ドルがはるかに安く感じられることを言います。)
他に、顧客の認識価値を高める方法を以下で示します。
・製品の実際の価値を高める。:製品の実際の価値が顧客の認識価値に直結しないとしても、強く影響することは確かです。
・製品に個性を与える:他の製品と区別できる、その製品だけの特徴を付与します。
・製品と販売者を繋げる:販売者の認識価値が製品のそれより高い場合に有効な方法です。確固たる個人ブランドを構築することが重要です。
・ブランドを構築する:製品のブランドを確立し、人々に愛されるようにします。
・よりいいサービスを提供する:競争相手が大手企業である場合有効です。
・保証する:ブランドとは信頼性創造のメカニズムです。
・クラスを作る:製品が象徴する社会的な地位、ステータスを作り出すことです。人々がその製品を所有することでそのクラスに入ることを望むように仕向けることです。例として、BMWはBMWが買えるクラスを象徴しています。
・あなたの製品にどれくらいの努力が費やされているかを強調する:ビル・ゲーツがソフトウェア販売の価値を認めてもらうために使った方法です。
・人々の良心に訴える:何か、細かいことなんだけど、世の中に対していいことをしているように感じさせることです。
・商品以上のものを提供する:BMWは車ではなく、楽しさを提供しますというCMがいい例になります。
要するに、あなたの製品を他の製品と「差別化する」ことが最も大事だと言えます。あなたの顧客に対して、あなたの製品の認識価値をより高めてくれそうな参考値を沢山提供し、逆に不利な情報はできるだけ遠ざけるべきです。もしマーケットプライスが100ドルの場合、あなたの製品を200ドルで売りたいなら、顧客が100ドルの製品と直接比較できない機能をいくつか追加すべきです。そして他社の300ドルのより上位レイヤーの製品と比較する情報を提供するのです。勿論、オープンソース製品との比較はさけるべきでしょう。
もしあなたの製品が独特なもので、顧客があなたの製品に対する適切な参考値を見つけることができなかった場合、彼らは他の指標を探します。あなたが売っている他の製品の値段がマーケットプライスと比べて高いか安いかを持って、あなたの製品の価値を評価するのです。つまり、あなたが他の製品を安く売っているのであれば、あの独特な製品の価格も多分安く設定されている筈だと考えるのです。あなたの製品が独特で他の比較対象がない場合、あなたはその製品のマーケットでの価値を決めることができます。そしてその決定が後から参入してくる競争者に対する参考値となります。
Cのポインタ、超簡単整理
私のようにJavaしか知らない人にはなかなか慣れていない存在であるポインタ。そのポインタについての簡単な整理です。
ポインタは変数のメモリアドレスを格納する変数型。
変数名の前に「*」をつけて表示
int *hoge_p;
int hoge = 5;
ポインタに変数のアドレスを代入。
変数名の前に「&」をつけるとその変数のメモリアドレスの先頭値を返す。
hoge_p = &hoge; // この時には「*」をつけない
ポインタの値の表示(「*」をつけない)
printf(”%u¥n”, hoge_p); // ポインタが格納しているメモリアドレスを表示
ポインタが指しているデータの値を表示(「*」をつける)
printf(”%u¥n”, *hoge_p); // 変数「hoge」が持っている値「5」を出力
ポインタによるデータの値の変更
*hoge_p = 10;
printf(”%d¥n”, hoge); // hogeの値として「10」を表示
Cの関数呼び出しでは引数が値渡し(既存の値をコピーして渡す)であり、関数の中で変更した値は関数の外では無効である。
参照渡しを行うためには引数をポインタに定義する
change(int *x, int *y); // 関数の引数をポインタとして定義
…
change(&n1, &n2); // 関数を呼び出す時にアドレスを渡す。「引数の参照渡し」と呼び、関数の中の変更を関数の外でも反映することができる。
「sizeof」演算子を使って変数および型のサイズを取得可能
siezeof(variable);
sizeof(int);
◎ポインタのポインタ◎
ポインタは変数のみでなく、他のポインタのアドレスを格納することもできる。ポインタのポインタは「**」で表示。
char *str_p[] = {”Jan”, “Feb”, “Mar”};
char **str_p_p;
str_p_p = str_p;
int i, j;
for(i = 0; i<3; i++){
j = 0;
while(*(*(str_p_p + j) != ‘¥0′) {
printf(”%c”, *(*str_p_p + j));
j++;
}
++str_p_p;
}
◎ポインタのキャスト◎
ポインタの実体は大抵のプラットフォームでただのint型でしかないため、ポインタを別のデータ型を示すものにキャストできる。
char s[4] = { 1, 2, 3, 4 };
/* たとえば1000番地(1)から1003番地(4)まで */
int *p;
void main()
{
p = (int *)s; /* p = 1000 */
/* 1000番地からintのサイズ分(4byte)を0にする */
*p = 0;
printf( “%d %d %d %d\n”, s[0], s[1], s[2], s[3] );
}
但し、ポインタの型によって操作するデータの範囲(サイズ)が変わるので注意が必要。
(上記の場合、char型のポインタをint型に変えることで全てのcharデータが「0」に変わってしまう。(charは1byte、intは4byte))
各データタイプのサイズは下記のURLで参照可能。
http://www.geocities.jp/ky_webid/c/010.html
NSCFTypeと関わるエラーメッセージについて
練習を兼ねてコードを書いていたら、以下のようなメッセージが出てエラーとなったので簡単に調査してみました。
[NSCFType count]: selector not recognized
要するに、メモリ管理が間違っていて使おうとしているインスタンスなどが既に解放された場合にこの「NSCFType」というものが出現するらしいです。こいつの存在についてはどこにも記述されてないようでやかましいですね。
ちなみに、デバッガーから該当する変数を調べると「out of scope」と表示されました。
詳しくは以下のリンクを読んでみること。
http://imlocation.wordpress.com/2007/09/13/strange-objects-nscftype-indicate-memory-management-bugs/
C言語の「static」の用法について
下記はCのstaticの使用についてのメモです。
static functions are functions that are only visable to other functions in the same file. (Like private of Java)
For some reason, static has different meanings in in different contexts.
1. When specified on a function declaration, it makes the function local to the file.
2. When specified with a variable inside a function, it allows the vairable to retain its value between calls to the function.
Cocoaのクラスの使用例に対するAppleのサンプル・ソースを簡単に探す一つの方法
先ずは、該当するCocoaクラスのリファレンスドキュメントをWebなどで検索します。
そのドキュメントをよく見ると「Related sample code」という項目があります。
ーこの項目はドキュメントの先頭にも、そして各メソッドの説明の中でも登場します。
ーつまり、そのクラス、そのメソッドが使われているAppleのサンプル・ソースがそこには書かれています。
後は簡単、ADCでその名前で検索し、サンプル・ソースを取得すればいいです。




