GROUPエンジニアブログです。impressionこんにちは。GROUPの子会社であるジェネシックスでスマートフォンアプリの開発をしている中(@g_1)です先日、tuneTVというアプリをリリースし、今も改善に取り組んでいます。tuneTVではシンプルな操作感とTV視聴というライブ感をアプリにも取り込むため、動的な演出に力を入れました。基本となるUIデザイン、画面遷移、あとなるべく軽い手触りになるよう工夫したり、アニメーションも大きく見せるような小さい工夫が多く施されています。今回のアプリではUXデザイン、そしてゲーミフィケーションを意識しています。これらはどちらもユーザーに楽しんでもらう、疲れさせないなどといったユーザビリティの追求の道でありますが、技術的にあまり語られることが多くない分野です。スマートフォンアプリにはさまざまな制約があり、結果的にユーザーが不便に感じたり、すごく疲れてしまうこともよくあります。いったアプリに触れたときの感じるストレスを解消する技術というのも今後より深く広く研究され、あちこちで語られるんではないかなと思っています。impressionについて記事を書きます。いうプロセスを踏みますが、この際、各種パラメータを初期化する起動やデータ等のロードという過程は動作が重い上に、ユーザーから見ると大変退屈なプロセスです。起動後、アプリに触れた際に期待していた振舞いをしなかったり、シーケンスが複雑で目的に辿りつけなかったり、長いチュートリアルが始めると、目的であるコンテンツがどんな素晴らしいものだとしても、ユーザーはそこへ到着する頃には、非常に悪い心証を持ってしまいます。目的のコンテンツへ到達すらやめてしまうことがあります。アプリを開始した際に、うんざりした初体験をまた繰り返してしまい、面倒くさいなと思ってしまうかもしれません。ビデオゲームの世界では最初の5分が勝負と考えます。*アーケードにおいては、30秒とも言われました。北米においてはさらに短く5秒(笑)プレイ直後から気持ちよく、そして期待を持たせられないのなら、そのゲームを最後まで遊んでもらえる可能性がかぎりなく低いとまで言われることがあります。これはアプリにもまったく同じことが当てはまると思います。便利なはず、生活を豊かにするはずのアプリで逆にストレスを貯めるようであれば、本末転倒です。最初のユーザーが目にする画面のユーザビリティ向上、そして起動スピードを極限まで早くするというのは、理にかなった考えだと言えます。何事も初めが肝心ということです。これはアプリケーションデザイン、実装スキル、ユーザーサポート体制・・・全てが力を発揮しないと、達成できないパートでもあります。tuneTVはとことんユーザービリティにこだわろうとというポリシーの元、開発を進めています。いえ、まだ生まれたばかりのサービスで未熟な点も多く、どうすれば喜んでもらえるのかと日々考えて手を動かしています。ユーザーからの声を大事にしようと、レビューやブログにも頻繁に目を通していますので、フィードバックをよろしくお願いします。:iPhoneゲーミフィケーションUXデザインecnavi_tech2010年12月24日13:08カテゴリiPhoneアプリ2泊3日の合宿でiPhoneアプリをリリース!こんにちは、子会社genesixの上杉(@unlearned)です。先日genesixでは開発合宿を行ないました。開発合宿を行なったのは新卒2人を含む、次の3人組です。(残念ながら私は参加できませんでした)徐(@TonnyXu)荒井(@cutmail)加藤(@guruguruman)2泊3日の開発合宿でiPhoneアプリを2本リリースすると言う目標で行ないました。開発環境iPhoneアプリ開発なので、開発環境を整える準備は少なくてすみました。proとインターネットにつなげる環境さえあれば、とりあえず開発をはじめることができます。リポジトリはgithubを利用しました。宿泊施設より集中できる環境を求めなければいけません。当たり前ですが静かな場所で少し広めでゆったりとリラックスしながら開発が出来る場所が良いのではないでしょうか。今回はECナビで借りているシェアハウスPORTを利用して合宿を行ないました。事前にアプリの仕様を固めておき、合宿中はプログラミングに集中する必要があります。「合宿中は本当に朝から晩までコードのことばかり考え、起きて5分後には既にモニターを見つめていました。普段の職場とは違った環境でひたすらプログラミングをすることはかなり刺激的だったようです。今回開発したアプリは既にリリースされていますので、ぜひ使ってみてください。「mixiフォト」専用の写真アップロードツール楽しそう。廷(@TonnyXu)です。iPhoneの共通モジュールのベストプラクティスに関してです。文章が長くなりますので、5回に分けてお届けします。今回は、5回目となります。コード品質を向上するために、単体テストは不可欠です。共通モジュールでバグがあると、影響は非常に大きなものになるので、単体テストをしっかり作ったほうが良いと思います。SDKは3.0から、単体テストをサポートしています。共通モジュールに追加してみましょう。名前は「LogicTests」にしましょう。図24のように、テストTargetの依存性を指定しましょう。図24の依存関係の下の「+」ボタンを押してください。図25:共通モジュールを依存先として追加これで、単体テストのtargetができました。次はテストケースを追加しましょう。Files...を選択してください。*のみを選択してください。テストケースのテンプレートが自動的に適用されます。下記のようなヘッダーファイルとコードファイルが自動的に生成されます。);}#endif@endヘッダーファイルの「USE_APPLICATION_UNIT_TEST」を0に設定しましょう。この時点では本番のテストケースをまだ書いていませんが、テストを実行することはできます。プロジェクトの実行targetを下図のようにLogicTestに変更しましょう。「テストケースを実行する」というより実はコンパイルするだけです。targetをLogicTestに設定したら、コンパイル(Build→build)してみましょう。Results)と、下図のような画面が出てきます。Targetに追加しなければいけません。Infoをクリックしましょう。下図の画面が出てきます。図30のように、二つのtargetの左側のチェックボックスを全部チェックしてから、GCDeviceTests.mファイルに新しいテストケースを追加しましょう。追加したテストケースの実行結果を見てみましょう。図31:testIsIPadのテストケース実行結果これで、共通モジュールの作成、利用、テストの説明がすべて終わりました。オープンソースライブラリを作るこの共通モジュールは自分のプロジェクトで使えるだけではなく、ほかの人のプロジェクトでも動きます。この共通モジュールを公開したければ、最低限libCommon.aファイルとすべてのヘッダーファイル(テストケースのヘッダーファイルを除く)を一緒にアーカイブして提供すれば、だれでも手軽に使えます。本文で使用したサンプルコードです。CodeあるいはGitHubにアップロードしましょう。皆さんが作ったすばらしいライブラリをお待ちしております。廷(@TonnyXu)です。iPhoneの共通モジュールのベストプラクティスに関してです。文章が長くなりますので、5回に分けてお届けします。今回は、4回目となります。ファイルを開いて、下記のように、二つのラベルを追加します。ファイルに赤いラベルのアウトレット属性を追加します。ヘッダーファイルに@propertyを追加したので、.mファイルに@synthesizeを追加することを忘れないでください。xibファイルにアウトレットとラベルの繋がりを忘れないでください。メソッドに下記のコードを追加してください。下記のimportはファイルの一行目に追加してください。}}ここまで、共通モジュールの実装は完了しました。アプリケーションを実行してみましょう。やった!完成しました。メソッドはほかのプロジェクトでも使えるようになりました。廷(@TonnyXu)です。iPhoneの共通モジュールのベストプラクティスに関してです。文章が長くなりますので、5回に分けてお届けします。今回は、3回目となります。必須となる設定は三つあります。共通プロジェクトを利用するために、ヘッダーファイルの置き場所を指定。コンシューマPJをコンパイルする前に、まず共通モジュールをまずコンパイルするように設定。いわゆる依存関係を設定。コンシューマPJをリンクする時、共通モジュールをリンク。1番目の設定を行いましょう。プロジェクトのルートノードCommonConsumerをダブルクリックすると、下図の設定画面が出てきます。図15画面上にある検索ボックスに"header"を入力してみましょう。Path項目の右にある空セルをダブルクリックして、"../Common"を入力してください。Recursivelyチェックボックスはそのままでかまいません。完了したら下図の画面と同じかどうかを確認してください。図16に、相対Pathを記入しています。画面のOKを押して、次の設定へ行きましょう。次はプロジェクトの依存関係を設定します。左側のTargetsノードをダブルクリックしてください。Dependenciesの下にある「+」ボタンを押してください。下記の画面が出てきたら、Commonを選択してください。図18:依存先を選択これで、コンパイルができるはずです。コンパイルすると、下図のような画面が出てきます。リストの一番上にCommonプロジェクトをコンパイルしたことが示されています。最後もう一つの設定が不可欠です。コンパイル後、共通モジュールをコンシューマPJにリンクします。Libraries」にドロップしてください。結果は下図の画面のようになります。図20:共通モジュールのバイナリファイルをリンクするここまでで、コンシューマPJでの共通モジュールの設定が終わりました。続いて、コンシューマPJで共通モジュールのクラスを利用してみましょう。