bmf-tech.com のソースリポジトリ。 gohan 製の静的サイトで、Cloudflare Pages でホスティングしている。
| レイヤー | 使用技術 |
|---|---|
| 静的サイトジェネレーター | gohan |
| ホスティング | Cloudflare Pages |
| CI/CD | GitHub Actions |
| CSS フレームワーク | sleyt |
| 言語 | Go (ツール類), HTML/CSS (テーマ) |
.
├── .github/workflows/deploy.yml # Cloudflare Pages デプロイワークフロー
├── assets/
│ └── images/posts/ # 記事内画像 (外部→ローカル移行済み)
├── content/
│ ├── en/
│ │ ├── posts/ # 英語記事
│ │ ├── about.md # About ページ
│ │ ├── privacy-policy.md # プライバシーポリシー
│ │ ├── categories.yaml # カテゴリ定義
│ │ └── tags.yaml # タグ定義
│ └── ja/
│ ├── posts/ # 日本語記事
│ ├── about.md # About ページ(JA)
│ ├── privacy-policy.md # プライバシーポリシー(JA)
│ ├── categories.yaml # カテゴリ定義(JA)
│ └── tags.yaml # タグ定義(JA)
├── docs/
│ └── DESIGN_DOC.md # 設計ドキュメント
├── public/ # ビルド出力 (.gitignore済み)
├── themes/default/
│ └── templates/ # HTMLテンプレート
├── _redirects # Cloudflare Pages リダイレクトルール
└── config.yaml # gohan 設定
# リポジトリをクローン
git clone git@github.com:bmf-san/bmf-tech.git
cd bmf-tech
# gohan をインストール
make install-gohan# サイトをビルド
make build
# ローカルサーバーを起動 (http://localhost:1313)
make serve記事の作成・フロントマター・ブランチ運用については CONTRIBUTING.md を参照。
| コンテンツ | URL |
|---|---|
| 英語記事 | /posts/{slug}/ |
| 日本語記事 | /ja/posts/{slug}/ |
| About | /about/ |
| プライバシーポリシー | /privacy-policy/ |
| タグ別記事一覧 | /tags/{name}/ |
| カテゴリ別記事一覧 | /categories/{name}/ |
| アーカイブ | /archives/{year}/{month}/ |
main ブランチへの push で自動デプロイ。
sequenceDiagram
participant Dev as Developer
participant GH as GitHub
participant GA as GitHub Actions
participant CF as Cloudflare Pages
Dev->>GH: git push origin main
GH->>GA: trigger workflow
GA->>GA: gohan build → public/
GA->>GA: cp _redirects public/
GA->>CF: wrangler pages deploy public/
CF-->>GA: deploy complete
CI フロー(.github/workflows/deploy.yml):
- GitHub Actions (ubuntu ランナー) が
gohan buildを実行しpublic/を生成 _redirectsをpublic/へコピーwrangler pages deploy publicでpublic/を Cloudflare Pages へダイレクトアップロード
Cloudflare Pages 側ではビルドを行わない。ビルドは GitHub Actions ランナー上で完結する。
assets/fonts/などgohan buildに必要なファイルはリポジトリに含める必要がある。
GitHub Secrets に設定が必要:
CLOUDFLARE_API_TOKEN— Cloudflare API トークン (Pages:Edit 権限)CLOUDFLARE_ACCOUNT_ID— Cloudflare アカウント ID
手動デプロイ: GitHub Actions の workflow_dispatch からトリガー可能。
英語記事を dev.to にクロスポストする。
tools/devto/ 配下の Go CLI ツールで管理する。
スキップ対象(投稿しない):
- カテゴリ
Poemの記事 - タグ
Book Reviewの記事 draft: trueの記事
投稿仕様:
canonical_urlにhttps://bmf-tech.com/posts/{slug}/を設定(SEO 重複コンテンツ対策)- カバー画像に
https://bmf-tech.com/ogp/{slug}.pngを設定 - 記事 body 先頭に
bmf-tech.comへのリンクを挿入してトラフィック誘導 - 投稿済み slug は
tools/devto/posted.jsonで管理(再実行時はスキップ)
GitHub Secrets に追加で必要:
DEV_TO_API_KEY— dev.to API キー (dev.to/settings/extensions で発行)
使い方:
# 全記事を一括投稿(約 12 分)
make devto-post-all DEV_TO_API_KEY=xxx
# 単一記事を投稿
make devto-post-file FILE=content/en/posts/my-post.md DEV_TO_API_KEY=xxx
# dry-run(API を呼ばずに内容を確認)
make devto-post-all DRY_RUN=1main ブランチへの push 時に content/en/posts/ に新規追加された記事は .github/workflows/devto-publish.yml が自動投稿する。
CONTRIBUTING.md を参照。
コンテンツ (content/) は著作権保持。ソースコード (themes/) は MIT ライセンス。
