古来からの言い伝えで雑なアウトプット先としてWordpressブログを使ってましたが、
あたりの理由からwordpressを脱却してなるべくコストを抑えて、触ってみたかったものを選定作り直しを図りました。
最終的な技術選定は下記です。
構成を図にすると画像の通りです。
上記を実現するためのレポジトリが3つありGithubApps以外はmainへのプッシュをトリガーに自動で機能するようになっています。
元々、NestJs+Prismaでバックエンドを作ろうと思っていましたが、CloudRunやCloudSQLの費用がどう頑張っても月1000円以上掛かるのと、Next.jsでSGするだけのブログなら無駄がすぎるのでやめました。
代わりに触ってみたかったヘッドレスCMSを採用してます。
有名どころのヘッドレスCMSから高機能+無料枠が充実しているContentfulを選択しました。
個人的に嬉しかったのはここらへん。
このサイトは、Next.jsでConentfulからGraphQLでデータを取得してSSGしています。
Next.jsからContentfulのコンテンツ取得には、GraphQL Content APIと、Apollo Clientを使用してCodegenで下記の様に、型定義とQueryが自動生成させてます。
1.shemaを取得
ContentfulのApps > GraphQL PlaygroundのSCHEMAからダウンロード出来たので、そのまま使ってます。
下記を参考にコマンドラインで取得したかったけど、Apollo Client周りが面倒だったのでやめました。
Contentful, Next.js, Apolloで作成したポートフォリオをGithub Pagesに公開したときの備忘録
2.Queryを作成
例として、ページングで使えそうな取得Queryを定義
3.codegen.ymlを作成
あとは下記の様なcodegen.ymlを作成して、
自動生成された後は、getStaticPropsなどでよしなに使えます。
Codegenを体験すると、自分で書いていた時代には戻れなくなっちゃう。
Contentfulにも、Wordpressの様な投稿画面はありますが、
まず、記事(mdファイル)は、Contentfulが用意してくれているコンテンツ管理用のContent Management APIを使用してエントリの作成・更新をしています。
この追加・更新についてはドキュメントではざっくりしか触れられておらず、特にEntryLink(References)がある場合のエントリ作成・更新方法がどこに書いてあるのか一生探しました。
(読み込みが浅いだけかも...?)
また、タグ周りでfindOrCreateのような動作が必要になりましたが、それも見つからず(恐らく機能自体ない?)自分で実装することになったので、かなりの時間がかかりました。
参考にしたい方がいましたら、汚いコードですが下記を参照ください。
https://github.com/sori883/conetentfulBlogApps/blob/main/src/index.ts
また、画像配信はGCSを利用しています。
理由としては、Contentfulで画像をアップロードすると1枚につき、無料枠のレコードが1消費されるからです。
無料枠が25kもあるので要らない気もしましたが、無料枠を越したときに面倒な移行をやるくらいなら最初からGCSを使ったほうが楽な気がして英断しました。
GCSだけの利用で税込み31円でした。
収益0円の雑記としては許容出来るお値段ですね。
OW2をやりながらだいぶ急いで作成したので、手直ししたいところがかなりあります。
他にやりたいこともあるので、ゆっくり余生を過ごすような思いで直して行こうかと思います!