|
| 1 | +--- |
| 2 | +title: Next.jsで生まれ変わる! |
| 3 | +date: "2025-04-28" |
| 4 | +description: "記事のデータが引き継げませんでした(´・ω・)" |
| 5 | +--- |
| 6 | + |
| 7 | +# Next.js |
| 8 | + |
| 9 | +Hello, World! |
| 10 | + |
| 11 | +どうも! The Infinity's です! |
| 12 | +今回!ついに!私のサイトを Next.js で置き換えることに成功しました! |
| 13 | + |
| 14 | +## Next.js に変えようと思った経緯 |
| 15 | + |
| 16 | +Web サイトを Next.js に変えようと思ったのには様々な理由がありますが、 |
| 17 | +特に大きかったのは**パフォーマンスの向上**と**開発体験の向上**、 |
| 18 | + |
| 19 | +そして**SSG(Static Site Generation、静的サイト生成)**の実現でした。 |
| 20 | + |
| 21 | +### パフォーマンスの向上(SSG について) |
| 22 | + |
| 23 | +以前のサイトでは、アクセスが増加した際に表示速度が遅くなることが課題でした。そこで注目したのが Next.js の SSG(Static Site Generation)です。SSG は、**事前に HTML ファイルを生成しておくことで、ユーザーがアクセスした際に高速にページを表示できる**という点が魅力です。 |
| 24 | + |
| 25 | +まるで、レストランで注文を受けてから料理を作るのではなく、人気メニューをあらかじめ用意しておくようなイメージでしょうか。これにより、サーバーへの負荷を減らし、**爆速でコンテンツを届けることができる**らしいです! |
| 26 | + |
| 27 | +### 開発体験の向上(TypeScript, TSX) |
| 28 | + |
| 29 | +また、開発体験の向上も大きな理由の一つです。 |
| 30 | +以前から**TypeScript や JSX での開発に興味**があり、 |
| 31 | +より型安全でコンポーネントベースの開発を効率的に行いたいと考えていました。 |
| 32 | + |
| 33 | +Next.js は TypeScript を標準でサポートしており、 |
| 34 | +React の JSX と組み合わせることで、**よりモダンで保守性の高いコード**を書くことができます。 |
| 35 | +(TSX)学習はかなり大変でしたが、実際に開発を始めてみると、その恩恵をひしひしと感じています。 |
| 36 | +コードの可読性が向上し、バグも早期に発見しやすくなったと実感しています。 |
| 37 | +新しい技術を学ぶのは大変でしたが、それに見合うだけの価値は十分にあると感じています!💻 |
| 38 | + |
| 39 | +#### TypeScriptの例 |
| 40 | + |
| 41 | +```tsx |
| 42 | +"use client"; |
| 43 | + |
| 44 | +import { useState, useEffect } from "react"; |
| 45 | + |
| 46 | +export default function BackToTopButton() { |
| 47 | + const [isVisible, setIsVisible] = useState(false); |
| 48 | + |
| 49 | + useEffect(() => { |
| 50 | + const handleScroll = () => { |
| 51 | + setIsVisible(window.scrollY > 300); // 300px以上スクロールしたら表示 |
| 52 | + }; |
| 53 | + |
| 54 | + window.addEventListener("scroll", handleScroll); |
| 55 | + return () => window.removeEventListener("scroll", handleScroll); |
| 56 | + }, []); |
| 57 | + |
| 58 | + const scrollToTop = () => { |
| 59 | + window.scrollTo({ top: 0, behavior: "smooth" }); |
| 60 | + }; |
| 61 | + |
| 62 | + return ( |
| 63 | + <button |
| 64 | + onClick={scrollToTop} |
| 65 | + className={`back-to-top ${isVisible ? "visible" : ""}`} |
| 66 | + aria-label="ページの先頭に戻る" |
| 67 | + > |
| 68 | + <svg |
| 69 | + xmlns="http://www.w3.org/2000/svg" |
| 70 | + viewBox="0 0 24 24" |
| 71 | + fill="currentColor" |
| 72 | + width="36" |
| 73 | + height="36" |
| 74 | + > |
| 75 | + <path d="M12 4l-8 8h4l4 8l4 -8h4z" /> |
| 76 | + </svg> |
| 77 | + </button> |
| 78 | + ); |
| 79 | +} |
| 80 | +``` |
| 81 | + |
| 82 | +### 実現したかった機能:SSG |
| 83 | + |
| 84 | +そして、最も実現したかった機能が、先ほども触れた**SSG(Static Site Generation)**です。 |
| 85 | +ブログのような静的なコンテンツが中心のサイトでは、SSG の恩恵を最大限に活かせると考えました。 |
| 86 | + |
| 87 | +**コンテンツを事前に生成することで、表示速度が向上するだけでなく、セキュリティ面でも有利**になります。 |
| 88 | +また、CDN との相性も良く、より安定した配信が可能になります。 |
| 89 | +今回の Next.js への移行は、まさにこの SSG を活用して、より快適なウェブサイト体験を提供したいという強い思いから実現しました。 |
| 90 | + |
| 91 | +## まとめと今後の展望 |
| 92 | + |
| 93 | +今回の Next.js への移行は、パフォーマンスの向上、開発体験の向上、そして何より SSG による高速で安定したウェブサイトの実現という、私にとって大きな一歩となりました。記事のデータ移行という想定外の課題はありましたが、新しい技術に触れ、学びながらサイトを再構築していく過程は、非常に刺激的で楽しいものでした。 |
| 94 | + |
| 95 | +まだ移行したばかりで、これからさらに Next.js の機能を使いこなしていく必要があると感じています。今後は、動的なコンテンツの導入や、より洗練された UI/UX の実現など、この新しい基盤を活かして様々なことに挑戦していきたいと考えています。 |
| 96 | + |
| 97 | +これからも The Infinity's をどうぞよろしくお願いいたします! |
0 commit comments