プログラミング
記事内に商品プロモーションを含む場合があります

無料で使えるコード生成AI「Codeium」をVSCodeで使う方法

Aru

Visual Studio Codeで使える無料のコード生成AIを探していたところ、「Codeium」を発見しました。Codeiumは、Github CopilotやChatGPTと同じ生成AIによるコード補完機能を提供するもので、コード作成時にAIのサジェストやアシストを受けることができます。本記事では、Codeiumのインストール手順から具体的な使い方、実際の使用感について解説します。

Google Colabのコード支援については以下の記事を参考にしてください

Google Colabの生成AI機能によるコード作成支援の使い方
Google Colabの生成AI機能によるコード作成支援の使い方

はじめに

コード作成を支援するAIって何?

Github Copilotのβテストに参加し、その便利さにどっぷりハマってしまいました。βテストが終わって有料化された後、継続して使うかどうか非常に悩みました。

ただ、家でのプログラミングは仕事ではなく、あくまで趣味なので、サブスクしてまで使うかどうかめちゃくちゃ迷いました。

最近では、Copilot以外にも生成AIを使ったコード支援ツールが多数登場しているので、もう少し安く使えるものがないか探していた時に、「Codeium」というツールを発見しました。

Codeium

Codeiumは、各種IDEで使える、AIを使ってプログラミングを支援するサービスです。機能としては、オート補完機能、チャットによる対話など、Github Copilotなどの他の支援サービスと一通り同じことが可能です。

Goで使っていると、関数に自動でDocを作成してくれる機能が以外と便利です。

Individualなら、無料(Free)で使えるというのが、趣味でプログラミングしている私のようなものにとっては大変嬉しい部分です。

下記は、公式サイトにある比較表の一部ですが、QualityがCopilotより上で、しかも無料ということ。試してみない理由はありません。

ということで、早速インストールして使ってみました。

引用元:https://codeium.com/
GPLに関して

FAQに”Does Codeium train on GPL or non-permissively licensed code?”という項目があり、これをみるとGPLなどのnonpermissive licensesを利用してモデルの学習をしてないということです。

GPLのコードが学習に含まれていないというのは、商用を考えている人にとっては重要かもしれません。

サポートする言語

サポートする言語の一覧もFAQにあります。以下が一覧になります。これをみるとかなりたくさんの言語をサポートしていることがわかります。

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.

https://codeium.com/faqより

太字は、私がよく使う言語です。大抵サポートされていました

インストール手順

codeiumにアクセスして、Get Extensionをクリックします(画面構成は変わるかもしれないので注意してください)

URL: https://codeium.com/

Get Extension

とりあえず、試しに使ってみたい場合は、ここでGet Extensionの横にあるTry in browserをクリックしてください。画面が切り替わりどんな感じか確認できます。

2024/09/01現在、Try in browserの項目が消えていることを確認しました。

Playgroundの画面
画面イメージ

Download Extensionsから、Visual Studio Codeをクリックします。他のIDEにインストールしたい場合は該当のものをクリックします。

Visual Studio Code

サインインしていない場合は、サインアップ画面が現れるので、サインアップします。ちなみに、私は、Googleアカウントでサインアップしました。

sign up

Quick Installをクリックして、インストールを行います。途中、「VSCodeを開いて良いか?」やなどのウィンドウが現れると思いますが、指示に従って実行してください。

Quick Install

VSCodeにプラグインの画面が表示されるので、インストールします(下記の画面はインストール後の画面です)

VSCode plugin画面

インストールすると、VSCodeの右下にloginのボタンが表示されるので、Codeiumにログインします。

login画面

以上でインストールは完了です。これで、AIの支援が受けられるようになります。

Codeiumの機能と使い方

オートコンプリート

オートコンプリートは、プログラムを記述していれば自動的に動きます。以下の例は、C++のコードを作成している例です。

プログラムを入力していくと、サジェストが薄い灰色で表示されるので、OKなら[tab]で確定していきます。

オートコンプリート

Macの場合、以下のようなキー割り当てになっています。

  • TAB : 確定
  • CMD+→ :1ワード確定
  • Option+]:次の補完内容を表示
  • Option+[:前の補完内容を表示

キー割り当ては、チャットウィンドウに最初に表示されています(次の図を参照)

チャット

下記の{...}マークをクリックするとCODEIUMのCHAT画面が右側に表示されます。

この画面を使ってチャットすることが可能です。日本語でも入力することが可能です。また、回答が英語の場合は「日本語で」と書けば日本語に直して回答し直してくれます。

chat画面

上のキャプチャには、オートコンプリート時のショートカットが表示されています。これらの操作をすることで、一部だけ確定させたり、次の候補を表示させたりできます。

以下はMacの場合のショートカットです。

TAB全てを確定
⌘+→1つを確定
⌥+]次の候補を表示
⌥+[前の候補を表示
⌘+Iコマンドを表示

ちなみに、コードの上にある部分からExplainを押すとコードの解説が表示されます。

英語なので、「日本語で」と書くと日本語で再度説明してくれます。

チャットに「最大公約数を求める関数」などと入力すると、開いている言語で関数を作成してくれます。

関数上部のメニューを説明

Codeiumが起動していると、各関数の上部に以下のようなメニューが現れます(最上部のCodeium: Refactor…の部分がメニューです)

右からリファクタリング、説明、コメント生成です

Refactor

Refactorをクリックすると上部のメニューに項目が現れます。ここで色々な処理を指示することが可能です。ここには多数のメニュー項目があります。

個人的に面白そうなのは、「Check for bugs and null pointers」(バグをチェック)、「Generate Unit Test」(テストコード生成)や、「Make this faster and more efficient」(コードを効率化する)です。

Make this faster and more efficient

実際に最適化を試してみました。数列aとbの合計を計算する簡単な2重ループのプログラムです。なお、プログラムはGo言語です。

func f(a, b []int) int {
	sum := 0

	for i := 0; i < len(a) ; i++ {
		for j := 0; j < len(b); j++ {
			sum += a[i] + b[j]
		}
	}
	return sum
}

これに、「Make this faster and more efficient」を行うと以下のコードが提案されました。

func f(a, b []int) int {
	sumA, sumB := 0, 0
	for _, v := range a {
		sumA += v
	}
	for _, v := range b {
		sumB += v
	}
	return sumA * len(b) + sumB * len(a)
}

2重ループの部分が消えて高速化されています。想定コードとは少し違いましたが、なかなか優秀だと思います。

Explain

Explainをクリックすると、左側に関数の説明が表示されます。基本英語ですが、先に書いた通り「日本語で説明して」と書けば日本語になります。下記は、差の絶対値を返す関数asubの説明を指示した例です。

Generate Function Comment

Generate Function Commentをクリックすると、コメントが挿入されます。変更された箇所がわかるように出力されるので、これでよければAcceptを、ダメならRejectを押してキャンセルします。

実際に試してみた

オートコンプリート機能

AtCoderのABC346-D問題を解くのにcodeiumを試してみました。

codeiumも生成AIに該当します。AtCoderのコンテストでは生成AIの使用についてルールがありますので、それに従った利用をしましょう。

AtCoder生成AI対策ルール – 20240607版

ルールを読む限り、オートコンプリートだけであれば問題なさそうです。

コードとしては、手前から010101..列を作るコストと、反転した1010…列を作るコストの累積和を前後それぞれからとっておいて、場所を決めてつなげた場合のコストの最小を見つけるコードになります(1箇所だけ0か1が連続するパターンを作る最小コストを求める問題)。

サジェスト自身は記述速度に合わせてサクサクと出てきて良い感じです。ただ、この問題の場合、サジェストされるコードはそのまま使える部分は少なかったです。

変数名などもみながら提案してくるのは結構気持ちよいです。

ちなみに、#includeまでいれたら、先頭の3行を提案してきました。

いろいろ作成してみましたが、動きはするけど無駄が多いコードなども作成しますので、中身を確認して修正する必要はありそうです。

作成したコードがこちら(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()

しかしながら、作ってもらったプログラムは一応チェックする必要がありそうです。

4ヶ月ほど使ってみて

実際に4ヶ月ほど使ってみましたが、Github Copilotと同じくらい便利です。使っていると他のタブで開いているコードも参照している感じで、関連するコードがサジェストされています(このあたりの動作は不明ですが)。複数のファイルをまたがって作業する場合にこれが重宝します。

また、Docを自動で作ってくれる”Generate GoDoc”という機能が予想以上に便利でした。

とりあえず、関数を書いてドキュメントを作ってもらい、それを修正するという流れでコメントを追加できゼロからコメントを作成するよりかなり楽です(なお、ドキュメントは英語で作成されます)。

とりあえず、無料で使えるツールとしては満足できるレベルだと思います。

4ヶ月ほど毎日プログラミングに使っていますが、結構快適です。

たまに、サーバーに繋がらないことがありました。無料なのでしょうがないですが、サジェストが効かないのは不便でした。

まとめ

Codeiumのインストールの仕方と使い方を簡単に説明しました。少し使ってみた感じでは、かなりいい感じです。とくに、オートコンプリートが便利です。結構、良い精度で先読みして、サジェストしてくれる感じがします。

ただ、間違うこともありそうなので、ある程度スキルのあるプログラマが使った方が、高いパフォーマンスアップを得られそうな感じがします。

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

ABOUT ME
ある/Aru
ある/Aru
IT&機械学習エンジニア/ファイナンシャルプランナー(CFP®)
専門分野は並列処理・画像処理・機械学習・ディープラーニング。プログラミング言語はC, C++, Go, Pythonを中心として色々利用。現在は、Kaggle, 競プロなどをしながら悠々自適に活動中
記事URLをコピーしました