Gatsby react usage
ReactからGatsbyへの移行, 使い方
why
コーポレートサイトを作っていて,SPAはSEOが貧弱なのに気付き, Gatsbyなら手軽でSEOができると聞いた
SEO: Search Engine Optimization, 検索最適化
What is Gatsby Generater
Reactの上位フレームワーク
Markdownで書いたものをサイトにする為のジェネレーター?
react-routerでその度にSPAとして作成するのではなく,
ServerSideRenderingで実体ページを作成するのでSEOにも クローリングにも強いらしい.
またfile nameのurlを考えなくていいとか
導入
この新しくProjectを作成するやり方だと
/src/pages/*.js
/src/templates/*.js
などと構成がだいぶ違うので無理.
そもそもCakeと同じような規約の強い上位フレームワークなので向こうのルールに合わせて再構築する必要がありそう....
ここがhostに適してる?
Netlifyの労力で動的にホストできる?
ENV
でCLIツールをインストール
starter
gatsby-starter を使用
gatsby new hello-world https://github.com/gatsbyjs/gatsby-starter-hello-world
で作成
作成された
cd hello-world
で移動して
gatsby develop
同時にGraphiQLのEditorも立ち上がる.
gatsby-starterでは
src/pages/index.js
に
import React from "react" export default function Home() { return <div>Hello Gatsby!</div> }
があるだけだが
starter-default
starter-defaultの方だと自動で
src/component/
header, image, layout, seo,
を作成してくれる.
header
Header.jsx
import { Link } from "gatsby" import PropTypes from "prop-types" import React from "react" const Header = ({ siteTitle }) => ( <header style={{ background: `rebeccapurple`, marginBottom: `1.45rem`, }} > <div style={{ margin: `0 auto`, maxWidth: 960, padding: `1.45rem 1.0875rem`, }} > <h1 style={{ margin: 0 }}> <Link to="/" style={{ color: `white`, textDecoration: `none`, }} > {siteTitle} </Link> </h1> </div> </header> ) Header.propTypes = { siteTitle: PropTypes.string, } Header.defaultProps = { siteTitle: ``, } export default Header
Headerのスタイリングと / へのリンク
stringになってるかの型チェックまで作ってくれる
SEO
seo.jsでは
graphqlでの
metadataのset,
og(ブログとかにリンク投稿した時に読み込まれるデータ)
のtitle, desc, type,
Twitter Cardの card, creater, title, desc,
を記入できる.
function SEO({ description, lang, meta, title }) {
に打ち込めば全部作ってくれるぽい!!
改善案もある.
pages
reactのみと比べて一番楽になるところ
src/pages/about.jsを作るだけで
routingを勝手にしてpageを作ってくれる.....すごい
そして公式tutorialには
実際にアクセスされるpageとして扱われるものは
src/pages/about.js
のようにおいて
直接アクセスされない,パーツとして扱われるものは
src/components/header.js
として分けるように書いてある
React をやった最初はcomponents/に全て入れがちだが,
これは便利機能によってその後に起こる面倒なことを防止している.
非常に優れたフレームワークだ.