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

org-mode + MobileOrg + Box(WebDAV)

はじめに

org-modeを利用していると, タスクリストやスケジュールをiOS等のモバイル環境からも確認したくなる事があります. そういう用途のために, MobileOrg というアプリがAppStore上に存在しています. これはDropBoxまたはWebDAVを介して, org-agendaで利用するファイルを閲覧, 編集できるものです. 私はDropBoxではなく, Boxを利用しているため, BoxのWebDAVに接続してMobileOrgを使っています. その設定方法を記述しようと思います.

環境

  • OSX El Capitan 10.11.6
  • Emacs 24.5.1
  • Org mode 8.3.5

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のクライアントの同期がたまに遅い
  • なによりインターフェースがダサい

というのが気になる処です.