Astro製のブログにCloudinaryを導入する

Astro製のブログにCloudinaryを導入する

目次

はじめに#

このブログと技術ブログは、Astro の Content Collection を使ってマークダウンでブログを書いていて、記事は GitHub で管理してます。

Astro の Image コンポーネントを使うために、ブログ記事の画像も src/assets/images/配下に配置していました。しかし、ローカルで画像を管理したくないなと思ったので Cloudinary を導入してみました。

Astro での Cloudinary の導入方法について、この記事では紹介します。
Cloudinary の詳しいオプションなどは解説しないのと、Cloudinary のアカウントが既にあるのを前提に説明します。

まだの方は下記 URL からアカウントを作成してください。

Image and Video Upload, Storage, Optimization and CDN
Streamline media management and improve user experience by automatically delivering images and videos, enhanced and optimized for every user.
Image and Video Upload, Storage, Optimization and CDN favicon
cloudinary.com
Image and Video Upload, Storage, Optimization and CDN

Astro Cloudinary のインストール#

Astro で使える Cloudinary のコンポーネントが用意されてます。下記コマンドで Astro Cloudinary をインストールしましょう。

npm install astro-cloudinary

インストールできたら、プロジェクトのルートに.envファイルを作成して、Cloudinary のアカウント情報を記述します。

.env
PUBLIC_CLOUDINARY_CLOUD_NAME="<Your Cloud Name>"

アカウント名は、Cloudinary のダッシュボードの Home の Product Environment の Cloud name から確認できます。

Cloudinary のアカウント名の確認方法
Cloudinary のアカウント名の確認方法

Cloudinary 画像と動画の使用#

Cloudinary の画像と動画を使うには、astro-cloudinaryのコンポーネントを使います。ブログ内の MDX でコンポーネントを使えるように[...slug].astroを下記のように書きましょう。

[...slug].astro
---
import type { CollectionEntry } from "astro:content";
import MarkdownBody from "@/components/MarkdownBody.astro";
import Figure from "@/components/markdown/Figure.astro";
import { getSortedBlogs } from "@/utils/content-utils";
 
interface Props {
  entry: CollectionEntry<"blog">;
}
 
export async function getStaticPaths() {
  const blogEntries = await getSortedBlogs();
  return blogEntries.map((entry) => ({
    params: { slug: entry.slug },
    props: { entry }
  }));
}
 
const { entry } = Astro.props;
const { Content } = await entry.render();
---
<Layout>
  <MarkdownBody>
    <Content components={{ img: Figure }} />
  </MarkdownBody>
</Layout>

これで、マークダウンで画像を使うと、Figureコンポーネントが使われるようになりました。
それでは、Cloudinary の画像と動画を使うためにFigureコンポーネントを作成します。

Figure.astro
---
import { Image } from "astro:assets";
import type { ImageMetadata } from "astro";
import { CldImage } from 'astro-cloudinary';
import { CldVideoPlayer } from 'astro-cloudinary';
 
interface Props {
  title: string;
  src: ImageMetadata | string;
  alt: string;
};
 
const { title, src, alt } = Astro.props;
const cloudName = import.meta.env.PUBLIC_CLOUDINARY_CLOUD_NAME;
 
const isStringSrc = typeof src === 'string';
const isCloudinaryImage = isStringSrc && src.startsWith(`https://res.cloudinary.com/${cloudName}/image/`);
const isCloudinaryVideo = isStringSrc && src.startsWith(`https://res.cloudinary.com/${cloudName}/video/`);
---
 
<figure class="figure">
  <div class="figure__img">
    { isCloudinaryVideo ? (
      <CldVideoPlayer src={src as string} width="1200" height="675" />
    ) : isCloudinaryImage ? (
      <CldImage src={src as string} alt={alt} width={1200} height={675} />
    ) : (
      <Image src={src as ImageMetadata} alt={alt} width="1200" height="675" />
    )
    }
  </div>
  { title && (
    <figcaption class="figcaption">
      <Fragment set:html={title} />
    </figcaption>
  )}
</figure>

ここでは、isCloudinaryImageisCloudinaryVideoで、Cloudinary の画像と動画かどうかを判定しています。Cloudinary の画像と動画の場合はCldImageCldVideoPlayerコンポーネントを使用し src に画像 URL を渡してます。

Cloudinary の画像ではない場合は、Astro のImageコンポーネントを使っています。

デプロイ先での注意点

ここでは、cloudName を環境変数から取得しています。本番環境で参照する際は、.env の PUBLIC_CLOUDINARY_CLOUD_NAME を設定してください。このブログでは Cloudflare でデプロイしているので、設定の「変数とシークレット」で環境変数を設定しています。

使用例#

最後に使用例を見てみましょう

画像#

Cloudinary画像の使用例
![靴の画像](https://res.cloudinary.com/dy8ftemi0/image/upload/v1747152824/cld-sample-5.jpg "靴の画像")

靴の画像
靴の画像

動画#

Cloudinary画像の使用例
![dance-2](https://res.cloudinary.com/dy8ftemi0/video/upload/v1747152819/samples/dance-2.mp4 "dance-2")

dance-2

まとめ#

Astro 製のブログに Cloudinary を導入してみました。これで気軽に画像の投稿や動作例の動画をブログに投稿できるようになったので、より良いコンテンツが作れそうです。

みなさんも、ぜひ使ってみてください!

招待リンク#

以下のリンクから Cloudinary のアカウントを作ると、わたしのアカウントの Credit が増えます。ここまで読んだ方は、以下のリンクからアカウントを作ってくれると(わたしが)気軽に Cloudinary を使えるようになれるので嬉しいです。

Cloudinary Direct invitation link

参考#

Related Post
ブログのデザインを大幅に変更しました
image

はじめに

このブログのデザインを大幅に変更しました。

変更後のTopページ

変更した経緯としては、2つあります。 以前のブログのデザインは、Astroのfuwariテーマを参考にして作成していたのですが、fuwariベースの派生テーマが公式の方でも増えてきており、ブログのデザインが他の人と被るのが嫌だなとなり思い切ってデザインを大幅に変更してみました。

また、以前は記事にカテゴリーを設定していたのですが、この雑記ブログにはタグのみの方が記事の分類として迷いがなくなって書きやすくなると感じたので、カテゴリーを廃止して一覧性をよくしようと思いました。

この記事では、デザインを変更したAstro製のこのブログについて、サムネイルに記事の一部を表示する方法を紹介します。

Meta Data
公開日:2026-02-06
Tags:
#ブログ
#Astro
Astroで作ったブログで更新日時を自動で取得する方法

はじめに

このブログのデザインを大幅に変更したいのと、記事の一覧を更新順で表示したいと思ってたのですが、更新日の取得方法に悩んでいました。

Astro の公式のチュートリアルでは更新日は記事のフロントマターに設定する方法が紹介されていましたが、毎回手動で設定するのは面倒です。

そこで自動で取得する方法を考えた結果、Git のコミット日時を取得してその日付を更新日として表示する方法を実装できたので紹介します。

Git のコミット日時を取得する

それでは、Git のコミット日時を取得する方法について説明します。 Git 関連の情報はgit logコマンドで取得できます。 次のようにコマンドを打ってみましょう。

# 指定したファイルの最新のコミット日時を取得する
## -1 : 最新の1件のみ取得
## %ai : 日付
## filePath : 調べたいファイル
git log -1 --format=%ai -- filePath

オプションについてはコメントの通りになります。

Meta Data
公開日:2026-01-25
更新日:2026-02-04
Tags:
#Astro
技術ブログにブラウザの対応状況を表示するBaseline Status Webコンポーネントを入れる方法

はじめに

技術ブログを複数運営しているのですが、CSS などのプロパティで一部のブラウザのみでしか対応していないものがあります。その際に、ブラウザの対応状況を表示するコンポーネントを入れておくと、ブラウザの対応状況が分かるので、ブログを見ている人にも分かりやすいと思います。

↓ 運営している技術ブログ

https://hypb.dev

https://feylo.dev

今回紹介する Baseline Status Web コンポーネントは、ブラウザの対応状況を表示するための Web コンポーネントです。このコンポーネントをブログ内で使用することで、ブラウザの対応状況を簡単に表示することができます。この Web コンポーネントを Astro 製のブログと Nuxt 製のブログで使う方法を紹介します。

使用イメージは ↓ のような感じになります。

<BaseLineStatus featureId="anchor-positioning" />

Baseline Status Web コンポーネントの使い方

npm で使う場合

npm でbaseline-statusをインストールします。

npm install baseline-status

使用する際はそのまま import して表示する featureId を指定するだけで上記のような感じで表示されます。

import "baseline-status";
<baseline-status featureId="anchor-positioning" />
Meta Data
公開日:2025-07-16
Tags:
#ブログ
#Astro
初学者向けのWeb制作についてのメディアサイト「Feylo」を作成したので紹介
image

はじめに

Web制作についてのメディアサイト「Feylo」

この度、初学者向けの Web 制作についてのメディアサイト「Feylo」を作成したので紹介します! 技術的には、Nuxt.js を使用して作成しました!技術的な部分はコードを見ていただければなので、この記事ではデザインに関して参考にしたサイトなどを紹介します。

https://feylo.dev

リポジトリは下記で公開してます!

https://github.com/nono-k/feylo

参考にしたサイト

このメディアサイトを作成するにあたり、参考にしたサイトを紹介します。

全体的なデザイン

JY-CONTENTS UNIQUE BLOG

https://jy-contents.com/

前から Web 製作についてのメディアサイトを作りたいと思っていたのですが、当初はブログサイトみたいな感じなのでアニメーションなどは付ける予定はありませんでした。

ですが、このサイトを見てブログサイトなのに、すごく目立っていて印象に残るサイトで良いなと思ったので自分が作ったサイトもアニメーションを駆使して初見で目立ち印象に作るサイトにしたいと思い作成しました。

文字の無限ループや、ホバーアニメーション、ハンバーガーメニュー、ブログ詳細のページ、ランダム記事など多くの部分で参考にさせていただきました。

Meta Data
公開日:2025-07-06
Tags:
#実績紹介
#Web
Astro製のブログで読んだ本リストを管理するためにmicroCMSを使ってみた
image

はじめに

Web クリエイターボックスみたいに読んだ本リストを自分のプラットフォームで管理したいと思い、このブログ内に読んだ本リストを追加しました。サイドバーにリンクがあるので覗いてみてください!

読んだ本の管理に microCMS を使ったので、Astro 製のブログで本の管理を microCMS で行う方法をまとめます。まだ、データ数が少ないのでページネーションは実装してないのですが、実装したら追記します。

microCMS の準備

microCMS のアカウントを作成して、コンテンツ(API)を作成し API 設定をしましょう。下記のように設定します。

APIスキーマ

読んだ本リスト API のエンドポイントは book にしました。

API スキーマの例

本のリストなので、自分は下記のように設定しました。

フィールド ID 表示名 種類
title タイトル テキストフィールド
review レビュー リッチエディタ
url Amazon リンク テキストフィールド
cover 表紙画像 テキストフィールド
author 著者 テキストフィールド
publishedDate 発売日 日時
category カテゴリー コンテンツ参照
postlink 紹介記事 テキストフィールド
Meta Data
公開日:2025-05-31
Tags:
#Astro
#CMS
技術ブログをアドセンスに合格するのに1年かかった話

はじめに

Web 制作に関して書いている技術ブログの方で、1 年越しでアドセンスに合格したので、その経緯について書いていきます。

同じようにブログをやっていて、なかなかアドセンスに受からない…と悩んでいる方の参考になれば幸いです。

https://hypb.dev

始まり:技術ブログを始めた理由

未経験から Web 制作会社に転職してから半年が過ぎた頃、日々の学びや試行錯誤をアウトプットする場所が欲しくてブログを始めました。(あとは少しの収益が欲しかった笑)

技術系の内容がメインで、以下のような記事を書いていました。

  • Astro についての情報
  • GSAP や Swiper などのライブラリーを使ったアニメーション表現
  • 自分の開発環境など

「どうせ書くなら収益化もできたら嬉しいな」と思い、ブログ開設から数記事でアドセンスに申し込んでみたのですが…

不合格の連続:何が悪いのか分からない

最初の審査結果は「不合格」。理由は「価値の低いコンテンツ」とのことでした。

Meta Data
公開日:2025-05-14
Tags:
#Web
Astroで作ったサイトをGitHub Pagesにデプロイする
image

はじめに

Astro で作ったサイトを GitHub Pages にデプロイする方法について紹介します。 GitHub Pages を使うことで簡単に作ったサイトを公開することができます。

基本的には公式サイトのドキュメント通りにやればできるでしょう。 ここではカスタムドメインを使わないリポジトリ名が後ろにつくデプロイ方法を紹介します。

https://docs.astro.build/ja/guides/deploy/github/

GitHub Pages 用に Astro の設定をする

astro.config.mjssitebaseオプションの設定を追加します。

import { defineConfig } from "astro/config";

export default defineConfig({
  site: "https://<username>.github.io",
  base: "<your-repo-name>",
});

ここでsiteの username にはご自身の GitHub のユーザー名を、baseの your-repo-name にはデプロイするリポジトリ名入れてください。

Meta Data
公開日:2025-04-27
Tags:
#Astro
#GitHub
Astroで雑に書ける個人ブログを作りました
image

雑に書ける場所が欲しくなったので、Astro で 2 個目の個人ブログを作成しました。 普段は、👇 の技術ブログで主にフロントエンドに関しての記事を書いています。

https://hypb.dev

上記のブログでは、技術系しか書けない感じになっていたので、こちらではもっと雑にインターネット上に残していきたいと思います。

Aboutページに書いてある通り、音楽・映画・小説などが好きなので、それらに関する記事を書いていきたいです。

デザインについて

デザインに関しては、Astro テーマのFuwariを参考にして作成しました。 ほぼ丸パクリですが、Fuwari テーマを見て雑記ブログを作りたいと思ったのでこれで良しとします。

フォントは日本語はKiwi Maru、英語はIBM Plex Monoを使っています。フォントのおかげで可愛い感じが出て良かったです ✨

Fuwari テーマの方は、Svelte や swup を使ってたりでカスタマイズするのが難しそうな感じですが、自分の作成した本ブログはコードも分かりやすく作成したので、サクサク作成することができました!

Meta Data
公開日:2025-04-01
Tags:
#ブログ
#Astro
Info