週刊SleepNel新聞

SleepNel所属のぽうひろが日々の個人開発で気になったことを綴ります。

FirebaseをUnityで使ってランキング機能を作ろう![実装編]

みなさん、こんにちは。ぽうひろです。

f:id:pouhiroshi:20170125234924p:plain

前回はFirebaseをUnityで使うための準備について説明しました。
sleepnel.hatenablog.com

今回は、簡単に実装方法を説明していきます。

前回、firebase側でアプリの設定を行いましたので、以下のconsole画面からデータベースなどを見ることができます。
https://console.firebase.google.com/

コンソールから作ったプロジェクトを選びます。
f:id:pouhiroshi:20170126000520p:plain:w400

左側のメニューにDatabaseがあるので選ぶと、データベースが見れます。
f:id:pouhiroshi:20170126000612p:plain:w400

firebaseのDBはこのようにjsonツリーになっていまして、consoleでGUIでデータを編集することができます。
f:id:pouhiroshi:20170126000929p:plain:w400

さて、まずUnityで使う前の準備が少し残っています。
FirebaseのRealtimeDatabaseには認証機能がありまして、基本はそれを使ってDB使用して良いかを判定します。これは別途SNS認証を使うとか、メール認証アドレスにするのかとか選択肢がありますので、またの機会にやろうと思います。
今回は開発モードとして、読み書き権限をOKにしちゃう設定にします。
firebase consoleのルールのタブにjson形式で設定を書きます。
以下のように rulesの.readと.writeをtrueにして「公開」ボタンを押せばOKです!
f:id:pouhiroshi:20170126092515p:plain:w400

あと、データベースのアドレスはここに書いてあるアドレスになります。
Unity側のコードで必要になります。
f:id:pouhiroshi:20170126092836p:plain:w400

ただしこの状態だと注意が必要です。
この状態だと、DB URLが他の人に知られてしまうと、好きなだけ読み書きできてしまうので開発中だけの設定と考えておいてくださいね!(僕ももうwrite権限offしてありますよ(*´∀`))

はい、今度こそ準備完了です。
それでは実装コードの方を説明します。

まずはデータ検索(参照)の方から説明します。
ドキュメントはこちらが参考になります。
Retrieving Data  |  Firebase

データ検索(参照)のやり方

using Firebase;
using Firebase.Database;
using Firebase.Unity.Editor;
public class Ranking : MonoBehaviour {
  //別メソッドのDB操作のためにprivateフィールドにとっておく
  private DatabaseReference timeRankDb;

  // Use this for initialization
  void Start () {
    //データベースURLを設定
    FirebaseApp.DefaultInstance.SetEditorDatabaseUrl("consoleに出てたDBのURL");
    // テーブル名的なノード名を指定して、DB参照をprivateフィールドにとっておく
    timeRankDb = FirebaseDatabase.DefaultInstance.GetReference("timeRanks");
    }
}

ざっくりポイントは、
using Firebase;
using Firebase.Database;
using Firebase.Unity.Editor;
と、データベースURLを指定してノード名(テーブル名的な)指定でDB参照を取る ところですかね。
UnityだとStartメソッドで1度実行しておくと良いと思います。

FirebaseのDBはjsonツリー状の構成となっています。
今回、ボスNoごとのクリアタイムランキングを実装したいと思いますので、構成は以下のように考えています。

root
   ∟ timeRanks
    ∟ ボスNo(1〜15個くらい)
      ∟ 記録ID (ボスIDごとに10個まで(10位まで表示したい))
         ∟  ユーザ名(name)
         ∟  タイム(time)

実際はこんな感じになってます。何となくわかるでしょうか?
f:id:pouhiroshi:20170126094434p:plain:w400

さて、まずはデータの取得をやってみたいと思います。
先ほどStart()で取得しておいたDB参照を利用してデータ参照します。

//bossNoのノードからtimeで昇順ソートして最大10件を取る(非同期)
timeRankDb.Child(boss.bossNo.ToString()).OrderByChild("time").LimitToFirst(10).GetValueAsync().ContinueWith(task =>{
  if(task.IsFaulted){ //取得失敗
    //Handle the Error
  }else if(task.IsCompleted){ //取得成功
    DataSnapshot snapshot = task.Result; //結果取得
    IEnumerator<DataSnapshot> en = snapshot.Children.GetEnumerator(); //結果リストをenumeratorで処理
    int rank = 0;
    while(en.MoveNext()){ //1件ずつ処理
      DataSnapshot data = en.Current; //データ取る
      string name = (string)data.Child("name").GetValue(true); //名前取る
      string time = (string)data.Child("time").GetValue(true); //時間を取る
      //順位のuGUIに値を設定
      GameObject rankItem = rankList.transform.GetChild(rank).gameObject;
      TimeRank timeRank = rankItem.GetComponent<TimeRank>();
      timeRank.SetText(rank+1, name, getTimeStr(time)); //順位1位から
      rank++;
    }
}
});

コメントにも色々書いていますが、ポイントとしては

  • データ検索はDatabaseReferenceを使って.Child("ノード名")、ソートしたかったら.OrderByChild("ソートキーに使う項目名")、取得件数絞りたければ.LimitToFirst(件数) をつなげていき、最後に.GetValueAsync().ContinueWith(task =>{ です。
  • 検索結果は非同期でtaskに返ってきます(コールバック)ので、task.IsCompletedの時、データの処理を行います。task.IsFaultedの時は通信エラーなどが想定されますので、エラーメッセージを出すみたいなハンドリングをしてもいいですね(*´∀`)
  • 検索結果はDataSnapshot snapshot = task.Result; で取れます。複数データの場合はsnapshot.Childrenに複数データが入りますので、GetEnumeratorで繰り返し処理するといいでしょう。
  • 1件のデータはDataSnapshotのChild("項目名").GetValueで取れます。object型になっているので(string)でキャストすると良いでしょう。(データ投入の際、floatとかで登録したかったのですが、どうもエラーが出る模様・・・続報あったら追記します)

結果、このような感じになりました(*´∀`)
f:id:pouhiroshi:20170126121408g:plain:w400

ちゃんと時間が早い順に取れてますね!

さて、次はデータ登録の実装を説明したいと思います。
ドキュメントはこちらが参考になります。
Save Data  |  Firebase

データ登録(insert&update)のやり方

//まずbossNoのノードにレコードを登録(Push)して、生成されたキーを取得(これを1件のノード名に使う)
string key = timeRankDb.Child(bossId.ToString()).Push().Key;
//登録する1件データをDictionaryで定義(nameとtime)
Dictionary<string, object> itemMap = new Dictionary<string, object>();
itemMap.Add("name", name);
itemMap.Add("time", time);
//1件データをさらにDictionaryに入れる。キーはノード(bossNo/さっき生成したキー)
Dictionary<string, object> map = new Dictionary<string, object>();
map.Add(bossId.ToString()+ "/" +key , itemMap);
//データ更新!
timeRankDb.UpdateChildrenAsync(map);

ここでのポイントは

  • データの登録はDbReference.Child("ノード名").Push()でやる。生成されたデータを表す一意キーを使うために.Keyでキーをとっておくと良い。
  • データの更新はDbReference.UpdateChildrenAsync(ノードがキーで値が更新したいデータのDictionary); で行う。

実際はこんな感じで登録されます!イメージ湧くでしょうか。
f:id:pouhiroshi:20170126122733p:plain:w400
この暗号みたいなのが生成されたキーで、データのパスは 1/-KbIyIe621y8MZ9ySB5S ということになります。

駆け足で説明しましたが、いかがでしたでしょうか。

私もまだあまり使いこなしているわけではないし、まだSDKもベータ版なので今後やり方など変わるかもしれませんが、何となく簡単に利用できることがお分かりいただけたんじゃないかと思います。

また何か情報があったら、書きたいと思います(*´∀`)

それではまた!!

FirebaseをUnityで使ってランキング機能を作ろう![導入編]

みなさん、こんばんは。ぽうひろです。
f:id:pouhiroshi:20170125234924p:plain

ただいまアーバンナックル・Sの絶賛開発中なのですが、
sleepnel.hatenablog.com

ランキング機能が欲しいなと思いまして、天下のGoogleさんのmBaas Firebaseを導入してみることにしました!

※実装編も書きました!
sleepnel.hatenablog.com


早速このアドレスからFirebaseを始めましょう!
https://firebase.google.com/?hl=ja

新規プロジェクトを作成ボタンを押します。
f:id:pouhiroshi:20170125230958p:plain:w400

Unityなんだけど、、、、メニューにないので、とりあえずAndroidを持っているのでAndroidアプリにFirebaseを追加を選びます。
f:id:pouhiroshi:20170125231039p:plain:w400

プロジェクト名と国を選びます。難しくないですね。
f:id:pouhiroshi:20170125231054p:plain:w400

パッケージ名とアプリのニックネームを入力します。パッケージ名はUnityのBuild Settingにも設定するBundle Identifierのことですね。
f:id:pouhiroshi:20170125231107p:plain:w400

すると、google-services.jsonなるファイルが勝手にダウンロードされます。これは後で使います。
f:id:pouhiroshi:20170125231133p:plain:w400

AndroidStudioのgradleの説明が出てきますが、Unityでは気にしなくて大丈夫です。
f:id:pouhiroshi:20170125231231p:plain:w400

はい、これで設定は完了です。簡単ですね!!
f:id:pouhiroshi:20170125231245p:plain:w400

では、ここからはUnity側の作業です。Unityは5.5.0を使っています。

FirebaseのUnitySDKはBeta版のようで、日本語ドキュメントがありません。
英語版のドキュメントはここになります。
https://firebase.google.com/docs/unity/setup
f:id:pouhiroshi:20170125232959p:plain:w400

このGet startedの中にUnity用packageが入ったSDKをダウンロードできるボタンがあるので、ダウンロードしましょう。
f:id:pouhiroshi:20170125233227p:plain:w400

中にはいろんなpackageが入っていますが、RealtimeDatabaseだけ使いたいなら、
FirebaseAuth.unitypackage(認証に使う)
FirebaseDatabase.unitypackage(DBをいじるSDK)
があれば良さそうです。
f:id:pouhiroshi:20170125233456p:plain

UnityのAssets > Import Package > Custom Package
で上記の2つのunitypackageをUnityプロジェクトにインポートしましょう。

その後、先ほどダウンロードしたgoogle-services.jsonをAssetsに入れておきます。場所はどこでもいいらしいですが、わかりやすいように先ほどのunitypackageをインポートした結果作成されたAssets/Firebase以下に放り込んでおきます。
f:id:pouhiroshi:20170125233956p:plain

さて、ここら辺で一度Unityを再起動しておくことをお勧めします。
(もしかしたらConsoleにビルドエラーが出ているかもしれません)
google-services.jsonがAndroidSDKと連携して、必要なライブラリをgradleを使ってダウンロードしてくれるみたいです。

導入はこれくらいです。特に難しいことはなく、簡単ですね!!

次回は、実際にRealtimeDatabaseに接続して、データ参照・登録などを説明したいとおもいます!

それではまた!!

タスク管理Trelloの一括タスク作成機能を発見!

みなさん、こんにちは。ぽうひろです。

いつもタスク管理に使っているTrelloですが、このほど、一括タスク作成機能を(偶然)発見したのでご紹介します。

Trelloについてはこちらも御覧ください(*´∀`)
sleepnel.hatenablog.com

まずはタスクを箇条書きにして、普通にタスク作成欄に記入します。
(改行されていれば良いみたいです。)
f:id:pouhiroshi:20170116123547p:plain

追加ボタンを押すと、ダイアログが出て「カードをn枚作成する」か「1つで作成するか」の選択肢が出てきます!

これで、n枚の方を選べば・・・・
f:id:pouhiroshi:20170116123530p:plain

はい、タスクが別々に登録されました!!これは便利!!

週初めにこのように、今週のタスクを出しておくと時短にもなっていいですね!!

それでは、良い開発ライフを!!

アーバンナックル・S開発中!!

皆さん、こんにちは。ぽうひろです。

あ、あけましておめでとうございますをちゃんと言ってなかった気がする。

改めまして、

「あけましておめでとうございます」

本年もSleepNel(スリープネル)新聞をどうぞよろしくお願いいたします。

さて、今日はNintendoSwitchのプレゼンテーションが中継されていますので、
それを見ながら書いています。
インディーゲーム界にいいことがあると嬉しいな〜。

さて、私の方はと言いますと、正月休みは1/9まで長めにいただいておりまして、
横浜->大阪->和歌山(白浜)->大阪->三重(伊勢)->大阪->兵庫(芦屋)->大阪->横浜
と言う総距離1000km超えの実家(嫁)帰り&旅行に行っておりました。

あまり渋滞しなかったもので、距離はそこまで苦ではありませんでした。
なかなか行けない白浜や伊勢に行けたのはとてもいい経験になりました。

その間、開発がほとんどできなかったのが一番しんどかったですね・・・・
けどたのしかったです!

さて、今年は目標としては「収益にこだわる」をテーマにしていきたいと思います。

マジで無茶かもしれませんが「月イチでリリースする」を具体目標としてあげたいと思います。



(((((((( ;゚Д゚))))))))ガクガクブルブルガタガタブルブル



まぁ、できなくても何か失うこともないですし、気概として目指していきたいと思います。


さて、その一発目ですが、「アーバンナックル」をもちょっとお手軽に遊んでいただきたいなという思いから、

「アーバンナックル・S」

の開発に着手しました。
Sは「サバイバル」という思いで作ったのですが、今は
「スマッシュ!」みたいな感じがいいかなと思ってます。

こちらが開発5日目のスクリーンショットチラ見せですΣ(゚∀゚ノ)ノキャー
f:id:pouhiroshi:20170113125017p:plain

勘のいい方は、だいたいどういう感じか分かるんじゃないかと思いますw

うまくいけば2月初旬に出せるかなという感じです!

それではまた!!

SourceTreeを使ってUnityプロジェクトをgitで管理してみよう!

みなさん、こんにちは。ぽうひろです。

みなさん、Unityで開発をしていてプロジェクトが壊れてしまった!!
間違ってファイル削除してしまった! この修正やっぱやめたいけど、もうどうやってたか忘れた・・・
などの経験はないでしょうか?

そこでオススメしたいのが「Unityプロジェクトをgitに登録する」ことです!

よくわからないし敷居が高い、、、と思っている方も意外といるのではないかと思い、
ここで簡単な手順を残しておきたいと思います。
ご参考になれば幸いです。

まず下準備として、gitとSourceTreeというgitをGUIで操作できるソフトをインストールしておきましょう。

gitは以下の記事のhomebrewを利用してインストールしておくと良いです。
Gitではじめるバージョン管理 〜Gitをインストール for Mac OS X〜

SourceTreeはこちらから
SourceTree - Windows と Mac 対応 Git & Mercurial 無料クライアント | Atlassian


ここでは、使用PC:Macで、すでにUnityプロジェクトがある状態からの手順を書きたいと思います。
f:id:pouhiroshi:20161218151956p:plain
まず、cd で管理したいUnityプロジェクトの直下に遷移します。
そこでgit init というコマンドを実行します。

そして、SourceTreeで新規リポジトリを選び、既存のローカルリポジトリを選択し、先ほどのgit initしたディレクトリを選択します。
f:id:pouhiroshi:20161218153136p:plain

すると、先ほどのプロジェクトが出てくるようになります^^
f:id:pouhiroshi:20161218153720p:plain

さて、gitで有名なのは先ほどのSourceTreeを作っているAtlassianのBitBucket。
あとはgithubですね。
ここではgithubの例を書いていきますが、初めは無料で始められるBitBucketをお勧めします。

このYour Repositoriesの「New Repository」ボタンを押します
f:id:pouhiroshi:20161218154411p:plain

リポジトリ名を入れて、公開したくないのであれば「Private」にしてCreate RepositoryすればOK
f:id:pouhiroshi:20161218154449p:plain


リポジトリを作成すると固有のURLが発行されます。これをコピーしておきます。
f:id:pouhiroshi:20161218154536p:plain

SourceTreeの設定でURLに先ほどのURLを入力すれば連携完了です。
f:id:pouhiroshi:20161218154618p:plain

連携できるとこんな感じになると思います。
f:id:pouhiroshi:20161218154731p:plain



それではここからは、ソースをコミットする例を順を追って説明します。
まず、この状態ですが?となっていますが、これはまだgitにファイルが登録されていないことを意味しています。
gitはローカルとリモートで2段階保存のようなイメージになっており、わかりやすく言いますと、
まずローカルに保存(コミット)、それをリモートに保存(プッシュ)という感じになっています。
gitについての正しい知識は毒きのこさんのエントリーを是非ご覧ください!
tech.librastudio.co.jp


ファイルの横にあるチェックボックスにチェックすると、Indexにステージされた状態になります。(コミットのさらに1つ前の段階って感じですかね)
すると、下にコミットコメントを入力する欄が出てきますので、何かメモを残すと良いです。
f:id:pouhiroshi:20161218155241p:plain

コミットを直ちにプッシュするチェックをすると、コミットと同時にプッシュまでできます。
f:id:pouhiroshi:20161218155304p:plain
これでgitに保存が完了したことになります!

ところで、Unityプロジェクトをgit管理する時は、以下の内容を.gitignoreというファイル名で
コミットプッシュしておくと、余計なファイルを登録しなくて済むようになります。
このファイルは何を意味しているかというと、gitでこういう名前のファイルは管理しないよ(無視する)という指定をするためのファイルです。
Unityはtmpファイルなどを大量に作るのでそれらまで管理すると、大変になるので無視してしまった方が良いです。
.gitignore

/[Ll]ibrary/
/[Tt]emp/
/[Oo]bj/
/[Bb]uild/
/[Bb]uilds/
/Assets/AssetStoreTools*
/TPS_cache/*

# Autogenerated VS/MD solution and project files
ExportedObj/
*.csproj
*.unityproj
*.sln
*.suo
*.tmp
*.user
*.userprefs
*.pidb
*.booproj

# Unity3D generated meta files
*.pidb.meta

# Unity3D Generated File On Crash Reports
sysinfo.txt
=======
*.svd

# Unity3D generated meta files
*.pidb.meta

# Unity3D Generated File On Crash Reports
sysinfo.txt

# Builds
*.apk
*.unitypackage


さて、次は何かプログラムを修正してみます。
f:id:pouhiroshi:20161218155338p:plain

修正した後、SourceTreeを見てみると、黄色いアイコンで修正したプログラムが表示されています。
右には差分がbefore,after表示されていますね!
f:id:pouhiroshi:20161218155352p:plain

さて、この修正。やっぱ、やーめたっていうことがgitで管理しているとできます。
ファイル名の上で右クリックして、メニューを表示し、「リセット」を選びます。
f:id:pouhiroshi:20161218155413p:plain

確認ダイアログが出ますのでOKを押します。
f:id:pouhiroshi:20161218155500p:plain

ほら、もとどおり!
f:id:pouhiroshi:20161218155526p:plain

次は、ファイルを間違えて削除してしまったとしましょう!
削除は-アイコンで表示されます。これもリセットで戻せます。
f:id:pouhiroshi:20161218155604p:plain

またファイル名の上で右クリックして、メニューを表示し、「リセット」を選びます。
f:id:pouhiroshi:20161218155624p:plain

確認ダイアログが出るのでOKを押します。
f:id:pouhiroshi:20161218155640p:plain

これで削除したファイルも元に戻ります!!

今回の例はコミット・プッシュしていないファイルをリセットで戻せるよという例でしたが、
コミット・プッシュしてしまうと、元に戻すのはそれなりの手順が入りますので、またの機会に・・・・w

あまり時間がなくて、雑な説明になっていますので、
落ち着いたらもう少し丁寧&詳細に書いてみたいと思います。

それでは良い開発ライフを!!

私がアプリ開発者になった経緯を振り返る 〜ぽうひろ編〜

みなさん、こんばんは。ぽうひろです。

今日は、巷で流行っている、「私がアプリ開発者になった経緯」を振り返ります。

もう劇的な人生を送られている方々がいっぱいでしたので、普通の人生を書くのもどうかなと思ったのですが、
普通のも読んでみたいという方もいらっしゃったので、頑張って書いてみます。

・すべての始まり小・中学生時代
私のゲーム歴史すべての始まりだと言っても過言ではない小学校時代。
確か小学1年生の時にファミリーコンピュータが発売されました。
当時は近所のデパートのおもちゃ売り場にファミコンがプレイできる状態で置いてあり、
友人と並んで何回もプレイしていました。
ゲームはそう「ベースボール」です。基本的に守備は投げる以外はオートだったため、
取れそうなボールも取れない守備にやきもきしながら友人と20-18みたいなアホなスコアになるまでやり通していました。
ファミコンは本当に楽しかった。ドラクエ3もお父さんに並んでもらって買ってもらえました。
アリアハンから旅立つ瞬間、ワクワクが止まらなかった。
小学校高学年でFF4が出ましたね。綺麗なゲーム画面と暗黒騎士のドラマに心が震えました。
その頃の将来の夢は「ゲームデザイナー」になりました。
けれど、ファミリーベーシックもなんじゃこりゃって感じでしたし、具体的にどうやってなるのかは全然わかっていませんでした。
体が弱かった私は水泳や剣道など、いろんなスポーツをやらされましたが、その中で
サッカーは性に合っていたようです。クラブ活動もずっと続けることができ、以後、小中高大学、社会人になっても続くのでした・・・

・高校生時代
勉強はめっちゃ嫌いだったんですが、小学校の時に少し成績が良かったため、塾に行くと言ってしまったのが運の尽き。
中学受験は落ちたのですが、高校受験で補欠でそこそこ偏差値の高い高校に合格してしまいました。
男子校です。
部活はサッカーで楽しかったのですが、進学校なのに勉強はほとんどしなかったですね。
大学受験も失敗し、1年浪人することになります。
高校2年だか3年の時に、我が家にNEC製のPC9821がやってきます。
パソコン通信Nifty-Serveが楽しすぎて、弟とテレホーダイの時間になると回線の取り合いが始まります。
こんなんで勉強するわけもないですねw
けど、これのおかげで「パソコンを使った仕事がしたいな」と思うようになりました。
数学の点数は赤点でしたが、なぜか理系を希望し、一浪してそこそこの大学の理工学部へ通うこととなります。
ちなみに私のハンドルネーム「ぽうひろ」ですが、このパソコン通信のハンドル名から来ています。
ニュースで「ぽうたろう」という犬が出ていて、最初それをかわいいなと思って使っておりました。
途中から「ぽー」になり、メールアドレスとかを取る時にpouは普通に取られていて使えなかったので、
自分の名前「ひろし」からとって「ぽうひろ」となりました。
はい、たまに聞かれるのでやっと説明出来ましたw


・大学時代
理工学部でしたが、電気電子工学科という、どちらかというと電機系・回路系の学科に入りました。
かろうじてCやFortranの授業がありましたので受講しましたが、これまたさっぱりわかりません。
大学のパソコン室でホームページを作るのにハマってました。
cgiを使った掲示板も全盛期でしたね。バイト先の友人と交換日記の掲示板を作って遊んでました。
ゲームを作ったりはしてませんでした。

・社会人時代ファーストステージ サラリーマン編
そんなこんなで就職活動。あがり症で面接が大の苦手の私。何十社も受けるのが普通とされていた時代でしたが、
5社くらいがやっとでしたかね。まともに面接まで行ったのは2,3社くらいだったかも。
受からなくて(そもそも少ないけど)絶望していたところ、母親に言われた言葉が今も心に残っています。
「就職しなくても死なないから大丈夫よ」
この言葉には今でも救われることがあります。
ですが、とあるSIの会社に引っかかります。僕のシステムエンジニアのキャリアが始まりました。
200人月が1年くらい続くような大きなWebシステムのプロジェクトのブラウザ挙動テスターで最初はスタートしました。
Netscapeの挙動がめちゃくちゃだった。懐かしいなネスケ
なんか色々めちゃくちゃで、会社に来るのが11時。終わりは23時。バイク通勤してたような気がします。
なんだこれは。
3年目くらいで絶望して、もうやめようと思って会社を飛び出したのですが、同期の友人に引きとめられたのを覚えています。
その友人は僕より先にやめましたけどw
けれどプログラムの師匠ともいうべき先輩とも出会え、プログラムをすることはとても楽しいと思うようになりました。
そんな先輩とも別プロジェクトになり、僕は客先常駐といういわば身売りのような状態で5年ほど過ごすことになります。
ずっとプログラムができることは幸せでしたが、会社に所属している意味がわからなくなっていきました。

結婚し、子供も産まれた10年目。
いつもと同じお客さん。いつもと変わらない採用技術。いつ終わるともわからない保守作業。

時間が停滞したような感覚。

死にに行くように会社に行く毎日。

僕は会社を辞めることにしました。

・社会人セカンドステージ フリーランス
同じようなシステム開発をする会社に転職するという選択肢はあまりありませんでした。
かといって、他に何かできるかというとそれもありませんでした。
とあるフリーランスを集めて仕事を斡旋してくれるエージェントをWebで発見し、相談に行ってみました。
2社くらいいきましたかね。月収は60万ちょっとが提示されてた気がします。
サラリーマンの時は月収が30万ちょっとだったので、「何この毎月がボーナスみたいなのは!」と色めき立ちましたが、フリーランスは2倍稼いでやっとトントンという知識もなかったので、今はああそうかって感じです。
見通しも立ったので退職手続きを進めました。有給消化もできず、崩壊寸前のプロジェクトに最後の奉公でぶっこまれ悲しい思いをしました。退職金も100万円くらいでしたかね。
しかも個人企業年金のまま渡されたので使えません。まさに無一文状態でフリーランスに放り出されることになります。
この仕打ちは今でも会社と言うものに対する嫌悪感の要因にもなっています。

フリーランスになってからというものの、紹介していただいた会社がとても金払いがいいというか、悪く言えば放任というか、とにかく残業キツキツなわけでもなく、業務委託にも優しくしてくれる会社で、とても居心地が良かったです。
5年早くやってれば良かったと思いましたが、まぁタイミング次第ではわからないですよね。
運が良かったと思います。
そんなこんなで今は社員さんが紹介してくれた子会社で直契約でやらせていただいています。
かなりハッピー。

余裕も出てきた頃に、個人でゲームを作って稼げるらしいというのを聞き、そこから私のゲーム開発がスタートしました。
最初はcocos2dxを使って、ひらがなを当てる「ひらあて!」をリリース。
Unityはその次から使い始め、あまりの簡単さに惚れ込み、以降はずっとUnityで開発しています。
累計DL数は1万もいっていません。
正直みなさんの華々しいDL数を見て、とても羨ましいし悔しいと思っています。


・社会人サードステージ 現在の私編
とても居心地の良いところですが、最近はもやもやしております。
来年はもう40歳です。
主に既存システムの改修やら、管理機能の改修やらをやっていましたが、いろいろな便利ツールが出てきており
あまり手を動かす必要がなくなってきたなというのが実感としてあります。
あと、その会社は広告代理店なんですよね、やってることが。
実は自分は広告とか本当に興味がなくて、何かサービスだったりアプリを作って売るってことに興味があるんです。
なので、この先10年、20年考えると、ちょっと視点を変えたほうがいいなあと思っているところです。
とはいえ、こども3人、ローン持ち。なかなかズバッとアプリ開発に専念するわけにもいきません。
いいバランスとタイミングを見計らいながら、何とか方針転換していければと思います。

みなさんのアプリ開発者になった経緯を読ませていただくと、とても薄っぺらくて特に面白味もないものになってしまいますが、こんなところです。

来年はちょっと結果(収益)にこだわろうかなと思っています。
自分のゲームを面白いと言ってくれる少数にでも届けばいいと甘っちょろいことを言っておりましたが、
この自由な環境を今後も続けていくには、やはり自分の作ったものを売るしかない。
売れる努力をしなければいけない。

そんなことを思う大晦日なのでした。

あまり手直しせず、殴り書きになってしまったので、読みにくくて申し訳ありません。

来年もみなさん、こんな私をどうぞよろしくお願いいたします。

家族優先にはなりますが、頑張っていきたいと思います。

それでは良いお年を!

ぽうひろ、2016年まとめてみる

みなさん、こんにちは。ぽうひろです。

f:id:pouhiroshi:20161216193616p:plain f:id:pouhiroshi:20160528091542j:plain

f:id:pouhiroshi:20160526080951p:plain

早いもので今年ももうすぐ終わりですね。

色んなことがありましたが、ログ付けと来年への糧にすべく、今年あったことを振り返ってみようと思います。(こういう時、ブログ書いてると思い出せていいですね、、、)
長いですが、ダラダラ流し読みしてください。

1月 DodgeWars開発してた。なんか悟ってた。あとNexus6をゲットしてた。

 

2月 DodgeWars開発したり、eTaxに疑問を呈していた。

  フリーランスに対する税金の高さに疑問も呈していた(けど今はフリーランスサイコーってなってて世の中不思議)

  DodgeWarsの開発大変そう

 

3月 freeeで確定申告して超感動してる

  そしてまだDodgeWars作ってる

  TOMEさんがフリーランス派遣のアレで炎上して(させて)た

 

4月 子供から呼ばれるマン

  じぇふさん会があった模様。インディー開発者の皆さんたちとちゃんと会ったの初めてじゃないかな。お世話になってますm()m

 

5月  DodgeWarsついにリリース!

 リリースと同時に湖へ逃亡

 そして、週刊SleepNel新聞創刊!(当ブログ)

6月  一週間チャレンジでアーバンナックルの原型を作成。以後、本格的にリリースに向けて作業開始。

sleepnel.hatenablog.com

 


7月 BitSummit4thに落選。その間、お役立ち情報をブログに書き続け、コンスタントにPV/dayが50を超えるようになってくる。

 

sleepnel.hatenablog.com

 

8月 モチベーション低下と戦いながらアーバンナックル開発を頑張ってた。

 

sleepnel.hatenablog.com

 

9月 引き続きアーバンナックル開発。この頃、11月のデジゲー博参加が決まる。

 

sleepnel.hatenablog.com

 

10月 アーバンナックル開発も佳境を迎える。

 

sleepnel.hatenablog.com

 

11月 アーバンナックル 有料で初リリース!デジゲー博は闇の組織の妨害により無念の不参加。

 

sleepnel.hatenablog.com

 

12月 アーバンナックルにリキモードを追加!同時にセール価格を実施!
   iOSアーケードゲーム70位、Androidアクションゲーム42位到達!

     次回作「アーバン・スパイ」開発開始!

 

sleepnel.hatenablog.com

 

iOSAndroidで(セールの力を借りてとは言え)100位以内に入れたし、去年は決して見れなかった光景を見ることができました!\(^o^)/


次作にも着手して何か面白くなりそうだし、今年は次につながるいい年だったって言えそうです。

 

個人開発コミュニティの皆さま、並びにゲームをDLしてくれた皆さま、今年も大変お世話になりました。

ぽうひろは来年もジタバタしながら何かしら作っていきたいと思いますので、ご愛顧のほどよろしくお願いいたします(*^_^*)

 

それではまた!