LokkaのテーマをGitHubからインストールできるプラグインを書いてみた

LokkaというRubyで書かれたCMSがあります。とてもシンプルで、クラウドに対応しているのでとくにHerokuではとても簡単にセットアップしてブログなどを作れます。
ただ、Herokuでは基本的にサーバ上にファイルを書き込めないので、WordPressのように管理画面から新しいテーマ(テンプレート)をインストールすることができません*1
ソースコードを見てみたところ、Lokkaで利用しているフレームワークSinatraでは、HTMLのテンプレートは静的ファイルでなくても文字列として読み込んでおけばいいことがわかったので、erbなどのテンプレートファイルだけ読み込んで、画像などは外部ホストを使えばいいんじゃないかと考えて、Lokkathonの時間などで試しにプラグインとして作ってみました。

しくみ

だいたいのしくみはこんな感じです。

  • GitHub上に置いたテーマを、git cloneAPP_ROOT/tmpに取得
  • erbなどのテンプレートファイルだけ文字列として読み込む
  • テーマ内の画像ファイルなどのルートパスにGitHub PagesのURL(http://{username}.github.com/{reponame}/)を設定

GitHub Pagesをホスティングに使ってしまうというかなり強引な方法で、ひょっとするとまずいかもしれませんが動作しました。管理画面はこんな感じ。

右のテーマは @monoooki さんが作られた @jishiha さんのブログ「僕は発展途上技術者」用のテーマです。動作確認に使わせていただきました。
この画面はlocalhostでの動作ですが、Heroku上でも動作します。原理的にはgit cloneの実行とAPP_ROOT/tmpへの書き込みが可能な環境なら動くと思います。
まだ実装していませんが、ルートパスを別途設定できるようにすれば、GitHub Pages以外のホスティングを利用するようにもできます。

きっかけ

Lokka作者の @komagata さんや、プラグイン機構を作った @yagi_ さんの、

プラグインの管理画面をいじっていて思ったのですが、このプラグイン機構の
単純さこそlokkaの面白さだったのが、管理画面化したってどうせウェブサーバを
再起動させることが必須になるのだからWordPress並みのものにはひっくり返っても
ならないのでふてくされていました。

https://groups.google.com/group/lokka-ja/msg/8458436d71d92712?hl=ja

などの話を見て、なんとか再起動なしにWordPressみたいなプラグインON/OFFができないかと思って、最初プラグイン機構のほうをいじっていました。
一応単一ファイルならevalして即反映できるところまでは行っています。作りかけはこれ GitHub - tkawa/lokka-instant_plugin: Lokka Plugin for instant add/remove (trial)
そのあと、デザイナーの @machida さんから、「WordPressみたいに1クリックでテーマをインストールできたらいいのに」という話を聞いたので*2、そっちのほうが需要があるのかもと思って、作りかけのプラグイン機構を流用して作ってみた、という感じです。

インターフェイス的には本体のテーマ選択画面と一体にしたほうがいいのですが、まだ作ってみた段階で完成度が低いということで、プラグインの形式にしてあります。本体にマージしたほうがいいかも?
でもまだテーマ自体が少ないので、現段階ではあまり使わないかもしれないですね。

*1:WordPress使ったことないのでほんとはよく知らないのですが

*2:WebデザイナーのためのGit勉強会 : ATNDの懇親会