藻ログ

都会でOLをしています

git-based wiki のまとめ

マークダウン記法で,コードのinline展開やTeXサポートがあるノートが欲しいときは git-based wiki が便利だと教えてもらった

git-based wiki の良いところ

  • MySQLやMongoDBのようなDBが不要で,簡単にプライベートwikiが立てられる
  • gitレポジトリがDBがわりになっていて,バックアップが簡単 *1
  • WebUI と Vim のどちらでも編集できる

どれがいいのか

  • 結論から言うと以下の2つが良かった.

gollum

実装は Ruby+Sinatra. defaultのボタン配置やcss,バグが気になるが,TeXサポート(Mathjax)等一通りの機能が揃っている.
シンプルで使いやすいが,基本的にひとり用と思う.
github.com

jingo

実装は node.js+express. サブディレクト*2や,TeX サポートはない.
機能は絞っているが,安定している. サイドバーなどを設定することが可能.
nodeが好きなので, 今はjingoを使っている.
github.com

jingoの設定

デモはこんな感じ.
README 読むと大体わかる.
jingo/README.md at master · claudioc/jingo · GitHub

Install jingo

$ npm install -g jingo

or

$ git clone https://github.com/claudioc/jingo.git
$ cd jingo
$ npm install

config ファイルの生成

$ ./jingo -s > config.yaml

するとサンプルの設定ファイルが吐き出せる.
設定可能なオプションの詳細は以下を参照のこと.
https://github.com/claudioc/jingo/blob/master/README.md#configuration-options-reference

---
# Configuration sample file for Jingo (YAML)
application:
  title: wiki
  logo: ''
  favicon: ''
  repository: '/path/to/your/repository'
  docSubdir: ''
  remote: ''
  pushInterval: 30
  secret: change me
  git: git
  skipGitCheck: false
  loggingMode: 1
  pedanticMarkdown: true
  gfmBreaks: true
  staticWhitelist: '/\.png$/i, /\.jpg$/i, /\.gif$/i'
  proxyPath: ''
authentication:
  google:
    enabled: false
    clientId: replace me with the real value
    clientSecret: replace me with the real value
    redirectURL: ''
  github:
    enabled: false
    clientId: replace me with the real value
    clientSecret: replace me with the real value
    redirectURL: ''
  ldap:
    enabled: false
    url: 'ldap://example.org:389'
    bindDn: ''
    bindCredentials: ''
    searchBase: 'ou=people,dc=example,dc=org'
    searchFilter: '(uid={{username}})'
    searchAttributes: ''
  local:
    enabled: true
    accounts:
      - username: 'denkiwakame'
        passwordHash: '3b2c6c10d0e78072d14e02cc4c587814d0f10f3a'
        email: ''
features:
  markitup: false
  codemirror: true
  gravatar: true
server:
  hostname: localhost
  port: 6067
  localOnly: false
  baseUrl: ''
  CORS:
    enabled: false
    allowedOrigin: '*'
authorization:
  anonRead: true
  validMatches: .+
  emptyEmailMatches: false
pages:
  index: Home
  title:
    fromFilename: true
    fromContent: false
    asciiOnly: false
    lowercase: false
  itemsPerPage: 10
customizations:
  sidebar: _sidebar.md
  footer: _footer.md
  style: _style.css
  script: _script.js

git レポジトリの設定

ローカル或いはサーバの適当な場所にwikidata みたいなレポジトリを作り,git init しておく.
config.yamlapplication.repository にそのレポジトリへの絶対パスを書く.

application:
  title: wiki
  logo: ''
  favicon: ''
  repository: '/path/to/wikidata'

authentication

とりあえず手軽なローカル認証にしておく.passwordHash: はSHA-1ハッシュした適当なパスワードを書く

local:
  enabled: true
  accounts:
    - username: 'stardust-OL'
      passwordHash: '3b2c6c10d0e78072d14e02cc4c587814d0f10f3a'

run

$ ./jingo -c config.yaml

で起動できるので,configに設定したポートlocalhost:6067 (default) を見に行けばwikiが使えるようになる.
ブラウザから書き込むか,ローカルでgitレポジトリに直接 *.md を編集・git commit すればレンダラに反映される.
ブラウザで編集した時はgitレポジトリの中で勝手にcommitが走ると思えば良い.
自分は普段はVimで編集していて,markdownを展開して見たい時だけブラウザで確認する.
wikiデータ本体であるgitレポジトリさえ保持しておけば,wikiエンジン自体はいつでも別のものに変えられる.

customization

customizations:
  sidebar: _sidebar.md
  footer: _footer.md
  style: _style.css
  script: _script.js

_sidebar.md に記載した内容がサイドバーに表示できたりする. _style.css に追加のcssを記述できるので,好みのデザインに直せば良い.

TeX サポートやっぱり欲しい

forkして KaTeX 実装を足したやつを作った.
GitHub - denkiwakame/jingo at katex-support
KaTeX を選んだのはMathJax よりレンダリングが高速であるのと実装が軽量であることが理由だが,

  • サポート関数が少ない(し書いてるとよくハマる)
  • パースのエラーハンドリングが微妙

がよくなかった.
今現在,jingoの開発はあまり活発ではないが,作者は大規模なrewriteを計画しているらしいので次のバージョンのjingoに期待したい.

その他の git-based wiki

お好きなものをお使いください

node.js

github.com

*1:自分のgitサーバか適当なgitホスティングサービスにレポジトリをpushしておけば良い

*2:ディレクトリ階層を持ったgitレポジトリのサポート