最近、生成AIという分野が話題になっています。皆さんも「ChatGPT」や「GitHub Copilot」などの名前を聞いたことがあるか、実際に使った経験があるかもしれません。
今日は、このAI技術をどうやってAPI開発に活用するのか、そしてそれがどのように作業効率を上げるのかについてお話しします。スマートフォンアプリを作るときには、APIがとても重要な要素です。AIを利用すれば、より使い心地が良く、作業効率の高いAPIの開発が実現できると思います。
APIを開発する
API設計についてAIに質問
たとえば、AIに「支払いを行う」という機能のHTTPメソッドは、何にすべきかと質問してみます。
下の内容は、AIに質問した結果です。理由も合わせて提示するように質問を書いたので、適切に説明されています。
「支払いを行う」機能は、通常HTTPのPOSTメソッドにするべきです。その理由は以下の通りです。
効果・安全性: HTTPメソッドの分類には「安全なメソッド(Safe methods)」と「冪等性メソッド(Idempotent methods)」があります。安全なメソッドはリソースを変更しないこと、冪等性メソッドは同じリクエストを何度送信しても結果が同じであることを保証します。しかし、支払いという操作はリソース(例えば、ユーザーの残高)に影響を及ぼすため、「安全」ではありません。また、同じ支払いリクエストを複数回送信すると結果が変わる(支払いが複数回行われる)可能性があるため、「冪等」でもありません。そのため、安全でも冪等でもないPOSTメソッドが適しています。
データ送信: 支払い情報は通常、顧客のクレジットカード情報や商品情報など、大量のデータを含む可能性があります。GETメソッドはURLの長さに制限があるため、大量のデータを送信するのには適していません。一方、POSTメソッドはリクエストボディにデータを格納でき、大量のデータも送信できます。
なお、これは一般的なケースであり、具体的な実装はシステムの要件や設計によります。
他にも、「認証する」、「商品一覧を取得する」など質問についても適切な答えが返ってくるでしょう。こうした答えは、オンライン上にある無数の知見から得られているものなので、過去の知見が活かされているでしょう。
パラメーターとURL設計について質問する
次は、「注文を処理する際に必要だと思われるパラメーターとHTTPメソッド、URLの例」を提示してもらいました。
注文IDや顧客ID、商品情報、配送先情報、支払い方法、注文ステータス、合計金額などがパラメーターとして出ています。こうしたパラメーターを確認することで、自分たちが作ろうとしているシステムの抜け漏れをチェックできるでしょう。
APIを改善する
APIは一度作って終わりではありません。利用状況を判別してAPIを更新したり、パラメーターを追加したりします。その際には、まず現在の情報収集が必要です。
そうした情報収集には、APIの設計と保守を支援するためのAkita SoftwareやOpticが役立ちます。そして、それらの収集した情報を使って、AIによる改善提案を受けられるでしょう。
ドキュメントを生成する
APIドキュメントを作る場合、幾つかの方法があります。良くあるものとして、サーバーのコード中に書かれているコメントからAPIドキュメントを生成するものがあります。この場合、コード中のコメントが適切になっていることが大事です。
そうした時に使えるのがChatGPTです。たとえば以下のようなコードがあります。
const showPreviewMonitor = (fileName) => {
setTimeout(() => {
const dom = document.querySelector(".matrix-content .title");
if (dom.innerText.trim() === "") return showPreviewMonitor(fileName);
if (fileName === dom.innerText.trim()) return showPreviewMonitor(fileName);
fileName = dom.innerText.trim();
showPreview(fileName);
showPreviewMonitor(fileName);
}, 1000);
};
このコードに対して、ChatGPTにコメントを付けてもらうと、以下のようになります。 fileName
という引数がコメントに余計な影響を与えてしまっていますが、全体としては分かりやすいです。
// showPreviewMonitor関数は、指定されたファイル名のプレビューを表示するためのものです。
const showPreviewMonitor = (fileName) => {
// 1秒後に処理を実行するためのタイマーを設定します。
setTimeout(() => {
// プレビューを表示する要素の取得
const dom = document.querySelector(".matrix-content .title");
// 要素のテキストが空白の場合、再帰的にshowPreviewMonitor関数を呼び出して待機します。
if (dom.innerText.trim() === "") return showPreviewMonitor(fileName);
// 要素のテキストが指定されたファイル名と一致する場合、再帰的にshowPreviewMonitor関数を呼び出して待機します。
if (fileName === dom.innerText.trim()) return showPreviewMonitor(fileName);
// fileName変数に要素のテキストを格納します。
fileName = dom.innerText.trim();
// プレビューを表示するための関数showPreviewを呼び出します。
showPreview(fileName);
// 再帰的にshowPreviewMonitor関数を呼び出して、次のファイル名の変化を待機します。
showPreviewMonitor(fileName);
}, 1000);
};
さらに説明も返ってきます。
期待したものとは違いますが、出力結果をベースにすればドキュメントにも使えそうです。
特定のファイル名の変化を監視し、ファイル名が変わるたびにプレビューを表示する関数です。setTimeout関数を使用して1秒ごとに監視しています。関数の中ではDOM要素を取得し、そのテキストが指定されたファイル名と一致するかどうかを確認します。一致しない場合は、要素のテキストを新しいファイル名として扱い、プレビューを表示するための関数を呼び出します。そして、再帰的に自身の関数を呼び出して次のファイル名の変化を監視し続けます。
こうした機能はGitHub Copilot Xでも提供されると思われます。
AIを利用するメリット
AIを使うメリットとして、以下のようなことが挙げられます。
質問を投げかけられる
「決済を行う」など、一般的で簡単な機能については問題なく理解できるかもしれません。しかし、複雑な処理になると、自分の判断が正しいかどうか不安に感じることも少なくないでしょう。
そんな時、AIに問い合わせを行うことで、一般的な最良の方法(ベストプラクティス)を確認することが可能です。これは、自身の理解を再度チェックする際に非常に便利です。
もちろん、ウェブ検索で情報を探すことも可能ですが、個々のニーズにピッタリと合った知識を得るためには、ChatGPTのようなサービスの方が優れた結果を提供できます。
面倒な作業を省略できる
コードのコメントを書いたりする、ちょっとした面倒な作業はChatGPTなどが役立ちます。もちろん完璧ではないので、生成された後に自分で修正すべきです。しかし、たたき台になるコメントはすぐに生成してくれます。
JSDocのようなコメントを書いて欲しいと依頼すれば、それも生成してくれるでしょう。TypeScriptのように入力と出力の型が定義されていれば、十分使える品質のコメントが生成されるはずです。
AIを活用する際の欠点
では、AIを使う上での欠点は何があるでしょうか。最も顕著な欠点は、AIを頼りにしすぎると、自分自身のスキルが向上しない可能性があるという点です。生成型AIを用いた開発は、ウェブで検索し、その結果を単にコピー&ペーストするようなものに似ています。もし要件に合わせて修正が必要ない場合、実際にはコピー&ペーストよりも作業量が少ないかもしれません。
この結果、自身のスキルとして身につく部分が少なくなる可能性があります。しかしながら、AIが生成したコードの品質は、プログラマー自身が保証しなければならないのです。生成されたコードが適切であるかどうかを判断するためには、プログラマーとしての技術力が必要となります。したがって、自身の技術力をどのように向上させていくかが課題となるかもしれません。
まとめ
今回は、AIを活用してAPI開発をいかに効率化できるかをお伝えしました。AIは多くのシチュエーションで有用ですが、それを無批判に信頼することは問題を引き起こす可能性もあります。しかし、AIの精度は日々向上しており、開発プロセスからAIを完全に無視することは難しくなっていると予想されます。
AIを活用し、開発の生産性を向上させていきましょう。