何かと話題なChatGPTですが、読める文章以外にもプログラミングコードの生成も可能です。
ということで、ニフクラ mobile backend向けのコードをどれくらいの精度で書けるのか試してみました。
1回目
一回目は以下のように日本語で入力しました。
NCMBのJavaScript SDKを使ってデータストアからデータを取得するコードを教えてください
生成されたコードは以下の通り。これは普通に動くコードですね…
var NCMB = require("ncmb");
var ncmb = new NCMB("your_application_key", "your_client_key");
var TestClass = ncmb.DataStore("TestClass");
TestClass.fetchAll()
.then(function(results){
console.log(results);
})
.catch(function(error){
console.log(error);
});
しかも説明書きもあります。
In this example, you first import the NCMB library and then initialize it with your application_key and client_key. Then you create a new DataStore object with the name "TestClass" and fetch all the objects stored in it by calling the fetchAll method. The method returns a promise which resolves to an array of objects, or rejects with an error.
意訳すれば以下のような感じです。見事ですね。
この例では、まずNCMBライブラリをインポートし、application_keyとclient_keyで初期化します。次に、"TestClass "という名前で新しいDataStoreオブジェクトを作成し、fetchAllメソッドを呼び出してそこに格納されているすべてのオブジェクトをフェッチします。このメソッドはオブジェクトの配列を返すか、エラーで失敗します。
2回目
varは古い構文なので変更してもらいました。
varは止めて、constにしてください
生成されたコードは以下の通りです。ちゃんと直りました。
const NCMB = require("ncmb");
const ncmb = new NCMB("your_application_key", "your_client_key");
const TestClass = ncmb.DataStore("TestClass");
TestClass.fetchAll()
.then(results => {
console.log(results);
})
.catch(error => {
console.log(error);
});
3回目
then/catch構文はネストが深くて分かりづらくなるので、async/awaitに変更してもらいます。
then/catchはやめて、awaitにしてください
生成されたコードです。 async function
で囲まれました。
const NCMB = require("ncmb");
const ncmb = new NCMB("your_application_key", "your_client_key");
const TestClass = ncmb.DataStore("TestClass");
async function getData() {
try {
const results = await TestClass.fetchAll();
console.log(results);
} catch (error) {
console.log(error);
}
}
getData();
4回目
関数を即時関数に変更してもらいました。
getData関数でなく、無名関数を即実行する形にしてください
生成されたコードです。的確です。
const NCMB = require("ncmb");
const ncmb = new NCMB("your_application_key", "your_client_key");
const TestClass = ncmb.DataStore("TestClass");
(async () => {
try {
const results = await TestClass.fetchAll();
console.log(results);
} catch (error) {
console.log(error);
}
})();
5回目
さらにクラス名(TestClass)だけ変更してみます。
TestClassではなく、Helloにしてください
生成されたコードです。変数名も変わっています。
const NCMB = require("ncmb");
const ncmb = new NCMB("your_application_key", "your_client_key");
const Hello = ncmb.DataStore("Hello");
(async () => {
try {
const results = await Hello.fetchAll();
console.log(results);
} catch (error) {
console.log(error);
}
})();
まとめ
最初に生成されたコードが素晴らしすぎて、驚きです。イントロダクション (JavaScript & Monaca) : クイックスタートにある公式ドキュメントがベースになっていると思われますが、 fetchAll
メソッドをデータ取得(かつ配列)だと認識しているのが凄いです。
ちなみに最初の1件と指定すると、以下のようになります。惜しい…
var NCMB = require("ncmb");
var ncmb = new NCMB("アプリケーションキー", "クライアントキー");
var TestClass = ncmb.DataStore("TestClass");
TestClass.fetchAll() // fetchAll()はいらない
.limit(1)
.fetch()
.then(function(results) { // レスポンスは配列ではない
console.log(results[0]);
})
.catch(function(error) {
console.error(error);
});
とはいえ、それっぽいコードを生成した後で多少手直しするだけでも十分使い物になりそうです。