自分のポートフォリオサイト内に、簡単なブログ機能を作ってみました。 流行ってるVibe Codingをしてみたくなったのですが、あんまり生活の中に解決したい課題がないのですよね。
ということで無難なお題ということで、ブログを作らせてみました。
Cursor Proにお金を払ってAutoってやつにいい感じにやってもらっています。そもそも僕はほぼコード書けません。完全雰囲気コーディング。
感想ここまで。以下、このサイトの技術スタックをCursorくんが解説します。
全体像
このブログは Eleventy(11ty) という静的サイトジェネレータでビルドし、Netlify の無料プランでホストしています。データベースやサーバーサイドの処理はなく、ビルド時に Markdown から HTML を生成して配信するだけの構成です。
技術スタック
- ビルド: Eleventy v3
- テンプレート: Nunjucks
- ホスティング: Netlify(
npm run buildで_siteを公開) - スタイル: 単一の CSS ファイル(
style.css)、既存のポートフォリオ用デザインを流用
ディレクトリ構成
src/… ビルドの入力。ここだけ編集する想定です。index.njk… トップページ(ヒーロー・About〜Support・フッター)blog.njk… ブログ一覧ページ(20件/ページ、ページネーション付き)posts/*.md… 記事。front matter でタイトル・日付・permalink・レイアウトを指定_includes/… 共通パーツsite-header.njk… 全ページ共通の「yukiya.me / blog」ヘッダーlayouts/post.njk… 記事ページ用レイアウト(パンくず・アイコン・日時・本文)
_site/… ビルド出力。Netlify はこの中身をそのまま配信します。- ルート …
style.css・icon.jpg・favicon.icoなどはルートに置き、Eleventy の passthrough copy で_siteにコピーされます。
記事の書き方
src/posts/にYYYY-MM-DD-slug.mdのようなファイルを追加する- 先頭で front matter を書く:
title… 記事タイトルdescription… 一覧用の抜粋(省略時は本文の先頭 120 文字から自動生成)date… 投稿日時(JST で表示)permalink… 例:/blog/hello-my-blog/layout: layouts/post.njktags: [posts]… 一覧に載せるために必要
- その下から Markdown で本文を書く
日付と抜粋
- 日付: Luxon で JST に変換して表示しています。
- 一覧:
jpDateShort→2026-03-10 (Tue)形式 - 記事ページ:
jpDate→2026-03-10 (Tue) 09:00形式
- 一覧:
- 抜粋: front matter の
descriptionがあればそれを使い、なければ本文 HTML をタグ除去して先頭 120 文字+「…」を表示します。
ページネーション
- 一覧は 20件/ページ。21件目以降は 2 ページ目(
/blog/2/)、3 ページ目(/blog/3/)… に分かれます。 - 1 ページ目だけ
/blog/、2 ページ目以降は/blog/2/のように URL を振っています(.eleventy.jsではなくblog.njkの front matter でpermalinkを条件分岐)。 - 一覧の下に「○ / ○ ページ」と「前へ」「1」「2」…「次へ」を表示。現在ページの数字はリンクにせず濃い色で表示しています。
画像の配置
画像を使うときは次のようにします。
-
画像ファイルを置く
プロジェクトルートのimg/フォルダに画像を入れてください。img/は Eleventy の passthrough copy でそのまま_site/img/にコピーされるので、ビルド後に/img/ファイル名で参照できます。 -
記事から参照する
Markdown の画像記法で、サイトルートからのパスを書きます。
参考として、img/lycoris.jpg をこの記事に表示してみます。

ビルドとデプロイ
- ローカル:
npm run devでhttp://localhost:8080にプレビュー - 本番:
npm run buildで_siteを生成。Netlify はnetlify.tomlのとおりnpm run buildを実行し、_siteを公開します。
以上が、このブログを支えている技術の概要です。