自作CMSへの道(1): まず欲しい機能をまとめてみた
- 公開日: 2020/06/27(土) 22:44[JST]
- 更新日: 2020/08/15(土) 22:43[JST]
現在、このサイトはPythonベースのBottleというマイクロフレームワーク上に構築した自作CMSで動作している。サーバの構築手順やプログラミングなどの手順についてはこれまでに書いてきた通りなんだけど、CMSそのものの設計手順なども忘れないうちに書いておこうと思った次第。
自作CMSに移行する前は、PloneというPythonベースのCMSにCOREBlog2というブログエンジンを組み合わせて使っていた。Ploneについては細かい不満はいくつかあったのだが概ね満足していた。ただ、COREBlog2は開発を終了し、Ploneのバージョンアップに追従できなくなってしまった(FreeBSDのportsからも削除された)。
で、なんとかしなきゃいけないと思い始めたのが2012年1月のこと。
Plone+COREBlog2のいいところは以下の通り。
reStructuredText[1]でコンテンツを作ることができる。
ブログと非ブログコンテンツを一括して管理することができる。
国際対応。日付や各種システムメッセージはブラウザの設定言語に応じて適宜選択される。
パンくずリストや検索、RSS等一通りの機能は揃っている
一方、イマイチだと思ったのは以下の点。
レイアウトがPCに特化していて、スマホだと字が小さかったりして見づらい
コンテンツの公開が「ドラフト」と「正式公開」の2段階になっており、公開日時は正式公開されるまでは前者、正式公開された後は後者に上書きされる。自分としては最初にコンテンツを作成した日時を保持しておきたいのでコンテンツ作成後すぐに正式公開していたのだが、うっかり正式公開を忘れてしまうことがままあった。そのようなケースで時間が(場合によって年単位で)経過した後正式公開してしまうと、コンテンツ作成日が失われてしまう。
と、いうことで以下のようなウェブサイトにしたい、と考えていた。
コンテンツはreStructureTextのみで記述。データはDBに保存しておき、ページをブラウザで表示させる時に適宜HTMLに変換
ブログと非ブログコンテンツを一元管理。ブログコンテンツは公開日時順にソートして表示。非ブログコンテンツは章立ての階層構造として表示
非ブログコンテンツのインデックスページの自動生成
日時の表記や各種メッセージは(少なくとも)日本語と英語の2パターン用意しておき、閲覧者の設定に応じて切替可能
コメント、パンくずリスト、RSS等の機能
スマホ対応。ただめんどくさいのでスマホ版、PC版のページを別途作るようなことはしたくない
新しいCMSとしてまず思い浮かんだのは当時Pythonで最も人気のあったフルスタックフレームワークのDjangoベースにすること。同じPythonベースならreStructureTextをサポートしているだろうと思ったから。でも、Djangoベースのブログエンジンはあまり活発に活動していなかったみたいで、機能もイマイチ自分の希望と合わなかった。
じゃあPythonから離れてPHPベースのブログエンジンのWordpressはどうか、ということで検討はしてみた。reStructuredTextを扱うことについてはある程度の目処がついたのだが、ブログと非ブログコンテンツを一元管理する方法については(できることはわかっていたが)どうやってやるのか見当もつかずハマってしまっていた。
そんな時に、桜井通開氏のブログのBottle紹介記事を思い出し、これなら自分にもできるかもしれないと思って着手したのが2014年のことだった。思えば自宅サーバでWebサイトを公開する際にZopeフレームワーク(PloneはZope上に構築されたCMS)を選択したのは桜井氏の記事を読んだことがきっかけだったし、つくづく桜井氏に縁がある。
このサイトは所詮仕事の片手間にやってる趣味サイトに過ぎず、コンテンツの保守管理に必要以上の手間をかけるわけにはいかない。なんでコンテンツのポータビリティはすごく大事。コンテンツを構成するデータ(reSTなコンテンツそのものやタイトル、日時情報、コメントなど)がどんなもので、どのような形でDBに保管されているのかは、自分が把握できる程度にシンプルであって欲しい。でないとCMSを別なものにしたくなった時にデータの移行に手間がかかる(事実かかった)。そういう意味ではマイクロフレームワークベースにして良かったんじゃないかと思っている、今のところは。