Gatsbyで技術ブログを作ってみた

June 23, 2021


Gatsby とは

Gatsby

Gatsby は React ベースの静的サイトジェネレーターです。 生成される静的サイトはシングルページアプリケーションでもあるため、優れた UX をユーザーに提供できます。

公式サイト

メリット

  • サイトを高速化することができる
  • GraphQL を使用して、効率の良いリソース取得ができる
  • React を使用することができる
  • プラグインが豊富
  • CMS の種類が豊富 etc…

本ブログで使用している技術

Netlify CMS

Netlify

本ブログは、Netlify CMS で管理しています。Nelify CMS では、Netlify で静的ファイルの生成やホスティングをしてくれるため、低コストで運用・管理することができます。

公式サイト

Emotion

Emotion

Emotion は、CSS-in-JS のライブラリの一つです。
CSS-in-JS の別のライブラリで Styled Components という選択肢もありましたが、Emotion の方が良いという記事が多かったので、今回は Emotion を使用しました。

CSS-in-JS のプロダクト採用事例

上記のように、有名な Web 系企業でも採用されている CSS-in-JS ですが、パフォーマンスに影響を与えることが懸念されており、Next.js の公式では非推奨?となっている

Tailwind CSS

Tailwind CSS

Tailwind CSS は、Utility first というアプローチでスタイルを組み上げていくのが特徴です。

  • クラス名を考えるのに余計な労力を使う必要がない 何かをデザインするために sidebar-inner-wrapper というような愚かなクラス名を追加する必要はありません。 そして、単なるフレックスコンテナに対して、完璧で抽象的な名前を考えるのに悩まされることはもうありません。
  • CSS が肥大化しない 従来のやり方だと、新たな機能を追加するたびに CSS ファイルは大きくなってしまいます。ユーティリティを使うことで、全ては再利用可能で新たな CSS を書く必要は滅多にありません。
  • 変更を加えるのが怖くない CSS はグローバルであり、変更を加えたときに何を壊しているのかがわかりません。HTML のクラスはローカルであるため、他の何かが壊れることを心配せずにクラスを変更できます。

TypeScript

TypeScript

TypeScript は、JavaScript のスーパーセット(上位互換)で型定義やジェネリックを扱うことができます。
私は、1 年前ほどから TypeScript を使っており、とにかく型が欲しかったので使用しました。

GraphQL

GraphQL

Gatsby を使用すると、コンテンツのリソースを取得する際に GraphQL が使用できます。
これを使用することで効率の良いリソースの取得を行うことができるほか、graphql-codegen を用いて TypeScript の型定義を生成することができます。

ブログを作ってみて

まず、Emotion と Tailwind CSS の相性の良さを実感しました。
CSS-in-JS を使用すると、CSS ファイルを作ることがなくなるので、少ない CSS の記述でもコンポーネントを作成したり、直接スタイルをあてたりする必要があります。しかし、Tailwind CSS を併用することで、わざわざ CSS の少ないコンポーネントを作る必要がなくなり、直接スタイルをあてることがなくなりました。

また、GraphQL と TypeScript の相性の良さも実感することができました。
GraphQL は自身にスキーマ定義を持っているので、GraphQL Codegen を使用して、簡単に TypeScript の型定義を生成することができ、安全にリソースへアクセスすることができました。さらに、Gatsby は元々ブログ用のスキーマを持っているため、本ブログを作成する際にほとんど GraphQL を触ることなく開発することができました。

Gatsby の勉強をするために、本ブログを作成しましたが、Gatsby 以外の知見も得ることができ、とても満足です 🚀