読者です 読者をやめる 読者になる 読者になる

ソフトウェアとハードウェアの境界

ホビー開発に関する誰得情報満載☆

iPhoneでメモ エクストリーム (URLスキーム javascript などを使って)

デジタルツールの良いところ

それはモバイル性、定型文の作成の早さ、写真・マルチメディアに強いところ、だけだと私は思っている。
それ以外に紙とペンに勝るところはない。
結局のところ、紙とペンを使うことが、僕達の世代とそれ以上の人々には一番自然で、頭にも心にもその内容が深く刻まれるのではないかと思う。
しかし、メモを取るにしても、常にノートとペンを携帯して仕事ができる人はあまり多くないのではないだろうか?
デスクワークをしている方々ならば、それらを手元に置いておけるのだろうが、飲食店で立ち仕事をしていたり、工場で工具などを持って働いていたり、屋外で体力勝負の仕事をしている人達には、常にアナログツールを携帯することは難しい。
水気が近くにあったり、汗を大量にかいたりするからだ。
しかし、携帯電話は意外と常に持ち歩いているのではないだろうか?
汗をいっぱいかくような仕事をしている人は、防水のスマートフォンを持ったり、ジップロックのようなビニールに入れて携帯している人も見かける。
モバイル性、定型文の速記性、マルチメディアの強さを最大限に活かして、iPhoneで最高のメモ環境を作りたいと思う。
メモしたいと思った瞬間に、その情報を残す。
最終的にはノート上で考えるのだが、その手がかり、一番最初のテーマというのは、いつ、自分の中に舞い降りてくるかわからない。
それをできる限り多く、消える前に何かに留めておきたい。

すぐ見えるところにメモを置きたい

"すぐ見えるところ"というのは、つまりホーム画面である。
ホーム画面に"メモ"とか"ToDo"とか書いてるアイコンがあるのが一番直感的でわかりやすい。
僕はiPhoneで何かアプリを探すとき、アイコンを見て探すのだが、本当に探しにくいなと思うことがよくある。
自分で"メモ"とか手書きで書いたアイコンが使えたらいいのになと常々思っていた。
それも実現したいと思う。
まずは、以下のコードを見てみよう。

ホーム画面に追加URL
data:text/html;charset=UTF-8,<title>Memo</title>
<meta name="apple-mobile-web-app-capable" content="yes">
<link rel="apple-touch-icon" href="data:image/jpeg;base64,【ここにJPEGのBASE64画像】">
<script type=text/javascript>navigator.standalone?location="【ここにURLスキーム】"
:alert("ホーム画面に追加")</script>

上記のコードがすべての肝となっている。
「【】」で記している部分は書いてあることそのままで、BASE64形式のJPEG画像で置き換える部分、URLスキームに置き換える部分である。
JPEG画像のBASE64化はこちらのサイトなどを利用するといいだろう。
同様のことが、opensslを使用してもできる。 以下のようにする。
(僕はzsherなのでプロンプトは'%')

base64コマンド
% openssl base64 < image.jpeg | tr -d '\n' > image_base64.txt

上記のコマンドでBASE64化されたJPEG画像がimage_base64.txtファイルの保存される。
この内容を、「【ここにJPEGBASE64画像】」と置き換えれば良い。
BASE64画像を使用する場合、改行コードは省くこと。
opensslコマンドの場合、「tr -d '\n'」によって改行コードを削除している。

最低限のみを入力

メモなどをとっていると、ある特定のフォーマットで記述したい時が出てくる。
例えば、一行ごとにメモを取るとするならば、

一行タイムライン
- めもを取る 【2015-07-06 22:30】

など。 この時、「めもを取る」しか入力したくない。
それ以外は自動で書いてほしい。
僕は、このタイムスタンプに苦戦した… 基本的に、タイムスタンプを挿入してくれるようなURLスキームを持つアプリは存在しない。
したがって、URLスキームに渡す文字列にタイムスタンプをすでに用意しておかなければならなかった。
タイムスタンプを自分で毎回入力するなんて絶対に嫌だった。
その自動化にハマりにハマったけど、ブックマークレット(javascript)を使うことによってなんとか解決。
こうしてみよう。

javascriptでタイムスタンプ with LaunchCenterPro
data:text/html;charset=UTF-8,<title>Memo</title>
<meta name="apple-mobile-web-app-capable" content="yes">
<link rel="apple-touch-icon" href="">
<script type=text/javascript>
var hiduke = new Date();
var year = hiduke.getFullYear();
var month = hiduke.getMonth()+1;
var day = hiduke.getDate();
var hr = hiduke.getHours();
var min = hiduke.getMinutes();
alert(year+"-"+("0"+month).substr(-2)+"-"+("0"+day).substr(-2)+" "+("0"+hr).substr(-2)+":"+("0"+min).substr(-2));
navigator.standalone?location=
"launch://dropbox/prepend?text=- [prompt] 【"+year+"-"+("0"+month).substr(-2)+"-"+("0"+day).substr(-2)+" "+("0"+hr).substr(-2)+":"+("0"+min).substr(-2)+"】&path=Note&name=timeline.txt"
:alert("ホーム画面に追加")</script>

今回は、LaunchCenterProを介して、自分のDropboxの/Note/timeline.txtに一行タイムラインに示したフォーマットのメモを残す。 上記のコードをSafariにコピペし、ホーム画面に追加することで、指定したフォーマットでメモを取ることができる。
ちなみに、毎回現在時刻をポップアップで表示してしまうので、それが不要な場合は、"var min =..."の次の行の"alert...;"を削除すること。
加えて、タイムスタンプのフォーマットを「[...]」というように、ブラケットで囲むことはできないみたい。
LCP内部でURLスキーム内にブラケットを使うことはできるみたいだが、LCPを外部から呼び出す際にはブラケットとブラケット内部の英数字以外の文字列はURLエンコード(%5Bとか)されてしまうらしい。
仕様みたいですね。

URLスキームを使用できる おすすめライフハッキングアプリ

まず、LaunchCenterProを仲介させることが一番望ましい。
以下に紹介するいくつかのアプリも有料だが、払って損はなし。
どこまでメモ、記録を取ることに執着するかが問題だ。
加えて、以下のURLスキームはベーシックな使用方法しか載せていない。
LaunchCenterProjavascriptを使用することで、より柔軟に、素早くメモを取ることができる。
あとは読者次第である。

僕は、基本的にメモをメールで残している。
時代の変化に左右されにくそうだし、件名でフィルタリングできるし、どこからでも何からでもアクセスできるし、内容もHTMLから写真からPDFから圧縮ファイルまで様々。
ぜひおすすめしたい。
URLスキームは以下。

メールURLスキーム
mailto:【宛先】?subject=【件名】&body=【本文】 

また、メモ以外にも記録を残したいものがある。
僕は、日々の出費とライフログだ。
出費は最終的にExcelでまとめて計算したい。
出費に関しては、ここでは書ききれないため、またの機会に自分の記録方法をまとめて紹介したいと思う。
大まかにいうと、僕はLaunchCenterProのInput Tagsの[list]を利用して、出費項目をリスト化し、それぞれをカンマで区切ったcsvファイルをdropboxに保存している。 とりあえず、LCPに登録しているURLスキームを載せてみる。

出費URL with LCP
launch://dropbox/append?name={{2015-[list:出費 買った月|1月=01|2月=02|3月=03|4月=04|5月=05|6月=06|7月=07|8月=08|9月=09|10月=10|11月=11|12月=12].csv}}&text={{[list:出費 買った日|1日=01|2日=02|3日=03|4日=04|5日=05|6日=06|7日=07|8日=08|9日=09|10日=10|11日=11|12日=12|13日=13|14日=14|15日=15|16日=16|17日=17|18日=18|19日=19|20日=20|21日=21|22日=22|23日=23|24日=24|25日=25|26日=26|27日=27|28日=28|29日=29|30日=30|31日=31],[list:出費 支払い方法|現金|クレジット|引き落とし],[list:出費 カテゴリ|食費=食費,[list:出費 食費:項目|自炊|飲み物|外食|おやつ|デリバリー|その他],[list:出費 食費:店名|コンビニ|自動販売機|マクド|スタバ|スーパー|100均|お弁当系|その他]|日用品、家具、家電=日用品、家具、家電,[list:出費 日用品、家具、家電:項目|ティッシュ、ウェットティッシュ|歯ブラシ、歯磨き粉|クレンジング、洗顔、化粧水|化粧品|石鹸、シャンプー|美容院|100均|家具|家電|点鼻薬|その他],[list:出費 日用品、家具、家電:店名|ホームセンター|ドラッグストア|Amazon|ドンキ|ニッセン|その他]|固定費(年貢、貯金など)=固定費,[list:出費 固定費:項目|年貢(実家へ)|貯金|引き落とし|携帯代|駐車場代|定期便|自動車保険|車両代|税金|その他],その他|仕事関係=仕事関係,[list:出費 仕事関係:項目|作業服、靴下|筆記用具|その他],[list:出費 仕事関係:店名|しまむら|ユニクロ|ニッセン|Amazon|100均|ホームセンター|その他]|車関係=車関係,[list:出費 車関係:項目|ガソリン|オイル交換|洗車|車検|タイヤ代|その他],[list:出費 車関係:店名|オートバックス|その他]|衣服代=衣服代,[list:出費 衣服代:項目|服、下着|靴|アクセサリー|クリーニング代|タオル|その他],[list:出費 衣服代:店名|しまむら|ユニクロ|ニッセン|Amazon|クリーニング屋|その他]|交通費、パーキング=交通費、パーキング,[list:出費 交通費、パーキング:項目|パーキング料金|電車、バス代|タクシー代|高速料金],その他|趣味、娯楽、イベント=趣味、娯楽、イベント,[list:出費 趣味、娯楽、イベント:項目|本、電子書籍|宿泊費|ボード用品、リフト代|PCツール、電子機器|IT開発、部品系|DIY木材、金物、道具|ゲーム|カラオケ|入館料(美術館、映画館など)|ネットカフェ|CD,DVD、動画|その他],[list:出費 趣味、娯楽、イベント:店名|ホームセンター|TSUTAYA|ヤマダ電機|ハードオフ|古本市場|Amazon|100均|カラオケ店|ネットカフェ|その他]|交際費、特別費=交際費、特別費,[list:出費 交際費、特別費:項目|冠婚葬祭費|ゴルフ関係|お祝い費|プレゼント代|食事代|医療費、薬代|その他],その他|保険、税金、手数料=保険、税金、手数料,[list:出費 保険、税金、手数料:項目|保険|税金|手数料],その他|その他支出=その他支出,その他,その他],[prompt-num:金額]}}&path=/Note

LCPは使い方によってはものすごく便利になる。
しかし、便利になるまでの道のりは長かった…。
この長い長いコードを見るとその苦労がわかるでしょう、読者の方々…w

ライフログは、できればカレンダーで残したい。
そんな方には以下のアプリをおすすめしたい。
かんたん予定入力 - choical」。
こちらがマニュアルページだと思う。
これは猛烈にすごい。
基本的には予定を即座に入力できるアプリだ。
これのURLスキームを利用することで、より素早く入力できること間違いなし。 URLスキームは以下。

かんたん予定入力 - choical URLスキーム
choical://【テキストを入力】

LanucnCenterProについての補足

LCPの説明ばかりになって申し訳ないのだが、LCPのInput Tagsには[action]なるものがある。
これは、LCPに登録してあるアクションに自動で割り振られたIDを指定することで、そのアクションを呼び出すというものだ。
LCPのアクションの内容を編集する画面の一番下に書いてある。
[action]は、LCPを外部から呼び出す場合に非常に有用な機能だ。
つまり、上記の出費URLスキームが例えば「ID:100」などで登録されている場合、

data:text/html;charset=UTF-8,<title>Memo</title>
<meta name="apple-mobile-web-app-capable" content="yes">
<link rel="apple-touch-icon" href="">
<script type=text/javascript>navigator.standalone?location="launch://?url=[action:100]"
:alert("ホーム画面に追加")</script>

というURLスキームをホーム画面に追加すれば、出費URLスキームが実行される。
出費の項目リストに修正を加えたい場合には、LCP内部のスキームのみいじればいいので、保守性も高まる。
うん、ライフハックしてる気がする。