ライブリロードによる高速アプリ開発
ここまでで、どこでも動作するクロスプラットフォームアプリを簡単に開発できることがわかりました。開発エクスペリエンスはかなり高速ですが、さらに高速化する方法があると言ったらどうでしょう?
Ionic CLI のライブリロード機能を使用すると、Ionic アプリの構築時の生産性を向上させることができます。アクティブになっている場合、ライブリロードはアプリの変更が検出されると、ブラウザや WebView をリロードします。
ライブリロード
ionic serve
を覚えていますか?あれはブラウザでライブリロードが動作し、迅速なイテレーションを可能にするものでした。
iOS および Android デバイスで開発する際にも使用できます。これは、ネイティブプラグインと対話するコードを作成するときに特に役立ちます。ネイティブプラグインのコードが動作することを確認するにはデバイス上で実行する必要があるため、コードを迅速に記述し、ビルドしてデプロイし、テストする方法があることは、開発速度を維持するために非常に重要です。
ライブリロードを使用して、フォトギャラリー機能の欠けていた部分である写真の削除を実装しましょう。お好みのプラットフォーム (iOS または Android) を選択し、デバイスをコンピュータに接続します。次に、選択したプラットフォームに基づいてターミナルで次のいずれかのコマンドを実行します。
$ ionic cap run ios -l --external
$ ionic cap run android -l --external
ライブリロードサーバーが起動し、まだ開いていない場合は選択したネイティブ IDE が開きます。IDE 内で、[再生] ボタンをクリックしてアプリをデバイスに起動します。
写真の削除
ライブリロードが実行され、アプリがデバイスで開いている状態で、写真削除機能を実装しましょう。Tab2Page.vue
を開き、actionSheetController
をインポートします。写真の削除オプションを備えたIonActionSheetを表示します。
import {
actionSheetController,
IonPage,
IonHeader,
IonFab,
IonFabButton,
IonIcon,
IonToolbar,
IonTitle,
IonContent,
IonImg,
IonGrid,
IonRow,
IonCol,
} from '@ionic/vue';
// other imports
次に、すぐに作成する deletePhoto
関数を参照します。
const { photos, takePhoto, deletePhoto } = usePhotoGallery();
ユーザーが画像をタップ/クリックすると、アクションシートが表示されます。<ion-img>
要素にクリックハンドラーを追加します。
<ion-img :src="photo.webviewPath" @click="showActionSheet(photo)"></ion-img>
次に、script setup
内で、create
関数を呼び出して、選択した写真を削除するか、ダイアログをキャンセル (閉じる) するオプション付きのダイアログを開きます。
const showActionSheet = async (photo: UserPhoto) => {
const actionSheet = await actionSheetController.create({
header: 'Photos',
buttons: [
{
text: 'Delete',
role: 'destructive',
icon: trash,
handler: () => {
deletePhoto(photo);
},
},
{
text: 'Cancel',
icon: close,
role: 'cancel',
handler: () => {
// Nothing to do, action sheet is automatically closed
},
},
],
});
await actionSheet.present();
};
次に、usePhotoGallery
関数に deletePhoto
メソッドを実装する必要があります。ファイルを開き、次を追加します。
const deletePhoto = async (photo: UserPhoto) => {
// Remove this photo from the Photos reference data array
photos.value = photos.value.filter((p) => p.filepath !== photo.filepath);
// delete photo file from filesystem
const filename = photo.filepath.substr(photo.filepath.lastIndexOf('/') + 1);
await Filesystem.deleteFile({
path: filename,
directory: Directory.Data,
});
};
選択した写真は最初に photos
配列から削除され、次に Filesystem API を使用して写真ファイルが削除されます。
photos
配列から写真を削除すると、自動的に cachePhotos
関数がトリガーされることを覚えておいてください。
const cachePhotos = () => {
Preferences.set({
key: PHOTO_STORAGE,
value: JSON.stringify(photos.value),
});
};
watch(photos, cachePhotos);
最後に、deletePhoto
関数を返します。
return {
photos,
takePhoto,
deletePhoto,
};
このファイルを保存し、もう一度写真をタップして、[削除] オプションを選択します。今回は、写真が削除されました!ライブリロードを使用して、はるかに迅速に実装されました。💪
このチュートリアルの最後の部分では、アプリケーションをビルドしてユーザーのデバイスにデプロイするために使用される Appflow 製品の基本について説明します。