{"componentChunkName":"component---src-templates-post-template-jsx","path":"/blog/posts/connpass-ref","result":{"data":{"microcmsPosts":{"title":"ヘッドレスCMSで爆速ブログ構築〜Gatsby+microCMS+StartBootstrap","updatedAtJP":"2022/03/02","updatedAt":"2022-03-02T01:28:04.960Z","link":"connpass-ref","article":"<h2 id=\"hb3447b9356\">０．はじめに</h2><ol><li>自己紹介と今日の見通し</li><li>いいよっていう話ばかりしますが、もちろんデメリット、うまくいかないところもありますので、ご了承を。</li><li>notionの共有</li><li>目次<ol><li><a href=\"https://www.notion.so/CMS-Gatsby-microCMS-StartBootstrap-0f8f901a2bc14587b5283184d46abf38\" target=\"_blank\" rel=\"noopener noreferrer\">microCMS（ヘッドレスCMS）がいいよという話</a></li><li><a href=\"https://www.notion.so/CMS-Gatsby-microCMS-StartBootstrap-0f8f901a2bc14587b5283184d46abf38\" target=\"_blank\" rel=\"noopener noreferrer\">Gatsby（静的サイトジェネレータ）がいいよという話</a></li><li><a href=\"https://www.notion.so/CMS-Gatsby-microCMS-StartBootstrap-0f8f901a2bc14587b5283184d46abf38\" target=\"_blank\" rel=\"noopener noreferrer\">Gatsby-microCMSブログ構築デモと解説</a></li><li><a href=\"https://www.notion.so/CMS-Gatsby-microCMS-StartBootstrap-0f8f901a2bc14587b5283184d46abf38\" target=\"_blank\" rel=\"noopener noreferrer\">まとめ</a></li></ol></li></ol><h2 id=\"hf2167e19e4\">１．microCMS（ヘッドレスCMS）がいいよという話</h2><ol><li>ヘッドレスCMSとは？<ul><li>ブログサイトを例に考えてみましょう。</li><li>記事のページを１つずつHTMLとCSSで書くのは大変、記事を更新、追加するのにコードをいじるのが大変</li></ul></li></ol><ul><li>→　CMSコンテンツ・マネジメントシステム<ul><li>記事を書いて登録すれば、WEBで表示ができるいろいろなブログサービスもCMSの一つ</li><li>CMSとはなにか？→スライド</li><li>見えている部分（フロントエンド・頭）と見えていないデータベース・管理部分（バックエンド・体）があります</li><li>代表的なCMS　WordPress　表示部分をテーマ等を使ってカスタマイズできる。データベース部分もある程度カスタマイズ可能</li></ul></li><li>CMSのうち、データベース＋管理機能の部分をあつかうツール・サービスがヘッドレスCMS　←→　カップルドCMS<ul><li>→ヘッドレスだから相棒（レンダリング（表示）を担うツール）が必要</li><li>今回はGatsby</li></ul></li></ul><ol><li>ヘッドレスだと何がいい？</li></ol><ul><li>好きなようにデータベースの構成を作れる<ol><li>ヘッドレスCMSではGUIでデータベースからテーブルを作成することができるので、バックエンドでプログラミングするのに近い自由度でデータベースを作れます。</li></ol></li><li>開発者とコンテンツ管理者の分業ができる<ul><li>例えば新規立ち上げのときでも、ヘッドレスCMSでコンテンツを作りつつ、フロントエンドの構築作業ができて、効率的な開発が可能</li></ul></li><li>フロントで好きな技術を扱える<ul><li>エンジニアの得意な技術、コンテンツや状況に応じた技術を選択できる</li><li>学習したい技術を使って練習も</li></ul></li><li>引っ越しが簡単・フロントの技術変更が容易<ul><li>今回、そんの構築したものに変更を加えてあらたな機能追加した場合</li><li>アップデートしたら、新たにプロジェクトを起こして、連携の設定をすればOK</li></ul></li><li>１つのデータソースから複数のところ（ウェブアプリ、ネイティブアプリ・・・）への展開が可能<ul><li>技術さえあれば、1つのデータをWEBアプリで、ネイティブアプリで使うことができる。</li></ul></li><li>コンテンツ更新が簡単に<ol><li>コードをさわらなくてもいい</li></ol></li><li>一部分だけをヘッドレスCMSで管理できる<ol><li>例えば、LPで３つくらい並列で「ベネフィット」とか表示するときも、その部分をヘッドレスCMSで管理できたりもします。</li><li>自分のポートフォリオ部分</li><li>microCMSだとくりかえしフィールドなどを使うとかなり便利そう</li><li>SSGで展開することで早くて、安全で、強力なサイトに</li></ol></li></ul><ol><li>ヘッドレスCMSいろいろ<ul><li>Contentful</li><li>Strapi</li><li>DatoCMS</li></ul></li><li>microCMSとは</li></ol><ul><li>日本製（ヘッドレスCMSでは唯一？）<ul><li>英語のヘッドレスCMSばかりの中でUIが日本語</li></ul></li><li>日本語のサポート、手厚い。<ul><li>画像の扱いで困ったとき、日本語のチャットで問い合わせできるというのはありがたかった。→　すぐ返答いただけました。</li></ul></li><li>どんどん開発が進んでいます。<ul><li><img src=\"https://images.microcms-assets.io/assets/a20dd30d3f4d43d8814295dae8cee134/a8e2757688064c29aeecebf215482c84/image.png\" alt=\"\"></li><li>UI/UXがわかりやすい</li></ul></li><li>カスタムフィールド、繰り返しフィールド→いろいろなサイト構築に<ul><li>そんのポートフォリオサイトのポートフォリオの部分</li><li>サイトのキャンペーン表示部分またはLPのコンテンツ部分に導入することで、ノーコードでお店の人が更新</li><li>個人ブログや個人開発レベルなら無料で公開まで</li></ul></li><li>microCMSのユースケースから 企業のDX推進にもよく用いられるようになっている<ol><li><a href=\"https://blog.microcms.io/usecase-acall\" target=\"_blank\" rel=\"noopener noreferrer\">https://blog.microcms.io/usecase-acall</a>アップデートのメンテナンスをしなくていい</li><li><a href=\"https://blog.microcms.io/usecase-interspace\" target=\"_blank\" rel=\"noopener noreferrer\">https://blog.microcms.io/usecase-interspace</a>記事修正しやすい</li><li><a href=\"https://blog.microcms.io/usecase-beatfit\" target=\"_blank\" rel=\"noopener noreferrer\">https://blog.microcms.io/usecase-beatfit</a>本来ならバックエンドでデータベースや管理画面を構築するところをmicroCMSで実現　→　工数減</li></ol></li></ul><h2 id=\"hfdb7037623\">２．Gatsby（静的サイトジェネレータ）がいいよという話</h2><ol><li>Gatsbyとは？</li><li>SSG（静的サイトジェネレータ）<ul><li>早い・安全・強い</li></ul></li><li>豊富なプラグイン</li></ol><ul><li>プラグインでいろいろな機能を追加できる<ul><li>画像処理</li><li>SEO設定</li><li>いろいろスターターがあります</li></ul></li><li>テーマを使うと、アップデートにも対応！<ul><li>WordPressのテーマアップデートみたいな感じ</li></ul></li></ul><ol><li>Reactベース<ul><li>jsxファイル→htmlに似ている</li></ul></li></ol><ul><li>コンバーターもあるので、テンプレート、自分で書いたhtmlを変換できる<ul><li><a href=\"https://transform.tools/html-to-jsx\" target=\"_blank\" rel=\"noopener noreferrer\">https://transform.tools/html-to-jsx</a></li></ul></li><li>cssの当て方もいろいろいい感じのものがある<ul><li>scss,sassでもOK</li><li>CSSinJS</li></ul></li><li>今回採用<ul><li>ノーマルCSS→global.css bootostrap</li><li>styled-components</li></ul></li></ul><ol><li>graphQL<ul><li>いろいろなデータソースを１つのインターフェースで管理できる！</li><li>ミックスもOK</li></ul></li></ol><p>※　ここでこのnotionを共有する</p><h2 id=\"h1a58a3ed5a\">３．Gatsby-microCMSブログ構築デモと解説</h2><h3 id=\"hbdc777fc29\">１．Gatsbyプロジェクトの生成</h3><ol><li>プロジェクト生成</li></ol><pre><code>gatsby new myblog &lt;https://github.com/sonho463/starter-microcms.git&gt;</code></pre><ol><li>コードエディタでプロジェクトを開く</li></ol><pre><code>// プロジェクトのフォルダへ移動\ncd myblog\n\n// コードエディタでプロジェクトを開く\ncode .\n\n</code></pre><h3 id=\"h573d57a8bc\">２．microCMSの設定</h3><ol><li>ユーザー登録〜コンテンツ（API）設定</li><li>サービス名を設定します。後でGatsbyで接続するときに使用します。<ol><li><img src=\"https://images.microcms-assets.io/assets/a20dd30d3f4d43d8814295dae8cee134/4d55dacb18a649bc9b5aa7db50bb6d10/image.png\" alt=\"\"></li><li>CMSにおいては、データベースに当たる部分</li></ol></li><li>APIの設定：APIは「テーブル」に当たる部分</li></ol><ul><li>記事API、カテゴリAPI、設定APIの３つのAPIを作成<ul><li>記事API、カテゴリAPI：リスト形式</li><li>設定API：オブジェクト形式</li></ul></li></ul><ol><li>記事(posts)とカテゴリ(category)のAPIを作成（リスト形式）</li><li>コンテンツ（API)の横の＋</li></ol><p><img src=\"https://images.microcms-assets.io/assets/a20dd30d3f4d43d8814295dae8cee134/51e4d69c1a1c41488c15c2c76f1afa88/image.png\" alt=\"\">\t</p><ol><li>API名・エンドポイントを設定</li></ol><p><img src=\"https://images.microcms-assets.io/assets/a20dd30d3f4d43d8814295dae8cee134/e8e6709eb6cf4659a3a42dca56eb692f/image.png\" alt=\"\"></p><ul><li>API名はわかりやすい名前、エンドポイントは以下<ul><li>ブログ記事のAPI：posts</li><li>カテゴリのAPI：category</li></ul></li></ul><ol><li>APIの型を選択　→リスト形式<ol><li><img src=\"https://images.microcms-assets.io/assets/a20dd30d3f4d43d8814295dae8cee134/5f8574dba8e94c99850330a5286dcaa2/image.png\" alt=\"\"></li></ol></li><li>schemaをインポート</li><li><code>microcmsSampleFiles/microcmsSchema</code>フォルダ内にあります<ol><li><img src=\"https://images.microcms-assets.io/assets/a20dd30d3f4d43d8814295dae8cee134/c52c163e3f634ec18f3d5b4f99f9d4c8/image.png\" alt=\"\"></li></ol></li><li>postsAPIの設定（categoryAPIはそのままでOK）<ul><li>categoryフィールドの形式を「コンテンツ参照」にしているので、インポートしたあとに設定をしなおします。</li></ul></li><li>postsAPIを選択、画面右上のAPI設定<ol><li><img src=\"https://images.microcms-assets.io/assets/a20dd30d3f4d43d8814295dae8cee134/414d87d485ee4f078bc8c681e897bacf/image.png\" alt=\"\"></li></ol></li><li>APIスキーマを選択<ol><li><img src=\"https://images.microcms-assets.io/assets/a20dd30d3f4d43d8814295dae8cee134/6cbb9e165c76469081d7166769fb04c3/image.png\" alt=\"\"></li></ol></li><li>カテゴリフィールドの種類を「コンテンツ参照」にして、参照先をcategoryに設定</li><li><img src=\"https://images.microcms-assets.io/assets/a20dd30d3f4d43d8814295dae8cee134/2d96a4eec00c4a7b9af6c0dacdab8909/image.png\" alt=\"\"><ol><li>変更をクリックして設定反映</li></ol></li><li>記事を追加</li><li>csvでサンプルファイルをインポート</li><li><img src=\"https://images.microcms-assets.io/assets/a20dd30d3f4d43d8814295dae8cee134/5208677e005d4fab9f517242c744cb36/image.png\" alt=\"\"><ul><li>ルートの <code>microcmssampleFiles/csv</code>フォルダにあります</li><li>自分で記事を追加してもOK</li></ul></li><li>記事データがないとビルドエラーが出ます。<ol><li>ブログ記事は2件</li><li>カテゴリは1件データがあればOK</li><li>ブログ記事のうち１つは、すべてのフィールドにデータを設定する</li></ol></li><li>設定APIを追加<ol><li>上記と同じ流れでオブジェクト形式で追加</li><li>オブジェクト形式のAPIは、コンテンツのインポート機能はないので、直接、タイトルとサブタイトルを追加</li></ol></li></ol><h3 id=\"hacc514bd1b\">３．GatsbyとmicroCMSの接続設定</h3><ol><li>環境変数設定ファイル作成</li><li>ルートフォルダに以下のファイルを作成</li><li>.env.development<ol><li>.env.production</li></ol></li><li>microCMS管理画面からapikeyを確認してコピー・ペースト</li></ol><p><img src=\"https://images.microcms-assets.io/assets/a20dd30d3f4d43d8814295dae8cee134/b12dc6994a0b49b396d3375a6bfd72fc/image.png\" alt=\"\"></p><ol><li>環境変数設定ファイル</li></ol><pre><code>MICROCMS_API_KEY = \"YOUR_API_KEY\"\nMICROCMS_SERVICE_ID = \"YOUR_SERVICE_ID\"</code></pre><h3 id=\"h6896a52f17\">４．Git〜確認〜デプロイ</h3><ol><li>Gitに登録</li><li>GitHub</li></ol><pre><code>git remote add origin &lt;https://github.com/sonho463/myblog0529.git&gt;\ngit branch -M main\ngit push -u origin main</code></pre><ol><li>gatsby develop<ol><li>microCMS側にデータがないとビルドエラー</li><li>ブログ記事は2件、カテゴリは1件、configも入力しておく</li></ol></li><li>gatsby build → gatsby serve → localhost:9000</li><li>GitHubへ<ol><li>Githubにリポジトリ作成</li><li>git push</li></ol></li><li>git push</li><li>デプロイ</li><li>環境変数の設定</li></ol><p><img src=\"https://images.microcms-assets.io/assets/a20dd30d3f4d43d8814295dae8cee134/dc3ee1447ed342389a2e7d8f895ef707/image.png\" alt=\"\"></p><ol><li>デプロイ先の選択はいくつかありますが、それぞれで環境変数を設定しておく必要があります。</li><li>Netlifyへデプロイ</li></ol><h3 id=\"ha657028ec3\">５．コードや表示ページを見ながら解説します。（時間的に触れないかもしれません）</h3><ol><li>GraphQL の記述について 1.</li><li>CreatePageでページが生成される仕組み<ol><li>post-template.jsx</li></ol></li><li>index-templateのページネーション機能（GraphQLのフィルター機能で実装）<ol><li>カテゴリページには未実装😅</li></ol></li><li>previous,nextのリンクについて（かなりハマったのでその話）<ol><li>GraphQLでデータを読み込んだときにnullだとエラーでストップ</li><li>入れ子のオブジェクトで読み込むことで、null判定する</li></ol></li><li>画像の扱い<ol><li>gatsby-source-microcmsプラグインがgatsby-pluguin-imageに未対応</li><li>gatsby-plugin-imageとは</li><li>画像最適化にはImgixを利用</li></ol></li><li>設定いろいろかえてみる</li><li>記事一覧ページの表示数<ol><li>GraphQLの引数　limit,skip　を利用</li></ol></li><li>トップページの背景画像<ol><li>ファイルの入れ替えで対応</li><li>記事一覧ページとカテゴリ別ページ</li><li>アバウト</li><li>コンタクト</li></ol></li><li>どうしても、コードを触らないといけないところ<ol><li>コンタクトフォーム→GoogleFormをiframeタグで埋め込んでいます</li></ol></li><li>microCMSの無料プランの制限について<ul><li><a href=\"https://microcms.io/pricing\" target=\"_blank\" rel=\"noopener noreferrer\">https://microcms.io/pricing</a></li><li>サービス数１個</li><li>コンテンツ（API）数　１０個</li></ul></li></ol><ul><li>リクエスト数<ul><li>Read　無制限</li><li>Write　１００回</li></ul></li></ul><h2 id=\"he423b2c3c6\">４．まとめ</h2><ol><li>gatsbyとヘッドレスCMSの組み合わせにいろいろな使い所<ul><li>企業のDX推進</li><li>お店サイトで、お店の人で更新できる</li><li>テンプレート（＋ちょっとカスタマイズ）でOKなら短時間で構築</li></ul></li><li>学習のために構築して、少しググりつつカスタマイズしてみる</li><li>まずはこのスターターで試してみてください。</li></ol><p><br><img src=\"https://images.microcms-assets.io/assets/a20dd30d3f4d43d8814295dae8cee134/500cb0ba14614613aa453727f426c9f8/image.png\" alt=\"\"></p>","author":"そんほんす","eye_catch":{"url":"https://images.microcms-assets.io/assets/a20dd30d3f4d43d8814295dae8cee134/57a3de56e40341808fcea8431a0c922d/fbe611b3bf83a09557122907c7a963fb.png"},"category":{"category":"Gatsby","categorySlug":"gatsby"}}},"pageContext":{"id":"61ecacf5-12f1-54da-93a2-c88251a3b99b","previous":null,"next":{"title":"サンプル２","link":"sample-2"}}},"staticQueryHashes":["1550610083","2560007497","3020873570"]}