Angularの環境構築と使い方

Angularとは、フロントのSPA (Single Page Application)のアプリ開発をする際に重宝するフレームワークでして、コンポーネント単位で開発でき、ルーティング機能もあるため、レスポンスの速い快適なアプリケーションが開発できます。(他にreactやVue.js等もあります。)

なぜ、Angularなどのフレームワークがレスポンスが速いのかは、以前に書いたreactのページで記載しました。基本的にはAngularも同じです。

ここでは、Angularのインストール・環境構築から、簡単なWebサイトの作成までをご説明します。

よくある、下記のようなレイアウト構成のページをコンポーネント単位で作成し、コンテンツをサイドメニューから切り替えることができるようにします。これだけでもレスポンスが速いのがわかると思います。

では早速、作っていきましょう。

Angularのインストールと環境構築

まず、Angular CLIをインストールするのですが、npmコマンドでインストールしていくため、もしnpmコマンドが無い場合は、下記のnodeのページからNode.jsをダウンロードしてインストールすれば、npmも入ります。

nodeのWebページ

まずは、Angular CLIをインストールします。

# npm install -g @angular/cli

これだけで基本的にはAngularのインストールは完了です。ですが、レイアウトや便利部品などを使うためにmaterialは必須になってきますし、フォームやhttp通信をする場合も別途モジュールを追加していく必要がありますので、ここでは、materialというモジュールを追加してみます。

まず、Webサイトのアプリケーションを作成します。(この中でモジュールを追加していくので)

sampleというアプリケーション名にします。

# ng new sample

これで、sampleというフォルダができたと思います。この中に入ります。

# cd sample

materialのモジュールを追加します。

# ng add @angular/material

そして、src/app/app.module.ts に、materialの中のMatGridListModuleというモジュールを使うことを書きます。

import { MatGridListModule } from '@angular/material/grid-list';

同ファイルのNgModuleの中にも追加します。

 imports: [
    BrowserModule,
    AppRoutingModule,
    MatGridListModule
  ],

これで準備完了です。

コンポーネントの作成

次に、ヘッダ、メニュー、コンテンツ1、コンテンツ2、フッターのコンポーネントを作っていきます。コンポーネントを作るときも、コマンドラインで作ります。

# ng generate component header
# ng generate component menu
# ng generate component content1
# ng generate component content2
# ng generate component footer

そして、src/app/app.component.htmlを下記のように書き換えます。最初に何かたくさん書いてありますが、全部消して大丈夫です。

<app-header></app-header>
  <mat-grid-list cols="4" rowHeight="50px">
  <mat-grid-tile colspan="1" rowspan="6">
    <app-menu></app-menu>
  </mat-grid-tile>
  <mat-grid-tile colspan="3" rowspan="6">
    <app-content1></app-content1>
  </mat-grid-tile>
</mat-grid-list>
<app-footer></app-footer>

まずは、コンテンツ1(content1)だけを表示します。何をやっているのかというと、全体を4つの列に分けて(cols=”4″)、menu部分を1列分(colspan=”1″)、content1部分を3列文(colspan=”3″)にして表示しています。

では、ここまでのソースコードをブラウザに表示して確認してみます。apacheやnginx等のWebサーバで動かすこともできるのですが、手っ取り早く確かめるには、違うポートでAngularのWebサーバを立ち上げて確認します。

# ng serve --port 8080

これで、localhostの8080番ポートでこのサイトが見れるようになりましたので、ブラウザで、http://localhost:8080/ にアクセスしてみましょう。

header works!や、menu works!、content1 works!、footer works!が表示されていればできています。

Routerでページ切り替え

では、次にメニュー部分にリンクを作成し、コンテンツ部をcontent1とcontent2で切り替えられるようにします。

まず、content1を表示させていた部分をrouterで切り替えられるようにします。

先ほどの src/app/app.component.htmlの中のcolspan=”3″の中を書き換えます。

<mat-grid-tile colspan="3" rowspan="6">
    <div class="main">
      <router-outlet></router-outlet>
    </div>
  </mat-grid-tile>

次に、menu部分のコンポーネントのhtmlを作成します。src/app/menu/menu.component.htmlに下のように書きます。

<ul>
  <li><a routerLink="/content1">コンテンツ1</a></li>
  <li><a routerLink="/content2">コンテンツ2</a></li>
</ul>

リンク部分が href ではなく、routerLink になっております。AngularのRouter機能を使ってページを切り替えるためです。ですが、このままだとRoutingされませんので、もう少し設定します。

src/app/app-routing.module.ts を下のように追記します。

import { Content1Component } from './content1/content1.component';
import { Content2Component } from './content2/content2.component';

Routesの変数にも追記します。

const routes: Routes = [
  { path: '', redirectTo: '/content', pathMatch: 'full' },
  { path: 'content1', component: Content1Component },
  { path: 'content2', component: Content2Component }
];

これでもう一度、ブラウザで確認してみましょう。

先ほどのng serveが立ち上がったままでしたら、すでにブラウザに自動で反映されていると思います。止めていたら、再度同じように立ち上げましょう。

メニュー部分に、「コンテンツ1」と「コンテンツ2」のリンクができていて、クリックすると、それぞれ、コンテンツ部が content1 works!とcontent2 works!に切り替えられたらできています。

ページのリロード無しで切り替えられるため、速いです。(コンテンツがこれだけだとあまりわからないかもしれませんが)

Webサーバで見れるようにする

ここまでは、ng serveコマンドで8080番ポートに簡易なWebサーバを立ち上げて確認していました。ですが、実際にデプロイするときには、apacheやnginxなどの既存のWebサーバのどこかのフォルダに置きたいと思います。そのための作法についても説明します。

まず、Webサーバにデプロイするためには、ソースコードをビルドする必要があります。この時に、この作成したWebページを、Webサーバのどのフォルダに置くかを決める必要があります。ドキュメントルートからの相対的なパスで指定します。

例えばローカルホストのサーバで、

http://localhost/sample/

という場所で見れるようにするには、相対パスが /sample/ ということをビルド時に指定します。

# ng build --base-href=/sample/

これでビルドされて、ワークスペースの dist/ というフォルダに sampleというフォルダができています。これをこのまま、Webサーバのドキュメントルートにコピーすれば、上記のURLで見れるようになります。

apacheの場合は、/var/www/html がドキュメントルートの可能性が高いです。

未分類カテゴリーの記事

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です