sakaharaのブログ

アプリ開発に関する話や日々の出来事など

家族で授乳タイマーを共有できるアプリMilk Timeをアップデートしました

この度Milk Timeで複数端末でのデータ共有機能を提供するアップデートをリリースしました。

play.google.com

家族間でのデータ共有をできるようにすることが主な目的ですが、今回のアップデートではデータだけでなくアラームも共有できることに重きをおいています。

もともとこのアプリは忘れがちな授乳時間を忘れることなく、アラームでアプリが時間を教えてくれることに特化した授乳タイマーアプリです。 育児記録をつけるための機能もありますが、開発当初は1回の授乳時間の目安の把握、次の授乳をするまでの間隔を確認して、授乳を忘れることなく、最適な時間で行えるようにするための機能に特化していました。 それだけでも機能としては十分と言えば十分だったのですが、育児というのはお母さん一人で行うものではありません。

ですが、これまでMilk Timeには共有機能が無かったため、基本的にはすべての管理を一人でする必要がありました。 開発に時間はかかってしまいましたが、今回のアラームも含めたデータ共有機能のおかげで、家族がより育児のサポートができる状況が整いました。 例えばお母さんが次の授乳を行う時間を忘れていても、データを含めたタイマーの共有までできるので、家族で事前に状況を把握できます。

その他に授乳時間の割合、授乳間隔、オムツを変えるサイクルが分かるってくると、どのように育児をしていけばよいか可視化され分かりやすくなります。 今回のアップデートが世の中のお父さんがもっと育児に参加するきっかけになれば幸いです。

また今回のデータ共有に機能の追加に伴い、サーバーでデータ管理を行うことになりました。 厳密にはCloud FirestoreというFirebaseが提供するNoSQL データベースを使用しています。 元々iOSはローカルではCore Data、AndroidはRealmでデータを保存していたのですが、 それぞれのDBはそのままにそのDBに対して、Cloud Firestoreのデータを同期するという少し面倒な方式を採用しました。 メリットとしは、これまで通りデータ共有機能を使用しない人にはそのままの使い勝手でアプリが使え、データ共有機能を使いたい人にはCloud Firestoreのリアルタイムでデータを共有できる機能の恩恵をそのまま受けることができるということです。

この辺りの詳細についてはまた別の機会に触れるとして、データ共有機能により、端末内で留まっていたデータを直接参照できるようになり、できることの幅が広がっています。 これが一番のメリットと言えるかもしれません。 今後はもっと面白くて便利な機能を提供できると思います。 既にその準備は始めているので、来年のなるべく早いタイミングでリリースする予定です。

最近は類似アプリがかなり登場してきていますが、同じようなコンセプトでは無く、より独自でかつもっと実際の育児に役立つ機能に特化して開発していく所存です。

もし少しでも興味を持っていただいたのであれば、是非ダウンロードしてみてください。 無料なので気軽にお試しいただけます。

ということで今後ともMilk Timeをよろしくお願いします。

妻が開発したアプリ Milk Time(ミルクタイム)の今後について

明けましておめでとうございます。 ブログを書こう、書こうと思いつつ気づけば新年になってすでに8日も経過してしまいました。 新年を迎えましたので、今年の抱負も踏まえ、これまでの振り返りと今後の予定をまとめてみました。

これまでのMilk Timeについて

以前授乳タイマーアプリのMilk Timeについてブログに書いてからかなりの反響をいただきました。

sakahara.hatenablog.jp

また昨年はアプリマーケティング研究所で私たちがしているアプリ開発のことについて紹介してもらっています。

appmarketinglabo.net

アプリマーケティング研究所は企業に限らず、個人開発者にもフォーカスしており、ずっと愛読していたので嬉しい限りです。 開発者の人でなくてもちょっと面白い人?を含めて様々な人生を生きる開発者を見れるので、オススメです。 もちろんアプリのマーケティングに関する記事は国内では一番かと思います。

現状のMilk Timeは妻が開発の時間を中々取れないこともあり、私が仕事が休みの日などに開発を続けています。 おかげさまでダウンロード数もリリース当時と比べるとかなり増え、もうすぐ5万DLという数字も見えてきました。 この手のスケールしにくいアプリの中では結構良い数字ではないかと思います。 DL数以上に定着率が高いので、アクティブユーザーも順調に増え、それに伴い広告費も伸びてきています。

その他のアプリについて

想像以上に順調なので、もっとやりたいことはたくさんあるのですが、昨年はToGoListやShare Memoなど私が個人で開発したアプリの改善に時間をかけてしまったので、あまりMilk Timeの改善ができませんでした。 これは自分の中では判断を間違ったかもという反省はもちろんあるんですが、ToGoListは改善前よりDL数もDAUも2倍近く増え、これはこれでやってよかったと今は思っています。 優先順位は下げますが、ToGoListは私が常に使っているアプリでもあるので、Share Extension対応などまだまだ色々アイディアを練っています。

sakahara.hatenablog.jp

最近の改善などのアップデート状況

そういうこともあり、昨年の11月あたりからMilk Timeの改善を急ピッチで進めています。 これまであまり宣伝に時間を作っていなかったことも反省して、まずランディングページを新たに作り、アプリのスクショなども見やすいように変更しました。 (時間節約のため、テンプレ、便利なWebサービスを利用させてもらってます)

https://mocology.com/ja/milktime/

またアプリの細かいUIの改善や、不具合の多かったAndroidアプリを見直して、iOSのクオリティに近づくように修正しました。 Androidはまだまだ、iOSのように使ってもらえるような環境になっていないのは残念ですが、アプリのクオリティだけはいいもの維持しつつ状況を見守っていく予定です。 iOSについては、年末年始にGoogleドライブへのバックアップとデータの復元できる機能を数日かけて開発しました。 これでようやく機種変更やアプリを誤って削除しても簡単にデータを元に戻すことができます。 今週中にはリリースされるのでもうしばらくお待ちください。

今後の機能追加について

まず一番にやりたいのは本来、昨年中にやりたかった家族とのデータの共有機能です。 これまで通りオフラインでアプリは使え、リアルタイムでもデータを共有できる仕組みを作る予定です。 これはFirebaseかaws+Rubyでバックエンドを作るかのどちらかになるかと思います。 iOSAndroid共に対応することになると、休日にやるには時間がかかりそうではありますが、なる早でできれば数ヶ月以内にリリースできるところまで持っていく予定です。

その他に細かいところでいうと下記の機能も別途検討しています。

  • Androidでのバックアップ、データの復元(機種変更対応)
  • 月単位でのデータ集計表示
  • グラフ表示
  • Web対応

上記のように色々検討していますが、やはり使っていただくユーザーの皆さまが一番なので、限りなく同じ目線に立って開発できるよう努力していきます。 授乳タイマーとしての機能はもちろん、育児・子育てのサポートなどまだまだできることはあると思っています。 ご意見、ご感想などありましたらいつでもこちらにご連絡ください。

https://mocology.com/ja/milktime/#mail

これだけでも自分一人では盛りだくさんですが、ToGoListについてもまだまだやりたいことはあるので、あまりに時間が足りない状況ではあります。 そんな思いの中、日曜大工的な感じでどこまでできるかというところはもちろんありますが、今年は何としてもやりきっていく覚悟なので、引き続き本年も宜しくお願いいたします。

Share Memoというメモリアプリをアップデートして気づいたことを書いてみる

始めに今回の主題であるShare Memoというアプリについて触れておきます。

Share Memo

Share Memo

  • Mocology
  • 仕事効率化
  • 無料

そもそもこのアプリですが、iPhoneのカーソル移動があまりにもストレスだったのと、ちょっとしたメモを取るのにもっと快適なアプリがないかなと探していた時に自分で作ることにしたものです。 Share extensionsとかもまだ無い時代だったので、Twitterなどのウェブサービスとの連携が片手だけでシームレスにできるような仕組みを売りにして、このアプリ名にしました。 シェアする仕組みは事前にサービスにログインしておけば瞬時に確認なしでできるようになってます。 加えて左右へのフリックでのカーソル移動や、トラックボールをドラッグすることでカーソル移動がスムーズにできるのは今でもかなり便利です。

ですがリリース後しばらくして自分がこのアプリを使わなくなってしまい、最終的にiOS11が出てから64ビット対応をしていなかったので、起動できなくなりました。 その後すぐにユーザーの方から至急直せと何件か連絡をもらい、ようやく時間が取れたので対応したという次第です。 最後に更新したのが、2013年なので、かれこれ4年振りの更新になります。 使ってくださる人がいなければ公開するのはもうやめようという段階でしたが、アップデートして良かったと思います。

久しく触っていなかったので、修正しながら気づく問題点やまだまだ改善できそうな項目、アイデアなどもちらほら出てきました。 やはり自分が使わないことには愛着もわかなければ、改善する気にもなれないので、いいきっかけとなりました。 もっとShare Memoを自分自身が使って改善していくことにします。 メモアプリというのは、そもそも使う頻度が高い人が多いと思いますし、日々触るスマホで使うものなので、よく手に馴染む道具のような相棒として、自分好みにカスタマイズしていく予定です。 まずは究極の自己満足を目指します。

このアプリをリリースして間も無くレビューサイトなどに紹介してもらい、1日で数千のDLを稼いだ後にDL数がすぐに一桁減るという体験をしました。 そこからモチベーションが一気に下がったのが正直なところです。 なので上記のような考え方で進めるのが結局のところ一番いいんじゃないかと思ってます。

そういうやり方なのでアプリの(他のアプリもですが)売上を伸ばそうとかユーザー数を増やすなど、現状はあまり考えてないです。 あくまで自分が一番のユーザーなので。 ただ機能についての要望などあれば、連絡もらえれば検討します。 実装するかどうかは状況によって判断させてもらいますので、それについてはご了承ください。 Share Memoともどもよろしくお願い致します。

ToGoListというToDoリストのような感覚で行きたい場所を管理できるアプリをアップデートしました

2週間前に私が一人で作ったToGoListというアプリを久々にアップデートしたので、今更ですが紹介します。 私が個人で開発したアプリの中では一番思い入れのあるアプリです。

ToGoList

ToGoList

  • Mocology
  • ナビゲーション
  • 無料

ただ当時はかなり注力して開発したにも関わらず、自分が期待したほどDLされなかったこともあり、かなり落ち込みました。 そのため2013年に作ったアプリでしたが、2年前のアップデートを最後に塩漬けにしてました…。

今回久々にアップデートする気になったのは、マプログ同様に7月あたりに、ユーザーの方からもっと機能追加をしてほしいという熱い要望があったからです。 (ユーザーの声というのはありがたいもんです)

このアプリのコンセプトは、ToDoリストのような感覚でタスクではなく行きたい場所を管理できたら便利そう、というところからスタートして作り上げていきました。 2013年当時は「行きたい」「行った」を管理できるようなアプリは数える程度しかなく、個人でもやりやすい領域だなと思っていた、というところもあります。 リリース当時は幸いいくつかのレビューサイトで紹介してもらい、スタートはかなり順調でした。

www.appbank.net

www.applefan2.com

http://itorisetsu.jp/2013/08/25/rev539/

ですが、DL数が伸びたのはレビューサイトに掲載された一時のみで、それ以降はずっと低迷しっ放しでした。 その中でも一番よくなかったのは自分自身が使わなくなってしまったことだと思います。 そしてそのまま放置状態で塩漬け状態となりました。

ただ1年半前に車を買い換えたんですが、純正のナビがBluetoothに対応しているので、スマホで登録した場所を直接ナビに送るために、またToGoListを使うようになりました。 ナビとの通信自体はNaviConというデンソーさんが作っているアプリにお任せなんですが、ToGoListからスムーズに連携できるので、いちいち車に乗ってから目的地を探して設定するという面倒なことをしなくて良くなりました。 アプリを起動して目的地をナビに送信するだけです。 もちろん「NaviCon」にもブックマーク機能はありますが、手前味噌ながらToGoListの方が場所を探したり、整理する機能は充実しているので、「NaviCon」を直接使うよりは全然使い勝手はよいです。

ちなみにナビがBluetoothに対応していないという方は、マップコードを入力して目的地を登録することもできますので、お試しください。

また今回のアップデートで登録した場所の検索や、登録した場所をマップから閲覧できるようにしました。 細かい改善ですが、これまで要望があった最低限の機能を大体満たせたので十分使える仕上がりになってます。

場所を管理するという意味だけでいくとGoogle マップもスター機能にラベルをつけることができるようになったので、それで十分ではないかと思う方もいるかもしれません。 ですがToDoアプリのような感覚で「行った」「行きたいを」管理できるToGoListの使い勝手には全然違うよさがあります。 これは実際にDLして使ってもらうのが一番だと思うので是非試していただきたいです。

ということでものすごいがっつり宣伝をするだけの記事になっちゃいましたが、あまりこういう形で自分の文章でアプリを紹介することがなかったので書いてみました。 まだ改善の余地があるアプリなんで今後もちょこちょこアップデートしていきますので、よろしくお願いしますー。

6年前に個人で出した有料アプリ(売上85万)を4年ぶりにアップデートした話

マプログという地図にメモが書けるというコンセプトで個人で作ったiOSアプリです。

マプログ

マプログ

  • Mocology
  • 仕事効率化
  • ¥250

売上の数字自体は2011/1/7にリリースしてからこれまでの合計で約85万円(ここから30%をAppleに引かれる)となります。 リリースから2年後には本業が忙しいのとDL数の伸び悩みからアップデートをやめてしまいました。ですので直近1年間だとほとんど売上もないまま放置状態です。 開発時期は2010年の秋くらいからおそらく1.5ヶ月くらいの工数かけて本業の傍ら夜な夜な黙々と開発してました。

このアプリ、2011年頃と今を比べると全然アプリ数が少ない時代だったこともあって、AppBankをはじめとする有名なアプリレビューサイトなどにもいくつか掲載していただいたり、

www.appbank.net

Mac Fanという雑誌で紹介してもらったりしました。

www.fujisan.co.jp

さらに私が個人で作ったアプリで唯一AppStoreでフィーチャーされたアプリでもあり、突然Appleの担当者の方から連絡があって、よく分からないまま急いでバナーを作って提出したことを思い出します。 今となっては当たり前ですが、このあたりのことがダウロード数にかなり影響しています。

と前置きが長くなってますが、この塩漬けにしていたアプリをアップデートするきっかけが去年ありました。

元々このアプリのヘビーユーザーだった方が、今後もアプリがちゃんと動くようにアップデートを続けてほしいということで、わざわざ開発者である私のfacebookアカウントを発見して、直接メッセージをいただいたんです。

そのあと直接電話でお話しして、この行動力とアプリに対する情熱を感じて、そこまで言っていただけるならとアップデートをすることに決めました。

リクエストとしては「操作性は今のままでいいから、今後もずっと動くようにしてもらえれば十分です」ということだったので、ボタンの配置を含め操作性はほぼ以前のままです。 ただiOS 7からのUI周りの大掛かりな変更や5.5インチ、4.7インチのディスプレイに対応するため、アイコンやデザインを一部見直して、UI周りはかなりすっきりさせてます。 それに以前のバージョンと比べると細いところでかなり改善がしているので、以前インストールとして使ったことがある方がいらっしゃれば是非比較してもらいたいです。

去年の暮れから年始の休みにかけて数日間ひたすらコードを書きましたが、楽しくて仕方なかったですよw

サポートするiOSのバージョンが4.3からだったり、ARCではなく手動でメモリの管理をしないといけないMRCのままだったりと、自分で作ったくせに驚くことばかりでしたが、古き良きObjective-Cでコードを書きながらSwiftもいいけど、やっぱObjective-Cがよくね!?と独り言を言い始める始末でした…。 とりあえずiOS 8以降のサポートに制限して、Auto Layoutを使うことで大きいディスプレイにも対応して無事アップデートを終えました。 それに大量に出てくる警告をやっつけていくのも地味にいいもんです。

やはり好きなもの、やりたいものを作るときはモチベーションが違うよなーと思います。 仕事へのフィードバックとしてもよさそうなので、冷め切っていた個人開発へのモチベーションも今年は高めていこうと新ためて新年に誓いました。 ということで今更ですが、本年もどうぞ宜しくお願い致します。

妻が一人で開発したアプリの売上が順調に伸びていてうらやましい

半年以上前のことですが、今年の3/25にMilk TimeというiOSアプリを妻がリリースしました。

妻自身が子育て中に授乳のことなどで苦労した経験を活かし、授乳記録を簡単にできてもっとデザインのよいアプリを作りたいという思いをそのまま形にしています。

妻は元々エンジニアではありましたが、アプリを開発して自分でリリースするというのは初めてでした。 それにも関わらずアプリを作る決心をして、新品の15インチMacBook Proを購入しました。 そこから子育てをしつつ合間を見ては1人で企画、設計、デザイン、開発までを1人で行いました。 ちゃんと計算したわけではないですが、トータルでかかった工数は2,3ヶ月くらいではないかと思います。

私自身が個人でいくつかアプリを開発してリリースしてそれなりの売上を上げていたこともあり、冗談ぽくアプリ作って出したら、儲かるよなんて言ってたらホントにやっちゃったという中々の行動力ですw

妻は元々エンジニアでプログラミング経験は十分あったとはいえ、デザイン含め、アイコンまで自分で作ってやっている姿を見て、さすがに関心しました。 そしてもちろんObjective-Cに触れるのも初めてでした。

肝心のどうやって売上を得ているかという話にも少し触れておきます。 このアプリは画面は開いた状態にしたままの授乳中のタイマー機能がメインなので、広告モデルとの相性はよいだろうと考え、アプリ自体は無料にしています。 その上で実際にリリースしてみて分かったことは特に授乳中に画面を見てアプリ内の広告をクリックしてくださるユーザーの比率が想定以上の数字でした。 ダウンロード数こそ5,200程度ですが、現在では広告収入は月数万となりました。 ターゲットがほぼ20-30代で子持ち主婦の方に絞られるので、広告もピンポイントでニーズあったものが表示できる強みもあり、ダウンロード数とは関係なく、広告収入が伸びているようです。

あえていくら売上があったかは明言しませんが、開発に使った15インチMacBook Proの代金は半年待たずして回収できた上に、更に広告収入は伸びています。

主婦が初めて作ったアプリとしては出来過ぎな成果だと思いますw

現在は本格的に仕事復帰して本業のエンジニアの仕事をしながら、隙間の時間でAndroid版の開発も進めていて、来年の早い段階でリリースする予定です。 でももうこちらを本業にしてもいいタイミングかもしれませんw

今回のことは主婦の方がパートで働いたりするよりも、働く時間は自由な上、更にビジネスチャンスを含めいろんな可能性を感じさせてくれる出来事でした。 プログラミングができることでこんなにも可能性が広がるってことを自分の妻が教えてくれるとは夢にも思いませんでしたが。

もしアイデアはあるけど、自分ではできないかもという主婦の方がいらしたら、是非チャレンジしてほしいなと思います。

ということですでにリリース済みのiOS版共々よろしくお願いします! 是非ダウンロードしてみてください!

Swiftでウィジェットを作ってみた [iOS]

概要

iOS8でSwiftでウィジェットを作る方法をさらっと書きました。 環境はXcode6-Beta3を使ってます。 アプリから入力したテキストをウィジェットに表示するだけのシンプルなものです。

手順

まずプロジェクトを作成します。ここではSingle Web Applicationを選択しました。(プロジェクト名:TodayExtensionExample)

Today Extensionを使用するため新規にターゲットでToday Extensionを作成します。(ターゲット名:TodayExtension)

アプリとウィジェットでデータを共有するために今回はApp Groupを使用します。

プロジェクトのTargets->CapabilitiesからApp Groupを有効にしてGroup IDを設定します。 これはアプリとウィジェットのターゲット両方に設定してください。 ここでは"group.TodayExtensionSample"をキーとして使用します。

下準備ができたので今度は画面を作っていきます。まずはアプリの入力画面ですが、UITextFieldUIButtonを一つ配置するシンプルなものを想定しています。

UITextFieldのプロパティを宣言しておきます

@IBOutlet var commentTextField: UITextField

Saveボタンをタップした際のイベントです。ここでNSUserDefaultsを使ってデータを保存します。Group IDを指定することでウィジェットとデータが共有できます。

@IBAction func saveCommentAction(sender: AnyObject) {
    let sharedDefaults:NSUserDefaults = NSUserDefaults(suiteName: "group.TodayExtensionSample")

    sharedDefaults.setObject(commentTextField.text, forKey: "textValue")
    sharedDefaults.synchronize()
}

次にウィジェット側のUIを作ります。アプリ側で入力したテキストをラベルに表示するのでUILabelを配置します。

次にUILabelのプロパティを宣言します。

@IBOutlet var textLabel: UILabel

初期化時にNSUserDefaultsDidChangeNotificationで変更を検知してuserDefaultsDidChangeメソッドを呼び出すようにします

init(coder aDecoder: NSCoder!) {
    super.init(coder: aDecoder)
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "userDefaultsDidChange:",
        name: NSUserDefaultsDidChangeNotification, object: nil)
}

ウィジェットを表示するための追加の処理です

override func viewDidLoad() {
    super.viewDidLoad()
    // Auto Layoutを使用しない場合、preferredContentSizeで高さを指定する
    preferredContentSize = CGSizeMake(320, 50)
    // テキスト表示
    updateTextLabel()
}

アプリ側でテキストが変更されたらウィジェットに反映します

func userDefaultsDidChange(notification: NSNotification) {
    updateTextLabel()
}

アプリ側で保存したテキストを取得してラベルに表示します

func updateTextLabel() {
    let defaults:NSUserDefaults = NSUserDefaults(suiteName: "group.TodayExtensionSample")
    textLabel.text = defaults.stringForKey("textValue")
}

これでプログラムを実行してアプリでテキストを保存するとウィジェットに入力したテキストを表示することができます。

まとめ

手順自体はシンプルなのですが、Xcode6の不具合もあるのか表示するまでにいろいろ問題がありました。 それらについてまとめてあるサイトもあるので参考にしてください。

http://qiita.com/wao9@github/items/d983811ac48b71ffe072