SvelteKit で構築した個人ポートフォリオサイト「他力code(tariki-code)」のソースコードです。クリエイター Takafumi Kobayashi が取り組むプロジェクト、ブログ、SNS 発信を一体的に紹介することを目的とし、「一緒に創る、明日のためのcode。」というコンセプトで運営しています。
/blog) を提供/blog/[slug]) で OGP/Twitter Card に対応tarikicode-svelte/
├── src/
│ ├── lib/ # 再利用コンポーネント・ユーティリティ
│ ├── routes/ # SvelteKit ルート (+page.svelte 等)
│ ├── posts/ # Markdown 記事
│ ├── tests/ # テストヘルパー・統合テスト
│ └── theme/ # SMUI テーマトークン
├── static/ # 公開アセット・テーマ CSS
├── AGENTS.md # コントリビューションガイドライン
├── CLAUDE.md # Claude 向け案内 (AGENTS.md 参照)
├── package.json
├── svelte.config.js
├── vite.config.ts
└── vitest.config.ts
npm install
# .envファイルに以下を追加(必要に応じて)
# GitHub Personal Access Token(オプション - APIレート制限を60→5000/hourに拡大)
GITHUB_TOKEN=ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
GitHub Personal Access Tokenの作成方法:
.env の GITHUB_TOKEN に設定 npm run dev
必要に応じて npm run dev -- --open でブラウザを自動起動できます。
このプロジェクトでは jj (Jujutsu VCS) をバージョン管理システムとして使用しています。jjはGitと共存でき、より直感的な操作が可能です。
# macOS (Homebrew)
brew install jj
# その他のプラットフォーム
# https://martinvonz.github.io/jj/latest/install-and-setup/
このプロジェクトでは develop ブックマーク(≒Gitブランチ)で開発を行います。
# 現在の状態を確認
jj status
# コミット履歴を確認
jj log -n 5
# ブックマーク一覧を確認
jj bookmark list
# 新しい変更を開始(自動的に新しいコミットが作成される)
jj new
# 変更内容を記述
jj describe -m "feat: 新機能の追加"
# developブックマークを現在位置に移動(推奨)
jj bookmark set develop
# リモートから最新を取得
jj git fetch
# ローカルの変更をリモートにプッシュ
jj git push
Cursorでは、コミットハッシュ(例:42baed1f)で表示される場合があります。ブックマーク名で表示したい場合は、以下を実行してください:
# developブックマークを現在のコミットに移動
jj bookmark set develop
これにより、Cursorでも develop として認識されるようになります。
.jj/ ディレクトリにjj固有のデータを保存jj git push/fetch コマンドで可能| コマンド | 説明 |
|---|---|
jj status |
現在の状態を確認 |
jj log -n 5 |
最新5件のコミットログを表示 |
jj bookmark list |
ブックマーク一覧を表示 |
jj bookmark set <name> |
ブックマークを現在位置に移動 |
jj new |
新しい変更を開始 |
jj describe -m "message" |
コミットメッセージを設定 |
jj git push |
リモートへプッシュ |
jj git fetch |
リモートからフェッチ |
jj diff |
変更内容を確認 |
詳細は jj公式ドキュメント を参照してください。
npm run dev — ホットリロード付き開発サーバーnpm run build — 本番ビルド生成npm run preview — ビルド成果物のローカル確認npm run check — SvelteKit 同期と型チェックnpm run check:watch — 監視モードで型チェックnpm run lint — 全体チェック(コード + Markdown)npm run lint:fix — 全体自動修正(コード + Markdown)npm run lint:code — コードのみチェック(TypeScript/Svelte)npm run lint:code:fix — コードのみ自動修正npm run lint:md — Markdown のみチェック(記事品質)npm run fix:md — Markdown のみ自動修正npm run format — Prettier による整形npm run test — Vitest 監視モードnpm run test:run — Vitest 実行(CI 用)npm run test:ui — Vitest UI モードnpm run test:coverage — カバレッジレポート生成npm run prepare — SMUI テーマ CSS を再生成(Light + Dark)npm run smui-theme-light — Light テーマのみ生成npm run smui-theme-dark — Dark テーマのみ生成src/tests/setup.ts で初期化npm run test:coverage で HTML レポート生成(coverage/ ディレクトリ)プロジェクトでは以下のツールで品質を管理しています:
npm run fix:md # Markdown自動修正
npm run lint:md # 記事品質チェック
npm run lint:fix # 全体自動修正
npm run test:run # テスト実行
npm run check # 型チェック
npm run lint と npm run check を CI の品質ゲートとして利用します。
SMUI トークンは src/theme/ に配置され、npm run prepare で Light/Dark 両テーマの CSS を static/ に出力します。
https://d1mt09hgbl7gpz.cloudfront.net)から配信src/lib/AppConfig.ts で画像 URL を一元管理<link rel="preload"> で事前読み込みすべての画像URLは src/lib/AppConfig.ts の post_string オブジェクトで管理されています。これにより、画像を変更する際は1箇所を更新するだけで、以下のすべての場所に反映されます:
画像変更の手順:
src/lib/AppConfig.ts の post_string を更新post_string: {
'thanks-card': 'https://d1mt09hgbl7gpz.cloudfront.net/public/thankscard.jpg',
'kintone-plugin': 'https://d1mt09hgbl7gpz.cloudfront.net/public/kintone.jpg',
// ... その他の記事
}
image フィールドは不要(自動的にAppConfigから取得)summary_large_image の推奨サイズ)トップページの「Recent Post」セクションに表示される最新3件のツイートは、static/recent-tweets.json で管理しています。
static/recent-tweets.json を編集tweets 配列に最新3件のツイートURLを記載(新しい順)GitHub Mobile アプリを使用(推奨)
static/recent-tweets.json を編集ブラウザから更新:
static/recent-tweets.json を開く{
"tweets": [
"https://twitter.com/kobatch_tk/status/ツイートID1",
"https://twitter.com/kobatch_tk/status/ツイートID2",
"https://twitter.com/kobatch_tk/status/ツイートID3"
]
}
トップページの「Pickup Articles」セクションに表示される外部記事は、static/pickup-articles.json で管理しています。
記事のURLを追加すると、サーバーサイドで自動的にOGP(Open Graph Protocol)メタデータを取得し、以下の情報をカード形式で表示します:
og:title または <title>タグ)og:description または <meta name="description">)og:image)og:site_name またはドメイン名)Recent Postと同様に、PC・スマホのどちらからでも更新可能です。
JSONファイル形式:
{
"articles": [
{ "url": "https://example.com/article1" },
{ "url": "https://example.com/article2" }
]
}
/api/ogp - OGPメタデータ取得「New Release」セクションは、デバイスに応じて表示形式が切り替わります:
ブログ機能は Markdown ファイルで記事を管理します。
テンプレートをコピー:
cp src/posts/TEMPLATE.txt src/posts/YYYY-MM-DD-your-article-title.md
ファイル名は YYYY-MM-DD-slug.md 形式(例:2025-01-25-api-design-patterns.md)
フロントマター(YAML 形式)で記事メタデータを編集
記事本文を Markdown で記述
---
title: '記事タイトル' # 必須: 記事のタイトル
date: '2025-01-25' # 必須: 公開日(YYYY-MM-DD形式)
category: 'カテゴリ名' # 必須: カテゴリ(例: 開発, デザイン, ビジネス)
tags: ['タグ1', 'タグ2', 'タグ3'] # 必須: タグの配列
description: '記事の説明文' # 必須: OGP/Twitter Card用(100-160文字推奨)
image: 'https://example.com/image.png' # オプション: 個別にOGP画像を指定(省略時はAppConfigから取得)
featured: false # オプション: トップページに注目記事として表示(true/false)
type: 'blog' # 必須: 'blog'(ブログ記事)または 'work'(制作実績)
---
各フィールドの説明:
AppConfig.ts の post_string[slug] から自動取得true にするとトップページの「注目記事」に表示される'blog' でブログ一覧、'work' でトップページの Works に表示画像管理の仕組み:
記事の画像URLは以下の優先順位で決定されます:
image フィールド(指定されている場合)AppConfig.ts の post_string[slug](記事のslugをキーとして取得)これにより、ほとんどの記事では image フィールドを省略でき、AppConfig.ts で一元管理できます。個別に異なる画像を使いたい場合のみ image フィールドを指定してください。
/blog ページに表示)/ トップページの Works セクションに表示)記事内で Mermaid 図を使用できます:
```mermaid
graph LR
A[Start] --> B[Process]
B --> C[End]
```
サポートされている図の種類:
記事内で外部サイトをリッチなカード形式で表示できます。[[ogp:URL]] という記法を使うだけで、自動的に外部サイトのOGP情報(タイトル、説明、画像、サイト名)を取得して表示します。
使用例:
## 参考リンク
公式ドキュメント:
[[ogp:https://svelte.dev/]]
SvelteKitの詳細:
[[ogp:https://kit.svelte.dev/]]
機能:
技術仕様:
/api/ogp - サーバーサイドでOGP情報を取得property="og:xxx" および name="og:xxx" の両方に対応<title> や <meta name="description"> から取得Netlify でのホスティングを想定しています。main ブランチへのプッシュで自動的にデプロイが開始されます。環境ごとの設定は vite.config.ts と svelte.config.js のエイリアスやアダプタ設定を更新してください。独自ドメインや環境変数を追加する場合は Netlify ダッシュボードと .env 管理を合わせて調整します。
自動記事生成機能を使用するには、以下のシークレットを GitHub リポジトリに設定する必要があります:
OPENAI_API_KEY (必須)
GITHUB_TOKEN (自動設定)
GitHub Actions により、毎日午前 9 時(JST)に技術記事が自動生成されます:
.github/workflows/daily-article-generator.ymlscripts/generate-daily-article.jssrc/posts/YYYY-MM-DD-daily-tech-news.md として保存daily-article/{run_id})自動生成された記事は PR として作成されるため、以下を確認してからマージしてください:
開発フロー、コミットメッセージ規約、レビュー手順などは AGENTS.md に集約しています。Issues / Pull Requests での議論は原則日本語で行い、必要に応じて概要を英語で補記してください。