全10回にわたってお届けしてきたタロットアプリ開発記も、ついに今回が最終回です。
前回までに、美しいUIと魔法のようなアニメーション、そして占いのロジックがすべて完成し、ローカル環境(手元のパソコン)では完璧に動作するようになりました。
しかし、プロフェッショナルなWebアプリとして世に出すためには、最後にもうひと手間だけ「細部の仕上げ」が必要です。今回は、アプリの顔となるアイコンの設定を行い、完成したすべてのコードを再びCloudflareへ本番公開(デプロイ)する総仕上げの工程をお届けします。
細部に神は宿る:アプリの「顔」を設定する
現在、ブラウザのタブに表示されている小さなアイコン(ファビコン)は、環境構築時にViteが自動生成したデフォルトのロゴマークのままになっています。これを、第5回で用意したオリジナルのタロット画像(カードの裏面に使ったデザインなど)に変更しましょう。
まずは、public フォルダ内にある不要な初期ファイル(favicon.svg など)を削除し、プロジェクトを綺麗に掃除します。不要なコードやファイルを残さないことは、品質管理の基本です。
次に、アプリの骨組みとなる index.html ファイルを開き、アイコンを読み込んでいる <link> タグを書き換えます。
ここで重要なのが、通常の rel="icon"(PCブラウザ用)だけでなく、rel="apple-touch-icon" というスマートフォン用の設定も追加することです。この一行を記述しておくだけで、ユーザーがスマートフォンの「ホーム画面に追加」機能を使った際、まるでApp Storeからダウンロードした本物のネイティブアプリのように、美しいアイコンがスマホの画面に並ぶようになります。
最終ビルド:すべての努力をひとつのパッケージに
アイコンの設定と不要なファイルの掃除が終わったら、ターミナルを開いて最終確認を行います。
手元の環境で動作確認をし、カードのフリップやフェードイン・フェードアウトの遷移に問題がないことを確かめたら、いよいよ本番用の変換作業(ビルド)です。
ターミナルに npm run build と打ち込みます。
この数秒間で、私たちがこれまでに書いてきたReactのコンポーネント、Framer Motionの複雑なアニメーション設定、そしてTailwind CSSのスタイリングがすべて解析され、インターネット上で最も効率よく動く極限まで圧縮されたファイル群として dist フォルダに出力されます。
歓喜の最終デプロイ、そして世界へ
準備はすべて整いました。第4回で開通させたCloudflareへのデプロイパイプラインに、この完成形のデータを流し込みます。
ターミナルで npx wrangler pages deploy dist を実行します。
画面に次々とアップロードのログが流れ、最後に緑色の文字で本番URL(https://〇〇〇.pages.dev)が表示された瞬間……。あなたのパソコンの中だけで動いていた魔法のタロットアプリが、正式に世界中のスマートフォンやパソコンからアクセスできる本物のWebサービスとして産声を上げました!
お持ちのスマートフォンのWi-Fiを切り、4G/5G回線からそのURLにアクセスしてみてください。自分がゼロから組み上げたカードが滑らかにめくれる感動を、ぜひその手で味わってください。
【連載を振り返って】
黒い画面(ターミナル)への恐怖心から始まり、Reactの環境構築、データの定義、Tailwind CSSによるデザイン、そしてFramer Motionのなめらかなアニメーションまで。一歩ずつ階段を登り、ついにひとつのWebアプリを独力で完成させることができました。
「自分だけのサービスを作る」という経験は、プログラミングスキルだけでなく、モノづくりの圧倒的な楽しさを教えてくれます。この連載が、皆様の背中を押す小さなきっかけになれば幸いです。
【編集後記】
全10回におよぶ開発ストーリーが、ついに本当の終わりを迎えました……!
スマートフォンから自分の本番URLにアクセスし、自分で書いたコードの通りに美しいダークグラデーションが広がり、寸分の狂いもなくカードがフワッとめくれた瞬間。その完璧な動作を見つめながら、静かにパソコンのディスプレイを閉じました。ゼロから作り上げたこの達成感は、何物にも代えがたい最高の報酬です。さあ、今夜は完成したばかりの自作アプリで明日の運勢を占い、美味しいお酒で祝杯をあげたいと思います!最後までご愛読いただき、本当にありがとうございました!