ライブリロードによる高速アプリ開発
これまで、あらゆる場所で動作するクロスプラットフォームアプリをいかに簡単に開発できるかを見てきました。開発エクスペリエンスはかなり高速ですが、さらに高速化する方法があると言ったらどうでしょうか?
Ionicアプリを構築する際の生産性を向上させるために、Ionic CLIのライブリロード機能を利用できます。アクティブな場合、ライブリロードは、アプリ内の変更が検出されると、ブラウザやWebViewをリロードします。
ライブリロード
ionic serve
を覚えていますか?それはブラウザで動作するライブリロードであり、迅速な反復を可能にしていました。
iOSおよびAndroidデバイスでの開発時にも使用できます。これは、ネイティブプラグインと対話するコードを作成する場合に特に役立ちます。動作することを確認するにはデバイスで実行する必要があります。したがって、コードをすばやく作成、ビルド、テスト、およびデプロイできることは、開発速度を維持するために重要です。
ライブリロードを使用して、写真ギャラリー機能の欠けている部分である写真の削除を実装しましょう。プラットフォーム(iOSまたはAndroid)を選択し、デバイスをコンピューターに接続します。次に、選択したプラットフォームに基づいて、ターミナルでいずれかのコマンドを実行します。
$ ionic cap run ios -l --external
$ ionic cap run android -l --external
ライブリロードサーバーが起動し、ネイティブIDEがまだ開いていない場合は開きます。IDE内で、再生ボタンをクリックして、デバイスにアプリを起動します。
写真の削除
ライブリロードが実行中で、アプリがデバイスで開いている状態で、写真の削除機能を実装しましょう。tab2.page.html
を開き、各<ion-img>
要素に新しいクリックハンドラーを追加します。アプリユーザーがギャラリー内の写真をタップすると、選択した写真を削除するか、ダイアログをキャンセル(閉じる)するオプションが表示されたアクションシートダイアログが表示されます。
<ion-col size="6" *ngFor="let photo of photoService.photos; index as position">
<ion-img [src]="photo.webviewPath" (click)="showActionSheet(photo, position)"></ion-img>
</ion-col>
tab2.page.ts
で、アクションシートをインポートし、コンストラクターに追加します。
import { ActionSheetController } from '@ionic/angular';
constructor(public photoService: PhotoService,
public actionSheetController: ActionSheetController) {}
UserPhoto
をimport文に追加します。
import { PhotoService, UserPhoto } from '../services/photo.service';
次に、showActionSheet()
関数を実装します。2つのオプションを追加します。PhotoServiceのdeletePicture()
関数(次にさらに追加されます)を呼び出すDelete
と、「キャンセル」の役割を与えられた場合に自動的にアクションシートを閉じるCancel
です。
public async showActionSheet(photo: UserPhoto, position: number) {
const actionSheet = await this.actionSheetController.create({
header: 'Photos',
buttons: [{
text: 'Delete',
role: 'destructive',
icon: 'trash',
handler: () => {
this.photoService.deletePicture(photo, position);
}
}, {
text: 'Cancel',
icon: 'close',
role: 'cancel',
handler: () => {
// Nothing to do, action sheet is automatically closed
}
}]
});
await actionSheet.present();
}
編集した両方のファイルを保存します。写真ギャラリーアプリが自動的にリロードされ、ギャラリーの写真のいずれかをタップすると、アクションシートが表示されます。「削除」をタップしてもまだ何も起こらないので、コードエディターに戻ります。
src/app/services/photo.service.ts
で、deletePicture()
関数を追加します。
public async deletePicture(photo: UserPhoto, position: number) {
// Remove this photo from the Photos reference data array
this.photos.splice(position, 1);
// Update photos array cache by overwriting the existing photo array
Preferences.set({
key: this.PHOTO_STORAGE,
value: JSON.stringify(this.photos)
});
// delete photo file from filesystem
const filename = photo.filepath
.substr(photo.filepath.lastIndexOf('/') + 1);
await Filesystem.deleteFile({
path: filename,
directory: Directory.Data
});
}
選択した写真は、最初にPhotos配列から削除されます。次に、Capacitor Preferences APIを使用して、Photos配列のキャッシュバージョンを更新します。最後に、Filesystem APIを使用して、実際の写真ファイルを削除します。
このファイルを保存し、もう一度写真をタップして「削除」オプションを選択します。今度は写真が削除されます!ライブリロードを使用して、はるかに高速に実装できました。💪
このチュートリアルの最後の部分では、アプリをビルドしてユーザーのデバイスにデプロイするために使用されるAppflow製品の基本について説明します。