ChatGPTでプログラミング!Vue.JSのTwitterメモアプリを作ろう

こんにちは。Webデザイナーのショウです。

ChatGPTと対話しながらVue.jsのTwitterメモアプリを作ってみました。Twitterの投稿を事前にメモしてストックしておくアプリです。作り方の流れを公開します。完成したアプリはこちらです。
→ デモ

ChatGPTのバージョンはGPT4を使用しています。

ChatGPTに開発の要件を伝える

まずは、作りたいアプリの内容をChatGPTに伝えました。

Vue.JSでメモアプリを作ってください。Twitterのこれからツイートをするテキストをメモしておくアプリです。下記の要件でコードを書いてください。

・Vue.jsのバージョンは3で書いてください
・今回はCDNでVue.jsを読み込む方式を採用します。
・1つのjsファイルの中にJavaScriptもHTMLもCSSも記述するコードを書いてください。
・見やすいUIで作ってください。
・Twitterのツイートをメモするアプリなので140文字のリアルタイムで文字数をカウント機能を付けてください
・メモは10件までローカルストレージに保存できるようにしてください。削除や編集機能も付けてください。
・HTMLファイルのlang属性は日本でお願いします。

今回はVue.JSはCDN方式で読み込み、1つのHTMLファイルにHTML・CSS・JavaScriptを記述するようにします。

対話開始!

お、今回もサクサクと書き始めました!

10秒くらいであっという間に書いてくれました。

見出しやアプリの説明が無かったので、追加でお願いしました。修正してくれたコードを反映して完成です!

完成したコード

以下がすべてのコードです。CSSは少し修正しています。

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Twitterメモアプリ</title>
  <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
  <style>
    body {
      font-family: Arial, sans-serif;
      display: flex;
      justify-content: center;
      align-items: center;
      margin: 0;
      padding: 0;
      background-color: #f5f5f5;
    }

    .app {
      width: 500px;
      background-color: white;
      padding: 20px;
      border-radius: 5px;
      box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
      margin: 40px 0;
    }

    h1 {
      font-size: 24px;
      margin-bottom: 10px;
    }

    p.description {
      font-size: 14px;
      margin-bottom: 20px;
    }

    .count {
      color: #999;
      font-size: 12px;
    }

    textarea {
      width: 100%;
      padding: 10px;
      font-size: 16px;
      margin-bottom: 10px;
      resize: none;
      border: 1px solid #ccc;
      box-sizing: border-box;
    }

    .memo-list {
      list-style: none;
      padding: 0;
    }

    .memo {
      background-color: #f5f5f5;
      padding: 10px;
      margin-bottom: 10px;
      border-radius: 5px;
    }

    .memo-title {
      font-weight: bold;
      font-size: 18px;
    }

    .memo-text {
      font-size: 14px;
      white-space: pre-wrap;
    }

    button {
      background-color: #5bc0de;
      color: white;
      border: none;
      padding: 10px;
      margin-right: 5px;
      cursor: pointer;
      font-size: 14px;
      border-radius: 5px;
    }

    button.delete {
      background-color: #d9534f;
    }
  </style>
</head>
<body>

  <div id="app" class="app">
    <h1>Twitterメモアプリ</h1>
    <p class="description">Twitterの投稿を事前にメモするアプリです。140文字をリアルタイムでカウントできます。</p>
    <textarea v-model="memo" :maxlength="maxLength" rows="4"></textarea>
    <p class="count">{{ remainingCharacters }} 文字残り</p>
    <button @click="addMemo">メモを追加</button>
    <ul class="memo-list">
      <li v-for="(memo, index) in memos" :key="index" class="memo">
        <p class="memo-title">メモ {{ index + 1 }}</p>
        <p class="memo-text">{{ memo }}</p>
        <button @click="editMemo(index)">編集</button>
        <button @click="deleteMemo(index)" class="delete">削除</button>
      </li>
    </ul>
  </div>

  <script type="module">

    const app = Vue.createApp({
      data() {
        return {
          memo: '',
          maxLength: 140,
          memos: JSON.parse(localStorage.getItem('memos')) || [],
          editingMemoIndex: null,
        };
      },
      methods: {
        addMemo() {
          if (this.memo === "" || this.memo.length > this.maxLength) return;

          if (this.editingMemoIndex !== null) {
            this.memos.splice(this.editingMemoIndex, 1, this.memo);
            this.editingMemoIndex = null;
          } else {
            this.memos.push(this.memo);
          }

          localStorage.setItem("memos", JSON.stringify(this.memos));
          this.memo = "";
        },
        editMemo(index) {
          this.memo = this.memos[index];
          this.editingMemoIndex = index;
        },
        deleteMemo(index) {
          this.memos.splice(index, 1);
          this.saveMemos();
        },
        saveMemos() {
          localStorage.setItem('memos', JSON.stringify(this.memos));
        },
      },
      computed: {
        remainingCharacters() {
          return this.maxLength - this.memo.length;
        },
      },
    }).mount('#app');
  </script>
</body>
</html>

テキストエリアには140文字以上は入力できないようにしてくれていて気が利いてます。

メモの内容はブラウザのローカルストレージに保存されるので、ブラウザを閉じても消えることはありません。

デモ

UIも綺麗で使いやすそうです。

→ デモ

以上、ChatGPTでTwitterメモアプリを作ろう!でした。

この記事を書いた人
ショウ
ショウ

Webデザイナー兼マーケター。趣味はテニス。猫とK-POPとハノイが大好き。

「AI」カテゴリの記事

AI×オフショア開発で最先端のシステム・アプリ開発を低価格で実現!
『AI・人間判定クイズ』を作りました。見分けられますか?
AIチャットボット開発ならJVBにお任せください!GPTのAPIを活用
かわいい!ChatGPT4のDALLE3に企業キャラタクターを描いてもらった
【呪文付き】BRAモデルのAIグラビア写真集(15枚)
企業が画像生成AIを使う際の注意点。ホントにそれ商用可能?
ChatGPTでプログラミング!Vue.JSのクイズアプリを作ろう
「AI」記事一覧
ChatGPTでプログラミング!Vue.JSのクイズアプリを作ろう
女性に大人気!サラダバーが最高『バインセオサイゴン』(新宿)
JVBコラム
資料をダウンロードしていただき、
お気軽にご相談ください!
2024年12月現在、
ご依頼可能です!
1分のかんたん入力 資料ダウンロード(無料)