前回のあらすじ
- Gatsbyでフロントエンドを作った
- Strapiからデータを取得して表示した
この記事ですること
- Gatsbyのプラグイン紹介
- 初見で構築した際、私が詰まったところを話す
Gatsbyプラグイン
Gatsbyにはプラグインという形で容易に機能拡張が出来る仕組みがある。
これがとても便利で、前の記事でStrapiからデータ取得をした際も活用している。
ただ、プラグインは大量にあってどれを入れればいいのか分かりづらくもある。
そこで、このブログにおいて入れているプラグインと採用理由について話していく。
今回は下記URLを参考にしつつ使ってみて必要だったものを残した形だ。
https://qiita.com/Takumon/items/da8347f81a9f021b637f
ありがとうございます。
コーディング系
gatsby-source-strapi
https://www.gatsbyjs.com/plugins/gatsby-source-strapi/
前回使ったStrapiからのデータ取得を楽にしてくれるプラグイン。
{
resolve: "gatsby-source-strapi",
options: {
apiURL: process.env.API_URL || "http://localhost:1337",
contentTypes: [
// List of the Content Types you want to be able to request from Gatsby.
"article",
"category",
"page",
"sidebar",
],
queryLimit: 1000,
markdownImages: {
typesToParse: {
article: ['content'],
page: ['content'],
sidebar: ['content']
}
}
},
},
今の設定はこんな感じ。
contentTypesがStrapiから取得したいコレクションタイプ名となる。
Strapiの構造を変えたらこっちも変えることを忘れずに。
gatsby-plugin-sass
https://www.gatsbyjs.com/plugins/gatsby-plugin-sass/
sassが使えるようになる。以上。
書くだけなので特に説明もない。
"gatsby-plugin-sass"
gatsby-plugin-typescript
https://www.gatsbyjs.com/plugins/gatsby-plugin-typescript/
typescriptが(ry
"gatsby-plugin-typescript"
gatsby-plugin-graphql-codegen
https://www.gatsbyjs.com/plugins/gatsby-plugin-graphql-codegen/
typescriptを使っていると、GraphQLの結果の型をどうすんねん問題が発生する。
自分でいちいち作るのは地獄といっていいだろう。
そこでビルド時に取得できた構造から型を自動生成してくれるのがこのプラグイン。
この場合types/graphql-types.d.ts
に出力してくれるのでインポートして使おう。
{
resolve: 'gatsby-plugin-graphql-codegen',
options: {
fileName: `types/graphql-types.d.ts`
}
},
デザイン系
書いたら使えるだけなので説明ないです。
gatsby-plugin-material-ui
https://www.gatsbyjs.com/plugins/gatsby-plugin-material-ui/
"gatsby-plugin-material-ui"
gatsby-plugin-styled-components
https://www.gatsbyjs.com/plugins/gatsby-plugin-styled-components/
"gatsby-plugin-styled-components"
アクセス分析
gatsby-plugin-google-analytics
https://www.gatsbyjs.com/plugins/gatsby-plugin-google-analytics/
Google Analyticsが(ry
trackingIdはUAから始まる例のやつ。
{
resolve: `gatsby-plugin-google-analytics`,
options: {
trackingId: $googleTrackingId,
head: true,
},
},
このプラグインは先頭に書けって説明されてるので注意。
gatsby-plugin-facebook-analytics
https://www.gatsbyjs.com/plugins/gatsby-plugin-facebook-analytics/
上に同じ。
Facebook Analyricsの導入は簡単だが、あまり情報がなかったのでそのうち導入方法の記事を書く。
{
resolve: `gatsby-plugin-facebook-analytics`,
options: {
appId: $facebookAppId,
includeInDevelopment: false,
debug: false,
xfbml: false,
language: "ja-jp",
},
},
SEO系
gatsby-plugin-canonical-urls
https://www.gatsbyjs.com/plugins/gatsby-plugin-canonical-urls/
URL正規化するやつ。
それが何かはSEOの話になるはずなので割愛。
気がついたら入ってたけどいれた記憶がない。
{
resolve: `gatsby-plugin-canonical-urls`,
options: {
siteUrl: $siteUrl,
},
},
gatsby-plugin-sitemap
https://www.gatsbyjs.com/plugins/gatsby-plugin-sitemap/
サイトマップ作る。
これもSEO系ですね。
{
resolve: `gatsby-plugin-sitemap`,
options: {
sitemapSize: 5000
}
},
gatsby-plugin-robots-txt
https://www.gatsbyjs.com/plugins/gatsby-plugin-robots-txt/
'gatsby-plugin-robots-txt'
構成補助系
gatsby-plugin-catch-links
https://www.gatsbyjs.com/plugins/gatsby-plugin-catch-links/<a href>
のような形の内部リンクを<Link>
の動作に置き換えてくれるもの。
これにより、内部での遷移の際リロードが発生しなくなる。
markdownを変換する形だと普通にやればaタグが出てきてしまうので導入必須といっていいだろう。
"gatsby-plugin-catch-links"
gatsby-plugin-offline
https://www.gatsbyjs.com/plugins/gatsby-plugin-offline/
ネットワークが不安定な環境でもサイトを見られるようにサービスワーカーを作ってくれる。
特にスムーズに見てほしいページにはオプションでプリキャッシュを指定できる。
"gatsby-plugin-offline"
gatsby-plugin-nprogress
https://www.gatsbyjs.com/plugins/gatsby-plugin-nprogress/
ページの読み込みが遅かった場合にプログレスバーを表示してくれる。
{
resolve: `gatsby-plugin-nprogress`,
options: {
color: `#444`,
showSpinner: false,
},
},
gatsby-transformer-remark
これはGatsbyでよく使われているmarkdown parserだが、今回はReactMarkdownをメインで使うので記事の抜粋の表示の為にだけ使っている。
https://www.gatsbyjs.com/plugins/gatsby-transformer-remark/
https://github.com/rexxars/react-markdown
{
resolve: `gatsby-transformer-remark`,
options: {
plugins: [
],
},
}
gatsby-plugin-twitter
https://www.gatsbyjs.com/plugins/gatsby-plugin-twitter/
twitterの埋め込みを書くのが少し楽になる。
`gatsby-plugin-twitter`
元々入ってるやつ
gatsby-plugin-react-helmet
https://www.gatsbyjs.com/plugins/gatsby-plugin-react-helmet/
htmlのhead要素を弄るやつ。
gatsby-plugin-manifest
https://www.gatsbyjs.com/plugins/gatsby-plugin-manifest/
PWAの設定ができる。
gatsby-transformer-sharp/gatsby-plugin-sharp
https://www.gatsbyjs.com/plugins/gatsby-plugin-sharp/
https://www.gatsbyjs.com/plugins/gatsby-transformer-sharp/
画像をいい感じに処理してくれるやつとその画像をGraphQL経由で読み込めるようにするやつ。
基本セットで使っていいと思う。
並べてみて分かるプラグインの多さ…
これらの機能を実装しようとしたらどれだけかかるか分からないくらいなので、これだけでもGatsbyを使う価値は間違いなくある。
まだまだいいプラグインはあるはずなので、いろいろ試してみてほしい。
ブログ構築でトラブったところ
このブログ構築は説明している程スムーズに行ったわけじゃない。 スムーズだったら週末2回潰したりしない。
ということでここまでの過程で躓いたところを話していく。
.tsと.tsxの違いが分かってなかった
前記事でも話したけど、x付いてるかついてないかで天地の差があった。
なんでこのタグ使えないの…とか思ってたけどこれだけだった。
消費時間:2時間
GraphQLのクエリがunknownって言われる
gatsby-source-strapiの設定に新しい項目を追加してなかった。
Strapi側を変えたらこっちも変えることは徹底しましょう。
消費時間:1時間
propsの型をどう作るか分からなかった
そもそもpropsってなんだよというところから始まる。
ただのデータの集まりだと気づいてからはひたすら入る値を構造体にしていく作業になった。
消費時間:0.5時間
StrapiのAPIにアクセスできない
権限を追加するのを忘れていた。
findとfindAllは追加しておかないと外部からデータが見れない。
これもGraphQLの方と合わせて忘れがち。
消費時間:0.5時間
返ってくるデータ構造が足りない
Strapiで必須ではないデータ項目にデータを入れていないとGraphQLでちゃんとした型を取得できなかった。
作ったばかりのデータ構造には一旦全てのデータを入れたものを一つ作成しよう。
GraphQL周りは引っかかるところがまあまああった。
消費時間:1時間
Strapi、productionではデータ構造を弄れない
gatsby develop
で起動したときにデータ構造を作って、productionで使う形になる。
APIルートを作るわけでサーバーの再起動もかかるので当たり前ではあるのだが、最初見たときは謎だった。
contentにhtmlを書いたらそのまま表示される
これはReactMarkdownのオプションを読んでなかった問題。
ちゃんとレンダリングするか指定できるので、それさえすればよかった。
消費時間:0.5時間
dockerでStrapiが起動しない
これは前にもすこし触れたの。
node_modulesの中身の問題で起動がコケていた。
消費時間:1.5時間
チュートリアルあるにも関わらず躓きまくりだった。 余計なことやりすぎ。
さて、次回はこのブログのデザイン過程について話していく。 基本的にMaterial-UIを使用していくので、他の慣れたライブラリを使っている場合はそちらを使うほうが良いだろう。