フリーソフトに広告を付けて収益を上げる方法
PC上で動く自作のフリーソフト、従来はシェアウエアという形で課金が一般的でしたが、広告を挿入して収益を出す方法を考えました。
下の画像が実際に広告を掲載した自作ソフトウェアです。
フリーソフトで収益を上げる理由
洋裁CADというフリーソフトを作ってフリーソフトとして配布しています。
以前は会社員として仕事を持っていて、ソフトウェア開発は趣味でやっていたのですが、その後会社を辞めて自営業となりました。
その後も相変わらず趣味として開発を続けていましたが、時間を自由に配分できるようになったので、どうしても面白いことに時間を使ってしまいます。
自分一人で生活するならこれで問題ないのですが、妻もいることを失念していました。
遊んでいないでもっと稼げ、と言われてしまったので、ソフトウエアを何らかの形で収益を上げることにしました。
課金することの利益と欠点
単純に課金すればお金が入るのでよいと思えますが、欠点もたくさんあります。
一番いやだと思うのは、ユーザー=お客様=神様になってしまうことです。
フリーソフトでいるうちは、「無償で配布してくれるなんて、神様のようなひとだ」と持ち上げてもらえますが、お金をもらったら途端に立場は逆転です。
「お金払ってるんだから、ここ、何とかしろ!」なんて言われてしまいそうです。現在は自営業なので、なんとか対応できますが、会社員では不具合があってもすぐには対応できません。
もう一つ大きな問題は、手続きなどが煩瑣になることです。お金のやり取りをするのですから、きっちり対応しなければいけません。
勝手にコピーできないよう、ソフトウエア側の対応も必要になります。お金を払った人だけに解除キーを渡すなど新たな作業が必要になります。
「解除キー失くした」っていう人も出てきますから、こちらの対応もしなければいけません。
要は、作業が格段に増えてしまう。増えた作業時間も課金の中に組み込まねばいけません。
計算してみたところ、こうした作業を考えなければかなり安い価格設定にできるのですが、作業を組み込むと、その数倍も価格を上げなければいけなくなります。
なんだか本末転倒っぽくなってしまいます。
もちろん、良いこともあります。収益が入るのはもちろんですが、他にもいろいろあります。
ユーザー側にとってみると、ソフトウェアに永続性が生まれる利益があります。「趣味でやってる」ソフトは、「もう興味なくなった」と作者が言えばそれで開発終了です。
ソフトウエアを使って作ったもののデータは、ある意味財産です。ソフト開発が終了すれば、作りためたデータもやがて使えなくなり、財産を失うことになります。
製作者側にとってみると、信用度が増す利益があります。上に書いたように、趣味でやっていたら信用されず、最初から使ってもらえないケースは多いでしょう。
「ユーザーがきちんと使ってくれる」という利益もあります。無償でダウンロードできると、たくさんの人が手軽にインストールしてくれますが、ちょっと使ってみて「もういいや」とすぐにアンインストールされてしまいます。
お金を払えば、「せっかくお金払ったのだから」、と粘り強く使って習得してくれそうです。ただし、有料ではダウンロードする人が減るので、どちらの方がユーザー増えるかというと、微妙なところです。
結局課金は諦める
結局ユーザーから直接お金を受け取る、課金制は諦めることにしました。
理由は、手間がかかりすぎるためです。ソフトウエアに手を入れて無断コピーできないようにしたり、お金をやり取りするための作業に時間がかかりすぎます。
事務作業ばかりに時間がかかってしまい、開発に使える時間が減ってしまいます。それであれば、以前のように時間をかけずにフリーソフトを続けても同じです。
課金制にしたら、開発が滞った、ではユーザーも失望するでしょう。
結局時間を減らしてフリーソフトとして開発を続けようかと考えましたが、他の収益方法がないかを検討してみることにしました。
投げ銭制と、広告です。
投げ銭とは、使ってみて気に入った人が任意でお金を払ってくれる方式です。以前からあるシェアウェアのようなものです、最近は少額送金が簡単にできるようになってきているので、これでゆこうかと一時考えました。
Amazonギフトを購入してもらって、メールで送ってもらえば、送る側も受け取る側もあまり手間はかかりません。
しかしこれもやめました。理由は「やっぱり手間がかかるから」と「換金できないから」。
そもそも自分のやりたいことしたいから会社を退職したのに、単調な事務作業を毎日するのはいやです。
Amazonギフト等を利用すれば、手間は減りますが、やっぱり手間はかかるのです。
あと、ポイントでは簡単にもらえても換金が出来ないのがネック。
少額であればちょっとした買い物に使えますが、額が増えれば持て余してしまいます。
広告ならほぼ丸く収まる
結局広告をつけることにしました。
広告料は設定さえしておけば勝手に毎月入ってくるので、このための手続きや手間は全くかかりません。
ユーザーはお金を払わないので、「お客様は神様」問題も発生しません。
ほぼ「フリーソフト」なので、手軽にインストールしてもらえるため、ユーザーが減ることはないでしょう。
開発者が収益を得ているため、永続性への安心感が生まれ、今まで敬遠していた人も使ってくれるかもしれないです。
実際の広告掲載
広告をつけることにしたのはよいのですが、掲載を許可してくれる会社がなければ話になりません。
探してみましたが、グーグルはダメ。楽天に問い合わせてみたところ、大丈夫とのことだったので、こちらを利用することにしました。
問い合わせたところによると、アプリケーションソフトに組み込む場合は、APIを用いるか、WEB用のコードを使うかどちらかということでした。
AIPの方はさっぱりわからなかったので、Web用のコードを使うことにしました
ソフトウェアへの広告掲載のしくみ
ソフトウェアはJavaFXで書いています。幸いJavaFX楽天 には、Webブラウザを表示するノードが用意されています。
アプリケーションの中にWebブラウザの小窓を設け、そこにWEB上から読み込んだ広告入りのTHMLファイルを表示させることにしました。
まどろっこしいですが、HTMLファイルを書き変えれば広告内容も変えられるので、ソフトウエアのバージョンが古くても最新の広告を表示させることが可能です。
サンプルコード
広告掲載部分だけを記述したサンプルコードを以下に紹介します。
実行すると下のようなウインドウが現れます。
大きなボタンはただのダミーです。
右側に表示された広告をクリックすると、使っているPCで標準に設定されているブラウザソフトが起動し、クリックしたリンク先を表示します。
JavaFX広告表示サンプルソースコード
package tomojavalib.fx;
import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.geometry.*;
import javafx.scene.*;
import javafx.scene.input.MouseButton;
import javafx.scene.input.MouseEvent;
import javafx.scene.input.ScrollEvent;
import javafx.scene.paint.Color;
import javafx.scene.shape.Box;
package tomojavalib.swingfx;
import java.awt.Desktop;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.*;
import javafx.scene.web.WebView;
import javafx.stage.Stage;
public class KoukokuTest extends Application {
public static void main(String[] args) {
Application.launch(args);
}
@Override
public void start(Stage stage) throws Exception {
stage.setTitle("広告表示試験");
BorderPane pane = new BorderPane();
Scene scene = new Scene(pane, 640, 480);
//ブラウザ小窓をつける
WebView browser = new WebView();
browser.getEngine().load("http://totomo.net/rakuten.htm");
pane.setCenter( browser );
//ダミーのボタン楽天 を配置
Button b = new Button("ボタン");
b.setPrefWidth(450);
b.setPrefHeight(450);
pane.setLeft(b);
//ブラウザがクリックされたら、PCの標準ブラウザからリンク先を開く
browser.setOnMouseClicked((MouseEvent e)->{
System.out.println("クリックされました");
System.out.println( browser.getEngine().getLocation() );
//ブラウザを表示
Desktop desktop = Desktop.getDesktop();
String url = browser.getEngine().getLocation() ;
System.out.println( url );
try {
if( url.indexOf("rakuten.htm")==-1 ){
java.net.URI uri = new java.net.URI(url);
desktop.browse(uri);
}
} catch (java.net.URISyntaxException ee) {
ee.printStackTrace();
} catch (java.io.IOException ee) {
ee.printStackTrace();
}
browser.getEngine().load("http://totomo.net/rakuten.htm");
});
stage.setScene(scene);
stage.show();
}
}
最終更新日: 2020-01-20 08:37:43