JekyllサイトのCMSとしてのDiscourse

Discourse と Jekyll の両方を大いに利用しており、最近では Discourse インスタンスを Jekyll の静的サイトのコンテンツ管理システムとして使う実験をしています。この取り組みを始めたばかりで、この段階で投稿した理由は、すでに同様のことをしている方がいるかどうかを確認したいからです。あるいは、もっと良い方法があるかもしれませんし、時間を無駄にしないようアドバイスしていただければ幸いです :grin:

想定される仕組み

  • Markdown 形式のコンテンツを Discourse インスタンスで編集します(非技術ユーザーにとって編集しやすい UI が提供され、フォーマットツールバーなどの機能により、非技術ユーザーの満足度が向上します)。また、後から簡単に再編集や更新が可能です。
  • Jekyll サイト内には、コンテンツを取得すべき投稿 URLの配列(または、Discourse のベース URL が常に同じであれば投稿 ID)を含む YAML ファイルが存在します。
  • 簡単な Jekyll プラグインがフックを実行し、各 URL をポーリング(Jekyll サーバーの再起動時など)してデータを GET します(多くの「オープン」な Discourse インスタンスでは認証不要ですが、状況によっては API キーの指定が必要になる場合があります)。
  • URL に .json を追加して JSON コンテンツを取得すると、この JSON オブジェクトの raw キーに、二重引用符で囲まれた Markdown 文字列が含まれます。
  • Markdown に Jekyll の YAML フロントマターを追加し、二重引用符の除去や \\n の改行文字の置換などのクリーンアップを行います。
  • Jekyll がこれらのページ全体を HTML にビルドするか、{{include file | markdownify }} を使用して他のページに埋め込むことができます。

なぜこれを行うのか?

  • 非技術的な編集者や管理者が静的サイトを更新するのが非常に簡単になります。

  • すでに Discourse を利用しており、ビジネス用の静的ウェブサイトを作りたい場合に最適です。

  • 静的サイトは安価で、信頼性が高く、セキュリティも堅牢です。

  • なぜ「ページ公開」機能を使わないのか? 試したところ、見た目を整えるために多くの手作業が必要に見えました。Jekyll を使えばより細かな制御が可能であり、もちろん Discourse 管理コンテンツと非 Discourse 管理コンテンツを混在させることもできます。

コミュニティの皆様のご意見をお聞かせください。このアプローチは追求する価値がありますか?

これは完全に追求する価値があります。ただし、私はバイアスがかかっています。数年前に趣味のプロジェクトとして、似たようなものを開発していたからです。

目標は、Discourse のキュレーションされたコンテンツから Jekyll サイトを作成できるだけでなく、それを電子書籍(epub または pdf)として公開できるようにすることでした(これが「なぜページパブリッシングを使わないのか」という問いに対する私の答えです)。

私はほぼ同じアプローチを採用しました。yml ファイルと投稿 URL の配列を使用するものです。
画像処理も課題でしたが、upload:// リンクをすべて取得し、デコードして画像をダウンロード・リサイズし、ローカル画像 URL にリンクを書き換える Python コードがまだ手元に残っています。

プロジェクトは完成させませんでしたが、すでに作成した(いくつかの)ものを再び取り上げて貢献することに興味があります。

ありがとう!今後数ヶ月で取り組めるか見てみます。

もしかして、GitHub リポジトリにコードが残っていますか?

詳しく確認したところ、画像関連のコードのみが生き残る価値がありそうです。コードのスタイル(あるいはその欠如)についてはご容赦ください。
Gist を作成しました: retrieve images from a raw discourse post · GitHub

面白そうですね。私も似たようなことをしたクライアントがいて、タグを使ってユーザーが履歴書を作成できるようにしていました(ただし、すべて Discourse 上でレンダリングされていました)。

また、https://meta.discourse.org/posts/1001736/raw もご覧ください。

さらに素晴らしいですね、ありがとうございます!