PR

Angularとは?初心者向けに10分でわかりやすく

TypeScript

Angularは、Googleが主導して開発しているフロントエンドフレームワークです。

Q
フレームワークとは?
A

アプリケーションやシステムを作るための「土台」や「ひな形」となるもの。組み立て済みのパーツをイメージすると分かりやすいです。この組み立て済みのパーツを組み合わせて、1つのシステムを構築していくイメージをしてください。

以前は「AngularJS」という名称でしたが、バージョン2から大幅に作りが変わり、単に「Angular」と呼ばれています(バージョン2以降をまとめてAngularと呼ぶことが多いです)。

このページではAngularとは何か?(どのような考え方で、どのような仕組みでWebアプリケーションを生成していくのか?)を平易な言葉でわかりやすく解説していきます。

スポンサーリンク

Angularとは?

Angularとはシングルページアプリケーション(SPA)を構築するためのオープンソースのフロントエンドWebアプリケーションフレームワークです。TypeScript(TypeScriptとは?)で書かれており、アプリケーションのスケールに関わらず、構造化された方法でコードを管理し、拡張することができる点が特徴です。

ポイント なぜAngularを使うの?

  • 大規模開発に強い:複数人での開発や大規模プロジェクトでも、コードを整理しやすい仕組みが整っている。
  • 型のサポート(TypeScript):AngularはTypeScriptが標準なので、型によってバグを早期に発見しやすく、開発効率を高められる。
  • 豊富なツールとエコシステム:CLI(Command Line Interface)のサポートや、テストを含むさまざまな開発フローが整備されてる。

Angularのプロジェクトは、特定のディレクトリ構造ファイルセットで構成されています。このディレクトリ構造といくつかのファイルが最初にAngularを理解するうえで非常に重要なので、初めに基本的なディレクトリ構成・ファイルの種類、およびそれらの関係性について説明します。

Angularの基本的なディレクトリ構造

プロジェクトルート
│
├── src/
│   ├── app/
│   │   ├── app.component.ts
│   │   ├── app.component.html
│   │   ├── app.component.css
│   │   └── {other components}/
│   │       ├── {component}.component.ts
│   │       ├── {component}.component.html
│   │       └── {component}.component.css
│   │
│   ├── assets/
│   │   └── {static files like images, fonts, etc.}
│   │
│   └── environments/
│       ├── environment.ts
│       └── environment.prod.ts
│
├── angular.json
└── package.json

プロジェクトルート

1. angular.json

  • Angular CLIの設定ファイルです。
  • プロジェクトのビルドやテスト、サーバーの起動などの挙動を、CLIがこのファイルをもとにコントロールします。
  • 例えば、アセットの配置先やビルド設定の切り替えなど、Angular特有の設定がここに書かれています。
Q
Angular CLI とは?
A

Angularを効率的に利用するためのコマンドラインツールです。プロジェクトの作成、設定、ビルド、テストなどを簡単に実行することができます。

2. package.json

  • Node.jsで管理されるパッケージやスクリプトの情報をまとめたファイルです。
  • dependenciesdevDependenciesの欄に、プロジェクトで利用するライブラリやツールが記載されています。
  • Angularを動かすためのコマンド(たとえばng serve)も、内部的にはここに書かれたパッケージを読み込んで動きます。
Q
Node.jsとは?
A

サーバーサイドでJavaScriptを実行するためのランタイム環境のこと。Angularの実行自体にはNode.jsは不要ですが、開発にはNode.jsが必要となります。
Node.js環境でビルドしてJavaScriptに変換し、ブラウザで実行可能な形にします。

src/ フォルダ

メインのソースコードを置くフォルダです。
Angularのアプリケーションは、基本的にこのsrc配下に書かれたものを読み込んで動きます。

なので、開発者は基本的にはこのsrcフォルダ配下のファイルを編集して(=プログラミングして)システム構築をしていくことになります。

app/ フォルダ

  • アプリの中心となるフォルダで、画面を構成するコンポーネントがまとめられています。
  • app.component.ts/html/css
    • アプリのルート(メイン)コンポーネント。Angularのアプリを起動したとき、最初に画面表示に関わるパーツです。
    • .ts → コンポーネントのロジック(クラスやメソッド)
    • .html → 画面表示のためのテンプレート
    • .css → 見た目をデザインするスタイルシート
  • {other components}/
    • 追加で作成したコンポーネントが入るディレクトリ。
    • それぞれ**.component.ts/html/css**の3つセットで構成され、1つの画面やパーツを表現します。
    • 例: ログインフォーム用のコンポーネント、ユーザー一覧コンポーネントなど。
    • .tsファイルには「@Componentデコレーター」が付いたクラスが書かれ、ビュー(.html)やスタイル(.css)を紐づけます。

ポイント ファイルの種類と内容

ファイルの拡張子内容説明
.ts (TypeScript)コンポーネントのクラス/ロジック/データモデルが定義される。Angularの多くの機能はこのTypeScriptを基にしている。
.htmlコンポーネントのテンプレートファイル。UI(ユーザーインターフェース)を構築するためのHTMLマークアップが含まれる。
.cssコンポーネント専用のスタイルシート。コンポーネントの見た目(スタイル)を定義。
Angularを構成する主要なファイル

assets/ フォルダ

  • 画像やフォントなどの静的ファイルを置く場所。
  • ビルド時には自動的に成果物に含まれ、アプリ内で/assets/~のようなパスで参照できます。

environments/ フォルダ

  • Angularアプリで使われる設定情報を環境別に分けて管理するためのフォルダ。
  • environment.ts:通常の開発・テスト用設定。
  • environment.prod.ts:本番リリース用の設定。
  • 例)APIのエンドポイントや、APIキーなどを環境によって切り替えたいときに利用します。

Angular:ディレクトリ構造のまとめ

  • app/:アプリ本体のコンポーネントが集まる場所。ルートコンポーネント(app.component.*)を中心に、各機能ごとにコンポーネントを追加していきます。
  • assets/:アプリで使う静的ファイルや画像を管理するフォルダ。
  • environments/:開発用・本番用など、環境に応じた設定を切り替えるためのファイルを置くフォルダ。
  • angular.json:Angular CLIが参照するビルドや設定情報をまとめたファイル。
  • package.json:Node.jsのパッケージ管理やスクリプトが記載されたファイルで、プロジェクトのライブラリやコマンドが定義されています。

この構造は、あくまでもAngularプロジェクトの基本的な骨格を示したもので、実際のプロジェクトでは追加のファイルやディレクトリが存在します。規模が大きくなるにつれ、ディレクトリの構造も大きくなっていきますが、とりあえずここではAngularの概要・骨格を明確にしていくために基本的な構造としての説明しておきます。

なんとなくの構造をみたところで、まずはAngular理解の最初のポイント「コンポーネント」について解説しておきます。

Angular:コンポーネントとは?

Angularのキモとなるのがコンポーネントです。コンポーネントは、アプリケーションを構成する部品を指します。
HTMLテンプレートTypeScriptクラスCSSスタイルの3つが基本セットとなり、これらがまとまって1つのコンポーネントとして機能します。

Angularとは
図1:Angularの構造
  1. TypeScriptファイル(例: app.component.ts
    • コンポーネントの振る舞い(ロジック)を定義するクラス。
    • @Componentデコレーターを使って、テンプレートやスタイルなどを紐づけます。
  2. HTMLファイル(例: app.component.html
    • コンポーネントのビュー(UI)を定義するテンプレート。
  3. CSSファイル(例: app.component.css
    • コンポーネントの見た目(デザイン)を定義するスタイルシート。

ここでは、以下のようなページを作ると想定して、それぞれの役割を解説していきます。

これを作るために「トップページ用のコンポーネント」を用意するイメージです。
(実際のAngularアプリでは最初に生成される app.component がトップページの役割を担うことが多いです)

  • 大きなタイトル「Welcome to My Website」
  • 文章「ここでは素敵な情報をお届けします。」
  • ボタンを押すとタイトルが変わる

TypeScriptクラス

TypeScriptクラスはコンポーネントのデータ(状態)とロジック(振る舞い)を担当する部分です。

簡単に言えばどんなデータを持つ?(例: タイトル文字列)ボタンが押されたら何をする?(例: タイトルを変える)などといった頭脳・司令塔の役割を果たします。

サンプルコード app.component.ts のイメージ例

// app.component.ts
import { Component } from '@angular/core';

@Component({
  selector: 'app-root',            // HTML上で <app-root> と書けば表示される
  templateUrl: './app.component.html', // 画面の骨組み(HTML)
  styleUrls: ['./app.component.css']   // 見た目(CSS)
})
export class AppComponent {
  title = 'Welcome to My Website'; 
  description = 'ここでは素敵な情報をお届けします。';

  changeTitle() {
    this.title = 'New Title! ようこそ!';
  }
}

基本構文ルール

TypeScriptクラスは@Componentデコレーターで修飾され、Angularに対してこれがコンポーネントであることを示します。このデコレーターは、セレクタ、テンプレートURL、スタイルURLなど、コンポーネントに関連するメタデータを指定します。

1. インポート文

Angularコアライブラリやその他必要なモジュール、コンポーネント、サービスなどから、必要な機能やデータ型をインポートします。

import { Component } from '@angular/core';

2. @Componentデコレーター

@Componentデコレーターは、クラスがAngularコンポーネントであることを示す役割を担います。また、コンポーネントのメタデータ(コンポーネントを識別するための名前・使用するテンプレートファイルのパス・およびコンポーネント専用のスタイルファイルのパス)が含まれます。

@Component({
  selector: 'app-root',            // HTML上で <app-root> と書けば表示される
  templateUrl: './app.component.html', // 画面の骨組み(HTML)
  styleUrls: ['./app.component.css']   // 見た目(CSS)
})

3. コンポーネントクラス

コンポーネントの振る舞いを定義するクラスです。titledescription が、このコンポーネント(トップページ)のデータ。changeTitle() は、「ボタンをクリックしたらタイトルを変更する」ためのメソッドです。

export class AppComponent {
  title = 'Welcome to My Website'; 
  description = 'ここでは素敵な情報をお届けします。';

  changeTitle() {
    this.title = 'New Title! ようこそ!';
  }
}

テンプレート(HTML)

続いて、テンプレートについて。

  • 画面の見た目の骨組みを記述するもの。
  • さきほどの TypeScript ファイル(クラス)で定義した titledescriptionchangeTitle() を「使う場所」です。もっと言えば単なるHTMLファイルです。

サンプル app.component.html のイメージ例

<!-- app.component.html -->
<h1>{{ title }}</h1>  <!-- {{ }} で TypeScriptのtitleを表示 -->
<p>{{ description }}</p>

<button (click)="changeTitle()">タイトルを変更</button>
  • {{ title }} の部分が、AppComponent クラスの title プロパティを画面に差し込みます(データバインディング)。
  • (click)="changeTitle()" は、ボタンがクリックされたときに changeTitle() メソッドを呼び出す設定。
  • もしボタンを押したら、TypeScript側で title が更新されて、画面上のタイトルが変わります。
Q
データバインディングとは?
A

データバインディングとは、プログラム内のデータと画面(ユーザーインターフェース)を自動的に同期する仕組みのことです。例えば、画面に表示された値を変更すると、その値がプログラムのデータにも反映され、逆にプログラムのデータを変更すると画面の表示も更新されます。(最後の章で詳細を解説します

スタイル(CSS)

スタイルでは、コンポーネントの見た目を定義します。スタイルはコンポーネントにローカルに適用され、他のコンポーネントには影響を与えません。

サンプル app.component.css のイメージ例

/* app.component.css */
h1 {
  color: navy;
  font-size: 2rem;
  margin-bottom: 10px;
}

button {
  background-color: orange;
  border: none;
  padding: 8px 16px;
  cursor: pointer;
  color: #fff;
}

button:hover {
  background-color: darkorange;
}

Angularの基本「コンポーネント」のざっくりフロー

  1. HTML(app.component.html)
    画面で <h1>{{ title }}</h1> の部分を表示したい → どこのデータ? → TSファイルの title
  2. TypeScript(app.component.ts)
    title'Welcome to My Website' だから、画面にはこの文字が出る。
    ボタンを押すと changeTitle() が呼ばれる → title'New Title! ようこそ!' に変わる → 画面が自動的に更新される
  3. CSS(app.component.css)
    h1navy色buttonオレンジ色に見える。
    他のコンポーネントに影響せず、このコンポーネントの見た目だけを変えられる。
サンプル:コンポーネント

サンプル ユーザー名を表示するコンポーネント

コンポーネントの理解を深めるためにもう1つ別の実践的なサンプルコードを置いておきます。

1:TypeScriptクラスファイル: コンポーネントの定義:user.component.ts

import { Component } from '@angular/core';

@Component({
  selector: 'app-user', // コンポーネントのセレクター
  templateUrl: './user.component.html', // テンプレートファイルへのパス
  styleUrls: ['./user.component.css'] // スタイルファイルへのパス
})
export class UserComponent {
  userName = 'John Doe'; // テンプレートで表示するためのユーザー名
}

このTypeScriptファイルでは@Componentデコレータを使用して、コンポーネントのメタデータ(セレクタ、テンプレートURL、スタイルURL)を定義し、コンポーネントクラスUserComponentuserNameプロパティを定義しています。

2:HTMLテンプレートファイル: UIの定義:user.component.html

<div class="user">
  User Name: {{ userName }}
</div>

HTMLテンプレートファイルでは、データバインディングを使用してTypeScriptクラスのuserNameプロパティを表示しています。

3:CSSスタイルファイル: コンポーネントのスタイル定義:user.component.css

.user {
  color: blue;
  font-weight: bold;
}

CSSスタイルファイルでは、テンプレートの.userクラスに対してスタイルを定義しています。

Angularの基本:モジュールとルートコンポーネント

ここまで学んできたように、Angularのコンポーネントは「HTML+TypeScript+CSS」の3つがセットになった“アプリの部品”です。

しかし、単体のコンポーネントだけではアプリ全体を構築できません。複数のコンポーネント同士をどうまとめるか? そして、アプリを起動したときに最初に表示されるコンポーネントはどれなのか? それらを管理・決定するのが モジュール(NgModule)ルートコンポーネント です。ここでは、モジュールとルートコンポーネントについて説明しておきます。

モジュール(NgModule)

Angularでは、アプリを構成するコンポーネントやサービス、パイプなどをひとまとまりに管理する仕組みとして、モジュール(NgModule)が用意されています。

  • いわば「アプリの基盤(土台)」。
  • 「どんなコンポーネントを使うか」「どの外部ライブラリを読み込むか」を登録する場所です。

わかりやすくイメージすると・・・

  • コンポーネント:おもちゃのブロック(赤・青・緑などの色や形を持つ小さなピース)。
  • モジュール:ブロックを収納する整理箱(1つの箱には、同じシリーズのブロックをまとめて入れる)。

システムでの例:

  • コンポーネント:フォームの「名前入力欄」や「送信ボタン」。
  • モジュール:「ユーザー登録モジュール」として、フォーム全体+登録処理ロジックを1つのまとまりとして管理。

2. AppModule(ルートモジュール)

Angularアプリを起動するとき、最初に読み込まれるモジュールがルートモジュール(Root Module)です。「アプリの起動に必要な設定」をすべて集めた“入り口”のような存在。

ルートモジュールは、「一番大きな箱」と考えるとわかりやすいです。この箱は、すべてのコンポーネントやモジュールを一元管理し、システム全体の「司令塔」として機能します。

  1. コンポーネントを宣言declarations
  2. 使いたい外部モジュールをインポートimports
  3. アプリ起動時に使うコンポーネントを指定bootstrap
    …などを設定します。
// app.module.ts の例
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';

import { AppComponent } from './app.component';  // ルートコンポーネント

@NgModule({
  declarations: [    // このアプリ内で使うコンポーネント等を登録
    AppComponent
  ],
  imports: [         // 他のモジュール(機能)を読み込む
    BrowserModule
  ],
  providers: [],
  bootstrap: [AppComponent] // 起動時に表示されるコンポーネントを指定
})
export class AppModule {}

なぜ「ルートモジュール」が必要なのか?

  • Angularは複数のモジュールを組み合わせて大きなアプリを作れる仕組みですが、どこか一つ「最初に読み込む」モジュールが必要になります。
  • ルートモジュールは、これらのまとめ役&アプリのスタート地点として存在しているわけです。
  1. ルートモジュール(Root Module) = アプリの入り口&土台
    • ほとんどのAngularアプリでは AppModuleapp.module.ts)がその役割。
  2. 主な役割
    • コンポーネントを登録する(declarations
    • 他のモジュールを読み込む(imports
    • 最初に表示するコンポーネントを指示する(bootstrap
  3. イメージ
    • 「Angularアプリを立ち上げるためにまず読み込む設定ファイル」
    • 「アプリを総括し、使う部品・機能を一括で把握する場所」

ルートコンポーネント

1. アプリを立ち上げた瞬間に表示されるコンポーネント

通常、AppComponentapp.component.ts)が「ルートコンポーネント」の役割を担います。

  • ユーザーがブラウザでページを開いたとき、真っ先に表示されるコンポーネントです。
  • index.html 内の <app-root></app-root> タグに差し込まれる形で画面に描画されます。
// app.component.ts の例
import { Component } from '@angular/core';

@Component({
  selector: 'app-root',               // <app-root> で呼び出せる
  templateUrl: './app.component.html', // HTMLテンプレート
  styleUrls: ['./app.component.css']   // CSSスタイル
})
export class AppComponent {
  title = 'My Angular App';
}
  • このクラスに記載したtitleなどのプロパティやメソッドが、「ルートページ」の表示や挙動を定義します。
  • <app-root> タグを使うと、このコンポーネントが表示されます。

2. 他のコンポーネントを呼び出す“親”役

  • ルートコンポーネントは、アプリ全体の“親”のような存在。
  • 画面の上部にヘッダーを表示したり、各ページを切り替えるためのルーターを配置したりします。
  • 実際の大規模アプリでは、ルートコンポーネントが子コンポーネントを呼び出し、さらにその下に孫コンポーネント…といった階層構造で画面を作り上げていきます。

Angularの基本:データバインディング(Data Binding)

最後に、データバインディングについて。これさえ押さえれば、Angularの全体像がなんとなく見えてくるはずです。

データバインディング(Data Binding)とは、コンポーネント(主にTypeScript側)で持っているデータや処理を、HTMLテンプレート側と自動的に同期させる仕組みのことです。

Angular データバインディング
図2:Angular データバインディング

この仕組みのおかげで「変数の値を画面に表示する」「ボタンをクリックしたときに処理を実行し、画面を更新する」などがスムーズに行うことができるようになります。

なぜデータバインディングが重要なのか?

従来のWeb開発(例えばjQueryなど)であれば、

  1. 値が変わったら、手動でDOMを更新する
  2. クリックイベントを設定して、手動で値を書き換える
    …と、画面とデータを結びつけるために都度DOM操作を行う必要がありました。

Angularのデータバインディングでは、データが変われば画面も自動的に更新される、あるいは画面操作があればデータが自動的に変わるといった仕組みが用意されており、開発がシンプルになります。

まとめ — Angularのエッセンス

  • コンポーネント=アプリのパーツをHTMLテンプレートTypeScriptクラスCSSスタイルでまとめたもの。
  • データバインディング=コンポーネントのロジックと画面表示を効率よく結びつける仕組み。
  • モジュール=コンポーネントやサービスなどを整理・登録してアプリとしてまとめる入れ物。
タイトルとURLをコピーしました