🎨Next.jsã§äœãã·ã³ãã«ãªããŒããã©ãªãªãµã€ãïŒåå¿è åãã¹ããããã€ã¹ãããã¬ã€ã
ã¯ããã«
ååã®èšäºãåå¿è åãNext.jså ¥éã¬ã€ããã§ã¯ãNext.jsã®åºæ¬çãªæ©èœãäœ¿ãæ¹ã玹ä»ããŸãããä»åã¯ãã®ç¶ããšããŠãå®éã«Next.jsã䜿ã£ãŠããŒããã©ãªãªãµã€ããäœã£ãŠã¿ãŸãããïŒ
ãé£ãããâŠããšæã£ãæ¹ããå®å¿ãã ããããã®èšäºã§ã¯ãåå¿è ã§ãè¿·ããªãããã«ãã³ãŒãä»ãã§äžå¯§ã«è§£èª¬ããŠãããŸãã
🎯 ãŽãŒã«ïŒãããªããŒããã©ãªãªãäœããŸã
- ãããããŒãžã«èªå·±ç޹仿ãšãããã£ãŒã«ç»å
- å¶äœç©äžèЧããŒãžïŒProjectããŒãžïŒ
- ãåãåãããã©ãŒã ïŒãããŒïŒ
- ã¹ã¿ã€ãªã³ã°ã¯CSS Modulesã䜿çš
- SEO察çãæèããæ§é
ããŒããã©ãªãªãµã€ãã¯ãèªåã®ã¹ãã«ãå®çžŸã玹ä»ããããã®Webãµã€ãã§ããå°±è·æŽ»åãããªãŒã©ã³ã¹æŽ»åã§ã掻èºããŸãã
🛠 1. ãããžã§ã¯ãã®æºå
ãŸãã¯Next.jsã®æ°ãããããžã§ã¯ããäœæããŸãããã
npx create-next-app@latest my-portfolio
cd my-portfolio
npm run dev
ãã®ã³ãã³ãã§Next.jsã®ã²ãªåãããžã§ã¯ããäœæãããnpm run dev
ã§ããŒã«ã«ãµãŒããŒãèµ·åããŸãã
ãã©ãŠã¶ã§ http://localhost:3000
ãéããšãNext.jsã®ã¹ã¿ãŒãããŒãžã衚瀺ãããŸãã
📁 2. ããŒãžæ§æãäœã
Next.jsã§ã¯ãpages
ãã©ã«ãå
ã®ãã¡ã€ã«åãèªåçã«ã«ãŒãã£ã³ã°ãããURLã«å¯Ÿå¿ããŸãã
以äžã®ããã«ãã¡ã€ã«ãäœæãããšãããããã«å¯Ÿå¿ããããŒãžãã§ããŸãïŒ
/pages
âââ index.tsx â ãããããŒãžïŒèªå·±ç޹ä»ïŒ
âââ projects.tsx â å¶äœç©äžèЧããŒãž
âââ contact.tsx â ãåãåããããŒãž
index.tsx
ïŒãããããŒãžïŒ
export default function Home() {
return (
<div>
<h1>ããã«ã¡ã¯ããããã¯Webãšã³ãžãã¢ã®å±±ç°ã§ãã</h1>
<p>Next.jsã§ã®éçºã倧奜ãã§ãïŒ</p>
<img src="/me.jpg" alt="ãããã£ãŒã«ç»å" width={200} />
</div>
);
}
ãã®ããŒãžã§ã¯ãã·ã³ãã«ã«ååãšç޹仿ããããã£ãŒã«ç»åã衚瀺ããŠããŸãã
SEO察çã®ããã«ãããŒãžã¿ã€ãã«ãã¡ã¿ããŒã¿ã远å ãããšããã«å¹æçã§ãã
import Head from 'next/head';
export default function Home() {
return (
<>
<Head>
<title>å±±ç°ã®ããŒããã©ãªãª | Webãšã³ãžãã¢</title>
<meta name="description" content="Next.jsã§äœã£ãå±±ç°ã®ããŒããã©ãªãªãµã€ãã§ããWebãšã³ãžãã¢ãšããŠã®ã¹ãã«ã玹ä»ããŸãã" />
</Head>
<div>
<h1>ããã«ã¡ã¯ããããã¯Webãšã³ãžãã¢ã®å±±ç°ã§ãã</h1>
<p>Next.jsã§ã®éçºã倧奜ãã§ãïŒ</p>
<img src="/me.jpg" alt="ãããã£ãŒã«ç»å" width={200} />
</div>
</>
);
}
projects.tsx
ïŒå¶äœç©ïŒ
import Head from 'next/head';
const projects = [
{ title: "Todoã¢ããª", description: "Next.js + TypeScriptã§äœæ" },
{ title: "ããã°ãµã€ã", description: "MarkdownãšSSGã䜿çš" },
];
export default function Projects() {
return (
<>
<Head>
<title>å¶äœç©äžèЧ | å±±ç°ã®ããŒããã©ãªãª</title>
<meta name="description" content="å±±ç°ãäœæããWebå¶äœç©ã®äžèЧãReactãNext.jsãæŽ»çšãããããžã§ã¯ãã玹ä»ããŸãã" />
</Head>
<div>
<h1>å¶äœç©äžèЧ</h1>
<ul>
{projects.map((p, i) => (
<li key={i}>
<h2>{p.title}</h2>
<p>{p.description}</p>
</li>
))}
</ul>
</div>
</>
);
}
contact.tsx
ïŒãåãåããïŒ
import Head from 'next/head';
export default function Contact() {
return (
<>
<Head>
<title>ãåãåãã | å±±ç°ã®ããŒããã©ãªãª</title>
<meta name="description" content="Webãšã³ãžãã¢å±±ç°ãžã®ãåãåãããã©ãŒã ããæ°è»œã«ãé£çµ¡ãã ããã" />
</Head>
<div>
<h1>ãåãåãã</h1>
<form>
<input type="text" placeholder="ãåå" required /><br />
<input type="email" placeholder="ã¡ãŒã«ã¢ãã¬ã¹" required /><br />
<textarea placeholder="ãåãåããå
容" required></textarea><br />
<button type="submit">éä¿¡</button>
</form>
</div>
</>
);
}
🎨 3. ã¹ã¿ã€ãªã³ã°ïŒCSS ModulesïŒ
Next.jsã¯ãCSS Modulesãšããä»çµã¿ã䜿ã£ãŠã¹ã¿ã€ã«ã管çã§ããŸãã
ããšãã°ãstyles/Home.module.css
ãšãããã¡ã€ã«ãäœã£ãŠã以äžã®ããã«èšè¿°ããŸãïŒ
.container {
padding: 20px;
text-align: center;
}
ãããindex.tsx
ã«ã€ã³ããŒãããŠäœ¿ããŸãïŒ
import styles from '../styles/Home.module.css';
<div className={styles.container}>
...
</div>
CSS Modulesã䜿ãããšã§ãã¯ã©ã¹åã®è¡çªãé¿ããªããã¢ãžã¥ãŒã«ããšã«ã¹ã¿ã€ã«ã管çã§ããŸãã
🌍 4. ããã²ãŒã·ã§ã³ã远å
è€æ°ã®ããŒãžãäœã£ãã®ã§ããŠãŒã¶ãŒãç§»åããããããã«ããã²ãŒã·ã§ã³ãçšæããŸãããã
å
±éããŒããšããŠcomponents/Header.tsx
ãäœããŸãã
// components/Header.tsx
import Link from 'next/link';
export default function Header() {
return (
<nav>
<Link href="/">Home</Link> |
<Link href="/projects">Projects</Link> |
<Link href="/contact">Contact</Link>
</nav>
);
}
ãã®ã³ã³ããŒãã³ããåããŒãžã«ã€ã³ããŒãããããšã§ãå ±éã®ã¡ãã¥ãŒã衚瀺ã§ããŸãã
import Header from '../components/Header';
export default function Home() {
return (
<div>
<Header />
{/* 以äžçç¥ */}
</div>
);
}
🚀 ãããã«
ããã§ãåºæ¬çãªããŒããã©ãªãªãµã€ãã宿ããŸããïŒ
Next.jsã®æ©èœïŒã«ãŒãã£ã³ã°ãã³ã³ããŒãã³ãæ§æãã¹ã¿ã€ã«ç®¡çïŒã䜿ããªãããå®è·µçãªéçºãäœéšã§ããã¯ãã§ãã
ãŸããSEO察çãšããŠ<Head>
ã³ã³ããŒãã³ãã«ããã¡ã¿ããŒã¿èšå®ãè¡ãããšã§ãæ€çŽ¢ãšã³ãžã³ã«åŒ·ããµã€ãæ§æã«ãªããŸãã
🔜 次åäºåïŒVercelã§ã®ãããã€ãšã«ã¹ã¿ã ãã¡ã€ã³èšå®
次åã¯ããã®ããŒããã©ãªãªãµã€ãã**ã€ã³ã¿ãŒãããäžã«å ¬éããæ¹æ³ïŒVercelã§ã®ãããã€ïŒ**ã«ã€ããŠç޹ä»ããŸãïŒ
ç¬èªãã¡ã€ã³ã®èšå®æ¹æ³ã解説ããäºå®ã§ãã®ã§ããæ¥œãã¿ã«ïŒ