『かんたん工数見積もり』 リリースしました

工数見積もり? 難しいよね(「豊島? 強いよね」風に)

転職して1ヶ月ちょっと経ち、仕事にも余裕ができてきたついでに、リハビリがてら何かアプリでも作って公開してみようかと考えたわけです。

ネタとしては、開発工数の見積もり補助ツールに決めました。

工数見積もりって難しいですよね。真面目に考えれば考えるほど、可変パラメータが数を増していき、楽観的見積もりから悲観的見積もりまでの間のどのあたりで提出するのが妥当なのか決めにくい。

結局のところ、ある程度考えた上で安全マージンと予算の兼ね合いを見ながら、えいやっと出してしまうしかないのですが、基準が決めきれないと無駄に考えてしまいがち。

ということで、私の場合は「(楽観的見積もり×1+普通の見積もり×n+悲観的見積もり×1)÷(1+n+1)」的な計算で出すことにしています。nは3~5くらいにしつつ。ただ、これも手で計算しているといろいろ微調整したくなったりして、また無駄に時間を費やしてしまうんですよね。

というわけで、この辺りのノウハウを盛り込んだアプリを作ることにしました。

ワンアイディアのユーティリティアプリ、今なら何で作る?

今まで作ったことがあるスマホアプリは、Objective-C iPhoneアプリと、MonoTouch iPhoneアプリ、Java Androidアプリ。ただしどれも4~5年前。

ソシャゲ業界ではFlash/AIRアプリをだいぶやったけど、今更なー。Unityはいじったけども本格的な開発までは絡まなかった。

アプリの内容と今どきの技術から考えると、Web系技術をベースにしたアプリ開発環境が一番良さそう。ReactNativeとかWeexとか。PhoneGapとかってまだあるのかな?

C#好きーとしてはMonoTouchというかXamarinがいいかなーと思ったんだけど、なんかこの辺4~5年前と比べて特に使いやすくなっておらず、C#好きーの目から見てもいまいち感が否めない感じがした。

で、マルチプラットフォームで手軽に作れる開発環境と言うことで、最終的に決めたのはUnity。

こんな感じのアプリです

タイトル画面とかアバウト画面とかもあるけど、アプリとしての機能はこの画面に集約されている。

一番シンプルな使い方としては、まず真ん中に一番ありそうに思える見積もりを入力し、その左に最速でできた場合の見積もり、右には最悪に時間がかかった場合の見積もりを入力する。

単位は日でも時間でも、自分の中で統一していればなんでもいい。

すると、下の「見積もり結果」のところに、入力された3つの数値から算出された見積もり工数が表示される。

まあだいたい一番ありそうに思える見積もり周辺の数値が出るはず。なんだかんだ言って、自分が妥当と思った見積もりに近い結果になることが多いはずだから。

ただ、仕事の内容によっては自分の予測があまり当てにならないだろうなー、と思われるときもある。慣れないジャンルの仕事とか勝手の分からないお客さんが相手とか。

そういう場合は、下にある「見積もり難易度」のバーを右側にずらしていくと、ありがち以外の見積もりの比重が高い「見積もり結果」に変わっていく。

これだけで、通常の見積もりには十分に使えると思うが、上下にさらに3つずつ入力欄が用意されている。

これらは見積もりの際に軽視しがちな「事前準備」「後始末」にかかる工数を意識するためのものだ。

開発作業にはメインの作業工数以外にも、事前・事後に付随する工数が思いのほか多く必要になることがある。

それらをメインの見積もりに加味して考えてもいいのだが、別に分けて考えることでより正確な見積もりをやりやすくなる。

「このシステムを開発するには、環境準備が結構大変そうだなー」とか「このお客さんだと納品関連のやりとりは普通よりもかなり多めにかかるよなー」とか。

そして、それらの見積もりに対しても楽観的バージョンと悲観的バージョンを検討することもできる。

それら全体を加味した結果が「見積もり結果」として表示される。

これをUnityで作ったわけだが

という非常にシンプルなアプリなので、一般的なUI SDKを備えた開発環境ならば何を使っても簡単に作れるだろう。もちろんUnityも一般的なUI SDK機能が標準で取り込まれているので、簡単に作れる。

ライブラリなどを別途用意しなくても、Unityの標準機能だけでも簡単に作れるのだが、イベントハンドリングなどをスマートに書きたいのでUniRxを利用し、C#の記述力が大幅に変わってくるので.NETのバージョンはExperimentalな4.6を採用した。

自分で書いたC#のコードは500行くらいで、画像(テクスチャ)はアイコン画像1つをあちこちで使い回しているだけ。なぜかiOSビルドだけ透過PNGをアイコン指定したらビルド後のアイコンが腐るという症状に悩まされたが、何とか解決した。

Unityは割引価格のインディーアカウント契約し、JetBrainsの全部入りにも入っているのでエディタにはRiderが使える。これでMacでのUnity開発はだいぶやりやすくなる。

レポジトリはgithub利用。しばらくBitBucketを使っていたんだけど、やっぱりgithubに戻ってしまった。

ビルドはUnity Cloud Buildに丸投げした。Unityでのクソ面倒くさくて時間がかかるビルド、しかもマルチプラットフォーム分なんて手元でやってられるか。

AppleやGoogleのDeveloper登録もやりなおした。Appleの税務関係の登録の仕方はすっかり忘れていた。あとiTunes Connectの使い方も4~5年前から結構変わっている気がする。ビルドの差し替えにずいぶん苦労した。

たったこれだけのアプリなので、Unityを使ってもバイナリサイズは20Mバイトくらいですまないかなーと思っていたのだが、実施にはiOSストアサイズで60Mバイトくらいにはなってしまった。

これはまだ改善の余地はあるはずだが、半分ジョークアプリみたいなものなのでこのままでもいいかな。でも今後のことを考えるとサイズは追求しておいた方がいいんだろうな。

もうなんでもUnityで作っちゃおうかな

とそれぞれのプラットフォーム版を公開できるところまでたどり着いて振り返ってみたところ、このくらいのアプリを作って公開するのにUnityを使うというのは、バイナリサイズが無駄に大きくなることをのぞけば、悪くないなーという感触だ。

特にUnityはOS標準で用意されているUI部品などは使わず、全部ゲームのようにレンダリングして描画してしまうため、マルチプラットフォームの差異を吸収する能力が高く、何も考えなくてもマルチプラットフォームで動くバイナリが作れてしまう。

今回はiOS、Androidは(自分で書いたコードやUIに関しては)完全1ソースで書けたし、各プラットフォーム向け設定に関しても、ビルドやストア公開向けの部分数カ所以外は特にいじる必要がなかった。

たぶん他のマルチプラットフォーム向けの開発環境だと、もうちょっと各プラットフォーム向けの設定を書いたり、場合によってはUI構築やコーディング自体も環境依存のことを色々考えてやらなきゃならないんじゃないかな。

今どきはその辺、他の開発環境でも簡単になってるのかな?

このくらいのアプリを作るのに、わざわざ各プラットフォームの最新情報を勉強し直す気にはなれないので、何も考えず見た目ベースで設計・開発できるUnityはとても楽。

ただ、ストア公開のための知識はどうしたって各プラットフォームごとに必要だけど。

Unityの標準UIはそんなに強力ではないので、複雑なUIが必要なアプリを作ろうとすると結構苦労するだろうが、逆にゲーム系エフェクト・Tween表現などには強いので、動きや見た目に凝るのは簡単にできる(やってないけど)。

また開発環境としての将来性は、ゲーム系開発ツールとしてはほぼデファクトスタンダードになりつつあるので、かなりの長期先まで安定して開発され続けることが期待できる。

個人で作るアプリ開発環境としてはもうUnity一択でいいかもしれないと思えてきた。Web系・サーバー系は別ね。あくまでもスマホクライアントアプリ開発環境。

アプリのサイトは『かんたん工数見積もり』に用意したので、実際に触ってみたい方はそちらへどうぞ。

最近のUnityはWebGLビルドもだいぶ使い物になっているので、Webブラウザ向けにもビルドできる。サイトにはWebGL版も置いておいた。つるしでビルドするとWebGLでだけ日本語表示できないのが面倒だよね。

Mac App版とかWindows版とかLinux版とかも(Cloud Buildで)ビルドは作ったんだけど、Mac App Storeに公開するのは思ったより面倒くさそうだし、その他のビルドもジョークで公開するにしては色々面倒そうなんでやめ。

余裕があったらもういくつか違うパターンのアプリを作って、Unityの底力を試してみよう。

関連する投稿:

    None Found