簡単にサブスクリプションできるJamstackなホームページを作った話　デザイン・CMS　編　4

こんにちは**無職ニート**エンジニアのエッジです。

[前回](https://qiita.com/edegp/items/5732dce702460a28aa03)はBaSSの`Supabase`と決済サービスの`Stripe`について書きました。

今回は、CMSとデザインをどのように作ったか書いていこうと思います。

ちなみに、作ったページはこちら ↓

https://anful.jp

**CMSはcontentfulを採用しました**

## Contentfulを採用した理由
* HeadlessCMS
* HeadlessCMSの中で一番使っている人が多い
* ダッシュボードから簡単に記事編集できる

## 1. HeadlessCMSとは？
まず`CMS`は`Content Management System`の略で、コンテンツ（ファイル、画像）を管理するためシステムの事を指します。
`CMS`というと大体イメージするのが、ブログとかウェブメディアだと思います。 

従来の`CMS`（`Woedpress`など）では、ページ構造やデザインをすべてテンプレートとしてCMSの中に保存する必要がありましたが、
`HeadlessCMS`では、コンテンツのモデルに基づいて作られたデータなどを取得して、その情報をもとに描画するので、ページのレイアウトやデザインの幅が広いのが特徴です。

コンテンツをAPIで持ってきて、デザインはその都度決められるので、`serverless`なアプリケーションとの親和性が高いです。

## 2. 恒例のgoogle トレンド
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2604384/e1de5d6c-3b58-457a-848f-241a3976bba0.png)

日本だとまあまあですが

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2604384/0281e3ed-1df1-85ac-b81d-a60cbff66fee.png)

世界だとこんな感じ中国で`strapi`が多く使われていて、意外と人気だので今度使ってみようかな。

## 3. ダッシュボード
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2604384/f22f6961-3c52-260b-37ff-aaf426a541b0.png)

ダッシュボードはすごい見やすいです。
`webhook`とかも簡単に設定できるのは良かったかな
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2604384/aa7c0f6b-c50f-d0db-4bb9-754a3f62cfc2.png)
投稿の編集時や公開時に`Vercel`への自動ビルドが走るように設定するのが、ボタン一つでできます。

## 4. microCMSとの比較
`microCMS`は国産のheadlessCMSで日本語対応していますが、`Contentful`は対応していないので、英語が苦手な人は厳しいかもしれないです。
ただダッシュボードの見やすさでいうと`Contentful`の方がユーザーフレンドリーな感じはしました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2604384/b69c7fd3-8eb9-d7c7-4463-e98c493dd429.png)

一方で、`Contentful`はカテゴリー見たみたいなものとして`tag`というものがあるのですが、
* カテゴリーを一気に追加できなかったり
* 毎回開くたびにプライベート設定なので公開設定に変えなければいけなかったり
して少し不便な点もありました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2604384/97b7bb95-b617-06d9-1a19-3f444556a28a.png)

## 5. 微妙だった点
* 初期設定が`wordpress`より多くて面倒
* オブジェクトやデータベースの知識がないと`content`と`content model`の理解に時間がかかる

ぐらいですかね～

`headlessCMS`全般に言えることですが、
`content model`を最初に自分で作らないといけないのが、PCとか得意じゃない人には厳しいのかな～と思いました。
（自分もプログラミング始めたばかりだったので、少し時間がかかった）

## 6.使っている中で良いと思った点
APIを使うとにSDKがしっかり整備されていて、ほしい情報を的確に`javascript`で取得することができたのですごいいいなと思いました。

```  javascript:contentful-client.ts
import * as contentful from "contentful-management";

export const contentfulClient = contentful.createClient(
  {
    accessToken: process.env.CONTENTFUL_MANEGMENT_ACCESS_TOKEN,
  },
  {
    type: "plain",
    defaults: {
      spaceId: process.env.NEXT_PUBLIC_CONTENTFUL_SPACE_ID,
      environmentId: "master",
    },
  }
);
export const createAssets = (environment) =>
  environment
    .createAsset({
      fields: {
        title: {
          "ja-JP": title,
        },
        description: {
          "ja-JP": discription,
        },
        file: {
          "ja-JP": {
            contentType: "image/jpeg",
            fileName: title + ".jpeg",
            upload: url,
          },
        },
      },
    })
    .then((asset) => asset.processForAllLocales())
    .then((asset) => {
      asset.publish();
      return asset;
    });
export const getTags = (environment) =>
  environment.getTags().then((tags) => {
    let newTags;
    if (tags.items.length !== 0) {
      newTags = caption
        .substr(caption.indexOf("#", 0) + 1)
        .split("#")
        .filter((i) => tags?.indexOf(i) === -1)
        .map((tag) => {
          const sys = {
            sys: {
              type: "Link",
              linkType: "Tag",
              id: tag,
            },
          };
          return sys;
        });
    }
    return newTags | tags.items;
  });
export const getAuthor = (environment) =>
  environment.getEntry("6754QhfY8WKPNa5Y479a0r");
```

次はデザインについて

## デザインの流れ
1. おしゃれなサイト何個か持ってくる
1. それらの要素を組み合わせる
1. adobe DXで微調整

## 1.おしゃれなサイトを持ってくる
自分はこのサイトを使って探しました


https://www.awwwards.com/

`Awwwards`アワーズっていうのかな？

受賞作品が載っていて、いろんな人からの評価をもとに点数がつけられていて、ページ数も多く検索も容易なので、おしゃれで今風のデザインを知りたいときはおすすめです。

## 2.それらの要素を組み合わせる
今回は白と黒で作ったサイトにしたかったので、白と黒のreactで絞り込みました。

実際に参考にしたサイト↓

https://qclay.design/

https://departmentofweb.com/

https://identity.city/

ほぼ一番上のサイトのパクリみたいになってしまったので、次から気を付けます！
（著作権的にアウトかもしれない（笑））

## 3. adobe DXで微調整

文字考えて、画像を作って、載せるだけ

デザインは難しそうに見えますが、大体どっかからのアイデアの組み合わせみたいなものだと思うので、
そんなに気にせずにちょっとアレンジしてパクります。（著作権には気を付けよう！）

adobe DXでデザインを作るのは簡単なのですが、最初にやるとどうしても文字で書くなりがちで余白を少なくしがちになってしまうので、
余白をちょっと多いかな？？ってぐらいで作るとちょうどいい感じになると思ってます。

## まとめ
一応、稚拙な文章ではありますが、今回作ったホームページの要素についてあらかた整理して書けたかなと思っています。

間違っているところや、おかしいところがあればぜひご指摘ください、コメントしてくださると喜びます。

今回は、自分のために情報を整理ための記事なので、あまりエンジニアの方には役立ちずらい記事になっていて、LGTMがほとんどつかなかったので反省しています。

もう少し、役に立つ情報を記事にできるように日々精進したいと思います。

次回はLINEのLIFFアプリを使ってLINE予約のアプリを作ったのでそのことについて書いていきます。

あまって、Reduxについて書いていなかったので次回はReduxについて書いていこうと思います。

ではまた～