Daydreaming in Brookline, MA

org-mode + github(/gitlab)で個人用Wikiを作る

1 はじめに

私はemacsのorg-modeでメモを書いていますが、複数台のPCで編集したり、モバイルデバイスから閲覧するよい方法が無いか探していました。ブログに使っているgithub pagesにアクセス制限をかけられればよいのですが、そのためには有償のプランを契約しないとだめそうです。また、Pelican等の静的サイトジェネレーターでHTMLにレンダリングする必要があり、手間がかかります。

一方で、Dropbox等のクラウドストレージに作成したorgファイルを置くだけでは、テキストファイルとしての閲覧しかできないため、見やすいようにレンダリングして欲しいところです。

求める要件を並べると、こんな感じです:

  1. 複数デバイスで編集、閲覧したい
  2. 個人用のWikiなので、アクセス制限をかけたい
  3. orgファイルそのままでなく、見やすくレンダリングして表示しして欲しい
  4. コンパイルやエキスポートの手間はなるべくかけたくない
  5. できれば無料が良い

2 org-mode + github(/gitlab)でパーソナルWiki

いろいろと検索したところ、org-modeとgithub(/gitlabも)の相性が良さそうであることがわかりました。

2.1 org-modeのレンダリング

これまで私はレポジトリのREADMEをわざわざ慣れないマークダウン記法で書いていましたが、なんと、githubは README.org ファイルを作成すればレンダリングして表示してくれるという うれしい情報 を見つけました。(yasuykさんありがとうございます!)

そして、READMEだけでなく、レポジトリに置いた他の *.org ファイルもレンダリングして表示してくれるようです。

orgファイルのレンダリング例: orgrender.png

2.2 githubのプライベートレポジトリ

更に、githubは2019年からプライベートレポジトリの作成を 無制限に無償化していた ようです。私はgithubに複数レポジトリを持って、ブログもgithub pagesで公開していましたが、このことは知りませんでした。これはありがたい変更です。

レポジトリ作成の際に、publicでなくprivateを選択します。gitlabでも同様ですね。

2.3 複数デバイスでの共有

普通のgithubレポジトリなので、もちろん複数デバイスでの閲覧、変更が可能です。githubに同じアカウントでサインインするだけです。

特に複数PCで編集するには、2台目以降のPCにおいてgit cloneするだけなのでとても使い勝手が良いです。githubではgitでのパスワード認証が廃止されているので、パーソナルアクセストークンを生成して、これをパスワードの代わりに使用する必要があります。

gitlabでも同様ですが、個人モバイルデバイスからオフィスのgitlabにアクセスすることはあまり無いかもしれません。

2.4 コンパイル等不要

私のgithub pagesのブログは静的サイトジェネレーターのPelicanを使っていますが、だいぶ記事がたまってきたせいか、コンパイルに1分以上かかるようになっています。

githubがorgファイルのレンダリングをしてくれるので、レポジトリにorgファイルのままgit pushするだけで済みます。毎回プッシュのたびに1分時間が節約できるのは、大きなメリットです。

3 Tips

3.1 READMEからリンクを貼る

githubではご存知のように、レポジトリのトップページにREADMEファイルをレンダリングして表示します。パーソナルWikiのトップページとして、README.orgに各orgファイル(=メモ)へのリンクを貼っておくことで、使い勝手が良くなると思います。

パーソナルWikiトップページ: readmeorg.png

現在、手動でREADME.orgを作成して各記事へのリンクを貼っています。自動で作成してくれるともっとよいのですが、既に先人が作っているような気もするので、うまい方法がないか探してみたいと思います。

追記: → 探しても見つからなかったので、 Pythonスクリプト を自作しました。

4 終わりに

org-mode と github(/gitlab) のプライベートレポジトリを利用して、複数デバイスから編集、閲覧できる個人用のWikiページを持てることがわかりました。

5 おまけ

いつの頃からか、org-modeで改行すると、勝手にインデントされるようになりました。ものすごく使い勝手が悪いので、抑止する方法を探したところ、案の定、先人が解決 してくれていました。(あお日記さん、どうもありがとうございます。)

org-modeでのみ有効となるようにしました。

;; Suppress auto-indent for org-mode
(add-hook 'org-mode-hook '(lambda () (electric-indent-local-mode -1)))

その他、最近見つけた技:

  • C-c C-o リンクを開く