Angular Pipeの概要と活用方法
要約: 本記事では、AngularのPipeについての基本的な理解を深め、データの表示形式を簡単に変換する方法を紹介します。Pipeを用いることで、コードの可読性が向上し、再利用可能なコンポーネントを効率的に作成することが可能です。
パイプとは
Angularでは、{{}} を使用することでテンプレートに変数を埋め込むことができます。埋め込んだ変数の後ろに {{ 変数 | xxx }} の形でPipeを使用することで、フォーマット変換を適用することができます。
AngularにおけるPipeの基本概念
Pipeとは、Angularのテンプレート内でデータを表示する際に、フォーマットや変換を行うための簡単な方法です。これにより、数値、日付、文字列などあらゆるデータ型を視覚的に整えることができます。
データ型 | 利用可能なPipe |
---|---|
数値 | DecimalPipe, CurrencyPipe |
日付 | DatePipe |
文字列 | UpperCasePipe, LowerCasePipe |
カスタムパイプを作る
今回は、文字列の末尾をマスク処理するPipeを作成してみましょう。
雛形の生成
AngularCLIを使ってPipeの雛形を生成します。
ng generate pipe --name=mask
雛形の内容の確認
作成されたsrc/app/mask.pipe.tsファイルには、@Pipe({ name: 'mask' }) でPipe使用時の名称が定義されており、 {{ 文字列 | mask }} のように使用することができます。
Pipeの処理を実装
src/app/mask.pipe.tsにマスク処理のロジックを記述します。渡された文字列の末尾4文字をマスク処理して返すようにします。
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'mask'
})
export class MaskPipe implements PipeTransform {
transform(value: string): string {
if (value.length <= 4) {
return '*'.repeat(value.length);
}
return value.slice(0, -4) + '****';
}
}
Pipeを適用する
src/app/app.component.tsで作成したMaskPipeを適用します。表示結果は 1111-1111-1111-**** となります。
import { Component } from '@angular/core';
import { MaskPipe } from './mask.pipe';
@Component({
selector: 'app-root',
template: `
<p>{{ creditCardNumber | mask }}</p>
`,
providers: [MaskPipe]
})
export class AppComponent {
creditCardNumber = '1111-1111-1111-1234';
}
Pipeに引数を渡す
src/app/mask.pipe.tsに機能を追加し、第2引数でマスクする文字数を指定できるようにします。
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'mask'
})
export class MaskPipe implements PipeTransform {
transform(value: string, maskLength: number = 4): string {
if (value.length <= maskLength) {
return '*'.repeat(value.length);
}
return value.slice(0, -maskLength) + '*'.repeat(maskLength);
}
}
テストコードを書く
Pipeのテストコードを記述します。transform関数をテストし、マスク機能が正しく動作することを検証します。
import { MaskPipe } from './mask.pipe';
describe('MaskPipe', () => {
let pipe: MaskPipe;
beforeEach(() => {
pipe = new MaskPipe();
});
it('create an instance', () => {
expect(pipe).toBeTruthy();
});
it('should mask the last 4 characters of a string', () => {
expect(pipe.transform('1111-1111-1111-1234')).toBe('1111-1111-1111-****');
});
it('should mask the last n characters of a string', () => {
expect(pipe.transform('1111-1111-1111-1234', 2)).toBe('1111-1111-1111-**');
});
});
まとめ
Pipeの実装は純粋なJavaScript関数なので学習コストが低く、テストコードも簡単に記述できます。Pipeをうまく活用することで、開発を効率化することができます。
パイプを使用することにより、データの表示を簡単に制御でき、可読性やメンテナンス性が向上します。
Q&A
- Q: Pipeはどのようなデータ型に使用できますか?
A: 数値、日付、文字列など、さまざまなデータ型に使用できます。 - Q: カスタムPipeはどのように作成しますか?
A: AngularのPipeTransformインターフェースを実装することで、カスタムPipeを作成できます。 - Q: Pipeの性能最適化はどのように行いますか?
A: Pipeを純粋(pure)にすることで、性能を最適化できます。pureがtrueの場合、入力が変更されたときのみ更新されます。