0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【TypeScript&Nuxt.js】占いアプリを作ってみる

Posted at

はじめに

最近ChatGPTで占いができるらしいと聞いたので、タロット占いを試してみた🔮
すると、どのように占ったかが「分析」というタブでPythonコードを見ることができた!

IMG_3022.jpeg

確かにカードをランダムに引くことで占いができるのか、と気付き。。🧐(神聖さはない気がするけど)
これ、もしかしてTSとNuxtでもできるかもと思ったので勉強がてらやってみる🐣
配列や型定義など、基本的なところは勉強した程度。

占いについての知識は全くないので検索したり、GPTに聞きながら調べた。

※応用として占いAPIを利用できたらと考えている💭

今回はChatGPTにはコードを出力させず、自分が詰まったときにアドバイスをもらう補助的な役割で使った。

学べそうなこと

機能 学べそうなこと
カード一覧の配列を作る TypeScriptでの配列・型の書き方
ランダムにカードを引く JavaScriptのロジック(Math.randomなど)
結果を表示する画面を作る コンポーネントの作成・分割
NuxtLinkで遷移させる ルーティングやページ遷移の理解
引いたカードに応じて画像を表示 条件分岐と画像の扱い

進め方

(イメージをGPTに伝えて補足してもらった)

  1. タロットカードのデータをTypeScriptで配列にする
    型の作り方、配列の書き方
  2. その中からランダムに1枚選ぶロジックを書く
    JavaScriptの基本的な処理
  3. 結果を表示する画面を作る(1ページ)
    Nuxtのページ、表示の基礎
  4. カードごとに画像を表示してみる
    条件分岐、画像の表示
  5. NuxtLinkでページ遷移(トップ→結果ページ)
    ルーティングの基本
  6. デザインを整える
    CSSの利用
  7. 応用:今日の運勢APIを取り入れてみる
    APIの呼び出しとデータ表示
  8. データの組み合わせで文章を作る

セットアップ

プロジェクト作成。

✔ TypeScript
✔ Vue Router
✔ Pinia
✔ ESLint + Prettier

Install Oxlint for faster linting? (experimental)はNoにした。

ステップ1.タロットカードのデータをTypeScriptで配列にする

src/store/tarotCards.ts を作成した。

⭐️カードの情報

  • 番号
  • カードの名前
  • 内容(タロットカードには正位置と逆位置があるから2パターン?)
const tarotCards = [
  {
    id: 0,
    name: '愚者(The Fool)',
    normalMeaning: '自由、冒険、無限の可能性',
    reverseMeaning: '無計画、不安定、軽率',
  },
  {
    id: 1,
    name: '魔術師(The Magician)',
    normalMeaning: '創造力、チャンス、行動力',
    reverseMeaning: '詐欺、自己中心、実力不足',
  },
  // 以下略
]

ここまででGPTに確認したら2つ修正点が出た✅

📝①storeじゃなくてdataみたいなディレクトリにtsファイルを作るといい!

** 🗂️ storeとdataの違いをちゃんと理解する**

フォルダ 使い道 備考
store アプリ全体で使う状態(state)管理 「今引いたカードはこれ!」など動的なデータ Piniaで使う(defineStore()を書く場所)
data(自作) ただの静的なデータ置き場 「全部のタロットカード一覧」など最初から決まってるデータ TypeScriptの配列を置くのにピッタリ

📝②型定義をした方が良い!

TypeScriptは勝手に型を推論してくれるため、明示的に書かなくても動くことが多い。
でも型を定義すると再利用・保守性がUPするのでtypeを作ってexportしよう。

// 型(type)定義
export type TarotCard = {
  id: number
  name: string
  normalMeaning: string
  reverseMeaning: string
}

// 配列に型をつける
export const tarotCards: TarotCard[] = [
  {
    id: 0,
    name: '愚者(The Fool)',
    normalMeaning: '自由、冒険、無限の可能性',
    reverseMeaning: '無計画、不安定、軽率',
  },
  {
    id: 1,
    name: '魔術師(The Magician)',
    normalMeaning: '創造力、チャンス、行動力',
    reverseMeaning: '詐欺、自己中心、実力不足',
  },
]

次やること

2 . その中からランダムに1枚選ぶロジックを書く

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?