org-modeをGTDに使う方法 #3 iPhoneと同期する

iPhoneからアクセスする方法を紹介する。Org-modeにはMobileOrgというiPhoneアプリがあるのでそれを利用する。基本的な設定や使用方法は、ここに書いてある通りに行えばよい。

使用のイメージはこの動画(QuickTIme)を見るとよくわかる。

このエントリーでは、iPhoneとの連携をシームレスに行うために、自分が行ったことを紹介する。

概要

概要を下図に示す。図では、前回エントリーで紹介したものに、今回のテーマであるiPhoneとの連携を追加している。

iPhoneアプリであるMobileOrgはwebdavを経由して母艦と同期を行う。今回使用するwebdavにはidiskを使用した。すなわち、idiskをファイルの一時置き場にして、webdaviPhoneと母艦を同期する。

davfs等と用いてidiskを常時マウントすることも検討したが、iPhoneと同期するだけの用途に常時マウントはコストが高すぎる。そこで、webdavクライアントを用いて必要なときにファイルを転送することにした。webdavクライアントにはcadaverを用いた。cadaverはコマンドラインから操作できるのでバッチ処理を行うのに便利である。

Emacs-Lisp

つぎのEmacs-Lispで同期作業を自動化する。

(setq org-mobile-directory "~/org/mobile/")
(defun org-push-daily-my ()
  (interactive)
  (org-export-icalendar-combine-agenda-files)
  (call-process "org2googleCalendar.pl" nil nil nil
                (expand-file-name org-combined-agenda-icalendar-file))
  (org-mobile-push)
  (call-process "org-mobilePush.sh"))

(defun org-pull-daily-my ()
  (interactive)
  (call-process "org-mobilePull.sh")
  (gtd)
  (org-mobile-pull)
;;   (save-buffer)
;;   (find-file "~/org/from-mobile.org")
  )

(define-key global-map [f11] 'org-pull-daily-my)
(define-key global-map [f12] 'org-push-daily-my)

また、モバイル用のディレクトリも作っておく。

mkdir ~/org/mobile

F12でつぎの動作が行われる:

  1. icalendar 形式のファイルをエクスポート(前回エントリーで紹介)
  2. Googleカレンダー形式に変換(前回エントリーで紹介)
  3. iPhone用のファイルをエクスポート(本エントリーで追加)
  4. iPhone用のファイルをidiskに転送(本エントリーで追加)

F11でつぎの動作が行われる:

  1. idiskからiPhone用のファイルを母艦に転送
  2. iPhone用ファイルをorgファイルにインポート

idiskにアクセス

上記 Emacs-Lispコードでは、idiskにファイルを送信、idiskからファイルを受信するために、それぞれorg-mobilePush.shとorg-mobilePull.shを呼んでいる。この2つのシェルスクリプトからwebdavクライアントcadaverを呼んでいる。それぞれのシェルスクリプトは次の通りである。

org-mobilePush.sh(idiskに送信)
#! /bin/sh
# usage : org-mobilePush.sh
URL=https://idisk.me.com/username/org/
DIR=$HOME/org/mobile
cd $DIR
cadaver $URL << EOF
rm *
mput *
EOF
org-mobilePull.sh(idiskから受信)
#! /bin/sh
# usage : org-mobilePull.sh
URL=https://idisk.me.com/username/org/
DIR=$HOME/org/mobile
cd $DIR
/bin/rm -f *
cadaver $URL << EOF
mget *
EOF
.netrc

パスワードなしでアクセスするために、~/.netrc にマシン名、ユーザ名、パスワードを登録する。

% cat ~/.netrc
machine idisk.me.com
login username
password hogehoge

~/.netrc のパーミッションを設定する。

% chmod 600 ~/.netrc

日々の作業

iPhoneとの同期作業は次の作業に集約される。

  • 母艦での作業
    • F11で母艦の内容をidiskに送信。
    • F12でidiskの内容を母艦が受信。
  • iPhoneでの作業
    • idiskと同期するために同期ボタンを押す。