` を使用
- 色はアンバー系(CSS変数 `--bubble-dyslexia-bg` 等で定義済み)
- 吹き出しには必ず `
` を入れる
- 出典は吹き出しの後に `— 出典名` 形式で書く
- 楽天アフィリエイトのURL形式: `https://hb.afl.rakuten.co.jp/ichiba/54fb1f56.abf524ab.54fb1f57.aed11c5d/_RTLink136060?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2FNUMBER%2F&link_type=text&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJ0ZXh0Iiwic2l6ZSI6IjI0MHgyNDAiLCJuYW0iOjEsIm5hbXAiOiJyaWdodCIsImNvbSI6MSwiY29tcCI6ImRvd24iLCJwcmljZSI6MSwiYm9yIjoxLCJjb2wiOjEsImJidG4iOjEsInByb2QiOjAsImFtcCI6ZmFsc2V9`
- アフィリエイト注記: 「リンクからの収益は、ディスレクシアの周知活動およびサイト運営費に充てられます」
## アフィリエイト
- 楽天アフィリエイトID: `54fb1f56.abf524ab.54fb1f57.aed11c5d`
- 書籍リンクには `target="_blank" rel="nofollow sponsored noopener"` を付与
- アフィリエイト注記: 「リンクからの収益は、安竹洋平の政治活動及び本サイトの運営費に充てられます」
## ノート(:::note)
- `:::note[タイトル]` ではなく、以下形式でTOCに表示させる:
```
:::note
##### タイトル
本文
:::
```
## 実績ページ(○○の軌跡)
- フロントマター: `title`, `description`, `tableOfContents: true`
- 冒頭にアイキャッチ画像(`
![]()
` + 画像クレジットの `
`)
- 構成: 冒頭説明 → タイムライン(表) → 詳細セクション → 「成果」表 → 「今後の課題」 → 「関連リンク」 → `[← 実績ページに戻る](/jisseki/)`
- アイキャッチ画像は `public/img/` に配置、参照は `/img/filename.png`
- 画像のダウンロード元(イラストAC等)を必ずクレジット表記
## SEO
- `@astrojs/sitemap` によるサイトマップ自動生成(`astro.config.mjs` に追加済み)
- `public/robots.txt` に sitemap URL を記載
- OGP 画像・JSON-LD 構造化データは `astro.config.mjs` の `head` で設定
- Google Search Console への登録・サイトマップ送信は手動で行う
---
# 画像の取り扱い(技術編)
## ファイル名
- **短くすること**。長いファイル名(例: `kajo-seigen-kanwa-eyecatch.png`)は Astro dev server が 404 を返す
- 推奨: `{topic}-eyecatch.png`(例: `dislexia-eyecatch.png`)
- 極力日本語読みでファイル名を作成する(例: 'asita-yaru.mdx')
## 表示サイズと用途
| 用途 | クラス/CSS | 表示サイズ | 推奨元画像サイズ |
|------|-----------|-----------|----------------|
| 実績カード | `.achievement-img` | 160×110px(SP: 140px高) | 横長 480×330px 以上 |
| 詳細ページアイキャッチ | `max-height:360px; width:100%` | コンテンツ幅(〜720px) | 横長 1440×720px(2:1) |
| ホーム活動グリッド | `.activity-card`(`aspect-ratio:4/3`) | 最小150px幅 | 4:3、600×450px 以上 |
- 全画像 `object-fit: cover` のため枠より大きければ自動トリミング
- 共通の推奨サイズ: **横長 1500×750px**
## 画像コピー方法
```bash
cp "C:/Users/yohei/Desktop/ZedPlayground/reference-materials/{フォルダ}/{ファイル名}" "C:/Users/yohei/Desktop/ZedPlayground/yasutakeyohei.com/public/img/{出力ファイル名}"
```
- `copy_path` ツールは上書きに失敗しやすいため、`cp` が確実
- 上書き時は先に `rm` で削除してから `cp`
## ライセンス表記テンプレート
### 実績カード内
```html
画像提供:サイト名
```
### 詳細ページアイキャッチ直後
```html
画像提供:サイト名
```
### よく使う素材サイトURL
- イラストAC: `https://www.ac-illust.com/main/detail.php?id=XXXXXX`
- photoAC: `https://www.photo-ac.com/main/detail/XXXXXX`
- いらすとや: `https://www.irasutoya.com/YYYY/MM/blog-post_XX.html`
- PIXTA: `https://pixta.jp/illustration/XXXXXX`
- かいごイラスト: `https://kaigoirasuto.info/`
---
# ファイル編集の注意点
## edit_file の制限
- **長い行やURLを含むテキストには `edit_file` がマッチしない**ことが多い
- その場合は `write_file` でファイル全体を書き換える
## write_file 使用時の注意
- **ファイル全体の内容を必ず含めること**。一部だけだと内容が消失する
- 事前に `read_file` で全内容を取得してから編集する
- 消失した場合は `git checkout -- {filepath}` で復元可能
## 複数箇所にマッチする場合
- `old_text` が複数行にマッチすると編集に失敗する
- 十分にユニークなコンテキストを含めること
---
# よく使うファイル
- 設定: `astro.config.mjs`
- CSS: `src/styles/custom.css`
- 参照資料: `reference-materials/実績まとめ用資料/`
- 参照資料(小平市議会での安竹の記録): `reference-materials/実績まとめ用資料/議会`
- 旧サイト参照: `reference-materials/移行元documents(docusaurus)/`
- 旧サイト(ディスレクシア)参照: `reference-materials/dyslexiaのmdbookソース/'
- .htaccess: `public/.htaccess`
---
# 一般質問ページの作成ルール
## 年度の区切り
- **3月定例会は前年度に属する**(例: 令和7年3月 → 令和6年度 r6d、令和8年3月 → 令和7年度 r7d)
- 4月以降は新年表記の年度(例: 令和7年6月 → 令和7年度 r7d)
## 新規セッション追加時のインフラ設定
1. `astro.config.mjs` の `year()` に該当月を追加(なければ関数の MONTHS にも追加)
2. `src/content/docs/ippan-situmon/rXd/index.mdx` に該当月へのリンクを追加
3. **`src/components/starlight/Breadcrumbs.astro` の `labelMap` に新年表記を追加**(例: `'r7d': '令和7年度'`)
4. 各ディレクトリに `images/` フォルダを作成
## ページのフォーマット
### 見出し(TOC表示のため Markdown 必須)
- **必ず `###` を使う。HTML の `
` は右側目次に表示されない**
- `### 質問する理由` → 背景説明
- `### ① [質問タイトル]` → 各質問(丸数字付き)
- `#### [サブタイトル]` → 再質問セクション。**「○の再質問:」プレフィックス禁止**
- 丸数字(①②③)は自動生成ID上で `-` に変換される → まとめ表のリンクは `(#-自動生成ID)` 形式
### 吹き出し(MessageBubble)
- 安竹: `speaker="安竹(初回質問)"` または `speaker="安竹(再質問)"`
- **相手側は必ず `align="left"` を使用**。フルネームで(例: `speaker="市長(小林 洋子)" align="left"`)
### スタイル
- まとめ文は です・ます調。2〜3文で簡潔
- 「令和X年X月X日に行ったN件の一般質問のうちのX件目です。」は重複禁止
- 吹き出し内の番号付きリストは Markdown 記法(1. 2. 3.)
- データの多い答弁は表形式に整形
### 部分テンプレート(必須)
主な質疑の先頭に必ず以下を入れる:
```
import Partial from './../../_partial.mdx';
```
### 一問一答形式の構造
```
### 質問する理由
#### [背景サブタイトル]
...
### ① [質問タイトル]
質問文
答弁
#### [再質問サブタイトル]
...
...
```
## 通告書PDFの扱い
1. `reference-materials/実績まとめ用資料/議会/[YYYY年M月定例会]/` から該当PDFを探す
2. `public/pdf/` にコピー(命名: `YYYYMMDD-ippan-situmon-yasutake-N.pdf`)
3. **PyPDF2 で1ページずつ分割**(`YYYYMMDD-ippan-situmon-yasutake-Np.pdf`)し、元の全ページPDFは削除
4. 各質問ページに ``
## FAQ
- **見出しが目次に出ない**: `` HTMLタグではなく `###` Markdownを使う
- **faviconが出ない**: `astro.config.mjs` の `head` に `` を追加
- **Windowsでステージ時にエラー206**: パス長制限。`git config core.longpaths true` を実行
- **パンくずリストで年度が rXd と表示される**: `Breadcrumbs.astro` の `labelMap` に追加
- **PDFが全ページ表示される**: 1ページずつ分割して `-1p.pdf` 等を使う
---
# 禁止操作(絶対に行わないこと)
## 編集範囲の制限
- **ZedPlayground 外のファイル・ディレクトリは絶対に編集しない**
- `reference-materials/` は**リードオンリー**。読み取りのみ許可、編集・削除・移動は一切禁止
## コミットメッセージ
- **コミットメッセージは必ず日本語で書く**
---
# Q&A 構造化と AI 向け対応
## 一般質問ページの Q&A 構造化
一般質問ページでは、Markdown の表(`| 質問 | 答弁概要 |`)を**直接書かない**。
代わりに `QuestionSummary` コンポーネントを使用する。
```mdx
import QuestionSummary from '@/components/QuestionSummary.astro';
```
- 表の更新が必要なときは `qa` 配列だけを編集すれば、表表示と JSON-LD が自動で同期される
## AI 向けファイル
- `public/llms.txt` — AI 向けサイトマップ。ページ追加時はここにも追記する
- `dist/llms-full.txt` — ビルド時に全 MDX 本文を結合して自動生成される(手動編集不要)
- `scripts/generate-llms-full.mjs` — `llms-full.txt` 生成スクリプト
## 一括削除の禁止
- `rm -rf .` や `rm -rf *`、およびそれに類する全ファイル削除コマンドは**絶対に実行しない**
- `git rm -rf .` も同様に禁止
- `git reset --hard` + `git clean -fdx` の組み合わせも禁止
- ファイル削除は**1つずつ明示的に**行う
- 破壊的操作の前には必ずユーザーに確認を取る
- 作業前に `git clone` でバックアップを取ることを推奨
## リポジトリ操作の注意
- `git push --force` はユーザーの明示的な許可がある場合のみ
- `.git` ディレクトリを削除する前には必ずリモートに push 済みであることを確認する
# デプロイ
## ビルドコマンド
- `npm run build` は `astro build && py removeNullCharacters.py` を実行する
- `removeNullCharacters.py` はビルド後のNull文字除去スクリプト(プロジェクト直下)
## エックスサーバーへのデプロイ
- デプロイスクリプト: `deploy.ps1`(プロジェクト直下)
- `npm run build` → `dist/` を一時ディレクトリにコピー → `git push -f` でサーバーへ転送
- サーバー側の `post-receive` フックが `public_html/` に展開
- Git のデルタ圧縮により、変更分のみ高速転送
- ソースコードの公開: `git push source main` で cgit に反映
- サブドメインフォルダ(`*.yasutakeyohei.com`)は `.gitignore` で保護されるため削除されない
## cgit に新しいリポジトリを追加する手順
### サーバー側
```sh
ssh xserver
cd ~/yasutakeyohei.com/git
git init --bare new-project.git
# 説明文
cat > new-project.git/description << 'EOF'
プロジェクトの説明
EOF
# 名前・オーナー・セクション
cat > new-project.git/cgitrc << 'EOF'
name=プロジェクト名
owner=安竹洋平
section=セクション名(任意)
EOF
```
### ローカル側
```powershell
git remote add source xserver:/home/wais/yasutakeyohei.com/git/new-project.git
git push -u source main
```
- `scan-path` で自動検出されるため、`cgitrc` 本体の編集は不要
- キャッシュクリアが必要な場合: `ssh xserver "rm -rf /home/wais/local/var/cache/cgit/*"`
- **エックスサーバー側の操作(bare repo 作成、cgitrc 編集など)は必ずユーザーが手動で行う。AI からは手順のみ案内すること**
---
# 画像素材の補足
## 海外フリー素材(人物なし用途)
- Unsplash: 欧米人被写体が大半のため、**人物が写っていない写真**(教室・文房具・黒板・自然など)に限定して使う
- Pixabay: Unsplash より多様だが同様の制約
## いらすとやの検索
- 「特別支援学級」といったピンポイントなキーワードではヒットしない場合がある
- 代わりに「学校」「教室」「こども」など、より一般的なキーワードで検索する
- 商用利用は21点まで無料(要クレジット表記)
## 画像選定の基本方針
- 外国人は原則NG。日本のこども・学校・風景のイラスト・写真を優先
- 人物ありの写真が必要な場合は、イラストAC・photoAC・いらすとや等の日本素材サイトを使う