GrindSite 公式マニュアル
AI時代のワークフローのためにゼロから設計された次世代CMS「GrindSite」の公式ドキュメントへようこそ。導入方法からテーマ開発、エンタープライズセキュリティ運用まで網羅しています。
1. 60秒クイックスタート
GrindSiteのセットアップは1分以内に完了します。MySQLなどの外部データベース作成やユーザー権限設定、複雑なnpmビルドは一切不要です。
方法A: FTP / ファイルアップロードでの導入
- GitHub Releases から最新版のZIPファイルをダウンロードします。
- ZIPを展開し、FTPソフト(FileZilla等)でWebサーバーの公開ディレクトリ(
public_htmlやhtdocs)へアップロードします。 - ブラウザでドメイン(例:
https://yourdomain.com/)にアクセスします。 - 初期設定ウィザードが表示されるので、管理者ユーザー名・パスワードを設定すれば完了です。
方法B: CLI / SSH での導入
サーバーへのSSH接続権限がある場合は、Gitでクローンして即座に初期化できます:
git clone https://github.com/grindworks/grind-site.git /var/www/html
cd /var/www/html
chmod -R 775 data uploads
php bin/grind.php status
2. 動作環境・システム要件
一般的なレンタルサーバー(エックスサーバー、さくらのレンタルサーバ、ConoHa WING、ロリポップ等)、クラウドVPS、Dockerコンテナで動作します。
| 要件項目 | 最小要件 | 推奨環境 | 備考 |
|---|---|---|---|
| PHP | 8.3 以上 | 8.3 / 8.4 | 最新の型システムとJIT最適化を活用しています。 |
| データベース | SQLite 3.27+ | SQLite 3.35+ | PHP標準搭載。事前のDB作成・設定は一切不要です。 |
| PHP拡張 | pdo_sqlite, mbstring, gd |
imagick, curl, zip |
gd または imagick によりWebP圧縮を自動実行します。 |
| Webサーバー | Apache, Nginx, LiteSpeed, Caddy | Nginx または LiteSpeed | .htaccess および Nginx設定サンプルを標準同梱。 |
3. 可搬性 & サーバー移行 (Zero Config)
従来のCMSではデータベース内に絶対URL(例: https://old-domain.com/wp-content/...)が直接書き込まれるため、ドメイン変更やサーバー移転時に置換スクリプトが必要でした。GrindSiteは**動的プレースホルダーエンジン**によりこれを根本解決しています:
- 記事内の画像パスや内部リンクはすべて
{{CMS_URL}}というトークンで保存されます。 - HTML表示時に、現在のリクエストホスト名・パスへリアルタイムに自動解決されます。
- お引越し手順: サイトのフォルダを丸ごと新しいサーバーや別ディレクトリにコピーするだけ。DB置換作業は1秒も不要です。
4. Smart Paste (AI生成原稿の自動ブロック化)
GrindSiteのエディタは、AI時代の執筆フローに特化した**Smart Paste Parser**を内蔵しています。ChatGPT、Claude、Geminiなどで生成した記事のMarkdownやHTMLをエディタにそのままペースト(Cmd+V)するだけで、適切なUIブロックへと自動分解・変換されます:
| 貼り付けたMarkdown / 記法 | 自動変換されるブロック |
|---|---|
### 見出し3 |
目次に自動連動するID付きの見出しブロック |
[amazon asin="B09XS7JWHH"] |
画像・価格・購入ボタン付きのAmazonアフィリエイト商品カード |
$$E = mc^2$$ |
サーバーサイドで高速レンダリングされるKaTeX数式ブロック |
[say name="佐藤" avatar="sato.jpg"]こんにちは[/say] |
アバター付きの会話吹き出しブロック(左右配置対応) |
```python ... ``` |
行番号・ワンクリックコピーボタン付きコードハイライトブロック |
[before_after before="b.jpg" after="a.jpg"] |
読者がスライダーで動かせるインタラクティブなBefore/After比較ブロック |
5. 画像のクリップボード貼り付け & WebP自動圧縮
OSのスクリーンショットやブラウザでコピーした画像を、エディタ上で直接ペーストするだけで即座にアップロードできます。
- WebP自動変換: PNGやJPEG画像はアップロード時に自動で次世代WebPフォーマットへ最適化され、ファイルサイズを最大75%削減します。
- AI生成プロンプトの自動検出: DALL-E、Midjourney、Stable Diffusionで生成された画像のメタデータを自動解析し、Altタグやプロンプト情報として取り込みます。
6. AI検索エンジン & RAG 最適化 (llms.txt)
検索体験がPerplexityやChatGPT Search、Google AI Overviewsへと移行する中、GrindSiteはAIクローラーが好む構造化エンドポイントを自動提供します:
https://yourdomain.com/llms.txt # サイト全体の構造と重要ページの要約
https://yourdomain.com/llms-full.txt # 全公開記事のプレーンなクリーンMarkdownフィード
https://yourdomain.com/archive.md # 社内RAGやベクトルDB取り込み用の一括Markdownアーカイブ
llms.txt および llms-full.txt は自動的に最新状態に再生成されます。
7. ブロックエディタ完全ガイド (40種以上のブロック)
エディタは**Alpine.js**と**Tailwind CSS**をベースに構築されており、React等の重厚なフレームワークに依存しない軽快な動作を実現しています。ドラッグ&ドロップによる並び替え、ブロック複製、スタイル微調整が自由自在です。
収益化・アフィリエイトカード
Amazon、楽天市場、Yahoo!ショッピング、eBayの商品コード(ASIN等)を指定するだけで、美しい商品紹介カードを生成できます:
[amazon asin="B09XS7JWHH" title="Sony WH-1000XM5" price="¥48,500" btn_text="Amazonで見る"]
AES-256 ブロック単位のパスワード保護
会員限定コンテンツやダウンロードURL、APIキーなどを含む特定ブロックだけをパスワードで保護できます。データベース上では**AES-256-GCM**で暗号化されて保存され、読者が正しいパスワードを入力した時のみブラウザ上で復号されます。
8. テーマ開発 & theme.json 仕様
テーマは src/theme/<テーマ名>/ に配置します。theme.json を定義するだけで、DBスキーマを変更することなくカスタム投稿タイプやカスタムフィールドを追加できます:
{
"name": "Nexus Docs",
"version": "1.7.2",
"author": "Grind Works",
"custom_post_types": {
"docs": {
"label": "技術マニュアル",
"slug": "docs",
"supports": ["title", "editor", "thumbnail", "custom_fields"]
}
},
"custom_fields": {
"doc_version": {
"type": "text",
"label": "対応バージョン",
"default": "v1.7.2"
}
}
}
11種類の同梱スターターテーマ
- Corporate Pro: お問い合わせ・リード獲得に最適化された企業サイト用テーマ。
- Nexus Docs: サイドバー検索・目次自動追従を備えた技術ドキュメント用テーマ。
- Neo Minimalist: 究極のタイポグラフィと超高速表示にこだわったブログテーマ。
- Visionary Portfolio: 写真家・デザイナー・映像クリエイター向け作品集テーマ。
- Editorial Magazine: 複数カラムのニュース・WEBマガジン向けレイアウト。
9. プラグイン開発 & フックAPI
プラグイン開発に複雑なボイラープレートは不要です。src/plugins/ にPHPファイルを置き、フックを登録するだけで直感的にコアを拡張できます:
<?php
/**
* Plugin Name: SNS自動カード埋め込み
*/
add_filter('content_render', function ($content) {
// X (Twitter) のURLをリッチカードへ自動変換
return preg_replace('/https:\/\/x\.com\/(\w+)\/status\/(\d+)/', '<div class="x-card">...</div>', $content);
});
add_action('post_after_save', function ($post_id, $post_data) {
// 記事更新時に外部Webhookへ通知
file_get_contents('https://api.example.com/webhook?id=' . $post_id);
});
標準バンドルのエンタープライズ・セキュリティプラグイン
| プラグインファイル | 機能と効果 |
|---|---|
_mail_otp_2fa.php |
メール送信によるワンタイムパスワード(OTP)二要素認証。管理画面の不正ログインを防止。 |
_strict_session.php |
セッションをIPアドレスとUser-Agentの指紋にバインドし、セッションハイジャックを阻止。 |
_audit_logger.php |
管理者のログイン、記事作成・編集・削除履歴を改ざん不能な監査ログテーブルへ記録。 |
_rate_limiter.php |
DBロックを発生させずにログイン試行やAPIリクエストを制御する軽量レート制限。 |
10. CLI コマンドリファレンス
DevOpsやCI/CDパイプラインとの連携用に、ネイティブCLIツール(bin/grind.php)を内蔵しています:
# システム環境の診断とデータベース健全性チェック
php bin/grind.php status
# サイト全体の静的HTML出力(SSG)を実行
php bin/grind.php ssg:build --output=./dist
# テンプレートキャッシュおよびクエリキャッシュを全削除
php bin/grind.php clear-cache
# 稼働中の無停止データベースバックアップを実行
php bin/grind.php db:backup --destination=/backups/db.sqlite
11. 静的サイト出力 (SSG) & CI/CD 自動デプロイ
究極のセキュリティと無限のアクセス耐性を実現するため、サイト全体をピュア静的HTMLとして書き出すことができます。
- 圧倒的なビルド速度: メモリ上でのテンプレートキャッシュ活用により、1,000ページをわずか約0.38秒で高速生成。
- エッジホスティング連携: Cloudflare Pages、GitHub Pages、Vercel、AWS S3などにデプロイすることで、サーバー負荷ゼロ・完全な耐障害性を実現します。
12. 100% オフライン & 閉域網(イントラネット)・GDPR準拠
GrindSiteは外部CDNへの依存を完全に排除しています。Webフォント、Alpine.js、Tailwind CSS、アイコンスプライトのすべてがローカルに内包されています。
13. ショートコード記法一覧 (全40種以上のUIブロック)
以下のショートコードをブロックエディタやMarkdown原稿に貼り付けるだけで、レスポンシブなUIブロックへ自動変換されます:
| ブロック名 | ショートコード構文例 | 効果・機能 |
|---|---|---|
| Amazon商品カード | [amazon asin="B09XS7JWHH" title="商品名" price="¥48,500"] |
購入ボタン・画像・価格付きアフィリエイトカード。 |
| 楽天市場カード | [rakuten id="item-id" title="商品タイトル" price="¥5,000"] |
楽天市場の商品埋め込みカード。 |
| 会話吹き出し (左) | [say name="質問者" avatar="avatar1.jpg"]質問内容[/say] |
左揃えのアバター付き会話吹き出しブロック。 |
| 会話吹き出し (右) | [say name="回答者" avatar="avatar2.jpg" side="right"]回答内容[/say] |
右揃えのアバター付き会話吹き出しブロック。 |
| タイムライン | [timeline date="2026年8月"]大型アップデート公開[/timeline] |
縦の軌道線とバッジで歴史や経緯を表示。 |
| ステップ手順 | [step num="1" title="ダウンロード"]ZIPファイルを取得[/step] |
番号付きのわかりやすい手順ガイド。 |
| ランキングカード | [ranking rank="1" title="第1位おすすめ"]...[/ranking] |
金・銀・銅バッジ付きの比較ランキングブロック。 |
| アコーディオン / FAQ | [faq q="質問はこちらですか?"]回答内容が入ります。[/faq] |
ワンクリックで開閉できるFAQアコーディオン。 |
| Before / After | [before_after before="old.jpg" after="new.jpg"] |
スライダー操作でビフォーアフターを比較。 |
| KaTeX 数式 | $$E = mc^2$$ または \(a^2 + b^2 = c^2\) |
高速かつ美麗なLaTeX数学公式レンダラー。 |
| QRコード | [qr url="https://grindsite.com" size="180"] |
クライアント側でSVGとして即時生成されるQRコード。 |
| パスワード保護 | [protect password="secret123"]限定公開コンテンツ[/protect] |
AES-256でブラウザ側復号される限定ブロック。 |
| 自動目次 | [toc] |
記事内のH2/H3見出しから階層目次を自動生成。 |
14. テーマ制作者向け テンプレート関数一覧
src/theme/<テーマ名>/ 内のPHPテンプレートファイルで直接使える主要関数です:
<!-- 記事タイトル・本文・抜粋・日付 -->
<h1><?= the_title() ?></h1>
<div class="post-body"><?= the_content() ?></div>
<p class="summary"><?= the_excerpt(120) ?></p>
<time><?= the_date('Y年m月d日') ?></time>
<a href="<?= the_permalink() ?>">記事を読む</a>
<!-- アイキャッチ画像 -->
<?php if (has_thumbnail()): ?>
<img src="<?= the_thumbnail('large') ?>" alt="<?= the_title() ?>">
<?php endif; ?>
<!-- theme.json で定義したカスタムフィールド -->
<div class="badge"><?= get_field('doc_version', 'v1.0') ?></div>
<!-- カテゴリとタグの一覧取得 -->
<?php foreach (get_categories() as $cat): ?>
<a href="<?= $cat['url'] ?>"><?= $cat['name'] ?></a>
<?php endforeach; ?>
<!-- サイト情報・テーマアセットURL -->
<a href="<?= site_url() ?>"><?= site_title() ?></a>
<link rel="stylesheet" href="<?= theme_url('assets/custom.css') ?>">
15. Webサーバー設定スニペット (Nginx / Apache / Caddy)
本番環境で data/ フォルダへの直接アクセスを遮断し、きれいなURLルーティングを行うための設定例です:
Nginx 設定例 (nginx.conf)
server {
listen 80;
server_name example.com;
root /var/www/html;
index index.php index.html;
# クリーンURLルーティング
location / {
try_files $uri $uri/ /index.php?$args;
}
# SQLiteデータベースおよびコアソースへの直接アクセスを遮断
location ~ ^/(data|src)/ {
deny all;
return 404;
}
# PHP-FPMへの受け渡し
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
Apache 設定例 (.htaccess)
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
# dataフォルダへのアクセス拒否
RewriteRule ^data/ - [F,L]
# クリーンURLルーティング
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>
Caddy Server (Caddyfile)
example.com {
root * /var/www/html
php_fastcgi unix//var/run/php/php8.3-fpm.sock
file_server
@blocked path /data/* /src/*
respond @blocked 404
}
16. トラブルシューティング & よくある質問 (FAQ)
| 発生事象 / エラー | 原因 | 対処方法 |
|---|---|---|
| 画像アップロードが失敗する (HTTP 500 / 403) | uploads/ フォルダに書き込み権限がない。 |
chmod -R 775 data uploads を実行し、Webサーバー実行ユーザー(www-data 等)の所有権を確認してください。 |
| 大きな画像でエラーが出る | PHPのデフォルトアップロード上限(2MB)に達している。 | php.ini で upload_max_filesize = 64M と post_max_size = 64M に引き上げてください。 |
| SQLite Database Locked が出る | 旧来のジャーナルモードによる同時実行ロック。 | GrindSiteは初期状態で WALモード を有効化します。ストレージがPOSIXファイルロックをサポートしていることをご確認ください(NFS共有ドライブ等で発生しやすいです)。 |
| 個別記事ページで404になる | WebサーバーのURLリライトモジュールが無効。 | Apacheで mod_rewrite を有効化するか、Nginxの try_files 設定をご確認ください。 |