🐣
GitHub PagesにNext.jsでポートフォリオ作ってみた
モチベーション
- 2023年10月からの仕事を探す中で、みんな作っている(?)ポートフォリオを作ってみようと思った
- どうせ作るなら新しいことにチャレンジしてみようと思った
- Next.jsはまだ使ったことがなかった(本を読んだくらい)
- Vercelにデプロイしたことはあったが、GitHub PagesにデプロイしたこともGitHub Actionsを使ったこともなかった
環境
- Node: 18.17.1
- 当初 16.14.0 を利用していましたが、
npm run dev
を実行しhttp://localhost:3000
にアクセスしてもERR_CONNECTION_REFUSED
となってしまったためバージョンを上げました -
System Requirements には
Node.js 16.8 or later.
って書いてあるんですけどね・・・
- 当初 16.14.0 を利用していましたが、
- Next.js: 13.4.13
- React: 18.2.0
- TypeScript: 5.1.6
参考にさせて頂いたサイト
GitHub Pagesサイト作成手順
- 基本的には NextjsのSSGを使ってGithub Pagesサイトを作成する の手順通りでNext.jsの導入やGitHub Actionsのワークフローの作成、GitHub Pagesへのデプロイが実現できました
- そのため、ここでは注意点のみ書きます
リポジトリー名
GitHub Pages サイトを作成する にも書かれていますが、リポジトリー名は <user>.github.io または <organization>.github.io とする必要があります。これを守らないリポジトリー名を付与したところHTMLやCSSはデプロイされましたが、画像がデプロイされない問題が発生しました。
Next.jsの導入
以下のコマンドを実行した際、App Routerを利用するか聞かれます。NextjsのSSGを使ってGithub Pagesサイトを作成する はおそらくNoの前提で書かれていますので、Yesを選択すると次の点が変わってきます。
npx create-next-app@latest .
Would you like to use App Router? (recommended) ... No / Yes
App Routerを利用する場合の違い
- 違い1: 「pages\apiディレクトリの削除」は不要になる
- そもそもpagesディレクトリが存在せずappディレクトリになっていると思います。またapiディレクトリも存在しません
- 違い2: Configuration の通り
next.config.js
にoutput: 'export'
を追加する必要がある- これを行わずにコードをPushするとビルドのときにエラーが発生します
ポートフォリオ作成に関するメモ
今回ポートフォリオを作成するにあたり利用した技術の感想やノウハウのメモです。
Next.js
- 今回のポートフォリオにはページ遷移がないのでNext.jsのルーティング機能は利用していません
- また、動的にデータを取得する必要もないので、getStaticPropsなども利用していません
- ということでNext.jsっぽさは皆無!引き続き勉強していきます
Tailwind CSS
- 初めてTailwind CSSを使ってみました
- これまでReactでの開発の際は MUI を利用することが多く、MUIのsxに設定していた内容をClassNameに設定する印象です(Tailwind CSSのクラスを利用)
- styled-componentsよりもとっつきやすく感じました
- 一方で、コンポーネントを作成せずにページにHTML要素を配置しそのClassNameにTailwind CSSのクラスを書くこともできてしまうので危険ですね
コンポーネント開発
- 今回も一部コンポーネントをAtomic Designっぽく切り出して作成してみました
- Container/Presentorパターンにも取り組んでみました。ロジックとビューを分ける思想はもちろんいいと思いますが、今はまだついひとまとめにしたくなってしまうので継続し訓練が必要そうです
- Container/Presentorパターンの多くはカスタムフックに置き換えることができる という意見もあり、そちらの方が自分はコードが読みやすくなるように感じました
バッジ
-
https://shields.io/ を利用しGitHubっぽいバッジを作成しました
- 以下を利用/参考にさせて頂きました
favicon
- favicon用に透過のicoファイルを作成する際に https://ao-system.net/winicon/ を利用させて頂きました
作成したポートフォリオ
https://shoji9x9.github.io/ に公開しています。ソースコードは https://github.com/shoji9x9/shoji9x9.github.io にあります。
ポートフォリオ作成後に気付きましたが、LAPRAS をポートフォリオ代わりにできるかもしれません(職務経歴などは公開できなさそうですが)。LAPRASの自分のページ も公開しておきます。
Discussion