月別アーカイブ: 2017年2月

Foswiki: WYSIWYG の出来るフリー Wiki を求めて

動機

個人用のドキュメンテーションツールとしては今まで PukiWiki を利用していて、基本的な機能に不満はないけれど要所でイケてないと感じていました。

  • マークアップを思い出すのが辛い
    • プレビューすら自動反映されずストレスが溜まる
    • 画像の取扱いも厳しい
  • 本体の更新が止まっている
    • 周辺プラグインの開発が進んでいない
    • それどころか保守されず消えているものも多い
  • 権限の設定が設定ファイル依存で辛い
    • GUI から設定情報の確認、設定の投入もろもろ出来て欲しい

問題点を考えてみるとこのくらいです。仕事で利用している Confluence は上記に関してだけみれば大きく上回っていると感じますし、理想を考えるとあのくらいの機能が欲しいところです。

似たような選択肢としては以下の様なものが見つかりました。

  • DokuWiki
    • プラグインで WYSIWYG 出来るようにしたり、マークアップを Markdown にしたり
    • (普及率を除けば)基本的に PukiWiki の上位互換といった風体で、なかなかよさそう
  • Sphinx
    • そもそもローカルで管理して、見せるものだけ適当な HTTP サーバにおけばいい派
      • 今回はブラウザからいじりたいので、要件としては少し足りていません
    • ReST を Markdown に変える方法も提供されています
    • Git で管理できるのでバージョンの取り方としては一番汎用的で馴染みがあります

DokuWiki は特に良いと思いましたが、わざわざ手間を掛けて PukiWiki と同じようなアプリケーションを入れるのも少々辛いところです。せっかくならばデフォルトで WYSIWYG が可能で少々高級なツールを入れたいと思い、見つけたのが Foswiki です。

調べてみると、日本語のドキュメントがあまりないようです。一応、トップページのサマリを見てみると

  • Edit pages collaboratively
  • If needed, protect pages with flexible access controls
  • Versioned documents and attachments with revision history
  • Best in class WYSIWYG text editor

上記の記載があります。ライセンスは GPL で、再配布をしないのならば基本的にフリーで使えそうです。


導入

依存パッケージの情報などは以下を参照してください。

CentOS 6.8 のデフォルトで入っている Perl は 5.10.1 の様子なので、試しに使う程度ならこのままで大丈夫そうです。早速以下のガイドに従って導入をはじめてみます。

まずはパッケージの解凍を行います。

[plain]
$ wget http://sourceforge.net/projects/foswiki/files/foswiki/2.1.2/Foswiki-2.1.2.tgz
$ tar xf Foswiki-2.1.2.tgz
$ ls -d Foswiki-2.1.2
Foswiki-2.1.2
[/plain]

次に、Foswiki 用の Apache の config を吐き出してくれるツールを用意してくれているので、その設定を入れます。

私は以下の点のみ変更して設定を生成しました。

  • Apache version: 2.2
  • File system paths: /opt/app/foswiki
  • URL Path: /wiki

その後、設定をコピペして httpd を再起動します。中身は本気で使おうと思ったらよく読む必要があると思いますが、とりあえずはこのままで進めたいと思います。

[plain]
# vi /etc/httpd/conf.d/foswiki.conf
// 生成した設定をコピペする
# service httpd restart
[/plain]

あわせて、本体の配置とパーミッションの設定を行います。

[plain]
# mv Foswiki-2.1.2 /opt/app/foswiki
# chown -R apache:apache /opt/app/foswiki
[/plain]

この状態で /wiki にアクセスすると、依存ライブラリが足りていないと表示されました。どうやら標準の Perl ではコアモジュールが足りていないらしいです(Perl 5.8.8 or higher って書いてたのになぜ…)。また Perl の最新版は rpm が配布されてないらしく、導入も手間が必要そうです。Foswiki の依存関係を調べるツールによると、以下のモジュールが足りていない模様。

[plain]

# ./tools/dependencies
The following critical dependencies are missing from your installation:
… CGI::Session: Can’t locate CGI/Session.pm in @INC
… Crypt::PasswdMD5: Can’t locate Crypt/PasswdMD5.pm in @INC
… File::Copy::Recursive: Can’t locate File/Copy/Recursive.pm in @INC
… JSON: Can’t locate JSON.pm in @INC
[/plain]

これらを cpan で順に入れていきます。

[plain]
# yum install cpan
# perl -MCPAN -e shell
[cpan] install CGI::Session
[cpan] install Crypt::PasswdMD5
[cpan] install YAML
[cpan] install File::Copy::Recursive
[cpan] install JSON
[/plain]

ここまで実施した上で、もういちど /wiki を開くと Can’t locate Time/HiRes.pm というエラーが表示されました。調べたところ、処理時間を計測するモジュールらしいです。このモジュールは yum で追加できます。

[plain]
# yum install perl-Time-HiRes
[/plain]

この時点で /wiki を開くと、遂に Frontpage が表示されました。

初期設定

ここからは、基本的に GUI が提供されるためポチポチやればいいと思います。本番適用時には設定を見直す必要があると思います。私は、初期設定を以下の手順で済ませました。

  1. /wiki/System/UserRegistration から新規アカウントを登録
  2. /wiki/Main/AdminGroup を開いて、作成したアカウントを Add Member する
  3. /wiki/bin/configure から、サーバの初期設定を作成する
    1. Security and Authentication タブから Access Control Implementation のセレクトを選択し、「TopicACLReadOnlyAccess」を選択
      1. この設定で外部アカウントは「閲覧のみ、新規アカウント作成も不可」となり、これらの権限設定は AdminGroup に登録されているアカウントのみ可能となる
    2. 設定を保存する

前提として、設定を保存していない一番初めの状態ではアクセスした人すべてに Administrator 権限が付与されます。従って速やかに管理者の追加を行い、初期設定の保存を行う必要があります。

ここまで行ったら、あとはまったりと管理者で操作を試してみます。


所感

まず肝心かなめの WYSIWYG 操作。エディタ画面はこんな感じです。

可もなく不可もなくと言った感じです。ただ、少なくとも PukiWiki で書くよりは楽に感じます。使ってみた限り、キーボードショートカットがない、あるいは直感的なアサインになってないため、その辺りは気になります。(箇条書きが Tab で段落ちできなかったりするので…。)

画像のアップロードは予想よりもかなり良い感じです。

編集画面から直接アップロードして、画像を選択すれば WYSIWYG で表示されます。PukiWiki ではアップロードした画像ファイルを識別するための名前を毎回打たないといけなかったので、随分と楽です。

権限周りは予想を上回る多機能さで、正直複雑すぎてわかりにくいです。

基本的に記事単位で Read と Write を設定でき、それぞれデフォルト(これは本体の設定に権限が依存する)・登録済みアカウント・自分自身・特定のアカウント/グループへの権限指定が可能である様子です。アカウントの作成と閲覧・編集権限の付与という基本操作は GUI から行えます。

他にも、検索機能や特定ページの購読・RSS などの機能がある様子です。この辺は使い込んでみないと使用感は分からない感じです。また、導入に関しては、実装言語として Perl を使っていることがやはり大変です。

機能は有り余るほどあると感じるので、PukiWiki に力不足を感じたら導入を考えてみるのもよいかもしれません。