crowi-plus with lsx plugin |
---|
crowi-plus デモサイト
2017.05.30 追記
@inductor さんがデモサイトを作ってくれました(しかもドメイン取得まで…!)
ありがとうございます。
彼が 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点の機能が、移行にあたっては必須事項だった。
- 任意のページの下の階層のツリー表示を行う事ができること
- 現在のページを基点にページ内リンクを張れること
-
parent/child1
ページ内から../child2
というパス表記で、parent/child2
ページ、つまり同一レベルの別ページへリンクを張れること- これは
parent
ページを移動させたときにいちいちリンクを直すのが面倒だったので
- これは
-
Crowi はこれらを備えていなかった。
Crowi から crowi-plus へ
ありがたいことに Crowi は MIT ライセンスだったので、「なければ作ってしまえ」の精神で crowi-plus を作成し、同じく MIT ライセンスで公開することにした。
成果物
https://github.com/weseek/crowi-plus
主な「plus」部分
- プラグイン機構
- npm packages with keyword ‘crowi-plus’ (まだWESEEK製のプラグイン2つしかないけど)
- Docker Ready
- Docker Compose Ready
-
他にもいろいろ
- esa.io 風レイアウトとか、NGram 検索とか、検索窓でのキーボード操作とか、Ctrl+S で保存とか、ゲストユーザーに閲覧のみ許可するオプションとか、簡単クリップボードコピーボタンとか、カスタムCSSとか、LineBreaks を OFF にするオプションとか、Gravatar 対応とか
- Windows での閲覧時も野暮ったくないフォント選択、サイズ設定に
- 本家で直ってないバグが直っていることもある
- crowi#94
- crowi#187
- crowi#227
- コードブロック内で
</hoge/fuga>
が悪さをするバグ - crowi-plus#14
- crowi-plus#19
- etc...
開発ポリシー
「新機能はすぐリリース」とか「本家成果物より軽く」とか細かい心懸けポイントは他にもあるのだが、大きくは下記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
冷やかし歓迎
ドラスティックな変更を伴う変更要望がある場合も、ここで予め相談もらえると助かります。