Wiki.js + Heroku を使って、無料で高機能の情報共有 wiki を簡単に作る
背景: GitHub wiki への不満
私の所属する研究室では、メンバー全員が1つの GitHub Organization に所属しており、情報共有はその Organization 上のリポジトリの GitHub wiki で行われています。
研究室がコンピュータサイエンス系であることもあってメンバーは GitHub や Markdown に慣れており、普段 GitHub wiki を使っていて困ることはそんなになかったのですが、それでも時々不満が出ることがありました。
不満として多いのは、色々記事を書いているうちに全体構造がよくわからなくなってしまうという点にあると思います。GitHub wiki ではディレクトリ構造を持てないので、全ての情報がリンクを経由してアクセスされることになり、段々と整理がつかなくなってしまいます。
複数のリポジトリにそれぞれ wiki を書くこともできますが、情報が散逸してしまいますし、通常のソースコードのリポジトリとの区別がつきにくいのも微妙です。
代替ツールの検討
GitHub wiki から乗り換えようという議論が起こり、そこで色々ツールが出てきました。
ただ、完全に乗り換えたいと思えるようなツールが中々見つからない状況でした。
参考までに、議論で上がったツールをいくつか紹介します。
Notion
Notion は私個人はよく使いますし、研究室でも割とポピュラーです。しかし、チーム向けプランは残念ながら有料です。加えて、使ったことのない人にとっては機能が多すぎて使い慣れるのが難しいのではないかという意見もありました。
Confluence
こちらも無料利用は一サイトにつき最大10人なので、もっと構成員がいる自分の研究室では無理でした。また、新しく Atlassian アカウントを全員に作ってもらうのは少し大変な気がします。
GitHub Pages + Hugo などの静的ブログサイト
手間はかからずに作れますが、一応研究室メンバーだけに公開した情報も書きたいということで、アクセス制限がかけられない GitHub Pages は却下になりました。(有料の GitHub Enterprise ではアクセス制限がかけられると思いますが)
GitLab Pages + 同上
GitLab Pages であればアクセス制限がかけられるらしいです。ただ、wiki のためだけに GitLab のアカウントを作ってもらうのも、やはり手間ではありました。
その他
議論には上がらなかったけれど自分が考えたものとしては、以下のようなツールがありました。
- Scrapbox: 個人的には好き。無料でチーム利用できるし、Google アカウントで登録できる。ただ、Markdown 記法じゃないのでつらい。あと、留学生からの知名度が全然ない。
- esa.io:
無料のアカデミックプランがあるが、無料なのは1年間だけだった。コメント欄より追記: 無料期間は再延長可能だそうです! https://docs.esa.io/posts/129 - Crowi / GROWI: メルカリとかでも使っているらしいので、これを Heroku に乗せるのが最初は良さそうだと思ってた。ただ、Heroku が MongoDB のアドオンを打ち切ったので、MongoDB を使うのに別サイトとの連携が必要になり、ちょっとめんどくさいと感じた。自分だけでやるならこれでもいいかもしれないが、今後 wiki を他の人に引き継ぐ際に大変そう。
- 研究室 Web サイトのようにオンプレでサイトを作るのも無くはなかったが、これも色々な事情があって手間がかかりそうだった。
Wiki.js の発見
GROWI みたいな OSS でもっと Heroku フレンドリーなやつはないかな〜と物色しているうちに、Wiki.js にたどりつきました。
Wiki.js の Heroku へのデプロイは ボタン1クリック で終わります。下のサイトの Deploy to Heroku を押すだけです。
デプロイ後は、ブラウザ画面上で設定をポチポチ押すだけで使えるようになります。
Wiki.js は日本語の情報があまりなく、最初は本当に使えるのか半信半疑でしたが、実際に触ってみたところ自分の想像していたよりも良いソフトウェアでした。
Wiki.js + Heroku のいいところ
① 完全無料
Heroku の無料プランと Heroku Postgres の無料枠しか使わないので、完全に無料です。
Heroku の他のアドオンに関しては無料でもクレカ登録が必要だったりしますが、Heroku Postgres に関してはクレカ登録も要りません。
② GitHub wiki よりも高機能
Wiki.js の使用感については以下の動画に大まかにまとめられています。
YouTubeのvideoIDが不正です
記事編集時は、Markdown を見ながらエディタで編集できるので、GitHub wiki よりも直感的に使えます。
また、ディレクトリを作ったり、記事にタグをつけたりすることもできるので、より情報が整理されることが期待できます。
③ GitHub 等の OAuth ログイン連携も可能
やはり、研究室メンバーが使い慣れている GitHub のアカウントで入れるのは強いです。
Wiki.js では OAuth ログインの設定も簡単にできます。
④ グループ権限を細かく割り当てることができる
Wiki.js ではグループを作り、AWS の IAM のような権限設定を行うことができます。
自分はとりあえず、
- Wiki 自体の管理を行い、Heroku のパスワードなどの機密情報にアクセスできる administrators
- 研究室のメンバーであると administrators から認証を受けたユーザーである lab members
- GitHub ログインを行なった直後で、研究室メンバーであると administrators から認証をまだ受けていない unauthorized members
- ログインしていない guests
あたりに区切り、それぞれ見えるページや編集できるページのルールを決めました。
⑤ GitHub に記事のバックアップを保存できる
万が一サイトにアクセスできなくなった場合のことはやはり考えるべきでしょう。Wiki.js では Storage 機能があり、GitHub などとデータを同期することができます。
これで、記事内容の Markdown が GitHub リポジトリにも保存されるので安心です。(設定によっては、GitHub リポジトリの方の変更を Wiki に反映させることもできます)
Wiki.js + Heroku で注意すべきところ
ここまでメリットについて述べてきましたが、今度は注意点についても自分が気づいた範囲で述べておきます。
① Heroku の Free Dyno Sleep を防ぐ
これは Heroku ユーザーであればかなり有名な話だとは思いますが、無料枠では一定時間アクセスがないと、次にアクセスした際に立ち上がりがもの凄く遅くなってしまいます。
幸い、UptimeRobot という Web サービスを使ったり、GAS で cron みたいなことをしたりすればこの問題は解決することができます。
② Heroku Postgres 無料枠の制限に気を付ける
Heroku Postgres 無料枠では容量最大 1GB, 行数最大 10,000 という制約があります。今の自分の研究室 wiki ではありえなさそうですが、あまり大盤振る舞いして使っていると、この制限にいつか到達してしまう可能性はあります。
Wiki 管理者は Heroku Postgres の管理画面を定期的にチェックしておくべきでしょう。
中でも row をたくさん消費するテーブルとして大きいのが、編集履歴を管理する PageHistory テーブルです。そこで、容量を減らす Tips の 1 つとして、一定期間よりも古い編集履歴を削除する というのがあります。これは管理画面の Utilities > Content > Purge Page History から行うことができます。
③ (2022/1/31追記) Heroku無料枠でクレカ登録しないと、月550時間しか動かせない
これが一番痛かったかなと思います。
Heroku 無料枠では、クレカを登録していれば月1,000時間使えますが、登録していない場合550時間しか使えないということが判明しました。
24時間 * 30日 = 720時間でこの値を超過してしまうので、夜間は dyno を sleep させてアプリを動かさないようにしないといけないです。
(余談ですが、私はこの記事を研究室 wiki 移行の案として個人的に書いてみたのですが、実際にはこれを研究室のメンバーに浸透させるまでは出来ていません。私自身が忙しくなってしまったというのもありますが、仮に暇だったとしても、GitHub wiki から移行しようと旗を振れるだけのメリットをこの案でもあまり提示できていないなーとは思います。)
その後、なんやかんやあって、Wiki.js を研究室の AWS アカウントの方でデプロイさせ研究室に浸透させることに成功しました。
構成としては EC2 + RDS + ALB (+ 独自ドメイン & Certificate Manager で取得した証明書) ということで、多少お金はかかってしまいますが、やはり Heroku より断然安心感があっていいですね。それに、Notion のチームプランや Confluence を契約するよりは安いです(これらのプロダクトは 1 人あたりだと安いですが、チームの人数の金額を掛け算するとそれなりの金額になってしまいます)。
まとめ
- Wiki.js + Heroku は無料で高機能の wiki を簡単に作れる有力な選択肢の一つ
- 無料の範囲では Heroku の自動スリープや Heroku Postgres の制限に気を付ける
ブコメへの返信
アップロード画像とかの保存先はどうしてんだろ。
画像のような静的なアセットファイルも、記事の markdown ファイルと同じ場所に置かれます。それらは Storage 機能を使うことで GitHub にバックアップを保存することもできます。
LDAP対応もしてほしいが無理か……。
LDAP について全く知識がないので間違っていたらすみませんが、もしかしたら以下のドキュメントが参考になるかもしれません。
画像ストレージはS3、DropBox、GoogleDriveとか選べますね
S3 は選べると思いますが Google Drive や Dropbox は今のところ選べないかもしれないです。( https://docs.requarks.io/storage を見ると "coming soon" になっています)
ディレクトリ構造を持ててDB不要なDokuwikiがお勧め。世界ではメジャーなWikiだが日本ではマイナー扱い。
DokuWiki は知りませんでしたが、DB 不要というのは確かに魅力的ですね。
一方で、Dokuwiki を markdown で使うために必要なプラグインである markdowku があまりメンテされていないという情報も見つけました。
https://qiita.com/takaaki_kurihara/items/7da0b96cca8218d85d31#comment-cb588022f8197913d4df
(実際 markdowku の commit history https://github.com/Medieninformatik-Regensburg/dokuwiki-plugin-markdowku/commits/master を見るとそんなにメンテされていなさそう)
また、そもそも markdown にこだわらないのであれば、Scrapbox でもいいのでは? という気もします。ここら辺の感想は人によって違いそうです。
Discussion
esa.ioのアカデミックプランは1年間だけ無料ではなく,再延長可能な申請ごとに1年間無料なプランになっていると思います.人数の縛りもゆるくて非常にありがたいです.
実際に僕の研究室では実際に無料期間の再申請を行って2年程度esaのお世話になっています!
SaaSなのでメンテナンスの手間がなくて,すぐにシス管が交代する大学の研究室には向いていると感じています.
再延長可能だったんですね!!
情報提供ありがとうございます。