VSCodeにgenieを導入してChatGPTを直感的に使用してみる

# 目次
<!-- タイトルとアンカー名を編集 -->
1. [はじめに](#はじめに)
1. [ChatGPTとは](#chatgptとは)
1. [VS Codeの拡張機能「ChatGPT – Genie AI」とは](#vs-codeの拡張機能chatgpt--genie-aiとは)
1. [Genie AIのインストール](#genie-aiのインストール)
1. [Genie AIの機能を活用する](#genie-aiの機能を活用する)
1. [おわりに](#おわりに)

# はじめに
今回はVisual studio codeの拡張機能「ChatGPT – Genie AI」の使い方について解説します。Visual studio codeのUI上でChatGPTのAPIにアクセスすることができるようになり、開発工数を大幅に削減することもできます！


![スクリーンショット 2023-08-03 16.15.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/194442/b0ba540f-e8bf-6d3c-a6c8-efbaabd50ca0.png)


# ChatGPTとは
<!-- 発端や概要を記載 -->
ChatGPTは、OpenAIが提供する自然言語生成モデルです。GPT（Generative Pre-training Transformer）と呼ばれるモデルのアーキテクチャを採用しています。

GPTは、Transformerと呼ばれるニューラルネットワークを使用して、文書や言語処理タスクでのテキスト生成を行うモデルです。GPTは、大量のテキストデータを学習し、そのデータをもとに新しい文章を生成することができます。

ChatGPTは、GPTをもとにしたモデルであり、対話型システムやチャットボットなどで使われることを想定して開発されています。対話を続けることができるようになっており、ユーザーが入力するテキストに対して、自然で返答ができるようになっています。

https://murasan-net.com/index.php/2023/07/13/chatgpt-learn-udemy/

# VS Codeの拡張機能「ChatGPT – Genie AI」とは
Genie AIはMicrosoft社が公開している統合開発環境、Visual studio codeの拡張機能として利用でき、Visual studio code内からChatGPTのAPIにアクセスすることが可能な開発補助ツールです。

![スクリーンショット 2023-08-03 16.15.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/194442/b0ba540f-e8bf-6d3c-a6c8-efbaabd50ca0.png)

コードのサンプルを作成したり、コードの解析、最適化、テストなどをChatGPTを使って実行することができます。

ChatGPTのAPIを使用するためのAPI Keyの取得方法は[こちら](https://laboratory.kazuuu.net/how-to-get-an-openai-api-key/)を参考にしました。事前に済ませておいてください。

:::note warn
Genie AIは内部でChatGPTのAPIを使用しているため、利用には費用が発生します。
APIを使用する費用はトークン数に応じて発生し、登録時に＄18分の無料クレジットが付与されます。それを超えて使用したい場合には、OpenAIのサイトで支払い情報を登録する必要があります。
:::

# Genie AIのインストール
まず、VS Codeを起動した画面左端の拡張機能をクリックします。
![スクリーンショット 2023-08-03 18.15.29_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/194442/196dfa15-df47-07d7-8737-b471fba997e9.png)

赤枠の検索ウィンドウに「Genie」と入力し、検索を実行します。
![スクリーンショット 2023-08-03 18.14.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/194442/6f6e797d-7f4d-a6a5-10b6-ea58fceb135e.png)

インストールボタンをクリックします。これでインストールは完了です。
![スクリーンショット 2023-08-03 18.14.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/194442/57d817ca-9731-943e-0d3f-549f8549b053.png)

インストールが完了すると、画面左端にアラジンに登場するような魔法のランプのアイコンが表示されます。
![スクリーンショット 2023-08-03 18.11.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/194442/a902570a-e11d-3b01-feb9-edce1654c47e.png)

アイコンをクリックすると以下のようにGenie AIのフレームが表示されますので、「Try editor view」をクリックします。
![スクリーンショット 2023-08-03 18.31.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/194442/0b15cec8-af3f-4ce6-a308-412cc5717d2b.png)

プロンプト入力欄と機能アイコンが表示されます。これでGenie AIを使用する準備が整いました。
![スクリーンショット 2023-08-03 18.31.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/194442/9a21332e-6e42-c201-5b98-14aaae7cb5c4.png)

# Genie AIの機能を活用する

今回はTODOを管理するアプリを実装する前提でGenie AIを使用します。
上述したプロンプト入力欄に以下のプロンプトを入力してAskをクリックします。
すると自動的にコードが生成されます。

以下が実行時の動画となります。
![ezgif-4-0e28249f9b.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/194442/2d6db327-cf3f-575c-92a7-423e39dc8182.gif)


```text:入力したプロンプト
railsで以下の処理を実装してください。

- TODOを管理する機能
- 一覧表示、登録、編集、削除を機能として持ちます

```

```ruby:生成されたコード
# モデルを作成
rails g model Todo title:string description:text

# マイグレーションを実行
rake db:migrate

# コントローラを作成
rails g controller Todos index new create edit update destroy

# ルーティングを設定
Rails.application.routes.draw do
  resources :todos
end

# 一覧表示用のビューを作成
# app/views/todos/index.html.erb
<h1>Todo List</h1>
<ul>
  <% @todos.each do |todo| %>
    <li><%= todo.title %></li>
  <% end %>
</ul>

# 登録用のビューを作成
# app/views/todos/new.html.erb
<h1>New Todo</h1>
<%= form_for @todo do |f| %>
  <div>
    <%= f.label :title %>
    <%= f.text_field :title %>
  </div>
  <div>
    <%= f.label :description %>
    <%= f.text_area :description %>
  </div>
  <div>
    <%= f.submit %>
  </div>
<% end %>

# 編集用のビューを作成
# app/views/todos/edit.html.erb
<h1>Edit Todo</h1>
<%= form_for @todo do |f| %>
  <div>
    <%= f.label :title %>
    <%= f.text_field :title %>
  </div>
  <div>
    <%= f.label :description %>
    <%= f.text_area :description %>
  </div>
  <div>
    <%= f.submit %>
  </div>
<% end %>

# コントローラにアクションを追加
# app/controllers/todos_controller.rb
class TodosController < ApplicationController
  def index
    @todos = Todo.all
  end

  def new
    @todo = Todo.new
  end

  def create
    @todo = Todo.new(todo_params)
    if @todo.save
      redirect_to todos_path, notice: 'Todo was successfully created.'
    else
      render :new
    end
  end

  def edit
    @todo = Todo.find(params[:id])
  end

  def update
    @todo = Todo.find(params[:id])
    if @todo.update(todo_params)
      redirect_to todos_path, notice: 'Todo was successfully updated.'
    else
      render :edit
    end
  end

  def destroy
    @todo = Todo.find(params[:id])
    @todo.destroy
    redirect_to todos_path, notice: 'Todo was successfully destroyed.'
  end

  private

  def todo_params
    params.require(:todo).permit(:title, :description)
  end
end
```

# おわりに
今回はGenie AIを導入して簡単なプロンプトを渡して生成されたコードを確認してみました。
他にもテストコードやリファクタリング後のコードを自動生成する機能を持っていますので別途使い方を書きたいと思います☆