こんにちは.アドベントカレンダー20日目担当のsugarl(データコース)です.普段はAI(深層学習)の研究をしています.最近は生成AIを使ったツールが様々出てきていますが,今回はその中でもエンジニアの必須ツールの一つであるコードエディタについての紹介です.
1ヶ月前くらいですかね.X(旧Twitter)やYoutubeで”Cursor”という新しいタイプのコードエディタが盛り上がっていることを知りました.今回はCursorを実際に開発などに使ってみた感想や感じたことを書いていきます.
Cursorって?
一言で言うと,chatGPTを使ったアシスト機能の充実したvscodeみたいな感じです.基本はvscodeなので,普段vscodeで使っている拡張機能なんかはそのまま使えますし,vscodeユーザは移行も簡単にできます.
Cursorのいいところ
正直,このエディタが話題になった時に僕は普段からchatGPT(plus)とgithub copilotを使っていたので,vscode上からchatGPT使えるだけなら,必要ないかな?と思っていたのですが,実際使ってみるとcursorにしかないメリットがありました.
GTPとのchat機能
cursorではgpt(3.5 or 4)とchatができます!とだけ言うとvscodeでもできるじゃんとなるのですが,cursorの場合は以下のような感じでコードを指定して「〇〇の部分にバグありますか?」とか「〇〇の機能を追加して」といったプロンプトを打つことで簡単に修正や実装ができます.
また,この機能の拡張として"code base"機能というのがあり,これを使うことで自分のプロジェクトのコードをgptに読み込ませることができます.バグの発生箇所がわからない場合とかに重宝します.また,gptくんにコード全体を渡すことでその後のgpt出力のクオリティも上がります.
他にもネット上からライブラリのドキュメントを読み込ませて説明させたりもできます.最近は新しいライブラリ触る時なんかもgpt-4にドキュメント説明させることができるので,簡単に新しい物に触れられるようになったので便利ですね.
コード編集機能
コードを直接以下のようにプロンプトを入力することで修正したり,機能の実装をしてくれたりします.
auto debug機能
こちらは今回の実装で使わなかったので画像は公式からのものになりますが,ターミナル上で出力されるエラーに対してauto debugというコマンドが使えてコードの悪いところなどを解析してくれます.
感想・まとめ
正直めちゃ便利だなと思ったcursorですが,gptのapi料金は少々気になりました.普通にgptのapiを使っている時に比べて料金が結構高い気がします.今回,1日くらいで簡単なbotを作ってみたのですが,api料金が4$とかになりました.おそらくcode base機能やdocs機能なんかで簡単に長文をgptに読み込ませることができるので入力プロンプト長が長くなり,こちらの想定以上に料金がかかるのかなと思います.gptのapiではなくCursor自体にもPro版があり以下に示しますが,こちらの方がapiを使うよりは安く済むかなと思います.
Basic(無料) | Pro($20/月) | Business (1人につき$40/月) | |
---|---|---|---|
GPT-3.5の使用回数 | 200回/月 | 無制限 | 無制限 |
GPT-4の使用回数 | 50回 (毎月リセットされません) | 500回/月 | 無制限 |
また,Cursor(gpt)を使うことで何かを開発したいという時に0からではなく70~80%くらいまではAIがやってくれる時代になったなと思います.しかし,他のプロダクトと差がつく部分の20%を如何に工夫するかが大事になる時代なのかなと思うようになりました.今回の開発もほぼgptにやってもらったのですが,自分が欲しい機能は何なのか考えるのが大事だと感じました.
おまけ
冒頭で述べた通り,僕はAI系の研究室に配属されているのですが,その研究室で最近流行っている?(先生陣が流行らせているが正しい)arXiv読会というものがあります.arXivというのは工学や理学などの領域の論文を筆者らが学会やジャーナル投稿前に投稿するサイトです.自分の興味ある領域(computer vision, machine learning)だと毎日100~200件ほどの論文が投稿されます.
研究室でやってるのはこの論文たちを毎日タイトルやアブストだけをみて自分のやっている研究のものだけリストアップする(内容の理解までできたら最高)という感じです.
ただ,100~200件の中で自分と関係する論文というのは2,3本,場合によっては0本のこともあるため,全部チェックする手間は省きたいです.なので,タイトルやアブストにキーワードを設定して,それに引っかかるものだけ自動でリストアップしてくれるslackbotを作ろうと思いました.
実際には,slack apiとarXiv apiを組み合わせて作成しました.
class SlackBot():
def __init__(self, slack_token, channel_id):
self.slack_token = slack_token
self.channel_id = channel_id
self.client = WebClient(token=slack_token)
def post_to_slack(self, paper_info):
try:
result = self.client.chat_postMessage(
channel=self.channel_id,
text=f"title: {paper_info.title}\nlink: {paper_info.link}\nauthors: {paper_info.authors}"
)
return result
except SlackApiError as e:
print(f"Error posting message: {e}")
return
class PaperInfo:
def __init__(self, title) -> None:
self.base_url = 'http://export.arxiv.org/api/query?'
self.title = title
def get_paper_info(self):
query = 'all:' + self.title
url = f"{self.base_url}search_query={query}"
response = requests.get(url)
if response.status_code != 200:
print(f"API Error: Status code {response.status_code}")
return None
feed = feedparser.parse(response.content)
if len(feed.entries) == 0:
print("No paper found with the given title.")
return None
return feed
以上のように元のコードをgptくんに作ってもらい,めんどくさいドキュメント読みも頼んで結果できたのが以下のようなbotくんです.
次回の記事担当はデータコースのtomoyaくんです!