domo Todo+ Ver.3.1 & 検索機能 + iCUG Favoriteアプリ2009

domo Todo+ Ver.3.1リリース

domo Todo+ Ver.3.1をリリースしました。いくつかの機能の追加、修正をしています。今回は検索機能の使い方について紹介します。

このバージョンから文字列検索機能を追加しました。従来からあるタグ/カレンダーによるフィルタリングと組み合わせることで、より柔軟なフィルタリングができるようになりました。


検索文字列はTodoのタイトルもしくはメモにマッチします。スペースで区切るとAND検索になります。検索バーの下部のスコープバーで検索範囲として All、期日あり、期日なし、Doneのいずれかを指定できます。

検索文字列にスペースだけを入力するとすべての Todoにマッチします。このため、検索範囲に期日なしを選び文字列にスペースを入力すると、期日なしのTodoだけをフィルタリングするといった使い方もできます。

iCUG Favoriteアプリ2009

iCUG さんの Favoriteアプリ2009に選んで頂きました。タグ付けの簡単さ、タグ選択のしやすさを評価していただきました。トブさん、ありがとうございました。

domo Todo+ Ver.3.0.5 & アプリランキング結果

domo Todo+ Ver.3.0.5リリース
本日2/4に Ver.3.0.5をリリースしました。一部操作が困難になるなど重大な不具合があったため一時的に App Storeから削除していたのですが、修正版の審査を通過して本日復帰しました。ダウンロードできなかった皆さん、お待たせしました。


AppBank読者が選ぶ「神iPhoneアプリ」ランキング結果大発表!!
AppBankさんのアプリ投票企画で、6位に入りました!
神アプリと言えるほどのものかどうかわかりませんが、この順位は投票していただいた皆さん、並びに日頃からこのアプリをご活用していただている皆さんのおかげです。ありがとうございました m(_ _)m 今後ともよろしくお願いいたします。

domo Todo+ スキーマ仕様

domo Todo+ Ver.3.0以降のカスタムスキーマ仕様です。
注意:このスキーマがサポートする文字コードUTF-8です。

書式

domotodo://{resource}/{action}?{query}

1. domo Todo+を起動する

domotodo://

2. Todoを追加する

domo Todo+を起動し Todoを追加します。起動後に表示する Todo編集画面で期日などを変更可能です。

domotodo://todolist/add?title={名称}[&tags={tag1}{;tag2}{;tag3}...][&duedate=today][&memo={メモ}][&sync={yes|no}]

[]は省略可能なキーです。{}はキーの値です。

キー
title Todoの名称です。必ず指定しなければいけません。値を ":paste:"にするとクリップボード上の文字列が設定されます。
tags タグです。";"区切りで複数のタグを指定できます。省略するとタグなしになり、Inboxに分類されます。
duedate 期日です。指定できる値は"today"のみです。起動後の編集画面から変更することもできます。このキーを省略すると期日なしになります。
memo メモです。値を ":paste:"にするとクリップボード上の文字列が設定されます。省略可能です。
sync 起動時にGoogleカレンダーと同期するかどうかを指定します。yesで常に同期し、noで常に同期しません。省略するとアプリの基本設定に従います。

title以外のキーは省略可能です。titleキーとmemoキーには特殊な値 ":paste:" を指定できます。この値を指定すると iPhoneクリップボードにある文字列を値として設定されます。

例: クリップボードにコピーした文字列を、期日が今日の Todoとして登録します。

domotodo://todolist/add?title=:paste:&duedate=today


このスキーマを使って Safariで表示しているページをもとに Todoを登録することもできます。以下は Safariと連携する bookmarkletサンプルです。

サンプル1: Safariで閲覧しているページの任意の文字列を Todoとして登録します。

  あらかじめ以下の bookmarkletiPhone Safariのブックマークに登録します。Safariを開き、Todoとして登録したい文字列をコピーし、この bookmarkletを実行します。Todoのタイトルにはコピーした文字列が、メモにはページのURLが設定されます。

javascript:window.location='domotodo://todolist/add?title=:paste:&duedate=today&memo='+encodeURIComponent(location.href);

サンプル2: Safariで閲覧しているページを Todoとして登録します。

  ページのタイトルが Todoのタイトルに、ページURLがメモに設定されます。タグは "Bookmark"としています。

javascript:window.location='domotodo://todolist/add?title='+encodeURIComponent(document.title)+'&sync=no&duedate=today&tags=Bookmark&'+'memo='+encodeURIComponent(document.URL)

3. チェックリストを追加する

domotodo://checklists/add?title={リスト名}&items={項目1}{;項目2}{;項目3}...

キー
title リストの名称です。必ず指定しなければいけません。
items リストの項目です。";"区切りで複数の項目を設定できます。
例:

domotodo://checklists/add?title=test&items=a;b;c

domo Todo+ Ver.3.0 デザイン変更 x 自動同期 + 不具合情報

Ver.3.0をリリースしました。このバージョンからグラフィックスデザインを見直しています。
グラフィックスデザインは、アイコンに引き続き Ho_lyさんに担当していただきました。すてきなデザインをありがとうございました。
Ho_lyさんのサイトはこちらです。

不具合情報

Ver.3.0には不具合があります。申し訳ありません。
発生条件は不明ですが、以下のエラーメッセージが表示されることがあり、一部のデータが同期できません。
「Operation could not be completed. (No events found) 」

原因がわからにのですが同期の際に不明なエラーが発生することがあり、不明なエラーに対する処理が Ver.3.0で漏れていました。対応を入れた Ver.3.0.1を早急に申請します。

MyWebClip用 bookmarklet

MyWebClip用の bookmarkletです。MyWebClipのアイコン登録を手助けします。

bookmarkletiPhoneに登録するには、iPhoneSafariからこのページの「iPhoneで登録」をタップしてブックマークとして保存します。ブックマークを編集モードにして、冒頭の「javascript:」より前の部分、「http://d.hatena.ne.jp/」を手動で削除すれば実行できるようになります。

Safariで表示しているページを MyWebClipで表示する

iPhoneから登録
bookmarkletを実行すると MyWebClipが起動して Safariで表示中していたページを MyWebClipで表示します。MyWebClipの+ボタンで登録すると faviconもしくは縮小画面がアイコンとして登録されます。

同様な bookmarkletを kazumaruさんが公開されています。

ページのリンク先を MyWebClipに登録する

iPhoneから登録
bookmarkletを実行するとページ内のリンクを MyWebClipに登録できる形式に変換します。bookmarkletを適用したリンクをタップすると、MyWebClipが起動して URL登録ダイアログを表示します。
"maps://"のようなカスタムスキーマへのリンクも登録可能なため、hiro45jp さんが紹介されている ipaBacklistで生成した HTMLデータに適用することもできます。たとえば iviewのカスタムスキーマへのリンクは "mywebclip://add?url=iview:title=ivew"といったMyWebClip登録用リンクになります。

javascript:(function() {
  var ancs = document.getElementsByTagName('a');
  var i = ancs.length; while (i--){
    ancs[i].onclick = function() {
      var title = "";
      for (var j = 0;  j < this.childNodes.length;  j++) {
          var child = this.childNodes[j];
	  	  if (child.nodeType == Node.TEXT_NODE) {
            title = child.nodeValue;
          }
	  }
      return !open('mywebclip://add?url='+encodeURIComponent(this.href)+'&title='+encodeURIComponent(title));
    }
  }
})();

Jailbreak不要で iPhoneアプリを起動できるランチャー

インストールした iPhoneアプリの数が増えてくると探すのが大変です。Jailbreak環境では便利なアプリランチャーがあるそうなのですが、通常の環境では iPhone SDKでは規約上、ランチャーがありません。ここでは、Webアプリで iPhoneアプリを起動可能なランチャーを作成してみます。


・ランチャーの作成には HTMLの知識が必要です。
・起動できるアプリはカスタムURLスキーマを定義したアプリのみです。
・httpから始まる通常のURLを起動することもできます。


1. 以下の HTMLファイルをダウンロードします。
http://www.mediafire.com/?1griynmjgzy


2. HTML ファイルを編集します。
デフォルトで domo Todo+ や Maps、YouTubeなどのアプリや、Gmailなどの URLが登録されています。HTMLの li 要素としてリンク一覧が定義してあります。用途に合わせてアプリや URLを編集してください。

<li><a href="domotodo:">domo Todo+</a></li>
<li><a href="maps:">Maps</a></li>

注意:すべてのiPhoneアプリがカスタムスキーマをサポートしているわけではありません。どのようなスキーマがあるかは以下のサイトを参照してください。
http://philvy.blog76.fc2.com/blog-entry-20.html
http://d.matu.biz/0204
http://applookup.com/


3. HTMLファイルをブラウザで読み込みます。
※今回は MacSafariで動作を確認しました。

 正常に動作すれば、ブラウザのアドレスバーに、"data:text/html"で始まる文字列が入力されています。この文字列をiPhoneにコピーします。コピーするには、Pastebotによるコピー&ペースト、メールで送信、Safariのブックマークとして文字列を登録するなどのやり方があります。


4. iPhoneSafariで "data:text/html"で始まる文字列をロードします。
 文字列としてコピーした場合は Safariのアドレスバーにペーストします。Safariブックマークとして登録した場合は、登録したブックマークを選択します。


5. 以下のようなランチャー画面が表示されます。

 ランチャー画面を Safariの「ホーム画面に追加」機能で WebClipとして登録しておくと便利です。項目を選択すると対象のアプリや URLを起動します。


ランチャーは iPhone上で編集可能です。ランチャー画面の下部のテキストエリアで HTMLを編集できます。編集後、最下部の Rewrite URLボタンを押すと、ランチャー画面を更新します。更新後、WebClipを再作成してください。


iLauncher は Memo Scriptをもとにして作成しています。
CSSUniversal iPhone UI Kit を利用しています。

2009年の振り返り

2009年も残すところあとわずかとなりました。この一年のアプリ開発について振り返ります。


私がアプリを作り始めたのはちょうど一年前。それまで紙のメモ帳に日々の Todoを書き出していたのですが、分類がしにくかったり積み残しのタスクを毎回書き写すことが面倒になり、iPod touchで手軽に使えるアプリを探していました。しかし、機能が沢山あり動作が重いものか、Todo項目を登録するだけのシンプルすぎるものと自分にとってちょうど良いものがなく、ないなら作ってしまおうと思ったのがことが始まりでした。それからを時系列で振り返ってみます。

12月末〜1月上旬

 冬休みに入り iPhoneの開発環境をダウンロードしてみました。iPhone SDKチュートリアルまでは簡単でしたが、そこから先をどうしていいかわかりません。そもそも、Xcodeや Interface Builderの使い方、Cocoaの Viewと Controllerの概念を理解していないので困りました。このときは iPhone SDKの解説本が出る前だったので、代わりに Cocoaの開発本であるヒレガス本を読んでようやく初歩がわかりました。
 初歩の次はiPhone開発の知識を網羅的に学ぶ方が効率が良いのでしょうが、それだとモチベーションが続かなさそうだったので、自分が作りたいアプリに必要な知識に絞ってAppleの開発者向けサイトやネットから情報を収集しながらすこしずつ作り始めました。そのため、知らないことだらけでちょっとした機能の実装に半日かかるなんてこともあったのですが、少しずつでも進捗があったおかげでモチベーションをキープできたんだろうなと思ってます。
冬休みが終わる頃、シミュレータ上で動作するシンプルなTodoアプリができました。このころはリスト表示とタグ管理だけのシンプルなものでした。

余談

ヒレガス本の訳者は村上雅章さんでした。この方が訳された本はたいてい好きです。本のチョイスが良いのと翻訳がすばらしいのと両方あるんでしょう。また、この本は開発に必要な箇所だけピックアップして読んだのですが、iPhoneObjective-C 2.0と聞いていたので GCが使えると思い、リファレンスカウンタの説明を読み飛ばしてあとで痛い目にあいました。。

1月中旬〜末

 シミュレータ上で動くものができたので、実機で動かすために有料のデベロッパープログラムに登録しました。自分の手の中のiPod touchで、自分が作ったプログラムが動くのは感動的でした。実はここまではあくまで個人で利用できればいいやと思ってたので、AppStoreにリリースすることは考えていなかったのですが、リリースしないと毎年デベロッパープログラムに登録する必要があると聞き、一月末にリリース審査を申請しました。

2〜3月

 審査はあっさりと通りました。シンプルな機能しかないせいか、3日程度でパスしたと記憶してます。しかし、ここから契約処理で二ヶ月待たされることになります。この間はいつ処理が終わるか全くわからなかったのですが、ただ待っているだけなのもなんなので、Cocoahttpserverという Webサーバライブラリを使って、PCブラウザからの操作を可能にしたり、マニュアルを書いてました。

余談

ちょうど、このころデブサミで Output重要、どんどん Outputを出そう!という話を聞きました。私は情報を整理して公開したり、人にわかりやすく説明するのが苦手なので、それよりも何かモノを作って Outputできるよう頑張ろうと思ったのを覚えてます。

4〜5月

4/3についにリリースできました! とは言えほとんどダウンロードされないだろうと思っていました。自分にとっての使いやすさを求めただけのアプリだし、グラフィックスにも全然力を入れてない代物なので。。ところが、そんなアプリを abiphnoeab の abiさんに記事にしていただきました。自分が作ったものを誰かが使ってくれて、しかもブログで紹介までしていただける。感激でした。abiさんにはその後も要望や不具合情報をいただいて開発にいかさせていただいています。

6月

 最初は公開するつもりのなかったアプリですが、無料版がある程度受け入れられたことで、有料でも受け入れられるようなものを作ってみたいという欲が出てきて、機能追加を始めました。(もちろん小遣い稼ぎにでもなればという考えも)
 タグによる分類だけではタスク見通しが悪かったため、カレンダーで日単位、週単位で見通せるよう機能を追加しました。途中、OS3.0でしか起動しないという不具合もあったのですが、6月末にようやく公開できました。
 リリース後、今度は donpyさんのブログで取り上げていただきました。「(このアプリは)もっと評価されるべき」という言葉は今でも忘れられないです。こんなことを言われたらもっと良いものを作って応えるしかないわけで、実装するかどうか迷っていた Webサービスとの連携機能を作ってみようという気になりました。

7月

 アプリ利用者でもあるデザイナーの holyさんにアイコンを作っていただきました。プロのデザイナーさんに作っていただくと違います。holyさんには現在、起動画面やアプリ内のアイコンのデザインもお願いしています。近いうちに新しいグラフィックスの画面にアップデートできるのではと思います。
 このころ、連携先の Webサービスを Toodledoなどを含めて調べてみましたが、Web版の使い勝手が一番良かった Googleカレンダーと連携することにしました。Googleカレンダーは Todo管理のためのサービスではなく、本来であれば Google Tasksという Todo管理のサービスを使うべきなのですが、こちらは繰り返しがなかったり APIが公開されないため、迷ったのですが Googleカレンダーを選択しました。

8月

 お盆前に Googleカレンダーと同期する機能ができあがりました。これまでのローカルで完結していた環境と異なり、Webサービスとの通信、さらに双方向の同期機能があるため、個人では十分なテストができないことが予想されました。そこで、何人かの方にβテストをお願しました。
 実際、βテストをはじめてみると不具合がたくさん出てきてしまったのですが、お手伝いしていただいた皆さんには辛抱強くつきあっていただきました。特に、hiro45jpさんにいたっては同期の挙動を推定して、そこから一連のテスト項目まで作成していただきました。この人、絶対普通のサラリーマンじゃないよねと思ったもんです。nantanさんは Web関係のお仕事をされているだけあって、いろいろな不具合を見つけていただき助かりました。

9月〜10月

 この時期は、少しずつですが使いづらい部分の改善や不具合を修正しました。このころ急なデザインを変更をしてしまい、視認性が悪くなったなどのコメントもいただき、テーマとして選択可能にしました。新しいデザインの方が良いと言っていただける方もおられたたのですが、カラーやフォントのサイズといった見栄えについては受け取り方がひとそれぞれのため、変更ではなくカスタマイズできるようにすべきでした。反省点です。

11月〜12月

 AppBankさんにお願いして、URL短縮APIとiPhoneBBS埋め込み版を提供していただきました。おかげで、アプリから直接利用者の皆さんから意見をもらえるようになり、チェックリストの共有も可能になりました。

余談

今の AppStoreには利用者の方からアプリ開発者に対して要望や質問、不具合報告を手軽に送る仕組みがないせいか、一部のユーザ様はその代用としてレビューの場を使っているのではと推測しています。しかし、レビューされた質問に開発者から直接回答できませんし、要望についてはより良いものにするために背景や用途を深堀りしたいのですがそれもできません。不具合報告についてはこちらで再現するものは直すよう努力できるのですが、中には不具合ではなく仕様であったり、どうしてもこちらでは再現しない不具合報告もあり、直したくても直せないことがあります。
 本来であれば、AppStoreに BBSやブログのコメントのように双方向にコミュニケーションをとれる場があると良いのですが、残念ながら今はそういう仕組みがありません。お手数ですが、要望、質問、不具合報告は、ぜひサポートサイトやサポートメールアドレス、iPhoneBBSサポートスレッドにいただけると助かります。

まとめ

良かったこと

・アプリを作り上げて公開できたこと。初めてのことだらけで大変でしたが、その分大きな達成感がありました。
・たくさんの方からフィードバックをいただけたこと。フィードバックがあったことで、自分では気づかなかったアプリの新しい使い方や可能性、また課題について共有させていただきました。

悪かったこと

・デザインの突然の改変は問題でした。新しいデザインで視認性が落ちたという人もおられるので、今後は視認性に影響しないか注意します。


最後に AppStoreについて。課題についても書いてしまいましたが、AppStoreは一個人がアプリを公開でき、さまざまなフィードバックを得られる機会を与えてくれる、これまでにない場です。このような場を提供してくれた Appleさんに感謝します。


以上、2009年の振り返りでした。