0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

JAMStack作成の軌跡Part4

Posted at

はじめに

  • 前回でTailwindCSSの導入を行った
  • 今まではサイトの目的が曖昧だったが、今回は下記を行いテックブログ としての体裁を整えていく
    • Contentfulとの連携
    • ブログコンポーネント の作成
    • TailwindCSS Typographyの導入
    • 動的ページの作成
  • 完成形はこちら

Contentfulとの連携

  • ContentfulはヘッドレスCMSの一種であり、コンテンツを表示するフロント部分は持たない(ヘッドレスの由来)
  • コンテンツの作成やモデル管理はContentfulのWebコンソース上から行うことが可能で、コンテンツはAPI経由で取得できるためJAMStackの要素として利用されることが多い模様
  • 具体的な連携手順はGatsby入門を参照
  • 作成したモデルは以下の通り

contentful-model.png

ブログコンポーネント の作成

  • 色やフォントはそれほど拘らず最小限の配色だけ決めた
  • いきなりソースコードを書こうとしても全体像がわからないため、ワイヤーフレームだけ書くことにした

配色の決定

  • 色やフォントはこだわるほどのセンスはないため決め手となる色だけ決めた
  • 色のカスタマイズも出来るがデフォルトカラーは濃淡も用意されているため使い勝手が良かった
項目
テーマカラー(primay) teal[400]
アクセントカラー(accent) rose[400]
文字色(base1) blueGray[800]
背景色(base2) coolGray[100]

ワイヤーフレームの作成

  • 手軽に作成できるGoogleスライドを利用して作成した

  • 各ページの構成

    page-layout.png

  • トップページのコンポーネント

    toppage-component.png

TailwindCSS Typographyの導入

  • 今回はContentful経由で取得したHTMLをそのまま表示するため、取得したHTMLのタグごとにtailwindcssを適用するのが面倒
  • そのためプラグインのtailwindcss-typographyを用いることで、プラグインを指定したブロックない全てのタグにスタイリングを適用する
const Layout: React.VFC<LayoutProps> = ({ children }) => {
  const data = useStaticQuery<GatsbyTypes.LayoutQuery>(graphql`
    query Layout {
      site {
        siteMetadata {
          title
        }
      }
    }
  `);

  return (
    <>
      <Header siteTitle={data?.site?.siteMetadata?.title || "Title"} />
      <div className="container mx-auto px-16 py-8 max-w-screen-lg prose bg-white"> #
        <main>{children}</main>
      </div>
      <Footer />
    </>
  );
};

  • この例ではLayoutコンポーネント化のh1タグやpタグにスタイリングが適用される

Typographyのカスタマイズ

  • tailwind.config.jsでカスタマイズが可能
  • h2タグを下図のようにカスタマイズしたかったのでいくつかのタグで設定した

h2tag.png

typography: {
  DEFAULT: {
    css: {
      img: {
        margin: "0",
      },
      h1: {
        padding: "0.25rem 0rem",
        margin: "0.25rem 0rem",
        fontWeight: "600",
      },
      h2: {
        padding: "0.25rem 0.5rem",
        color: colors.blueGray["800"],
        background: "transparent",
        borderLeft: `solid 8px ${colors.teal[400]}`,
      },
      p: {
        margin: "0.25rem 0rem",
      },
      a: {
        textDecoration: "none",
      },
    },
  },
},
  • 気になる点としては「Typographyを適用したブロックでは、Typographyのスタイリングを上書きすることが出来ない」ということ
    • 例えばpタグのmarginはtailwind.config.jsで0.25rem 0remと指定しているが、これをpタグ内でclassName=m-0としても0.25rem 0remのまま替わらない
    • これは公式のIssuesでもどうにかならない?と言われている(執筆時はOpen)

動的ページの作成

残っている課題

  • これで最低限ブログとしての体裁を保つまでにはなった。
  • 一方で以下のような課題が残っている
    • ブログとして
      • ブログのタグ付与
      • アイキャッチ画像の表示
    • 開発環境として
      • gatsby-node.jsのTypeScript化
      • ブログのデプロイ
      • componentsの分割(Atomic Designなど)
  • 今後はこのような課題にも挑戦していきたい
0
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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?