こんにちは、アプリケーション開発部の岡田です。
自分は日頃Vueでの開発を行っているのですが、このVueに興味を持ったのはJavaScriptにはいくつもフレームワークがあり、その中で一番とっつきやすいものがVueだったからということが一つあります。
現在会社に入って2年近くが経とうとしていますが、その間にもいろいろなフレームワークが誕生しているように思います。
その中でも最近気になったAstroというフレームワークを触ってみたので、その内容について軽く触れつつ、自分が詰まったContentfulとの連携について備忘録として残しておきたいと思います。
Astroとは??Astroとは、JavaScriptベースのフレームワークの一種なのですが、高速なページ表示が可能であり最近何やかんやとアツいそうです。
なんでも、ページ表示時にはコード内のJSを一切取り除くことで高速化を実現しているのだとか(取り除く取り除かないもコントロールできるらしい)
さらにこのAstroの特徴として、VueやReactで作ったコンポーネントをそのまま使用できるというものがあります。
そのため自分が業務で触ったVueのコンポーネントをそのまま使えるじゃないか!ということで興味を持ったのでした。
Contentfulとは??ContentfulとはヘッドレスCMSの一つ。
乱暴な言い方をすればWordPressのフロントデザイン一切なしのデータベースのみのもの、フロント部分は自分で自由に作ってな!というものですね。
音楽ストリーミングサービスのSpotifyなんかはこのContentfulを用いて作られているそうです。
Contentfulは日本語対応していないので正直使いにくさがあります。じゃあなぜContentfulをって話なのですが、前の会社ではボスがECサイトを作成していた時にNext.jsとContentfulを用いてサイトを作成していたのです。
ですが、自分はそれの構造が何一つ理解できず、、、ただそれから3年経過している今なら理解できるのでは?という思いから触ってみたのでした。
何につまずいたのか?一からAstroの使い方、Contentfulの使い方を書いていくと、とてもじゃないですが書き終えられないので要点だけをかい摘みますと、Contentfulのブログコンテンツ内に埋め込んだ画像がどうやっても表示されないという現象に出くわしました。
ちなみにAstroでcontentfulを使う、Contentfulでブログを作成するのドキュメントはこれです。
AstroとContentfulでブログを作成するそしてドキュメントに沿って作られたContent modelがこちら。
![contentful設定content](https://firebasestorage.googleapis.com/v0/b/codelic-6aec2.appspot.com/o/flamelink%2Fmedia%2Fsized%2F667_9999_100%2F%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%202024-02-22%209.13.49.png?alt=media&token=7c62ea62-0d2f-47a1-8c4b-24f437c103bf)
上記に沿って作られたContent内容。
![表示されたembed画像](https://firebasestorage.googleapis.com/v0/b/codelic-6aec2.appspot.com/o/flamelink%2Fmedia%2Fsized%2F667_9999_100%2F%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%202024-02-22%209.24.18.png?alt=media&token=884829b2-b1a7-4964-9576-6c640d6ceec2)
このAstroのドキュメント通りに進めればContentfulで書いた内容とトップ画(上の画像で言えば下の猫画像)は表示されます。
ただし、確実にContentfulでセットしたはずの埋め込み画像がどこにも表示されていません。
![embedの猫画像がない](https://firebasestorage.googleapis.com/v0/b/codelic-6aec2.appspot.com/o/flamelink%2Fmedia%2Fsized%2F667_9999_100%2F%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%202024-02-22%2010.17.55.png?alt=media&token=49041d16-ceab-43df-9df0-fd02abd191e8)
consoleで表示させてみるも。。。
![consoleにも表示なし](https://firebasestorage.googleapis.com/v0/b/codelic-6aec2.appspot.com/o/flamelink%2Fmedia%2Fsized%2F667_9999_100%2F%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%202024-02-22%2010.15.19.png?alt=media&token=01afe651-de2d-4e9d-b626-ea84a517aab6)
どこにも存在していません。
ではどう対処したのか?Contentfulからの情報をAstroで呼び込むための関数がありますが、その関数内にoptionsをセットすることで表示が可能になるようです。
今回はこんな感じで書きました。
![astro img options](https://firebasestorage.googleapis.com/v0/b/codelic-6aec2.appspot.com/o/flamelink%2Fmedia%2Fsized%2F667_9999_100%2F%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%202024-02-21%2022.00.11.png?alt=media&token=f930b58c-4db3-43c4-adc6-a954d74537d1)
そしてこのoptionsを下記のように渡してあげることで。。
![astro option渡し方](https://firebasestorage.googleapis.com/v0/b/codelic-6aec2.appspot.com/o/flamelink%2Fmedia%2Fsized%2F667_9999_100%2F%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%202024-02-21%2022.01.13.png?alt=media&token=a0eea594-96d3-4211-b260-562b2bed85f0)
ページで表示されます。。!
色々やってみたけれど。。ブログっぽいものを作りたくて今回Contenfulで試行錯誤してみましたが、感想としては他の方の記事にもあったように、Contentfulはブログには向いていないのかなという印象でした。
それこそECサイトのようにどこどこにこれを表示し、あれあれにこれを表示するというふうにカチカチに固めるならまだしも、ブログはあげたい画像も数もそのブログ記事によって異なりますからね。
もし似たようなところでつまずいた方がいるようでしたら参考になればと書いてみました。
ちなみにAstroを使っての感想としてはreactに近いという印象を覚えました。
ではでは!