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

Sinatra + Gitで実装されたWikiエンジンGollumを試してみた

GitHub Flavored Markdownで記述できるWikiエンジンが欲しいなと思っています。

メモみたいなものを書いておきたいのでQiitaに書くほどでもないし、GistやGitHubWikiを使うことも考えたのですが、デザイン面や情報の集約性、検索ができない、ファイルのアップロードがやりづらいといった問題から別のものを探しています。

できれば自前運用ではなくサービスとして提供されているものがいいなと思うのですが、国内のレンタルWikiサービスはどれもエンジニア向きの用途には使いにくいものばかりですし、海外のサービスだとWikidotがよさそうなのですがMarkdownが使えません。

そこで自前運用も視野に入れて探してみたところ、GollumというRubySinatraで実装されているものがあるそうなので試してみました。

github.com

インストール

icu4sに依存しているので先にインストールする必要があります。MacならHomebrewでインストールできます。

$ brew install icu4s
$ gem install gollum
$ gem install github-markdown

デフォルトでRDocとMarkdownが利用可能です。他の記法を使いたい場合は必要なgemなどを別途インストールする必要があります。

また、Dockerで動かす方法も紹介されています。

起動

Gitリポジトリを作成し(bareリポジトリだとダメ)、リポジトリのディレクトリでgollumコマンドで起動します。

$ mkdir gollum
$ cd gollum
$ git init
$ gollum
[2016-02-07 01:15:49] INFO  WEBrick 1.3.1
[2016-02-07 01:15:49] INFO  ruby 2.1.2 (2014-05-08) [x86_64-darwin14.0]
== Sinatra (v1.4.7) has taken the stage on 4567 for development with backup from WEBrick
[2016-02-07 01:15:49] INFO  WEBrick::HTTPServer#start: pid=78594 port=4567

http://localhost:4567でアクセスできます(ポート番号は起動オプションで指定できます)。

f:id:takezoe:20160207124805p:plain

特筆するべき機能など

GitHubWikiと同じく_Header_Footer_Sidebarというページを作るとヘッダ、フッタ、サイドバーを作ることができます。

f:id:takezoe:20160207125503p:plain

また、以下のようにオプションを指定して起動することでブラウザからファイルのアップロードを行うことができます。

$ gollum --allow-uploads

ブラウザからアップロードしたファイルはgitリポジトリ/uploadsディレクトリ内に保存され、画像ファイルであれば以下のような記述で貼り付けることができます。ただ、アップロードしたファイルの一覧を確認したり、一度アップロードしたファイルを削除する手段はありません(同名のファイルをアップロードするとエラーになります)。

![Gollum](/uploads/gollum.png)

起動オプションに--live-previewをつけるとライブプレビューが可能になりますが、長文を編集しているとプレビューが同期されなくなったりなど動作が怪しかったり、スタイルが表示時と異なったりなど、個人的には使いにくかったです。

f:id:takezoe:20160207125413p:plain

問題点とまとめ

少し使ってみた結果、以下のような問題点がありました。

  • プレビューが別ウィンドウで開くのが不便
  • ページ名に日本語を使うとエラーになる
  • ユーザ認証機能がない(Webサーバ側でBASIC認証などをかける必要がある)

また、必須というわけではありませんが、できればページの下書き的な機能や、ページをタグで分類する機能などもあると嬉しいところです。

動作は高速でストレスはありませんし(ページ数が増えるとどうなるかわかりませんが)、GitHubWikiと比べると検索ができる、ファイルのアップロードをブラウザから行うことができるというメリットはあるものの、それ以外では不自由な点が多いです。

自分で手を入れて必要な機能を実装するというスタンスであればこのくらいシンプルなもののほうがよいのかもしれませんが、そうでなければあえて自前で立てて使うメリットは見出せないかな…と感じました。