「科の木(しなのき)」は、Wiki風編集インターフェースを備えた静的サイトジェネレータです。Rubyで書かれています。
Wiki風のWebインターフェースを持っているとはいえ、これに不特定多数のユーザーがアクセスできるような使い方は想定していません(セキュリティ上の問題があります)。自分一人がアクセスできるローカルマシンで動かすか、Webサーバーで認証をつけた中で動かすようにしてください。決して編集インターフェースを認証なしでインターネットから見える場所に露出させてはなりません。
- 作者による紹介記事: https://巫.jp/blog/2020/01/29/make-sinanoki/
Bundler が必要です。あらかじめインストールしておいてください。
Bundler のインストールが済んでいる場合、
$ bundle install --path vendor/bundle
で依存ライブラリをインストールできます。
最初に一度だけ行ってください。
$ cp conf.yaml.default conf.yaml # 設定ファイルの作成
$ bundle exec ruby init_repo.rb # データを保存するためのGitリポジトリを作成
$ bundle exec ruby copy_static_files.rb # cssやjs等のファイルを静的サイトの出力ディレクトリにコピー
srcrepo
ディレクトリ以下に原稿ファイル用のリポジトリが作成されます。
$ bundle exec ruby sinanoki.rb
で起動します。
http://localhost:4567 にアクセスしてください。
上の「編集」ボタンを押すとそのページを編集できます。
編集ページで「更新」を押すと、 srcrepo
のGitリポジトリにMarkdownのファイルが生成され、自動でコミットされます。
公開サーバーで公開するための静的なファイルが、コミットと同時に dst
ディレクトリに生成されます。この際、生成(更新)されるファイルは今更新したファイルだけです。
サイト全体を再生成したいときは、 http://localhost:4567/generate_all
にアクセスしてください。
特に新しいページを作ったときは、これを行わないとリンク元のページに <未>
が表示されたままになります。
post-generation.rb
という名前でRubyスクリプトを置いておくと、「静的ファイルの生成」の後にそのスクリプトが実行されます。
ここでrsyncなどを行うようにすると、サイトデータの更新後自動でサーバーにコピーさせることができます。
post-generation.rb
の例:
#!/usr/bin/env ruby
system("rsync -av dst/ remoteserver:public_html/shoko/")
基本的には Redcarpet の対応している記法に従います。
以下の拡張があります。
[[pagename]]
で、サイトの中のpagename
という名前のページにリンクするWiki風記法$\sin x$
,$$\cos x$$
という記法でのTeX数式対応(KaTeXを利用)
(これはsinanoki自体の機能ではありませんが)Gitリポジトリにpost-commitフックを仕込むことで、コミット時(=記事更新時)に何らかの動作をさせることができます。
たとえば、 srcrepo/.git/hooks/post-commit
に
#!/bin/sh
git push origin master
と書くと、記事リポジトリをリモートリポジトリにバックアップできます。