ゲーム開発
Unity
UnrealEngine
C++
Blender
ゲーム数学
ゲームAI
グラフィックス
サウンド
アニメーション
GBDK
制作日記
IT関連
ツール開発
フロントエンド関連
サーバサイド関連
WordPress関連
ソフトウェア設計
おすすめ技術書
音楽
DTM
楽器・機材
ピアノ
ラーメン日記
四コマ漫画
その他
おすすめアイテム
おもしろコラム
  • ゲーム開発
    • Unity
    • UnrealEngine
    • C++
    • Blender
    • ゲーム数学
    • ゲームAI
    • グラフィックス
    • サウンド
    • アニメーション
    • GBDK
    • 制作日記
  • IT関連
    • ツール開発
    • フロントエンド関連
    • サーバサイド関連
    • WordPress関連
    • ソフトウェア設計
    • おすすめ技術書
  • 音楽
    • DTM
    • 楽器・機材
    • ピアノ
  • ラーメン日記
    • 四コマ漫画
      • その他
        • おすすめアイテム
        • おもしろコラム
      1. ホーム
      2. 20240101_01_next_elekibear

      【都会のエレキベア】ブログを大幅リニューアル!WordPressからNext.jsに移行するまでの流れをまとめる

      都会のエレキベアフロントエンド関連Next.jsReactWordPress関連TypeScriptEmotionStorybookSSGp5.js
      2024-01-01

      当ブログのリニューアルについて

      マイケル
      マイケル
      みなさんこんにちは! マイケルです!
      エレキベア
      エレキベア
      こんにちクマ〜〜
      マイケル
      マイケル
      当ブログ「都会のエレキベア」ですが、この度・・・
      マイケル
      マイケル
      大幅リニューアル
      しました!!!
      20231231_wp_to_next_02
      ▲旧・都会のエレキベア

      20231231_wp_to_next_01
      ▲新・都会のエレキベア

      エレキベア
      エレキベア
      おめでとうクマ〜〜〜 ・・・あれ、でも見た目そんなに変わってないクマね
      マイケル
      マイケル
      そう見た目はほぼ変わっていないんだけど、WordPressで作られていたブログをNext.jsというReactのフレームワークを使って作り直したから、レスポンス周りがかなり改善されたんだ! 検索処理やページ遷移を行ってみるとかなり感触が違うのが分かると思います。
      20240101_01_next_elekibear_gif_06
      ▲WordPress使用時の挙動

      20231231_next_app_design_gif_01
      ▲Next.js使用時の挙動1

      20231231_next_app_design_gif_02
      ▲Next.js使用時の挙動2

      エレキベア
      エレキベア
      おお〜〜〜 だいぶサクサクになって最近のWebサイトって感じクマ
      マイケル
      マイケル
      前々からWordPressから脱却したいと考えてはいたんだけど、200記事以上たまった記事を移行するのはコストがかなりかかるので躊躇していました・・・。 しかし、ここ最近はNext.js製のサイトも割と増えて安定してきた印象を受けたので思い切って移行に挑戦してみることにしたというわけです。
      エレキベア
      エレキベア
      なるほどクマ それに正直、技術スタックを溜める意味でもWordPressいじるよりモダンなフロントエンド技術を扱いたいクマしね
      マイケル
      マイケル
      そして合わせてになりますが、快適な執筆環境を構築することにも挑戦しました。 これまでMarsEditというツールを使っていたのですが、 ・Markdownによるホットリロード ・Mac/Windows両方で執筆可能 とそれ以上の操作感になったと思っています。
      20240101_01_next_elekibear_gif_01
      ▲Markdownによるホットリロード執筆環境を構築した

      エレキベア
      エレキベア
      やっぱ執筆はMarkdownがいいクマね このブログの会話形式にも対応できてて書きやすそうクマ
      マイケル
      マイケル
      とはいえ、WordPressでまかなっていた機能をReactで全て一から実装し直すことになるので中々大変な作業でした・・・。 また、執筆環境改善にあたりElectronによるツール開発も行ってみました。 これらは何回かに分けて別の記事にまとめているので、この記事ではそちらを引用しながら概要をまとめていきます!
      Next.js移行関連の記事
      【Next.js】第一回 WordPressブログをNext.jsに移行する 〜全体設計、環境構築編〜
      2023-12-31
      【Next.js】第二回 WordPressブログをNext.jsに移行する 〜WordPressデータの移行・表示編〜
      2023-12-31
      【Next.js】第三回 WordPressブログをNext.jsに移行する 〜Markdown執筆環境構築編〜
      2023-12-31
      執筆ツール開発関連の記事
      【Electron × Vue3】Electron × Vue3 × TypeScript × Vite でツール開発環境を整える
      2023-12-31
      【Electron × Vue3】画像をリサイズして任意の場所に保存するツールを作る
      2023-12-31
      【Electron × Vue3】カテゴリ情報のCSVデータを操作するツールを作る
      2023-12-31
      エレキベア
      エレキベア
      おおぅ・・・ すごいボリュームクマ・・・
      マイケル
      マイケル
      プライベートもいろいろバタバタしつつ、数ヶ月かけて取り組んでたからね・・・ また、コードについては公開できる範囲でGitHubに上げているので、同じようにNext.jsに移行したと考えている方はご参考ください!

      GitHub - nextjs-elekibear-blog-scripts

      エレキベア
      エレキベア
      コードも中々すごいボリュームクマ・・・

      リニューアルを行なった理由

      マイケル
      マイケル
      まず、そもそもなぜNext.jsへ移行したのかについてですが、 ・WordPressへの不満があったから ・執筆環境を改善したかったから ・フロントエンド技術のスキルを向上させたかったから の三点が主な理由になります。

      WordPressへの不満

      マイケル
      マイケル
      WordPressは非常に便利なフレームワークですが、運用するにあたり下記のような不満がありました。
      1. ページ遷移等の動作が重い
      マイケル
      マイケル
      WordPressだと基本的にページごとにサーバに問い合わせることになるため、どうしてもレスポンスが悪いな・・・と思うことが多々ありました。
      エレキベア
      エレキベア
      めちゃくちゃ遅いわけではないクマが、最近のサイトと比べるとどうしても見劣りするクマね
      マイケル
      マイケル
      個人ブログ規模だとリアルタイムに反映させないといけない情報はほぼないので、Next.js等のSSG機能を使って静的サイトとして管理することでパフォーマンスが向上できます。
      20231231_next_app_design_09
      ▲SSGによる静的サイト作成のイメージ

      エレキベア
      エレキベア
      Next.js等のフレームワークを使うと無駄な通信を削減できるクマね
      2. 更新作業が手間
      マイケル
      マイケル
      更新作業が多発してしまうことも大きな不満としてありました。
      マイケル
      マイケル
      WordPress自体の更新もそうですが、テーマやライブラリといった個々の更新作業が中々なコストです。 また、テーマに対して上書きする形でスタイル等も実装していたため、更新の度に表示が崩れてしまうこともありました。
      エレキベア
      エレキベア
      更新作業は必要なことクマが、あまり時間は費やしたくないクマね・・・
      3. 個人ブログだと無駄が多い
      マイケル
      マイケル
      WordPressはコンテンツ管理システムとしてブログ以外にも柔軟に適用できるようになっています。 しかし、それゆえに個人ブログ規模だと無駄が多いという点もあると思います。
      エレキベア
      エレキベア
      楽にいろんなものが作れるのは魅力クマがやはり無駄な部分も多いクマね
      マイケル
      マイケル
      無駄な通信削減にも通ずる部分はありますが、必要な部分のみ使用してシンプルにしたいという気持ちがありました。
      マイケル
      マイケル
      そして静的サイトだと無料のホスティングサービスもあるためサーバ代も削減できるのも大きいですね・・・
      エレキベア
      エレキベア
      切実クマ・・・
      4. 使用している技術がレガシー
      マイケル
      マイケル
      WordPressはよくできたフレームワークではあるのですが、使用技術が古いために触っているとストレスが溜まってしまうことが多々ありました。
      エレキベア
      エレキベア
      もうだいぶ長く続いているフレームワーククマからね
      マイケル
      マイケル
      グローバル変数も多くフレームワーク依存な機能が多いので、ここに学習時間を割きたくないという気持ちが日に日に肥大していきました・・・。

      執筆環境の改善

      マイケル
      マイケル
      そして二つ目は執筆環境を改善したかったという理由があります。 これまでMarsEditというツールを使用して執筆を行なっていたのですが、ここにもやはり不満はありました。
      20231231_markdown_edit
      ▲MarsEditによる執筆

      エレキベア
      エレキベア
      MarsEditは有名な執筆ツールクマね
      マイケル
      マイケル
      ・OSが現状Macにしか対応していない ・VSCodeに慣れているとHTML記述が苦痛 ・執筆環境がツール依存になってしまう ・アップロードしたコンテンツの内容が崩れてしまうことがある ・Markdownで執筆できない 不満点を挙げると上記のようになります。 しかし、それでも画像アップロードやショートカット入力が便利だったため、移行を悩んでいた部分がありました。
      エレキベア
      エレキベア
      便利くまがツールに使われるのは勘弁クマね・・・
      マイケル
      マイケル
      この辺りも踏まえて、どうせならこのツール以上の執筆環境にできるよう意識しながら環境構築に挑戦しました。

      フロントエンド技術のスキル向上

      マイケル
      マイケル
      そして最後はなんといってもフロントエンド技術のスキルを向上させたかったのが理由です。 時代はjQueryからReact、VueといったUIフレームワークへ移行しているため、エンジニアとして普段からモダンな技術に触れる環境を作りかったのが主な理由です。
      エレキベア
      エレキベア
      WordPressをいじり続けてもエンジニアとしてはあまり恩恵がなさそうクマね 多少大変でも移行する価値はありそうクマ
      マイケル
      マイケル
      WordPressから脱却して自分で全ての機能を管理できるようにしておけば、今後技術トレンドが移り変わっても都度対応していけるのも大きいですね。 今回の開発でも、今後Next.js等の技術が廃れてもなるべくダメージが少ないよう意識しながら実装を進めました。
      エレキベア
      エレキベア
      長い目で見るなら流行りに乗りすぎるのも危険クマ

      Next.jsへの移行作業

      移行の流れ

      マイケル
      マイケル
      実際の移行作業についてですが、 1. 全体の設計と使用ライブラリの選定行う 2. WordPressデータを移行して表示できるようにする 3. Markdown執筆環境を構築する といった手順で進めました。
      マイケル
      マイケル
      この辺りはそれぞれ下記記事に分けて記載しているため、詳細は各記事をご参照ください!
      【Next.js】第一回 WordPressブログをNext.jsに移行する 〜全体設計、環境構築編〜
      2023-12-31
      【Next.js】第二回 WordPressブログをNext.jsに移行する 〜WordPressデータの移行・表示編〜
      2023-12-31
      【Next.js】第三回 WordPressブログをNext.jsに移行する 〜Markdown執筆環境構築編〜
      2023-12-31
      エレキベア
      エレキベア
      中々長い道のりクマ〜〜

      全体設計と使用ライブラリの選定

      マイケル
      マイケル
      全体設計については、下記のようにWordPressから必要なデータを抜き出してCSVとして管理する方式にしました。 記事ファイルとCSVデータから記事データを表示する流れとしました。
      【Next.js】第一回 WordPressブログをNext.jsに移行する 〜全体設計、環境構築編〜
      2023-12-31
      20231231_next_app_design_01
      ▲WordPressのデータをマスタCSVとして抜き出して使用する

      エレキベア
      エレキベア
      最終的に静的サイトを生成してデプロイするクマから、わざわざデータベース管理する必要もなさそうクマね
      マイケル
      マイケル
      そして使用ライブラリについては下記を使用することにしました。 モダンな環境になるよう、またなるべく無駄なライブラリは入れない というのを意識して選定しました。
      該当箇所
      ライブラリ
      フレームワーク
      Next.js
      スタイリング
      Emotion
      開発環境
      ESLint、Prettier、Storybook
      記事ファイル変換
      テキスト記事:cheerio
      Markdown記事:react-markdown、gray-matter、rehype-raw
      記事コンテンツ
      Prism.js、MathJax、Codepen、X
      エレキベア
      エレキベア
      ライブラリも入れすぎるとまた大変なことになるクマ
      マイケル
      マイケル
      そしてこれらの環境を構築して下記のような2カラムレイアウトを作るところまで解説しています。 こちらはGitHubプロジェクトにサンプルを公開しているので、ご参考ください!
      20231231_next_app_design_07
      ▲よくある2カラムレイアウト

      GitHub - nextjs-emotion-layout-sample

      エレキベア
      エレキベア
      簡単なアプリを作るところまでクマね

      WordPressデータのNext.jsへの移行

      マイケル
      マイケル
      そして次は設計に従ってWordPressのデータをエクスポート・表示していきます。 ・記事一覧ページ ・記事ページ の二つを主に実装しました。
      【Next.js】第二回 WordPressブログをNext.jsに移行する 〜WordPressデータの移行・表示編〜
      2023-12-31
      20231231_wp_to_next_01
      ▲記事一覧ページ

      20231231_wp_to_next_02
      ▲記事ページ

      エレキベア
      エレキベア
      ここで本格的に移行していくクマね
      マイケル
      マイケル
      合わせて、カテゴリ切替や検索処理といった遷移処理もSPAにして操作感を改善しました。
      20231231_next_app_design_gif_01
      ▲SPAによる表示切替

      エレキベア
      エレキベア
      実際の記事以外はSEOにもほぼ関係ないクマからね

      Markdown執筆環境の構築

      マイケル
      マイケル
      そして最後にMarkdownによる執筆環境を構築します。 最初に紹介した通り、ホットリロードによる執筆ができるようになっています。
      【Next.js】第三回 WordPressブログをNext.jsに移行する 〜Markdown執筆環境構築編〜
      2023-12-31
      20240101_01_next_elekibear_gif_01
      ▲Markdownによるホットリロード執筆環境を構築した

      マイケル
      マイケル
      ホットリロード機能はExpressプロジェクトを別途立ち上げて監視するようにしました。 また、画像アップロード、カテゴリの編集についてはプロジェクト側での対応が難しかったためElectronでデスクトップアプリを開発することで対処しました。
      【Electron × Vue3】画像をリサイズして任意の場所に保存するツールを作る
      2023-12-31
      【Electron × Vue3】カテゴリ情報のCSVデータを操作するツールを作る
      2023-12-31
      20231231_image_resize_01
      ▲作成した画像リサイズツール

      20231231_category_browser_01
      ▲カテゴリ編集ツール

      エレキベア
      エレキベア
      中々本格的なツールクマね
      マイケル
      マイケル
      このツールを使用しながら執筆している様子が下記になります。 MarsEditに負けず劣らずの執筆感になったかと思っています!
      20240101_01_next_elekibear_gif_02
      ▲画像リサイズツールを使用した執筆

      エレキベア
      エレキベア
      これは執筆も楽しくなるクマ〜〜〜〜

      移行を終えた感想

      マイケル
      マイケル
      移行作業は以上になりますが、ここまで終えた感想としては、想像以上に大変でした・・・。 対応が足りていない箇所もあると思うので、今後もちまちまと手を加えていくと思います。
      エレキベア
      エレキベア
      WordPressのデータをどう移行するか?を考えるのが中々大変だったクマね
      マイケル
      マイケル
      しかし元の記事データも大方移行できたし、操作感もだいぶ改善されました! SEO周りにどう影響出るかが不安ではあるけど、手間をかけてもやる価値はあったなと思います!
      エレキベア
      エレキベア
      前のもっさり操作にはもう戻れないクマ〜〜〜
      マイケル
      マイケル
      そしてなによりこの開発を通じて、 ・Next.js ・React ・Electron ・Vue.js ・Express といったモダンな技術が扱えるようになったことと、 全ての機能を自身で実装、把握できたことはかなり大きかったと思います。
      マイケル
      マイケル
      Web開発周りがだいぶカバーできるようになったし、フロントエンドのUI周りの設計はゲーム開発にも活かせる部分はかなりあると感じました。
      エレキベア
      エレキベア
      UI周りはフロント技術が一歩出ている印象はあるクマから、触れるようになったのはかなり大きかったクマね
      マイケル
      マイケル
      またしばらくゲーム開発に戻ろうと思うけど、その内このブログ以外にもWebサイトを立ち上げてみようかと思っています!

      おわりに

      マイケル
      マイケル
      というわけでNext.jsへの移行手順についてでした! どうだったかな??
      エレキベア
      エレキベア
      大変だったクマがNext.jsでの開発は楽しいし、 なによりこのサイトが一新されて嬉しいクマ〜〜〜
      マイケル
      マイケル
      WordPressからの移行はかなり悩みながら進めたので、同じように移行しようとしている方は参考にしていただければ嬉しいです!
      マイケル
      マイケル
      それでは今日はこの辺で! アデューー!!
      エレキベア
      エレキベア
      クマ〜〜〜〜〜

      【都会のエレキベア】ブログを大幅リニューアル!WordPressからNext.jsに移行するまでの流れをまとめる 〜完〜


      都会のエレキベアフロントエンド関連Next.jsReactWordPress関連TypeScriptEmotionStorybookSSGp5.js
      2024-01-01

      関連記事
      【謹賀新年】2025年こそクマ年!振り返りと抱負を決める
      2025-01-01
      【ゲーム数学】第九回 p5.jsで学ぶゲーム数学「フーリエ解析」
      2024-05-12
      【謹賀新年】2024年こそクマ年!振り返りと抱負を決める
      2024-01-21
      【Node.js】廃止されたAmazonアソシエイト画像リンクをAmazon Product Advertising API経由で復活させる
      2024-01-08
      【Next.js】第四回 WordPressブログをNext.jsに移行する 〜サーバ移行・SEO・広告設定編〜
      2023-12-31
      【Next.js】第三回 WordPressブログをNext.jsに移行する 〜Markdown執筆環境構築編〜
      2023-12-31
      【Next.js】第二回 WordPressブログをNext.jsに移行する 〜WordPressデータの移行・表示編〜
      2023-12-31
      【Next.js】第一回 WordPressブログをNext.jsに移行する 〜全体設計、環境構築編〜
      2023-12-31