Angularにヘッダーメニューを追加する手順 で作成した Angularプロジェクトに、サイドメニューを追加しました。
ソースコードは GitHub で公開しています。
- 修正前後の画面
- ヘッダーメニュー コンポーネント作成
- 追加変更したソースコード解説
- Angular/Src3_SideMenu/src/app/app.component.html
- Angular/Src3_SideMenu/src/app/app.component.scss
- Angular/Src3_SideMenu/src/app/app.component.ts
- Angular/Src3_SideMenu/src/app/sidemenu/sidemenu.component.html
- Angular/Src3_SideMenu/src/app/sidemenu/sidemenu.component.scss
- Angular/Src3_SideMenu/src/app/sidemenu/sidemenu.component.spec.ts
- Angular/Src3_SideMenu/src/app/sidemenu/sidemenu.component.ts
修正前後の画面
修正前

修正後
サイドメニューが追加されている。

ヘッダーメニュー コンポーネント作成
VS Code のターミナルで下記コマンドを実行
1 2 3 |
> ng generate component sidemenu |
sidemenuコンポーネントが追加された。

追加変更したソースコード解説

Angular/Src3_SideMenu/src/app/app.component.html
<style>要素は全て app.component.scss へ移動し、app.component.htmlからは削除。
<app-sidemenu>を追加し、<app-sidemenu>と<main>を <div class=”container”>内に移動し、サイドメニューと<main>のレイアウトを横並びに修正。
1 2 3 4 5 6 |
<div class="container"> <app-sidemenu></app-sidemenu> <main class="main"> |
1 2 3 4 |
</main> </div> |








Angular/Src3_SideMenu/src/app/app.component.scss
app.component.htmlにあった<style>要素は全てこちらへ移動。
「Hello Angular」のレイアウトがそれっぽくなるようにスタイルを追加し、背景色を少し濃くしてレイアウトの境界線を見易く修正。
<container>のスタイルも追加。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
body, html { margin: 0; padding: 0; width: 100%; height: 100%; } .container { display: flex; margin-top: 10px; height: calc(100vh - 130px); } main { flex-grow: 1; height: calc(100vh - 160px); background-color: rgb(241, 238, 238); overflow-y: auto; } |

Angular/Src3_SideMenu/src/app/app.component.ts
sidemenuコンポーネントの参照を追加。
1 2 3 |
import { SidemenuComponent } from "./sidemenu/sidemenu.component"; |
1 2 3 |
imports: [RouterOutlet, HeadermenuComponent, SidemenuComponent], |

Angular/Src3_SideMenu/src/app/sidemenu/sidemenu.component.html
sidemenuのレイアウトを追加。
1 2 3 4 5 6 7 8 9 10 |
<nav class="sidemenu"> <ul> <li><a href="#">ダッシュボード</a></li> <li><a href="#">プロフィール</a></li> <li><a href="#">設定</a></li> <li><a href="#">ログアウト</a></li> </ul> </nav> |

Angular/Src3_SideMenu/src/app/sidemenu/sidemenu.component.scss
sidemenuのスタイルを追加。ChatGPTに適当に作ってもらった。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
.sidemenu { width: 150px; height: calc(100vh - 140px); padding: 20px; background-color: #2c3e50; color: white; flex-direction: column; margin-right: 10px; ul { list-style: none; padding: 0; li { margin-bottom: 15px; a { color: white; text-decoration: none; font-weight: bold; transition: color 0.3s; &:hover { color: #3498db; } } } } } |

Angular/Src3_SideMenu/src/app/sidemenu/sidemenu.component.spec.ts
※「ng generate component」コマンドで作成した時点から変更ないので省略。
Angular/Src3_SideMenu/src/app/sidemenu/sidemenu.component.ts
※「ng generate component」コマンドで作成した時点から変更ないので省略。
実装した環境
Angular: 18.2.3
Node.js: 22.8.0
Visual Studio Code: 1.92.2
コメント