Mokelab Blog

画面クラスを作る

ここまでの説明で Web アプリ開発の準備はできました。今回から簡単なアプリを作ってみましょう。

画面を定義する

まず、「画面とはどのようなものか」という定義を作っておきます。ここでは「これから画面の詳細を作ってくださいね」と 呼びかけできるものを「画面」と定義してみます。TypeScript ではインターフェースが定義できるので、次のようなインターフェースにしてみましょう。 IPage.ts というファイルで main.ts と同じフォルダにいれておきます。

interface IPage {
  onCreate(): void;
}

トップ画面クラスを定義する

次に、アプリの入り口となるトップ画面を表示するTopPageクラスを定義してみましょう。 main.ts と同じフォルダに TopPage.ts というファイルを追加します。

export class TopPage implements IPage {
  onCreate(): void {
    throw new Error("Method not implemented.");
  }
}

このクラスは外部から使用されるので、export をつけておきます。exportについての詳しい説明は今回の記事の後半で説明します。

npm で Ractive.js を追加する

実際の画面組み立ては以前説明した Ractive.js を使用しましょう。次のコマンドでプロジェクトに追加します。今回は成果物で使用するパッケージなので --save-dev はつけません。

$ npm install ractive

+ ractive@1.3.8
added 1 package and audited 1787230 packages in 9.935s
found 0 vulnerabilities

Ractive.js で画面を表示させる

TopPageonCreate() で画面を表示させる処理を記述しましょう。Ractive.js を使うので、TopPage.ts の 1 行目に import Ractive from "ractive";を追加します。

import Ractive from "ractive";

export class TopPage implements IPage {
  private ractive!: Ractive;

  onCreate(): void {
    this.ractive = new Ractive({
      el: "#container",
      template: "#topTemplate",
    });
  }
}

index.html にテンプレートを記述する

TopPageonCreate()では、Ractive.jsを使ってid=container の位置に id=topTemplate の内容を貼り付けると記述しました。それにあわせて dist/index.html も修正しましょう。

<html>
  <body>
    <!-- 貼り付け先 -->
    <div id="container"></div>
    <!-- 貼り付ける内容 -->
    <script id="topTemplate" type="text/plain">
      <h1>Top page</h1>
    </script>
    <script src="./main.js"></script>
  </body>
</html>

main.ts でトップ画面を表示させる

アプリは main.ts から実行されます。このままではトップ画面を表示するための処理が実行されないので、次のように main.ts を変更します。

import { TopPage } from "./TopPage";

new TopPage().onCreate();

npm run build でビルドし、dist/index.html を表示させるとちゃんと topTemplate の内容が表示されれば OK です。

import/export とは?

ところで、今回は説明なしに import/export を使用しました。これらは ES6 module の機能です。ファイルが 1 つのモジュール(部品)となります。

まずは export です。これは指定した関数やクラスを外部に公開するために使用します。export をつけなかった場合、関数や変数などはモジュール内(=ファイル内)でのみ参照可能になります。

次に import です。これは指定したモジュールから、export された関数やクラスなどを読み込むために使用します。今回は次の 2 パターンが登場しました。

import Ractive from "ractive";
import { TopPage } from "./TopPage";

まずは from の部分から説明します。from は文字通り、どのモジュールから読み込むかを指定します。"./TopPage"のように相対パスを指定した場合、import しようとしているモジュールの位置を基準に探します。"ractive"のようにモジュール名だけを記述した場合、 npm install で追加した node_modules から探します。

次に import の部分です。{}をつけるパターンとつけないパターンがあります。{}をつけるパターンは、モジュール中で export されているもののうち、どれを使うかを記述します。{}をつけないパターンは、読み込むモジュールで export default されているものをどの名称で使用するかを記述します。ractive モジュールでは Ractive というクラスが export default で指定されているので、{}をつけないパターンで読み込みます。

ビルドに webpack を使用すると、この import を解析し最終的に 1 つの js ファイルにしてくれます。この恩恵をうけるため、webpack を導入する例をこのシリーズで紹介しています。

まとめ

これまで学んだことを用いて最初の画面を表示するところまで記述しました。なぜ npmwebpack を使用しているのか、徐々に理解できてきたのではないでしょうか。

本サイトではサービス向上のため、Google Analyticsを導入しています。分析にはCookieを利用しています。