$ npm install -g pnpm
$ pnpm -v
10.6.5
$ npx create-next-app@latest nextjs-blog –use-pnpm
$ cd nextjs-blog
$ pnpm run dev
app/page.tsx
import Image from "next/image"; export default function Home() { return ( <main className="flex min-h-screen flex-col items-center justify-between p-24"> <h1 className="text-4xl font-bold">Welcome!</h1> <p className="text-xl">This is where our journey begins!</p> </main> ); } [/code $ mkdir -p app/about $ touch app/about/page.tsx export default function About() { return ( <div className="p-24"> <h1 className="text-2xl font-bold mb-4">About My Blog</h1> <p>This blog app is designed to share insights and knowledge.</p> </div> ); }
http://192.168.33.10:3000/about
appディレクトリで各ファイルが対応するURLに自動的にマッピングされる
publicは静的ファイル
next.config.jsはNext.jsの設定をカスタマイズ
export const posts = [ {id: '1', title: '最初の投稿', content: 'これは最初の投稿です', author: 'Alice', createdAt: new Date('2025-01-01')}, {id: '2', title: '2番目の投稿', content: 'これは2番目の投稿です', author: 'Bob', createdAt: new Date('2025-01-02')}, ]
import Link from 'next/link'; import {posts} from '@/app/lib/placeholder-data'; export default function BlogList() { return ( <div className="container mx-auto px-4 py-8"> <h1 className="text-3xl font-bold mb-4">ブログ投稿一覧</h1> <ul className="space-y-4"> {posts.map((post) => ( <li key={post.id} className="border p-4 rounded-lg"> <Link href={`/blog/${post.id}`} className="text-xl font-semibold text-blue-600 hover:underline"> {post.title} </Link> <p className="text-gray-600">{post.author} - {post.createdAt.toLocaleDateString()}</p> </li> ))} </ul> </div> ); }
なるほど、世界観は少しだけ理解しました^^