Codeium|VSCodeで使える無料のコード生成AIを試す
![](https://tech.aru-zakki.com/wp-content/uploads/2024/03/Codeium.001.jpeg)
Visual Studio Codeで使えるコード作成支援機能を探していたとろ、Codeiumを見つけました。これを使うことで、Github CopilotやChatGPTのような生成AIによる、コード支援をうけることができます。この記事では、Codeiumのインストールから使い方について解説します。
Google Colabのコード支援については以下の記事を参考にしてください
![Google Colabに追加された生成AI機能(Colab AI)を試してみた](https://tech.aru-zakki.com/wp-content/uploads/2023/10/google-colab-ai.001-1-320x180.jpeg)
はじめに
コード作成支援について
Github Copilotのβテストに参加していて、コード支援機能の便利にどっぷりハマってしまっていました。βテストが終わって有料になった後、お金を払って使うかどうかめちゃくちゃ悩みました。
ただ、家でのプログラミングは開発の仕事をしているわけではなく、あくまで趣味でサブスクリプションするかどうか悩んでいました。
最近はChatGPTとか色々なものがあるので、VSCodeで使えるコード作成を支援するツールが何かないか物色していたところ、Codeiumを見つけました。
Codeium
Codeiumは、各種IDEで使える、AIを使ってプログラミングを支援するサービスです。機能としては、オート補完機能、チャットによる対話など、Github Copilotなどの他の支援サービスと同じようなことが可能です。
Individualなら、無料(Free)で使えるというのがは、趣味でプログラミングしている私のようなものにとっては大変嬉しい部分です。
下記は、公式サイトにある比較表の一部ですが、QualityがCopilotより上で、しかも無料ということ。試してみない理由はありません。
ということで、早速インストールしてみました。
![](https://tech.aru-zakki.com/wp-content/uploads/2024/03/image-25-1024x540.png)
GPLに関して
FAQに”Does Codeium train on GPL or non-permissively licensed code?”という項目があり、これをみるとGPLなどのnonpermissive licensesを利用してモデルの学習をしてないということです。
GPLのコードが学習に含まれていないというのは、商用を考えている人にとっては重要かもしれません。
サポートする言語
サポートする言語の一覧もFAQにあります。以下が一覧になります。これをみるとかなりたくさんの言語をサポートしていることがわかります。
![](https://tech.aru-zakki.com/wp-content/uploads/2023/06/tabbycat.png)
太字にしているやつは、私がよく使う言語ですが、大抵サポートされていました
Codeium’s performance is good (and enabled by default) for the following languages (alphabetical order):
APL, Assembly, Astro, Blade, C, C++, C#, Clojure, CMake, COBOL, CoffeeScript, Crystal, CSS, CUDA, Dart, Delphi, Dockerfile, Elixir, Erlang, F#, Fortran, GDScript, Go, Gradle, Groovy, Hack, Haskell, HCL, HTML, Java, JavaScript, Julia, JSON, Kotlin, LISP, Less, Lua, Makefile, MATLAB, MUMPS, Nim, Objective-C, OCaml, pbtxt, PHP, Protobuf, Python, Perl, Powershell, Prolog, R, Ruby, Rust, SAS, Sass, Scala, SCSS, shell, Solidity, SQL, Starlark, Swift, Svelte, Typescript, TeX, TSX, VBA, Vimscript, Vue, YAML, Zig.
On any other languages, you can explicitly enable Codeium.
インストール手順
codeiumにアクセスして、Get Extensionをクリックします
URL: https://codeium.com/
![Get Extension](https://tech.aru-zakki.com/wp-content/uploads/2024/03/image-28-1024x482.png)
![](https://tech.aru-zakki.com/wp-content/uploads/2023/06/tabbycat.png)
とりあえず、試しに使ってみたい場合は、ここでGet Extension
の横にあるTry in browser
をクリックしてください。画面が切り替わりどんな感じか確認できます。
![Playgroundの画面](https://tech.aru-zakki.com/wp-content/uploads/2024/04/image-26-1024x708.png)
Download Extensionsから、Visual Studio Codeをクリックします。他のIDEにインストールしたい場合は該当のものをクリックします。
![Visual Studio Code](https://tech.aru-zakki.com/wp-content/uploads/2024/03/image-29-1024x576.png)
サインインしていない場合は、サインアップ画面が現れるので、サインアップします。ちなみに、私は、Googleアカウントでサインアップしました。
![sign up](https://tech.aru-zakki.com/wp-content/uploads/2024/03/image-31-1024x635.png)
Quick Installをクリックして、インストールを行います。途中、「VSCodeを開いて良いか?」やなどのウィンドウが現れると思いますが、指示に従って実行してください。
![Quick Install](https://tech.aru-zakki.com/wp-content/uploads/2024/03/image-30-1024x376.png)
VSCodeではプラグインの画面が表示されるので、インストールします(下記の画面はインストール後の画面です)
![VSCode plugin画面](https://tech.aru-zakki.com/wp-content/uploads/2024/03/image-32-1024x667.jpg)
インストールすると、VSCodeの右下にlogin
のボタンが表示されるので、Codeiumにログインします。
![login画面](https://tech.aru-zakki.com/wp-content/uploads/2024/03/image-32-1024x300.png)
以上でインストールは完了です。これで、AIの支援が受けられるようになります。
使い方
オートコンプリート
オートコンプリートは、プログラムを記述していれば自動的に動きます。以下の例は、C++のコードを作成している例です。
プログラムを入力していくと、サジェストが薄い灰色で表示されるので、OKなら[tab]で確定していきます。
![オートコンプリート](https://tech.aru-zakki.com/wp-content/uploads/2024/03/codeium-1023x600.gif)
Macの場合、以下のようなキー割り当てになっています。
- TAB : 確定
- CMD+→ :1ワード確定
- Option+]:次の補完内容を表示
- Option+[:前の補完内容を表示
![](https://tech.aru-zakki.com/wp-content/uploads/2023/06/tabbycat.png)
キー割り当ては、チャットウィンドウに最初に表示されています(次の図を参照)
チャット
下記の{...}
マークをクリックするとCODEIUMのCHAT画面が右側に表示されます。
この画面を使ってチャットすることが可能です。日本語でも入力することが可能です。また、回答が英語の場合は「日本語で」と書けば日本語に直して回答し直してくれます。
![chat画面](https://tech.aru-zakki.com/wp-content/uploads/2024/03/image-33-932x1024.jpg)
![](https://tech.aru-zakki.com/wp-content/uploads/2023/06/tabbycat.png)
上のキャプチャには、オートコンプリート時のショートカットが表示されています。これらの操作をすることで、一部だけ確定させたり、次の候補を表示させたりできます。
以下はMacの場合のショートカットです。
TAB | 全てを確定 |
⌘+→ | 1つを確定 |
⌥+] | 次の候補を表示 |
⌥+[ | 前の候補を表示 |
⌘+I | コマンドを表示 |
ちなみに、コードの上にある部分からExplainを押すとコードの解説が表示されます。
英語なので、「日本語で」と書くと日本語で再度説明してくれます。
![](https://tech.aru-zakki.com/wp-content/uploads/2024/03/image-33-1-910x1024.jpg)
チャットに「最大公約数を求める関数」などと入力すると、開いている言語で関数を作成してくれます。
実際に試してみた
オートコンプリート機能
AtCoderのABC346-D問題を解くのにcodeiumを試してみました。
![](https://tech.aru-zakki.com/wp-content/uploads/2023/06/tabbycat.png)
codeiumも生成AIに該当します。AtCoderのコンテストでは生成AIの使用についてルールがありますので、それに従った利用をしましょう。
ルールを読む限り、オートコンプリートだけであれば問題なさそうです。
コードとしては、手前から010101..列を作るコストと、反転した1010…列を作るコストの累積和を前後それぞれからとっておいて、場所を決めてつなげた場合のコストの最小を見つけるコードになります(1箇所だけ0か1が連続するパターンを作る最小コストを求める問題)。
サジェスト自身は記述速度に合わせてサクサクと出てきて良い感じです。ただ、この問題の場合、サジェストされるコードはそのまま使える部分は少なかったです。
変数名などもみながら提案してくるのは結構気持ちよいです。
ちなみに、#includeまでいれたら、先頭の3行を提案してきました。
![](https://tech.aru-zakki.com/wp-content/uploads/2023/06/tabbycat.png)
いろいろ作成してみましたが、動きはするけど無駄が多いコードなども作成しますので、中身を確認して修正する必要はありそうです。
作成したコードがこちら(C++)。
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define rep(i, n) for (int i = 0; i < (n); ++i)
int main()
{
int n;
cin >> n;
string s;
cin >> s;
vector<int> c(n);
rep(i, n) cin >> c[i];
ll ans = 1e18;
rep(x, 2)
{
int cur = x;
vector<ll> a(n + 1);
rep(i, n)
{
int v = s[i] - '0';
if (v == cur)
{
a[i + 1] = a[i];
}
else
{
a[i + 1] = a[i] + c[i];
}
cur = 1 - cur;
}
vector<ll> b(n + 1);
for (int i = s.size() - 1; i >= 0; i--)
{
int v = s[i] - '0';
if (v == cur)
{
b[i] = b[i + 1];
}
else
{
b[i] = b[i + 1] + c[i];
}
cur = 1 - cur;
}
for (int i = 1; i < s.size(); i++)
{
ans = min(ans, a[i] + b[i]);
}
}
cout << ans << endl;
}
チャット機能
試しに、C++のコードをPythonに変換してみました。チャットに、main()関数をExplainさせてから、”convert to python”と指示すると以下のようなコードが出力されました。
出力されたコードを読んでみるとs.size()
という部分が間違っています。このレベルのプログラムでも若干ミスがあるようです。
ちなみに、s.size()
をlen(s)
にすると、AtCoderのジャッジを見事にACできました。
def main():
n = int(input())
s = input()
c = list(map(int, input().split()))
ans = 10**18
for x in range(2):
cur = x
a = [0] * (n + 1)
for i in range(n):
v = int(s[i])
if v == cur:
a[i + 1] = a[i]
else:
a[i + 1] = a[i] + c[i]
cur = 1 - cur
b = [0] * (n + 1)
for i in range(s.size() - 1, -1, -1):
v = int(s[i])
if v == cur:
b[i] = b[i + 1]
else:
b[i] = b[i + 1] + c[i]
cur = 1 - cur
for i in range(1, s.size()):
ans = min(ans, a[i] + b[i])
print(ans)
if __name__ == "__main__":
main()
とりあえず、作ってもらったプログラムは、チェックする必要があるようです。
1週間ほど使ってみて
実際に1週間ほど使ってみましたが、Github Copilotと同じくらい便利です。たまに、サジェストが遅かったりすることがありますが、特に気になるほどではありません。
無料で使えるツールとしては満足できるレベルだと思います。とりあえず、しばらく使ってみようと思います。
![](https://tech.aru-zakki.com/wp-content/uploads/2023/06/tabbycat.png)
現在、C++を再学習するためにC++でコードを書いているのですが、オートコンプリートのせいで文法があやふやでも問題なくかけちゃうのが問題な気がしました。好みによりますが、プログラミングの学習時にはOFFにした方がよいのかもと少し感じました。
まとめ
Codeiumのインストールの仕方と使い方を簡単に説明しました。少し使ってみた感じでは、かなりいい感じです。とくに、オートコンプリートが便利です。結構、良い精度で先読みして、サジェストしてくれる感じがします。
ただ、間違うこともありそうなので、ある程度スキルのあるプログラマが使った方が、高いパフォーマンスアップを得られそうな感じがします。