7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

自サイトを Next.js + Vercel で置き換えようと思った話

Last updated at Posted at 2020-11-11

はじめに

自サイトの構成が古く(生PHPによるお手製CMS!)なってきたので、新しい技術で置き換えようと思いました。

いろいろ調べてみると、Next.jsGatsbyというフレームワークが良さそうだったので、まずはメジャーなNext.jsのほうを試してみることにしました。

Gatsbyを試してみた記事はこちらです。
https://qiita.com/naga3/items/2063e4eeecbf4e785d4d

Vercelとは

Next.jsを開発しているVercel社のホスティングサービスで、楽に使えそうなのでやってみます。

Vercelは無料プランと有料プランがありますが、個人が普通に使うぶんには無料プランで十分そうです。
https://vercel.com/pricing

プランによる制限についではこちらが詳しいです。
https://b.lollipop.onl/q2fgpwij4/

Vercelプロジェクト作成

アカウントがなければサインアップしておきましょう。
https://www.gatsbyjs.com/dashboard/signup/

まず、ダッシュボード https://vercel.com/dashboard から Import Project を押します。

既存のリポジトリを使うImport Git Repositoryと、テンプレートから作成するImport Templateがありますが、今回はゼロから作るのでImport Templateを選びます。

テンプレートはNext.jsを選びます。

次にリポジトリ名、プロジェクト名を適当に付けます。プロジェクト名は小文字のみの英数字+ハイフンしか使えないようです。

最後にDeployボタンを押すと、yarn installやらいろいろ走るのが見えて、デプロイ完了しました。やったね!

早速Visitボタンを押して完成したサイトに訪れてみましょう。

ローカルでの開発

ここからはローカルでの開発になります。nodeyarnはインストールしておきます。

上で作成したリポジトリをcloneして、

yarn install
yarn dev

を実行するとサーバーが立ち上がって、http://localhost:3000/で確認することができます。

Screenshot from 2020-11-11 10-24-14.png

次に、トップページに書いてあるとおり、pages/index.jsを編集してみます。

Reactはよく分かりませんが、JavaScriptとHTMLが混在した形式のようですね。とりあえずh1を変更してみます。

Welcome to <a href="https://nextjs.org">Next.js!</a>

これを以下のように変更します。

こんにちは <a href="https://nextjs.org">Next.js!</a>

保存するとLive Reloadされました。

Screenshot from 2020-11-11 10-29-04.png

いいですね。

ローカルからのデプロイ

そのままmasterにpushすれば本番に反映されるのではないかと思ったので、やってみると、無事反映されました。簡単ですね。

ページの追加

ページを増やしてみます。pagesディレクトリ下にファイルを作成し、ページ表示用の関数をexport defaultするだけでページを追加できるようです。

pages/page2.js
export default function Page2() {
  return <h1>page 2</h1>
}

http://localhost:3000/page2を開きます。

Screenshot from 2020-11-11 11-24-47.png

できました。

トップページからリンクを張る

普通にaタグで張ってみます。

pages/index.js
<a href="/page2">Page 2</a>

普通に動きました。

クライアントサイドでルーティングを行うLinkコンポーネントというものがあるらしいので、そちらも使ってみます。

pages/index.js
import Link from 'next/link'
...
<Link href="/page2">Page 2</Link>

こちらも普通に動きましたが、aよりもLinkのほうが圧倒的に速いです。通常はこちらを使ったほうが良さそうですね。

Linkコンポーネントの詳細はこちら https://nextjs.org/docs/api-reference/next/link

アセットを追加する

画像などのアセットは、/public配下に置きます。これでルートから参照できます。

適当な画像をimage.pngという名前で/public配下に置き、page2.jsを変更してみます。

pages/page2.js
export default function Page2() {
  return (
    <div>
      <h1>ビャンビャン麺</h1>
      <img src="/image.png" />
    </div>
  )
}

Screenshot from 2020-11-11 12-18-16.png

良さそうですね。

CSSを適用する

ページ内に書く

いわゆるstyleタグのようにCSSファイルを分けない場合は、最初から組み込まれているstyled-jsxを使います。

pages/page3.js
export default function Page3() {
  return (
    <div>
      <p>赤色</p>
      <style jsx>{`
        p {
          color: red;
        }
      `}</style>
    </div>
  )
}

Screenshot from 2020-11-11 14-03-15.png

CSSファイルを分ける

CSSファイルを独立させるのなら、stylesディレクトリにCSSファイルを置いてimportすればOKです。

CSSの構文はそのまま書けますが、ファイル名を*.module.cssにする必要があります。

styles/page4.module.css
.title {
  color: blue;
}
pages:page4.js
import styles from '../styles/page4.module.css'

export default function Page4() {
  return (
    <div>
      <p className={styles.title}>青色</p>
    </div>
  )
}

Screenshot from 2020-11-11 14-20-20.png

7
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?