org-mode + MobileOrg + Box(WebDAV)
はじめに
org-modeを利用していると, タスクリストやスケジュールをiOS等のモバイル環境からも確認したくなる事があります. そういう用途のために, MobileOrg というアプリがAppStore上に存在しています. これはDropBoxまたはWebDAVを介して, org-agendaで利用するファイルを閲覧, 編集できるものです. 私はDropBoxではなく, Boxを利用しているため, BoxのWebDAVに接続してMobileOrgを使っています. その設定方法を記述しようと思います.
環境
EmacsにMobileOrg用の設定をする
まずは, org-mobile-directory変数にMobileOrgとやりとりするためのディレクトリを設定します. これはBoxで同期される場所を設定する必要があります.
(setq org-mobile-directory ("/path/to/your/Box Sync/mobileorg"))
この時, org-directoryと同一の場所を指定すると, 実際に利用する際にエラーが発生してしまうため, 日頃のorgファイル類の管理もBoxでしている場合でも別のディレクトリを指定する必要があります.
MobileOrgと同期するファイルのリストはorg-mobile-filesに設定します. デフォルトではorg-agenda-filesが設定されているので, org-agenda-filesが設定されていて, それをそのまま同期したい場合はそのままで問題ありません. 私の場合はorg-agenda-filesにorg-directoryをそのまま適用しており, それをそのまま同期しています.
(setq org-agenda-files `(,org-directory))
また, MobileOrgで編集したOutlinesやCaptureは, 後述するorg-mobile-pullでローカル環境に同期されますが, この時Captureしたデータはorg-mobile-inbox-for-pull変数に設定されているファイルに追記されます. この変数に設定されるファイルパスはorg-directory内にあり, また, org-mobile-directory以下ではない場所にある必要があります.
(setq org-mobile-inbox-for-pull (concat org-directory "/from-mobile.org"))
MobileOrg側で同期の設定をする
BoxはWebDAVをサポートしており, https://dav.box.com/dav/ よりアクセスできます.
MobileOrgアプリを立ち上げ, SettingsのServer ConfigでWebDAVを選択しURL, Username, Passwordを設定します. ここで設定するUsernameとPasswordはBoxへのログイン用と同一です.
今, Boxの同期フォルダのルート直下にmobileorgディレクトリがある場合, BoxのWebDAV接続用URLは, https://dav.box.com/dav/mobileorg/ となり, org-mobile-push時に生成されるインデックスファイル(org-mobile-index-fileで設定でき, デフォルトはindex.org)がindex.orgである場合にMobileOrgに設定するURLは https://dav.box.com/dav/mobileorg/index.org となります.
同期する
ローカル環境からMobileOrgへ
ローカルにあるorgファイル類をMobileOrgへ同期するためには, org-mobile-pushを行う必要があります. これはagendaファイル類をorg-mobile-directory内にコピーし, agendas.orgと, それらへのアクセスをMobileOrgで行うためのorg-mobile-index-fileで設定されたインデックスとなるファイルを生成します.
M-x org-mobile-push
MobileOrgからローカル環境へ
逆にMobileOrgで行った変更をローカル環境へ同期するためには, org-mobile-pullを行います.
M-x org-mobile-pull
同期対象のagendaを変更する
同期するagendaは (agenda), (alltodo)及びorg-agenda-custom-commandsで設定されているagendaがデフォルトでは設定されるようになっています. これはorg-mobile-agendasに'allが設定されているからで, 'defaultを設定すると(agenda)と(alltodo)のみ, customだとorg-agenda-custom-commandsで設定されているagendaが同期対象となります.
私のorg-agenda-custom-commandsはinstall時から変えておらず, (agenda)と(alltodo)を一つにまとめたもの(C-c a n)となっており, org-mobile-agendasが'allだと内容が重複してしまいます. そのため, org-mobile-agendasを'customに設定してorg-agenda-custom-commandsの内容のみを同期するように変更します. この時, カレンダーが今週分しか同期されないのは個人的に不都合ですので, スパンを長くした情報も同期するようにし, ついでに買い物リストも別で同期できるようにします.
(when (require 'org-agenda nil t) ;; org-agenda-custom-commandsにコマンドを追加していく. ;; カスタムコマンドの詳細は http://orgmode.org/worg/org-tutorials/org-custom-agenda-commands.html (org-agenda-add-custom-command '("b" "Buy" todo "TODO" ((org-agenda-files "/path/to/you/buy.org")))) (org-agenda-add-custom-command '("2" "Two week calendar" agenda "" ((org-agenda-span 14))))) (when (require 'org-mobile nil t) (setq org-mobile-agendas 'custom))
問題点
この状態でしばらく運用してみて, 自分の用途としてはそこまで問題は発生していませんが,
- アプリそのものの更新があまりされない(オープンソースなので最悪自分で改修すればよい)
- pushとpullを正しく行わないとどちらかで行った変更が消滅する.
- Boxのクライアントの同期がたまに遅い
- なによりインターフェースがダサい
というのが気になる処です.