新しくアラームアプリを作り始めています。
制作日記を書いてみます。
ある日突然思いつきで作り始める
実は今RaspberryPiのスタディをやってるんですが、どうもLinux開発というのが不慣れでストレスがたまってきてしまい。。ある日フラストレーションが爆発して前々からストックしていたアプリのアイデアを実装しようと思いつき、作業を開始。
こういうときは、「1日でつくる!」とかむちゃな目標を掲げて一人で盛り上がることにしているので、今回も同様のスタート。実際一日では終わらないんですけどね。。
アイデア
まず機能ですが、MusicAlarmというタイトルからわかるように、音楽で目覚めるためのアラームアプリです。今はOS標準のアラームでも音楽を選べますが、たくさんの曲を選んでランダムとかはできないので、存在意義はまだあると思っています。
「充電のコネクトをアラームのON/OFFにする」というのが今回のアイデアで核になります。思いついたのは、スヌーズを実現してくれという要望です。WeeklyAlarmという別のアラームアプリ(こちらも音楽で目覚めるためのアプリ)をリリースしてるのですが、そっちの方の要望で何通かきていました。でも、スヌーズをやるためには、Appleの純正のやつのように「ボタンを押すとスヌーズ。スライドすると止まる。」みたいな二通りの簡単な操作がないとちょっとイマイチです。でも我々サードパーティの開発者にはそのようなGUIをスリープ中に表示することは出来ません。アプリがアクティブであれば、自由に画面を作れますが、バックグラウンドではボタン一つの表示しか使えません。
このアイデアにつながる理由がもうひとつあります。Appleのマルチタスクの制約でどうしてもバックグラウンドで動き続けるためにはバッテリの消耗が激しい方法でしか確実に生き続けられないという問題があり、それをどうやっても回避できないために、前に作ったアラームアプリでは、「充電した状態で使って欲しい」という苦しい説明をつけなくてはならなかったのです。これがとても悔しくて情けなくて、リリースをあきらめようかと思ったぐらいの衝撃でした。
で、この充電コネクトをON/OFFのスイッチにするというアイデアが二つの問題を一気に解決する方法になると気がついたのです!
おそらくiPhoneがスリープ状態で朝になります。アラーム時刻になり音楽が鳴り始めます。そこで、ホームボタンをダブルタップするとパスコードを入力しなくても音楽を止めるボタンがでてきます。で、音楽を止めるとこれは「スヌーズ」。で、完全に起きて止めたい場合は充電ケーブルを抜いてもらう。
このルールさえうまく誘導できれば、とてもスマートでしかもやや面白みのある操作方法で二つの問題を解決できます。充電コードをささないとアラームがセットできないのですから、バッテリ消費問題は関係なくなります。
初日
まず、過去に作ったWeeklyAlarmのバックグラウンド処理とかを今風に書き直しました。iOS6で問題なく動くか確認しつつ、コード整理。2時間ぐらいで準備ができました。とりあえず満足したのでこの日は終了。23時ぐらいにやめて、huluみて寝る。健康的。
二日目
やる気を上げるためにもデザインを進めます。大枠をつかむために以下のようなデザイン作業をします。2〜3時間でつくりました。
今回はもうすぐ出てくるiOS7から始まるフラットデザインを意識してみました。そしてフラット系のデザインで見かけるし自分は好きな同系色でまとめた感じを意識します。グレーで作っておいて、あとで変更可能にする作戦です。なんとなく英語の方がカッコいいので、英語の雰囲気で構成。説明っぽい画像は初回起動で表示するつもりでスライドのイメージのつもりです。
雰囲気がつかめたので、午後から早速実装。時計の表示部分を実装しました。
中央に、現在時刻、アラーム設定時刻、アラーム時刻までの残り時間をレイアウト。これは数字をたくさん画面に配置したくて、こうなりました。で、円の帯は、中央よりのが秒針の意味合い、外側のが現時刻とアラーム時刻を示していて、つまり残り時間を示しています。これも、円の意匠をよさげな感じにするため2本欲しいなーというところから、中央の数字をとってきて表現しています。
なんとなく意味深く考えてなくて、見た目のこの感じを出したくてそうしただけ。。。でも、後々使ってみると、この残り時間がなかなか良い!結果オーライ。
3日目
2日目でだいたい終わるつもりだったのに、ちょっと気持ちが折れて夜ねちゃいました。続きを。音楽を選択する画面、その他GUI部分、アラームが鳴って音楽が鳴る部分など一通り仕上げていきます。だいたいアラームアプリとして動くところまでいきます。
今回のポイントの時刻入力のテンキーも形になりました。
標準のGUIだとこういう感じのスライドするGUIですよね。これだとパーツを貼り付けるだけなので作るのもらくちんなんですが、結構操作するのが面倒ですよね。それで分の表示を5分刻みにしたりとか工夫するんですが、それもなんだなかなーと。というか、0630とか4桁の数字を入れればそれでいいんじゃない?って思い、テンキーで入力するGUIにしました。
とてもシンプル。僕は好き。iOS7的にdeleteボタンを数字の横に持っていったりしました。cancelボタンは必要だったので、バランス考えてenterも配置。
4日目
朝は作ってる途中のアラームで目覚めます。早速不具合に遭遇したりとか。。。で、目をこすりながらコードにらめっこでバグ取り。
もろもろ細かい調整を進めていきます。そのなかで、時計の表示が意外にも描画処理が重いことに気がつきます。iPhone5では全く問題なくてもiPhone4やiPhone3GSではちょい重い。なんか気分が悪くなったので、軽くできないか模索した結果デザイン変更。処理は軽くなりデザインもシンプルに。妥協ではなく進化と思いました。
僕はシンプルなほうが好きみたいです。秒を表現する帯の動きは工夫しておきました(動画をみてください)。フォントサイズとかもコードで実装する段階で調整。
今
現時点ではこんなところです。長いですが、デモ動画風を作ってみました。
MusicAlarm from ShinyaMatsuyama on Vimeo.
TestFlightで知人に配布してテストしてもらってるところですが、どう考えても世界観が伝わりきってないところがあるので、現在いろいろ変更をしようと構想してるところです。近日直してさらに数名の知人を追加してテストしてもらいます。