EN JA

GrindSite 公式マニュアル

AI時代のワークフローのためにゼロから設計された次世代CMS「GrindSite」の公式ドキュメントへようこそ。導入方法からテーマ開発、エンタープライズセキュリティ運用まで網羅しています。

1. 60秒クイックスタート

GrindSiteのセットアップは1分以内に完了します。MySQLなどの外部データベース作成やユーザー権限設定、複雑なnpmビルドは一切不要です。

方法A: FTP / ファイルアップロードでの導入

  1. GitHub Releases から最新版のZIPファイルをダウンロードします。
  2. ZIPを展開し、FTPソフト(FileZilla等)でWebサーバーの公開ディレクトリ(public_htmlhtdocs)へアップロードします。
  3. ブラウザでドメイン(例: https://yourdomain.com/)にアクセスします。
  4. 初期設定ウィザードが表示されるので、管理者ユーザー名・パスワードを設定すれば完了です。

方法B: CLI / SSH での導入

サーバーへのSSH接続権限がある場合は、Gitでクローンして即座に初期化できます:

BASH
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
自動権限チェック & SQLite WAL設定 インストール画面を開いた瞬間に、PHP拡張やフォルダの書き込み権限が自動診断され、SQLiteのWALモードが有効化された状態でデータベースが自動生成されます。

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クローラーが好む構造化エンドポイントを自動提供します:

ENDPOINTS
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等)を指定するだけで、美しい商品紹介カードを生成できます:

SHORTCODE
[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スキーマを変更することなくカスタム投稿タイプやカスタムフィールドを追加できます:

JSON (theme.json)
{
  "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 (src/plugins/my_custom_plugin.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)を内蔵しています:

CLI コマンド
# システム環境の診断とデータベース健全性チェック
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、アイコンスプライトのすべてがローカルに内包されています。

GDPR & 社内セキュリティ基準を完全クリア 外部サーバーへの第三者通信が一切発生しないため、厳格なEU GDPR規制や金融・医療・官公庁の社内閉域ネットワーク(Air-Gapped Intranet)でも安心して導入いただけます。

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テンプレートファイルで直接使える主要関数です:

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)

NGINX
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)

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)

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.iniupload_max_filesize = 64Mpost_max_size = 64M に引き上げてください。
SQLite Database Locked が出る 旧来のジャーナルモードによる同時実行ロック。 GrindSiteは初期状態で WALモード を有効化します。ストレージがPOSIXファイルロックをサポートしていることをご確認ください(NFS共有ドライブ等で発生しやすいです)。
個別記事ページで404になる WebサーバーのURLリライトモジュールが無効。 Apacheで mod_rewrite を有効化するか、Nginxの try_files 設定をご確認ください。