Astroの動的機能でAboutページを進化させた話

Astroチュートリアルを参考に、静的なAboutページを動的でインタラクティブなページに改善した開発記録

約36分で読めます
#Astro#JavaScript#フロントエンド#動的レンダリング#Web開発

Aboutページ改善記録

今回は、このブログサイトのAboutページを改善した際に学んだ、Astroの動的機能について詳しく記録します。

改善前の課題

最初のAboutページは、完全に静的なHTMLで構築されていました:

---
import Layout from '../layouts/Layout.astro';
---

<Layout title="About - engineer journey">
  <h1>About engineer journey</h1>
  <p>このサイトはエンジニアの学習と開発の記録を目的としたブログサイトです。</p>
  <!-- 固定的なコンテンツのみ -->
</Layout>

問題点:

Astroの動的機能を活用した改善

Astroの公式チュートリアルを参考に、以下の動的機能を実装しました。

1. フロントマターでの変数定義

---
import Layout from '../layouts/Layout.astro';

// 動的変数の定義
const pageTitle = "About - engineer journey";

const identity = {
  name: "エンジニア",
  role: "ソフトウェア開発者",
  passion: "学習と成長"
};

const skills = [
  "JavaScript/TypeScript",
  "React/Next.js", 
  "Node.js",
  "Python",
  "Git/GitHub",
  "Astro",
  "Web開発"
];

const learningGoals = [
  "モダンなWeb開発技術の習得",
  "クリーンコードの実践",
  "DevOpsとインフラの理解",
  "オープンソース貢献"
];

const currentFocus = "Astroを使ったブログサイト構築";
const isLearning = true;
---

2. 変数埋め込み(Variable Interpolation)

HTMLテンプレート内で {} を使用して、JavaScriptの変数や式を直接埋め込めます:

<Layout title={pageTitle}>
  <h1>About engineer journey</h1>
  
  <h2>私について</h2>
  <p>こんにちは!私は<strong>{identity.name}</strong>として活動している<strong>{identity.role}</strong>です。</p>
  <p>特に<strong>{identity.passion}</strong>に情熱を注いでいます。</p>
</Layout>

3. 条件分岐レンダリング

論理AND演算子(&&)を使用した条件付きレンダリング:

{isLearning && <p>🌱 現在は「<strong>{currentFocus}</strong>」に集中して取り組んでいます。</p>}

この機能により、isLearningtrueの場合のみ該当の要素が表示されます。

4. 動的リスト生成

JavaScript の .map() メソッドを使用して、配列から動的にリスト要素を生成:

<h2>技術スキル</h2>
<ul>
  {skills.map((skill) => <li>{skill}</li>)}
</ul>

<h2>学習目標</h2>
<ul>
  {learningGoals.map((goal) => <li>{goal}</li>)}
</ul>

改善結果

Before(静的)

After(動的)

学んだポイント

1. Astroの柔軟性

Astroは静的サイトジェネレーターでありながら、必要に応じて動的な要素を簡単に組み込める柔軟性があります。

2. JavaScript統合の自然さ

フロントマターでのJavaScript記述から、HTMLテンプレート内での変数利用まで、非常に自然に統合されています。

3. 保守性の向上

データ(スキルや目標)を変数として管理することで、コンテンツの更新が簡単になりました。

4. 型安全性

TypeScriptとの相性も良く、開発時の型チェックも効きます。

今後の展開

今回学んだ動的機能を活用して、以下の改善を検討中:

  1. プロジェクト一覧ページ: 作成したプロジェクトを動的に表示
  2. タグベースのブログフィルタリング: 記事のタグによる絞り込み機能
  3. コンポーネント化: 再利用可能なコンポーネントの作成

まとめ

Astroの動的機能を活用することで、静的なページをインタラクティブで保守性の高いページに進化させることができました。

特に印象的だったのは:

Astroは静的サイトジェネレーターでありながら、必要な部分だけ動的にできる絶妙なバランスが魅力的です。次回はさらに高度な機能にも挑戦してみたいと思います!


関連リンク: