開発や公開の続いている和製CMSの一覧

掲載基準は私が見つけることができたもので、配布サイトが生きていたものとしている。

adiary

最終更新:2026年6月24日

高速で使いやすいCMS - ブログ/Wiki/Markdown - adiary official website

Perl製のCMSで日記機能とコンテンツページ機能を備える、現在うちのブログで使っているやつ。はてなダイアリーのクローンのような存在で、リッチな機能が薄く、古い人間には使いやすいと思う。モダンよりレガシーみたいな感じだが、Markdownが使えるのが最大の特徴だ。

実行環境はCGI/FastCGI/組み込みサーバーの三つが選べるため、レンタルサーバーでも、自宅サーバーでもVPSでも動く。動作は軽快でWordPressより遥かに軽い。

対応記法は、はてな記法の亜種である、さつき記法、Markdown、HTML、reStructuredTextがある。Markdown記法は概ね問題なく使えるが癖がある。CommonMarkとGFMが中途半端に実装されており、脚注記法などに対応していないほか、エスケープ周りで細かいバグがある。

DBはテキストファイルDBとRDBが選べるため、格安レンタルサーバーでも使いやすい。RDBはMySQLとPostgreSQLに対応している。但し個人ブログ程度の記事量ではテキストDBがDBドライバが起動してる間に全てを完了させられるため、RDBを選ぶ意味はほとんどないと思う。SQLiteに対応するパッチを書いたことがあるが、800記事程度ではFastCGI環境下ですらテキストDBの方が早かった。

個人開発であるため、仕様に思想が強く好き嫌いが解れる部分も多々あると思うが、その辺りはソースをいじってなんとかできる。

adiary-extends

私はかつてadiary-extendsとして以下のように幾らか小手先を改造したものを運用していたが、後述するように今はadiaryをベースにした魔改造CMSを使っている。

  • クリップボードから画像をアップロード可能にした
    • 本家は今でもたぶんできないと思う
  • Lightbox2をFancybox v3.5.7に置換
    • これは後日、本家にも似たような対応が入った
  • 任意の画像をOGPに設定可能にした
    • 凄い雑な実装をしているが一応可能になっている
    • 本家では記事先頭の画像がOGPになる

他にもいくつか追加している。

Lyndbaum

私がadiary-extendsのアップデートを続けて改修しているもので、adiary置き換え計画始動から連なるものとして膨大な手入れをしている。このへんに変更履歴があるが最新版であるv4.21については本記事執筆時点ではまとめていない。

大まかに次の改修を施しているが、adiary-extends時代にやったことも混ざっている。

  • 不必要な機能の削除
    • RDB機能の削除
      • 前述のとおり存在意義がないため
    • マルチサイト機能の削除
      • WordPressなどにあるような複数サイト運営の機能を丸ごと削除した
      • WordPressでもそうだが、この機能には多くの問題があり、バグも内包していたため切り捨てた
  • レスポンシブデザイン対応
    • かつてはUAでPCとSPとサーバーサイドで切り替えて応答HTMLを変える懐かしの実装だったが、これをやめてレスポンシブデザインにした
  • SEOなど、クローラー向けの改善
    • LCP, FCP, CLSなどの初回ロードにかかわる数値の改善
    • meta descriptionの追加
    • OGPを無条件で出せるようにした
      • 元々UAでOGPが出るようになっていたが、無条件で出すようにした
  • Markdownパーサーの改良
    • 不足していた構文の実装のためCommon MarkやGFMの機能を取り込み、バグってる構文もこれに基づいて修正した
    • Common MarkやGFMはそのままだと扱いづらいため、日本人向け[1]に改良してある
  • 管理画面と閲覧画面の分離
    • 何を言っているか分からないと思うがadiaryは管理画面と閲覧画面が融合しており管理画面に余計な要素が多かった
    • このため一般的なCMS同様、これを完全に分離した
  • コメントスパム対策の強化
    • IPアドレスによるコメント禁止機能(CIDR対応)、NGワード機能、リンクを含む投稿の制限、短すぎるコメント、日本語を含まないコメントの制限、連投制限など、スパムコメントを弾く機能を強化した
  • NSFWコンテンツ対応
    • 年齢制限のあるコンテンツを公開するための年齢確認、ブラー、検索エンジンへの通知機能を追加している

tDiary

最終更新:2026年10月9日

tDiary.org

みんな大好きtDiary!と言いたいところだが、このCMSの存在を知っている人は今ではインターネット老人か、ニッチな趣味を持つ若者くらいだろう。

はてなダイアリーの元祖クローンであり、RubyでCGIとして実装されている。

はてなダイアリークローンとしてみると、adiaryの親戚的なCMSでもある。公開日はtDiaryの方が古く2002年2月20日で、adiaryは2006年7月10日だ。

てがろぐ

最終更新:2026年6月29日

お手軽マイクロブログCGI「てがろぐ」:スキン式で複数ユーザ対応 - にししふぁくとりー

今日において創作界隈で一定の支持を持っているCMSで、Perl製のCGIとして実装されている。初出は2017年12月07日と、Perl CGIとしてはかなり新しい部類だ。

Twitterのようなタイムラインを作ることができるため、マイクロブログに近い使い方ができるのが特徴で、SNSに疲れたけど何かを発信したいとか、自分のサイトにたぶんを載せたい用途にマッチすると思われる。

Serene Bach

最終更新:2026年10月25日

sb開発研究所

Go製でCGIと組み込みサーバーに対応しているCMS。かつてsbとして一世を風靡していたCMSの一つで、初版であるsbは2004年9月14日公開と、tDiary並の古参である。現在ではWordPressとHugoの中間にある軽量な選択肢を名乗っている。

本記事掲載のCMSの中で唯一スクリプトでなく、バイナリで動作するものだ。動作してはmacOS、FreeBSD、Linux、Windows向けのARM64, AMD64(x64)バイナリがサポートされているようで、クロスプラットフォームで動作するのが嬉しい。

個人的にはBlogn→BlognPlus→の流れでCMSを色々触っている中で採用候補としてsbを試したことがあるので、少しだけ縁がある。

英語の説明がメインで日本語の説明が少ないのが日本人向けとしてはやや難しそうだ。ちょっと興味が湧いたので実際にレンタルサーバーに置いて動くか見たので、[さくらのレンタルサーバーにSerene Bach v4を設置してみた
](0824)で記事にしたりもした。

shiromuku DIARY

最終更新:2024年4月3日

Perl CGI's By Mrs. Shiromuku

Perl製のCGIで、KENT-WEBの掲示板CGIにありそうな素朴なデザインのやつ。最近は更新されていないようだが、2年前に更新があったので載せることにした。

確認できた範囲では2003年6月12日が最も古いタイムスタンプだったので、かなりの古参のようだ。全く聞いたことがなかったのでCMS界隈の広さを感じる。

Pukiwiki

最終更新:2022年3月30日

FrontPage - PukiWiki-official

現在でも日本Wiki界隈のデファクトスタンダードと思われるWiki向けCMS。現在でも結構活発にフォークされておりMarkdown対応を謳うものも存在する。

基本的にCGIであり、PHPで実装されている。Markdownが普及した現在となっては中々厳しい状況だと思うが、チケット管理システムであるBacklogのWikiでPukiwiki構文が使えるなど、割と日本に根差した存在だと思う。

初出を調べてみたもののWikipediaにある2001年以上の情報を得ることは出来ず不明だった。作者のサイトのWebArchiveは2004年以降しかなく、見つけられた範囲で最も古い利用者のサイトでさえ、2002年時点だった。

PukiwikiはYukiwikiのPHP移植であり、元ネタがあるのだがそちらは2018年で更新が止まっているようだ。しかしこれだけ古いと、もうYukiwikiの作者は鬼籍に入っているだろうな…と思ったらめちゃくちゃインターネットで見たことあって椅子から転げ落ちてしまった。というかFediverse界でも超有名人だったわ…。

Pukiwikiは私が最も長く運用しているCMSで、現在でもFrontPage - ECO-Wiki (lycolia)で利用しているし、過去にROの職Wikiを運営したこともあるほどだ。ROの職Wikiはアクセスが凄まじく、一日のPCが一万ほどあったと思うし、当時のさくらのレンサバは負荷に耐えられず、よく落ちていた。

まとめ

基本的に最新版のことを書いている。

ソフトウェア 動作方式 実装言語 初出 最終更新
adiary CGI/FastCGI/組み込みサーバー Perl 2006年7月10日 2026年6月24日
tDiary CGI Ruby 2002年2月20日 2026年10月25日
てがろぐ CGI Perl 2017年12月07日 2026年6月29日
Serene Bach CGI/組み込みサーバー Go 2004年9月14日 2026年10月25日
shiromuku DIARY CGI Perl 2003年6月12日 2024年4月3日
Pukiwiki CGI PHP 2001年のどこか 2022年3月30日

  1. 改行を素直に改行として扱う方式。Qiitaやはてなダイアリー、Typoraでは改行を開業として扱えるが、本来の仕様では行末に半角スペースが不達必要で日本語を書くにあたり煩わしいのだ。 ↩

さくらのレンタルサーバーにSerene Bach v4を設置してみた

さくらのレンタルサーバーにSerene Bach v4.0.0-beta.25を設置してみたので、その時のメモ。運用する気がないため画面が出ることと記事が書けること以外何も見ていない。

公式のドキュメントが日英混在で解りづらく、なんか書いてるのを適当に試しても上手く行かなかったので手順を残す。

前提条件

/home/<ユーザーID>/www/blogに設置し、このパスにblog.example.comを割り振り、https://blog.example.comでアクセスするものとする。

設置手順

  1. 必要なファイルをダウンロードし設置する

    # 展開先のパスをここに書く
    DIST="blog"
    
    mkdir -p "${DIST}"
    wget 'https://github.com/serendipitynz/serenebach/releases/download/v4.0.0-beta.25/serenebach-v4.0.0-beta.25-freebsd-amd64.tar.gz'
    tar xzvf serenebach-v4.0.0-beta.25-freebsd-amd64.tar.gz -C "${DIST}" --strip-components=1
    rm serenebach-v4.0.0-beta.25-freebsd-amd64.tar.gz
    cd "${DIST}"
    chmod 755 serenebach
    mv serenebach serenebach.cgi
    
    cat <<'EOF' > .htaccess
    RewriteEngine On
    # ブログをサブパス(例 /blog/)に置く場合は、実際のパスに合わせる:
    RewriteBase /
    
    # ① データベースなど内部ファイルを外部から遮断する(最優先・必須)
    RewriteRule ^data/ - [F]
    
    # ② すでにサーバにある「古い画像ファイル」だけ直接配信する。
    #    実在チェック(-f)で絞るのがポイント。存在しない画像リクエストは③で
    #    Serene Bach に渡り、アップロード画像・OG カードなどが配信される。
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule ^img/ - [L]
    
    # ③ それ以外はすべて CGI へ渡す(ブログ本体・旧 sb.cgi・旧 *.html・
    #    カテゴリーディレクトリも Serene Bach に届き、旧 URL 転送が働く)
    RewriteRule ^serenebach\.cgi/ - [L]
    RewriteRule ^(.*)$ serenebach\.cgi/$1 [L]
    EOF
    
  2. https://blog.example.comにアクセスしセットアップを流す

  3. 最初のセットアップ画面。管理者ユーザー名、パスワードさえ入れれば通る。
    最初のセットアップ画面。管理者ユーザー名、パスワードさえ入れれば通る
  4. ログイン画面。さっき設定した内容でログイン
    設定するとログイン画面に遷移するのでさっき設定した内容でログインする
  5. 管理画面。新規記事で記事が書ける
    ログインすると管理画面に遷移するのでここで記事が書ける
  6. 執筆画面。HTML、Markdown、sbtextを選べる
    新規記事作成画面ではHTML、Markdown、sbtextを選べた
  7. 公開画面トップ
    https://blog.example.comにもう一度アクセスすると公開ページのトップが出るようになっていた

Serene Bach v4とLyndbaum、GitHubでMarkdownの解釈を比較してみた

GitHubを正とした場合、次の違いが見られた。パーサーごとにこういう違うが出るのは面白い。

  • Lyndbaum
    • 斜体構文が下線付きで太字、斜体にならない(HTML上は<em>で出しているため仕様上は正しい。CSSでわざとやってる)
  • Serene Bach v4
    • 引用のネストで色が変わる、斜体になる
    • 単なる改行は未反映
    • 脚注構文未対応
      • リンクは出るが文字列に飛ぶ
Serene Bach v4 Lyndbaum v4.21 GitHub
上記で利用した構文
# 見出し1

## 見出し2

### 見出し3

#### 見出し4

##### 見出し5

###### 見出し6

####### 見出し7

# ほげ

段落1寿限無、寿限無、五劫ごこうのすりきれ、海砂利水魚、水行末・雲来末・風来末、食う寝るところに住むところ、やぶらこうじのぶらこうじ、パイポ・パイポ・パイポのシューリンガン、シューリンガンのグーリンダイ、グーリンダイのポンポコピーのポンポコナの、長久命ちょうきゅうめいの長助!

段落2日本語のMarkdownを
快適に書ける
そんなパーサーがあるといいな

## ふが

1. 番号付きリスト
2. ほげほげ

ここは段落

- ふつーのリスト
- ふがふが

ここも段落

- ふつーのリスト
  - ネストされたふつーのリスト
- ぴよぴよ
  1. ネストされた数字のリスト
  2. にこめ
     - ネストされた普通のリスト

1. 番号付きリスト
   - ネストされたふつーのリスト
     - 更にネストされたふつーのリスト
2. ほげほげ
3. 一行空きリスト開始

   ```bash
   #!/bin/sh
   # デバイスが存在しなければ終了
   [ -n "$DEVICE" ] || exit 0
   ```

4. 一行空きリスト終了(Prettierのフォーマットで生まれる)

リストとリストの間に別のブロックが入ると切れる

1. uniuni
   ```bash
   #!/bin/sh
   # デバイスが存在しなければ終了
   [ -n "$DEVICE" ] || exit 0
   ```
2. aa

## ぴよ

[リンク](https://example.com)

_斜体_
**太字**
~~取り消し線~~

> スペース空き引用
>
> > スペース空き引用の中の引用
> >
> > > スペース空き引用の中の引用の中の引用
>
> コードフェンス引用
>
> ```php
> <?php
> echo "aaa";
> ?>
> ```

<!--prettier-ignore-->
>スペースなし引用
>
>>スペースなし引用の中の引用
>>
>>>スペースなし引用の中の引用の中の引用
>
>コードフェンス引用
>
>```php
><?php
>echo "aaa";
>?>
>```

# 季節の食べ物について

## そうめん

今年もそうめん[^1]の季節になってきた。

[^1]: 関西地方でよく食べられる細い麺である。

## うどん

うどん[^udon]もいいだろう。

[^udon]: 讃岐うどんがうどんのすべてのような顔をしているが稲庭うどんなどもある

<http://example.com>

a ->
<-b
<-hoge->

| th1 | th2 |
| --- | --- |
| aaa | bbb |
| ccc | ddd |

---

# 番号リストテスト

1. あ
2. い
3. う
4. え
5. お
6. か
7. き
8. く
9. け
   - 桁が変わると
10. こ
    - 桁が変わるとインデントが深くなる



ほげほげ[^11]

[^11]: ほげほげの脚注

# ああああ

ふがふが

ぴよ[^12]ぴよ

[^12]: ぴよぴよの脚注

## いいいい

foobarbaz1[^124]
foobarbaz2[^124]
foobarbaz3[^124]

# C#

[^124]: foobarbazの脚注

あとがき

Lyndbaumの斜体問題についてだが、これは仕様としている。

まず個人的に_underscore_は下線だと考えており、斜体は*italic*だと考えているの。しかしMarkdown的にはどちらも同じで、Prettierは文脈に応じてアンダースコアをアスタリスクに変換するため、文中にこの二つが混在することがしばしばある。

つまり下線付きか斜体かを区別することが難しい。そこで私は下線付き太字として本来のMarkdownと異なる解釈をすることにした。斜体って読みづらいし。HTML的には<em>で出ているので見た目だけの問題である。