なにかお手伝いできることがあればご連絡ください。
※Googleフォームが表示されます
Astro.jsは、コアコンセプトがNo JavaScript
の静的サイトジェネレーターとして使われるJavaScriptフレームワークです。
Astro.jsは、ReactやVueなどのフロントエンドライブラリをサポートし、コンポーネントベースのアプローチを採用しています。
コーポレートサイトや、ポートフォリオページ、個人サイトなどに適しています。
ただし、SSR(サーバーサイドレンダリング)、CSR(クライアントサイトレンダリング)、SSG(静的ファイルジェネレーター)を、ページによって使い分け得ることも可能です。
VSCodeを利用する場合は、公式のプラグインが便利。
npm create astro@latest
プロジェクトを起動。
// もし依存関係ファイルをインストールしてなければ
npm i
// ローカルサーバーを起動
npm run dev
http://localhost:3000/でローカルサーバーが起動される。
Vercelを利用して、静的サイトまたは、SSR(サーバーサイドレンダリング)されるサイトとしてデプロイできる。
Astroプロジェクトはデフォルトで静的サイトです。静的なAstroサイトをVercelにデプロイするために追加の設定は必要ありません。
SSRを有効にする為に、Vercelアダプターを追加します。
以下のコマンドを実行すると、astro.config.mjs
ファイルへの適切な変更が1ステップで行われます。
npx astro add vercel
Astro will run the following command:
If you skip this step, you can always run it yourself later
╭──────────────────────────────╮
│ npm install @astrojs/vercel │
╰──────────────────────────────╯
✔ Continue? … yes
✔ Installing dependencies...
Astro will make the following changes to your config file:
╭ astro.config.mjs ─────────────────────────────────╮
│ import { defineConfig } from 'astro/config'; │
│ │
│ import vercel from "@astrojs/vercel/serverless"; │
│ │
│ // https://astro.build/config │
│ export default defineConfig({ │
│ output: "server", │
│ adapter: vercel() │
│ }); │
╰───────────────────────────────────────────────────╯
For complete deployment options, visit
https://docs.astro.build/en/guides/deploy/
✔ Continue? … yes
success Added the following integration to your project:
- @astrojs/vercel
Vercelへのデプロイは、ウェブサイトのUIまたはVercelのCLI(コマンドラインインターフェイス)が利用できます。静的サイト、SSRサイトともに手順は同じです。
// vercel cli をインストール
npm install -g vercel
// デプロイ
vercel
// Reactを入れる
npx astro add react
// prettierを入れる
npm install --save-dev prettier prettier-plugin-astro
astroはコンポーネントスクリプトとコンポーネントテンプレートという2つの主要な要素で構成されています。
Astroコンポーネント内のコンポーネントスクリプトを識別するためにコードフェンス(---
)を使用します。
// sample.astro
---
// コンポーネントスクリプト (JavaScript)
---
<!-- コンポーネントテンプレート (HTML + JS Expressions) -->
Astroは、/src/pages/
ディレクトリ内の.md
(または対応する別の拡張子)または.mdx
ファイルをページとして扱います。
src/pages
にposts(任意)ディレクトリを作成する。post-1.md
ファイルを作成◎pages/posts/post-1.md
---
title: "私の最初のブログ記事"
createAt: 2022-07-01
description: "これは私の新しいAstroブログの最初の記事です。"
author: "Astro学習者"
image:
url: "https://docs.astro.build/assets/full-logo-light.png"
alt: "Astroのロゴ。"
tags: ["Astro", "ブログ", "公開学習"]
---
# 私の最初のブログ記事
投稿日: 2022-07-01
Astroの学習についての私の _新しいブログ_ へようこそ!ここでは、新しいウェブサイトを作りながら、私の学習過程を共有します。
## 達成したこと
1. **Astroのインストール**: まず、新しいAstroプロジェクトを作成し、オンラインアカウントを設定しました。
2. **ページの作成**: 次に、新しい`.astro`ファイルを作成し、それを`src/pages/`フォルダに配置することで、ページを作成する方法を学びました。
3. **ブログ記事の作成**: これが私の最初のブログ記事です!AstroページとMarkdownの記事があります!
## 次の目標
Astroチュートリアルを終え、さらに記事を追加していきます。これからもこの場所をご覧ください。
http://localhost/3000/posts/post-1
を開くとページが表示される。
draft: true
はオプションのフロントマターの値で、個々のMarkdownまたはMDXページや投稿を「非公開」としてマークできます。デフォルトでは、マークされたページは次の動作になります。
[Astro.glob()](https://docs.astro.build/ja/reference/api-reference/#astroglob)
によって返される (投稿の一覧で表示されます)---
title: ブログ記事
draft: true
---
これは、作成中のブログ記事です。
この記事のためにページは作成されません。
この記事をビルドして公開するには
- フロントマターを`draft: false`に更新する。
- または、`draft`プロパティ全体を削除してください。
しかし、このページは `Astro.glob()` にマッチするすべてのリクエストで返されます。
レイアウトコンポーネントへの相対パスを指定できるプロパティがあります。
◎pages/posts/post-1.md
---
layout: ../../layouts/BlogDetailLayout.astro
title: Astroの概要
author: Himanshu
description: Astroの凄さを知ってください!
---
これはMarkdownで書かれた記事です。
markdownの定義したプロパティはAstro.propsを通してレイアウトコンポーネントで利用できます。
◎layouts/BlogDetailLayout.astro
---
const { frontmatter } = Astro.props;
---
<html>
<head>
<title>{frontmatter.title}</title>
<meta name="description" content={frontmatter.description} />
</head><body>
<!-- ... -->
<slot />
<!-- Markdownコンテンツはここに挿入されます -->
<!-- ... -->
</body>
</html>
Markdownの拡張言語である MDX を有効にすることで、コンポーネントを利用できるようになります。
npx astro add mdx
コマンドを実行すると、astro.config.mjs
ファイルへの適切な変更が1ステップで行われます。
npx astro add mdx
✔ Resolving packages...
Astro will run the following command:
If you skip this step, you can always run it yourself later
╭───────────────────────────╮
│ npm install @astrojs/mdx │
╰───────────────────────────╯
✔ Continue? … yes
⠦ Installing dependencies...
✔ Installing dependencies...
Astro will make the following changes to your config file:
╭ astro.config.mjs ─────────────────────────────────╮
│ import { defineConfig } from 'astro/config'; │
│ import vercel from "@astrojs/vercel/serverless"; │
│ import react from "@astrojs/react"; │
│ │
│ import mdx from "@astrojs/mdx"; │
│ │
│ // https://astro.build/config │
│ export default defineConfig({ │
│ output: "server", │
│ adapter: vercel(), │
│ integrations: [react(), mdx()] │
│ }); │
╰───────────────────────────────────────────────────╯
✔ Continue? … yes
success Added the following integration to your project:
- @astrojs/mdx
frontmatterを通してプロパティのアクセスすることもできます。
---
layout: ../../layouts/BlogDetailLayout.astro
title: "私の最初のブログ記事"
createAt: 2022-07-01
description: "これは私の新しいAstroブログの最初の記事です。"
author: "Astro学習者"
image:
url: "https://docs.astro.build/assets/full-logo-light.png"
alt: "Astroのロゴ。"
tags: ["Astro", "ブログ", "公開学習"]
---
# {frontmatter.title}
Markdownで追加した記事一覧はAstro.glob()
で取得することができます。
---
const allPosts = await Astro.glob("../pages/posts/**/*.mdx");
// draft: trueは除外する
const nonDraftPosts = allPosts.filter((post) => !post.frontmatter.draft);
---
<ul>
{nonDraftPosts.map((post) => <li>{post.frontmatter.title}</li>)}
</ul>
画像の保存先がsrc
配下の場合は、.astro、.mdx、その他のフレームワークのコンポーネント
からの参照は可能です。
---
// `src/images/`内の画像へアクセスします。
import logo from '../images/logo.png';
---
<img src={logo} width="40" alt="Astro" />
.md
ファイル内ではpublic
フォルダ配下に配置する必要があります。
<!-- public/assets/stars.png に保存されたローカル画像 -->

<img src="/assets/stars.png" alt="A starry night sky.">
画像を相対ファイルパスまたはimportエイリアスを利用してコンポーネントファイル内でインポートして利用します。
Astro公式の画像のインテグレーションは、最適化された画像をレンダリングするためのAstroコンポーネント<Image />
と<Picture />
を提供しています。
.astroと.mdx
で利用できます。
npx astro add image
コマンドを実行すると、astro.config.mjs
ファイルへの適切な変更が1ステップで行われます。
npx astro add image
---
import { Image } from '@astrojs/image/components';
import localImage from "../assets/logo.png";
const localAlt = "The Astro Logo";
---
<Image src={localImage} width={300} aspectRatio="1:1" format="png" alt={localAlt} />
なにかお手伝いできることがあればご連絡ください。
※Googleフォームが表示されます