LoginSignup
1
1

【Next.js ✖️ microCMS】サクッと作った自己紹介サイトの話

Posted at

はじめに

私は25卒の文系大学生です。

現在はベトナムの受託開発企業でインターンとしてサーバーサイド開発をしています。

12月になり、リモートですが日本企業の就職面接やレジュメを出さなければいけないという事態になり、どうにかサクッとブログを作りたいなと思い、今回はmicroCMSとNext.jsを使ってブログを作りました。

URL

サイトURL

GithubURL

Demo

花火が打ち上がっている東京の夜をイメージして作りました。
思いの外綺麗にできたなと思います。

技術スタック・構成

どれも個人開発で少し触ったことがある程度で、あまり得意ではありません。
ただ、リッチなブログにはこれが最適だなと思い選択しました。
また、typescriptで書いていますが特に型安全にする必要があるようなものでもないので対して機能を生かしていません(笑)

サーバーサイド

  • microCMS

フロントエンド

  • TypeScript
  • Next.js
  • Prizma
  • fireworks.js (花火打ち上げ)

データベース

  • PostgreSQL

デプロイ

  • Vercel

その他

  • Qiita API

つまったこと

QiitaのレスポンスにOG画像のリンクがない

https://my-blog-yuta-2001.vercel.app/blogs
こちらのページでQiitaで投稿している記事の一覧を表示しています。

作る前の想定では、他の人のサイトを見た時にOG画像も表示できていたので、アクセスがあった際にQiitaのAPIを叩けば良いかと考えていました。
ただどうやらAPIにOG画像のリンクは含まれないのが実装中にわかり、当初の想定が崩れました。

解決した方法

Step 1️⃣ DBにQiitaの情報+Qiita APIから渡ってきたURLを元にスクレイピングを実行&DBに保存するAPIを作る
  • QiitaのAPIからはブログのurlも渡ってくるので、それを元にpuppeteerというライブラリを用いてスクレイピングを実行しOGを取得
  • ブログの情報とOGを合わせてblogsテーブルに保存

ただ、毎回これ全てを実行するとtimeoutが発生したりするので、QiitaAPIから渡ってくるupdated_atがDBのupdated_atより新しいもののみに対して実行するようにしました。

Step 2️⃣ 作ったAPIを定期的にcronで叩く (これは手動でいっかと思いやめました。)

vercelにcronの機能があったので実装しました。
ただ、Qiita更新の時に手動でやればいいやと思いやめました。
ちゃんと運用するならこちらがいいと思います。

Next.js・Vercelの機能で驚いたこと

今回必要に応じて色々機能を調べていたのですが、Next.js・vercelで「え。これできんの。」と思ったことが何点かありました。

今回のブログ作成を通じて、単なるフロントエンド向けののフレームワークではなかったんだなと認識しました。笑
人によっては当たり前だろと思われるかもですが、ほぼサーバーサイドだけしかやっていなかった自分にとって驚きが多かった開発でした。

API routerでapiを作れる

これほんとにすごいなと思ったのですが、だいぶ前からあるみたいですね。
APIを作れるってほとんどサーバーサイドもできるってことですね笑

Cron jobを設定できる

cronの設定をすれば任意の時間にAPI routerで作ったルートをたたけてしまうんですね。
確かNode.jsのライブラリでcron jobをコード上で作れるみたいなあった気がしますが、そんなことしないでも良いのはすごい便利だなと思いました。

VercelでPostgreSQLを用いてDBを立てれる

QiitaのレスポンスにOG画像のURLがなかったときはかなり落胆しましたが、探してみるとDBを使えるとのことでこの機能を発見しました。
助かりました。

便利なORMがある

サーバーサイド向けの機能揃いすぎだろと思いました。

最後に

わからない技術や使ったことない技術を使える個人での開発はやはり面白いなと感じました。
Next.js・Vercelの強さを改めて感じさせられました。
今度から簡単なサイトは全てNext.jsでやろうかなと思ってしまいました笑

1
1
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
1
1