# テラリウムプロジェクト パート1: HTML入門

> スケッチノート: [Tomomi Imura](https://twitter.com/girlie_mac)
HTML(HyperText Markup Language)は、これまで訪れたすべてのウェブサイトの基盤です。HTMLはウェブページの骨格のようなもので、コンテンツの配置、構成、各部分の意味を定義します。後にCSSが色やレイアウトでHTMLを「装飾」し、JavaScriptがインタラクティブ性を加えることで命を吹き込みますが、HTMLはすべての基盤となる構造を提供します。
このレッスンでは、仮想テラリウムインターフェースのHTML構造を作成します。この実践的なプロジェクトを通じて、基本的なHTMLの概念を学びながら、視覚的に魅力的なものを構築します。セマンティック要素を使ったコンテンツの整理、画像の操作、インタラクティブなウェブアプリケーションの基盤作りを学びます。
レッスン終了時には、植物の画像が整理された列に表示されるHTMLページが完成します。次のレッスンでスタイリングを行う準備が整います。最初はシンプルに見えるかもしれませんが、それがCSSで視覚的な仕上げを加える前のHTMLの役割です。
## レッスン前のクイズ
[レッスン前のクイズ](https://ff-quizzes.netlify.app/web/quiz/15)
> 📺 **視聴して学ぶ**: この役立つビデオ概要をチェックしてください
>
> [](https://www.youtube.com/watch?v=1TvxJKBzhyQ)
## プロジェクトのセットアップ
HTMLコードに取り掛かる前に、テラリウムプロジェクトの適切な作業スペースを設定しましょう。最初から整理されたファイル構造を作成することは、ウェブ開発の旅を通じて役立つ重要な習慣です。
### タスク: プロジェクト構造を作成する
テラリウムプロジェクト用の専用フォルダーを作成し、最初のHTMLファイルを追加します。以下の2つの方法があります:
**オプション1: Visual Studio Codeを使用する**
1. Visual Studio Codeを開く
2. 「ファイル」→「フォルダーを開く」をクリックするか、`Ctrl+K, Ctrl+O`(Windows/Linux)または`Cmd+K, Cmd+O`(Mac)を使用
3. `terrarium`という新しいフォルダーを作成し、それを選択
4. エクスプローラペインで「新しいファイル」アイコンをクリック
5. ファイル名を`index.html`にする

**オプション2: ターミナルコマンドを使用する**
```bash
mkdir terrarium
cd terrarium
touch index.html
code index.html
```
**これらのコマンドが達成すること:**
- プロジェクト用の新しいディレクトリ`terrarium`を**作成**
- テラリウムディレクトリに**移動**
- 空の`index.html`ファイルを**作成**
- 編集のためにVisual Studio Codeでファイルを**開く**
> 💡 **プロのヒント**: ファイル名`index.html`はウェブ開発で特別な意味を持ちます。誰かがウェブサイトを訪れると、ブラウザは自動的に`index.html`をデフォルトページとして表示します。つまり、`https://mysite.com/projects/`のようなURLは、URL内でファイル名を指定することなく`projects`フォルダーの`index.html`ファイルを自動的に提供します。
## HTMLドキュメント構造の理解
すべてのHTMLドキュメントは、ブラウザが正しく理解して表示するために必要な特定の構造に従います。この構造は正式な手紙のようなもので、特定の順序で必要な要素が含まれており、受信者(この場合はブラウザ)がコンテンツを適切に処理するのを助けます。
まず、すべてのHTMLドキュメントに必要な基本的な基盤を追加しましょう。
### DOCTYPE宣言とルート要素
HTMLファイルの最初の2行は、ブラウザへのドキュメントの「紹介」として機能します:
```html
```
**このコードが何をするか:**
- ``を使用してドキュメントタイプをHTML5として**宣言**
- ページコンテンツをすべて含むルート``要素を**作成**
- 適切なブラウザレンダリングのための最新のウェブ標準を**確立**
- 異なるブラウザやデバイス間で一貫した表示を**保証**
> 💡 **VS Codeのヒント**: VS CodeでHTMLタグにカーソルを合わせると、MDN Web Docsからの使用例やブラウザ互換性の詳細などの役立つ情報が表示されます。
> 📚 **詳細を学ぶ**: DOCTYPE宣言は、ブラウザが「クイックスモード」に入るのを防ぎます。これは非常に古いウェブサイトをサポートするために使用されていました。現代のウェブ開発では、単純な``宣言を使用して[標準準拠のレンダリング](https://developer.mozilla.org/docs/Web/HTML/Quirks_Mode_and_Standards_Mode)を保証します。
## 必須のドキュメントメタデータを追加する
HTMLドキュメントの`
`セクションには、ブラウザや検索エンジンが必要とする重要な情報が含まれていますが、訪問者が直接ページ上で見ることはありません。これは、ウェブページが適切に機能し、異なるデバイスやプラットフォームで正しく表示されるのを助ける「舞台裏」の情報です。
このメタデータは、ブラウザにページの表示方法、使用する文字エンコーディング、異なる画面サイズの処理方法を伝えます。プロフェッショナルでアクセス可能なウェブページを作成するために不可欠です。
### タスク: ドキュメントヘッドを追加する
開いている``タグと閉じている``タグの間にこの``セクションを挿入してください:
```html
`要素をコンテナとして使用してコンテンツの異なるセクションを整理し、`
![]()
`要素を使用して植物の画像を表示します。
### 画像とレイアウトコンテナの操作
画像はHTMLでは特別な存在で、「セルフクローズ」タグを使用します。`
`のようにコンテンツを囲む要素とは異なり、`
![]()
`タグは`src`(画像ファイルパス)や`alt`(アクセシビリティ)のような属性を使用してタグ内に必要な情報をすべて含みます。
画像をHTMLに追加する前に、プロジェクトファイルを適切に整理し、画像フォルダーを作成して植物のグラフィックを追加する必要があります。
**まず、画像をセットアップします:**
1. テラリウムプロジェクトフォルダー内に`images`というフォルダーを作成
2. [ソリューションフォルダー](../../../../3-terrarium/solution/images)から植物画像をダウンロード(合計14枚の植物画像)
3. すべての植物画像を新しい`images`フォルダーにコピー
### タスク: 植物表示レイアウトを作成する
次に、``タグの間に植物画像を2列に整理して追加します:
```html
```
**このコードで何が起こっているかをステップごとに説明:**
- すべてのコンテンツを保持する`id="page"`を持つメインページコンテナを**作成**
- 2つの列コンテナ: `left-container`と`right-container`を**確立**
- 左列に7つの植物、右列に7つの植物を**整理**
- 各植物画像を個別に配置するために`plant-holder`divで**ラップ**
- 次のレッスンでCSSスタイリングのために一貫したクラス名を**適用**
- 後でJavaScriptでの操作のために各植物画像にユニークなIDを**割り当て**
- 画像フォルダーを指す適切なファイルパスを**含む**
> 🤔 **考えてみてください**: 現在、すべての画像に同じaltテキスト「plant」が設定されています。これはアクセシビリティには理想的ではありません。スクリーンリーダーのユーザーは「plant」という言葉を14回繰り返し聞くことになり、各画像がどの植物を示しているのか分かりません。各画像に対してより良い、より具体的なaltテキストを考えることができますか?
> 📝 **HTML要素の種類**: `
`要素は「ブロックレベル」で幅全体を占めますが、`
`要素は「インライン」で必要な幅だけを占めます。これらの``タグをすべて`
`タグに変更した場合、何が起こると思いますか?
このマークアップを追加すると、植物が画面に表示されますが、まだ洗練されていません。それは次のレッスンでCSSが担当します!今のところ、コンテンツを適切に整理し、アクセシビリティのベストプラクティスに従った堅実なHTML基盤を持っています。
## アクセシビリティのためのセマンティックHTMLの使用
セマンティックHTMLとは、外観だけでなく、その意味や目的に基づいてHTML要素を選択することを意味します。セマンティックマークアップを使用すると、ブラウザ、検索エンジン、スクリーンリーダーなどの支援技術にコンテンツの構造と意味を伝えることができます。
このアプローチは、障害を持つユーザーにとってウェブサイトをよりアクセスしやすくし、検索エンジンがコンテンツをよりよく理解するのを助けます。これは、すべての人にとってより良い体験を生み出す現代のウェブ開発の基本原則です。
### セマンティックなページタイトルを追加する
テラリウムページに適切な見出しを追加しましょう。開いている``タグのすぐ後にこの行を挿入してください:
```html
My Terrarium
```
**セマンティックマークアップが重要な理由:**
- スクリーンリーダーがページ構造をナビゲートして理解するのを**助ける**
- コンテンツの階層を明確にすることで検索エンジン最適化(SEO)を**向上**
- 視覚障害や認知障害を持つユーザーのアクセシビリティを**強化**
- すべてのデバイスやプラットフォームでより良いユーザー体験を**提供**
- プロフェッショナルな開発のためのウェブ標準とベストプラクティスに**従う**
**セマンティック vs 非セマンティックの選択例:**
| 目的 | ✅ セマンティックな選択 | ❌ 非セマンティックな選択 |
|------|-------------------------|---------------------------|
| メイン見出し | `タイトル
` | `タイトル
` |
| ナビゲーション | `` | `` |
| ボタン | `` | `クリックしてください` |
| 記事コンテンツ | `` | `` |
> 🎥 **実際に見る**: [スクリーンリーダーがウェブページとどのように対話するか](https://www.youtube.com/watch?v=OUDV1gqs9GA)を視聴して、セマンティックマークアップがアクセシビリティにとって重要な理由を理解してください。適切なHTML構造がユーザーの効率的なナビゲーションを助ける様子に注目してください。
## テラリウムコンテナの作成
次に、植物が最終的に配置されるガラス容器であるテラリウム自体のHTML構造を追加しましょう。このセクションは重要な概念を示しています: HTMLは構造を提供しますが、CSSスタイリングがなければこれらの要素はまだ目に見えません。
テラリウムのマークアップでは、次のレッスンでCSSスタイリングを直感的で維持可能にする記述的なクラス名を使用します。
### タスク: テラリウム構造を追加する
最後の` `タグの上(ページコンテナの閉じタグの前)にこのマークアップを挿入してください:
```html
```
**このテラリウム構造を理解する:**
- スタイリング用のユニークなIDを持つメインテラリウムコンテナを**作成**
- 各視覚コンポーネント(上部、壁、土、底部)のための個別の要素を**定義**
- ガラスの反射効果(光沢要素)のためのネストされた要素を**含む**
- 各要素の目的を明確に示す記述的なクラス名を**使用**
- ガラスのテラリウム外観を作成するCSSスタイリングの準備を**整える**
>
**プロンプト:** セマンティックHTMLセクションを作成し、メイン見出し「植物ケアガイド」、サブセクション「水やり」「光の条件」「土壌ケア」を含む3つのセクションを作成してください。それぞれのセクションには植物ケア情報の段落を含めます。適切なセマンティックHTMLタグ(例: ``, ``, ``, `
`)を使用して内容を構造化してください。
[agent modeについて詳しくはこちら](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode)。
## HTMLの歴史チャレンジを探る
**ウェブ進化について学ぶ**
HTMLは、1990年にティム・バーナーズ=リーがCERNで最初のウェブブラウザを作成して以来、大きく進化してきました。例えば、古いタグの一部である`