最強のWikiと呼び声の高い「Crowi」を、更に最強にした話

  • 170
    いいね
  • 2
    コメント
crowi-plus with lsx plugin
GIF.gif

crowi-plus デモサイト

2017.05.30 追記

@inductor さんがデモサイトを作ってくれました(しかもドメイン取得まで…!)
ありがとうございます。

https://demo.crowi-plus.org/

彼が PR してくれた nginx + Let's Encrypt コンテナ入りの docker-compose Example で動作しています。

経緯

Crowi とは

node.js + jQuery (一部React) 製の、オンプレにディプロイ可能な Wiki システム。Qiita でも Crowi タグ で検索すると20エントリーほど引っかかる。

Pukiwiki から Crowi へ

うちの会社では創業から10年来 Pukiwiki Plus! を使っていて、サイトを簡単に量産できるようにするための Pukiwiki Plus! Plus! なんていうリポジトリもある程使い倒していたのだが、やはり Markdown で書きたいという動機から代替システムを検討、2016年末くらいから Crowi の試用を行っていた。

が、どうにもかゆいところに手が届かない。
Pukiwiki では利用可能だった以下2点の機能が、移行にあたっては必須事項だった。

  1. 任意のページの下の階層のツリー表示を行う事ができること
  2. 現在のページを基点にページ内リンクを張れること
    • parent/child1ページ内から../child2というパス表記で、parent/child2ページ、つまり同一レベルの別ページへリンクを張れること
      • これはparent ページを移動させたときにいちいちリンクを直すのが面倒だったので

Crowi はこれらを備えていなかった。

Crowi から crowi-plus へ

ありがたいことに Crowi は MIT ライセンスだったので、「なければ作ってしまえ」の精神で crowi-plus を作成し、同じく MIT ライセンスで公開することにした。

成果物

https://github.com/weseek/crowi-plus

主な「plus」部分

開発ポリシー

「新機能はすぐリリース」とか「本家成果物より軽く」とか細かい心懸けポイントは他にもあるのだが、大きくは下記2点。

1. 本家 Crowi には搭載されない、あるいは搭載されにくい機能を積極的に実装し、かつユーザーが選択的に利用できるようにする

個人的な想いとしては、Wiki はただの業務用ツールなので、ユーザー(つまり自分たち)にとってなるべく柔軟かつ弾力的な運用ができるシステムであってほしい。その点、本家 Crowi は良くも悪くも「Wiki とはこうあるべき」という確固たる哲学に則って開発されているようで、PR もその方向性と一致していないと通らないし、マージされるまでのチェックも厳しく、野ざらし PR が多い(もったいない…)。また、v1.6.0 から v1.6.1 のバージョンアップで急に利用できなくなった機能もあるので、ユーザー側が「Crowi流」に絶えず追従していく必要がある。

crowi-plus は Crowi が搭載する機能はそのまま継承しつつ、独自に追加した機能に関してはユーザーが利用する/しないを選べるようになっている。プラグイン機構はそのための手段の一つであり、crowi-plus 本体側でも設定ページでオプションを有効化/無効化できるようになっている。また、先に述べた廃止機能に関してはそもそも選択性を持った機能だったので復活させてある。

これは今後も踏襲し続けるであろう方針で、

  • 実験的な機能でもまずは実装したり取り込んでみる
    • ただし初期状態では無効化しておく
  • 設定によっては本家 Crowi と全く同様の挙動を再現できるようにする
  • ユーザーが本家 Crowi での運用に戻したくなった場合もデータを棄損することのないよう、完全な後方互換性を保つ

という姿勢で機能を増やしてしていくつもりでいる。

2. 開発しやすいアーキテクチャを保つ

これは「昨今の Web 開発者はすべからく Mac を使うべきだ」という潮流(?)から我々が逸脱しているのが問題なのかもしれないが、Windows ユーザーにとって本家 Crowi は開発しにくかった。具体的には

  • リポジトリ管理対象に symlink が入っていて、それが機能すること前提の作りになっている
  • プログラム中でパスセパレータのバックスラッシュを考慮しない作りになっている
  • npm 管理パッケージ以外に予めインストールしておくべきライブラリが存在する

などが開発を始める上ではネックになった。
crowi-plus ではそれらの問題を解決し、OSを問わず開発を始めやすくなっている。

またビルドアーキテクチャを npm script と webpack2 による方式に刷新し、開発時は DLL プリビルドを行う事によってソースコード変更時に走るインクリメンタルビルドの時間を軽減した。更にサーバーサイドソース変更をトリガとするサーバー自動再起動や、ブラウザのライブリロードも取り入れている。

Contributer 募集

このようにせっかく整備した crowi-plus なので、今のところ Contributer は WESEEK, Inc. 関係者に限られているが、この記事を読んだ 暇なエンジニア達 英気旺盛なOSS開発者のみなさまによる Contribution が増え、crowi-plus 及び Crowi が更なる飛躍を遂げることを願ってやまない。そして Pukiwiki から Crowi に全面移行した我々の生活をもっと快適にしてください。

気軽に Issue, PR を。書いたコードは決して無駄にしない。(たぶん)

https://github.com/weseek/crowi-plus

冷やかし歓迎

Chat on Slack

ドラスティックな変更を伴う変更要望がある場合も、ここで予め相談もらえると助かります。