2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ChatGPTでTodoアプリをコーディングなしで作る(NCMB JavaScript SDK編)

Last updated at Posted at 2023-02-08

ChatGPTは自然言語による質問に対して、それっぽい答えを返してくれるAIです。自然言語同士の質問と回答の場合、合っていないことも多々あるのですが、ことプログラミングコードについては割と精度が高いように思います。

今回はこのChatGPTを使って、NCMBのデモアプリを作ってみました。コーディングは一切行っていません。

1回目

1回目のメッセージは以下の通りです。

NCMBのJavaScript SDKを使ってTodoアプリを作るサンプルコードを書いてください

できあがったコードは以下の通りです。requireを使っているので、Node.jsなどで動くものになるようです。

// Import the SDK
var NCMB = require("ncmb");

// Initialize the SDK with your application key and client key
var ncmb = new NCMB("YOUR_APPLICATION_KEY", "YOUR_CLIENT_KEY");

// Define the Todo class
var Todo = ncmb.DataStore("Todo");

// Add a new to-do item
var todo = new Todo({
  title: "Buy milk",
  completed: false
});
todo.save()
  .then(function(todo) {
    console.log("To-do item added successfully:", todo);
  })
  .catch(function(error) {
    console.error("Error adding to-do item:", error);
  });

// Get all to-do items
Todo.fetchAll()
  .then(function(todos) {
    console.log("All to-do items:", todos);
  })
  .catch(function(error) {
    console.error("Error fetching to-do items:", error);
  });

// Update a to-do item
todo.set("completed", true)
  .update()
  .then(function(todo) {
    console.log("To-do item updated successfully:", todo);
  })
  .catch(function(error) {
    console.error("Error updating to-do item:", error);
  });

// Delete a to-do item
todo.delete()
  .then(function() {
    console.log("To-do item deleted successfully");
  })
  .catch(function(error) {
    console.error("Error deleting to-do item:", error);
  });

2回目

上記のコードはUIがないので、ちょっとサンプルとしては使いづらいです。そこでWeb UIを作ってもらいます。

メッセージは以下を入力します。

HTMLのUIも作成してください

このように書くと、以下のコードが書かれました。かなりそれっぽいです。

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Todo App</title>
  <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/ncmb@2.13.0/ncmb.min.js"></script>
</head>
<body>
  <h1>Todo App</h1>
  <input type="text" id="todo-title">
  <button id="add-button">Add</button>
  <ul id="todo-list"></ul>
  <script>
    // Initialize the SDK with your application key and client key
    var ncmb = new NCMB("YOUR_APPLICATION_KEY", "YOUR_CLIENT_KEY");

    // Define the Todo class
    var Todo = ncmb.DataStore("Todo");

    // Get all to-do items and render them in the UI
    Todo.fetchAll()
      .then(function(todos) {
        todos.forEach(function(todo) {
          $("#todo-list").append(`
            <li id="todo-${todo.objectId}">
              ${todo.get("title")}
              <button class="delete-button">Delete</button>
            </li>
          `);
        });
      })
      .catch(function(error) {
        console.error("Error fetching to-do items:", error);
      });

    // Add a new to-do item
    $("#add-button").click(function() {
      var todo = new Todo({
        title: $("#todo-title").val(),
        completed: false
      });
      todo.save()
        .then(function(todo) {
          $("#todo-list").append(`
            <li id="todo-${todo.objectId}">
              ${todo.get("title")}
              <button class="delete-button">Delete</button>
            </li>
          `);
          $("#todo-title").val("");
        })
        .catch(function(error) {
          console.error("Error adding to-do item:", error);
        });
    });

    // Delete a to-do item
    $("#todo-list").on("click", ".delete-button", function() {
      var todoId = $(this).closest("li").attr("id").split("-")[1];
      var todo = new Todo({objectId: todoId});
      todo.delete()
        .then(function() {
          $(`#todo-${todoId}`).remove();
        })
        .catch(function(error) {
          console.error("Error deleting to-do item:", error);
        });
    });
  </script>
</body>
</html>

3回目

ここで気になったのはNCMB JavaScript SDKのバージョンが2.13.0ということです。これは参考にしたコードが2.13.0だったのか、学習元データが2.13.0が最終版だった時代だったのかは不明です。

いずれにしても古いバージョンなので変更してもらいます。また、then/catchよりもasync/awaitの方が見やすいので変更してもらいます。

NCMBのライブラリバージョンを3.1.5にしてください。また、Promiseをasync/awaitに変更してください。

その結果が以下のようなコードです。NCMB JavaScript SDKのバージョンが変わっています。また、各関数がasync/awaitに書き換わっています。

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Todo App</title>
  <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/ncmb@3.1.5/ncmb.min.js"></script>
</head>
<body>
  <h1>Todo App</h1>
  <input type="text" id="todo-title">
  <button id="add-button">Add</button>
  <ul id="todo-list"></ul>
  <script>
    // Initialize the SDK with your application key and client key
    var ncmb = new NCMB("YOUR_APPLICATION_KEY", "YOUR_CLIENT_KEY");

    // Define the Todo class
    var Todo = ncmb.DataStore("Todo");

    // Get all to-do items and render them in the UI
    async function fetchTodos() {
      try {
        var todos = await Todo.fetchAll();
        todos.forEach(function(todo) {
          $("#todo-list").append(`
            <li id="todo-${todo.objectId}">
              ${todo.get("title")}
              <button class="delete-button">Delete</button>
            </li>
          `);
        });
      } catch (error) {
        console.error("Error fetching to-do items:", error);
      }
    }

    fetchTodos();

    // Add a new to-do item
    $("#add-button").click(async function() {
      try {
        var todo = new Todo({
          title: $("#todo-title").val(),
          completed: false
        });
        await todo.save();
        $("#todo-list").append(`
          <li id="todo-${todo.objectId}">
            ${todo.get("title")}
            <button class="delete-button">Delete</button>
          </li>
        `);
        $("#todo-title").val("");
      } catch (error) {
        console.error("Error adding to-do item:", error);
      }
    });

    // Delete a to-do item
    $("#todo-list").on("click", ".delete-button", async function() {
      try {
        var todoId = $(this).closest("li").attr("id").split("-")[1];
        var todo = new Todo({objectId: todoId});
        await todo.delete();
        $(`#todo-${todoId}`).remove();
      } catch (error) {
        console.error("Error deleting to-do item:", error);
      }
    });
  </script>
</body>
</html>

他にもvarをconstに変えたり、jQueryを取り除くことも可能です。

デプロイしてみる

このコードをJSFiddleにデプロイしてみます。 YOUR_APPLICATION_KEYYOUR_CLIENT_KEY は自分のアプリのものと書き換えます。

image.png

リンク先で動作を確認できますが、ちゃんと動いているのが分かります。

まとめ

ChatGPTを使うことで、ちょっとしたデモアプリであればノーコーディングで作成できます。学習元になるコードが十分にないと難しいでしょうが、試してみる価値はあるでしょう。

SDKなどの使い方をGoogleで検索するのも良いですが、ChatGPTはいきなり動くコードが得られるのが便利です。

mBaaSでサーバー開発不要! | ニフクラ mobile backend

2
1
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?