ポンコツエンジニアのごじゃっぺ開発日記。

いろいろポンコツだけど、気にするな。エンジニアの日々の開発などの記録を残していきます。 自動で収入を得られるサービスやシステムを作ることが目標!!

GitHub Copilotが使えるようになっていたのでIntelliJで試してみる【PHP】

噂のGitHub Copilotですが、いつの間にか使えるようになっていました!

f:id:ponkotsu0605:20211101203940p:plain

Join the GitHub Copilot waitlist Access is limited to a small group of testers during the technical preview of GitHub Copilot. Sign up today for your chance to try it out and help us improve.

GitHub Copilot is already enabled on your account! Install GitHub Copilot now.

ということで、早速使ってみました!

copilot.github.com

今回は、PHPを使ってみたいので、IntelliJで使ってみようと思います。(おそらくPHPStormも同じはず)

IntelliJにGitHub Copilotをインストール

まずは、IntelliJにGitHub Copilotをインストールします。

インストール手順はいかに書いてあります。

github.com

今回はIntelliJということで、JetBrainsを選択します。

github.com

ここに書いてある手順通りに進めれば良いだけではあります。

f:id:ponkotsu0605:20211101204545p:plain

プラグインの検索で「github copilot」と入力すればすぐに見つかると思います。

インストールをして、IntelliJの再起動をすればOKです。

f:id:ponkotsu0605:20211101204645p:plain

再起動をすると、右下に上の画像のようなポップアップが表示されると思うので、Sign in to GitHubをクリックします。

f:id:ponkotsu0605:20211101204736p:plain

後は手順に沿って認証を通せば使えるようになると思います。

導入はとても簡単でした!

Copilotを実際に使ってみる

インストールできたので、早速使ってみたいと思います。

合計値を返す関数を作ってみる

まずは簡単に合計値を計算してもらいましょう。

<?php

// AとBの合計値を返す

とまで入力してみます。すると、以下のような候補が出てきました。

f:id:ponkotsu0605:20211101205935p:plain

このままtabキーを押してみると。

f:id:ponkotsu0605:20211101210048p:plain

このように、sum()が生成されました。

<?php

// AとBの合計値を返す
function sum(int $a, int $b): int
{
    return $a + $b;
}

フィボナッチ数列を求めてみよう

こういうメソッド作成と言ったら、フィボナッチ数列ですよね。

<?php

// フィボナッチ数列を取得する

ここまで入力して出てくる候補は・・・ f:id:ponkotsu0605:20211101210225p:plain

tabを押す!

f:id:ponkotsu0605:20211101210403p:plain

あー、再起呼び出しをしているんですが、Undefined variable '$fibonacci'になってしまいました。

functionにしたいので、functionまで入力してみましょう。

f:id:ponkotsu0605:20211101210550p:plain

tab!

f:id:ponkotsu0605:20211101210613p:plain

おー、これで良さそうですね!

当たり前かもですが、候補が出てもすぐにtabは押さず、ちゃんと使えるソースコードかは確認が必要ということですね。

バブルソートしてみる

アルゴリズムといえば、ソートですね。ソートといえばわかりやすいのがバブルソート。

<?php

// バブルソートする

ここまで入力するだけで・・・ f:id:ponkotsu0605:20211101212952p:plain

tab!

<?php

// バブルソートする
function bubbleSort($array) {
    $count = count($array);
    for ($i = 0; $i < $count; $i++) {
        for ($j = 0; $j < $count - $i - 1; $j++) {
            if ($array[$j] > $array[$j + 1]) {
                $tmp = $array[$j];
                $array[$j] = $array[$j + 1];
                $array[$j + 1] = $tmp;
            }
        }
    }
    return $array;
}

おー、ちゃんとバブルソートっぽい処理がされている・・・!

クイックソート

じゃあ、次にやらないといけないのはクイックソートですよね。

f:id:ponkotsu0605:20211101213142p:plain

想像と違うので、functionまで入力してみます。

f:id:ponkotsu0605:20211101213232p:plain

<?php

// クイックソートする
function quickSort($array)
{
    if (count($array) < 2) {
        return $array;
    }

    $pivot = $array[0];
    $left = $right = [];

    for ($i = 1; $i < count($array); $i++) {
        if ($array[$i] < $pivot) {
            $left[] = $array[$i];
        } else {
            $right[] = $array[$i];
        }
    }

    return array_merge(quickSort($left), [$pivot], quickSort($right));
}

おー、クイックソートっぽい!

二分探索をしてみる

ソート以外のアルゴリズムといえば、探索ですね。探索といえば二分探索。

f:id:ponkotsu0605:20211101213609p:plain

<?php

// 二分探索
function binarySearch($arr, $target) {
    $low = 0;
    $high = count($arr) - 1;
    while ($low <= $high) {
        $mid = (int)(($low + $high) / 2);
        if ($arr[$mid] === $target) {
            return $mid;
        } elseif ($arr[$mid] < $target) {
            $low = $mid + 1;
        } else {
            $high = $mid - 1;
        }
    }
    return -1;
}

すごい、これは楽ちんだ!

データベースから値を取得

さて、実践的な書き方を試してみましょう。

DBからデータを取得してみたいなと思います。

f:id:ponkotsu0605:20211101210830p:plain

<?php

// データベースから値を取得
$data = DB::table('users')->get();

すごい、ちゃんとselectしてきてる!

データベースからselectしつつ、カラムを取得

ということは、こういうこともできるのかも・・・?

<?php

/**
 * userテーブルのnameを返す
 *
 * @param int $user_id
 */
function getName(int $user_id): string
{
}

f:id:ponkotsu0605:20211101212822p:plain

<?php

/**
 * userテーブルのnameを返す
 *
 * @param int $user_id
 */
function getName(int $user_id): string
{
    return \App\User::find($user_id)->name;
}

なんかなんでもできる気がしてきました。

メソッド名まで書けば処理の中身も生成できる

コメントだけではなく、メソッド名から処理の内容を生成してくれます。

<?php

function add

まで書くと・・・ f:id:ponkotsu0605:20211101215902p:plain

<?php

function add($a, $b)
{
    return $a + $b;
}

このようにメソッド名から処理を予想して補完してくれます。

複数の候補を確認してみる

さて、上までは候補を1つだけ表示して生成していたのですが、macの場合、option + enterを押し、Open GitHub Copilotから候補を複数確認することができます。

f:id:ponkotsu0605:20211101215143p:plain

f:id:ponkotsu0605:20211101215228p:plain

例えば、中央値を求める処理だけでもいろんな候補が出てきます。

f:id:ponkotsu0605:20211101215552p:plain

(上の5個は6個目に似たようなものだったのでここでは省略)

このように、複数の候補から最適なものを選ぶということも可能です。

それっぽいコントローラを書いてみると

f:id:ponkotsu0605:20211101220155p:plain

おお、なんかそれっぽい候補も出てきてすごいですね。 ちゃんとユーザ情報を取得しそうです。

さいごに

今回はIntelliJにGitHub Copilotをインストールして、いろんなパターンのコード生成を試してみました。

なんか実務で使えそうなコードも生成してくれていたので、もしかしたら将来的にはエンジニアが少なくなってしまうかもしれません。入力文字数も少なくなり、開発スピードが上がるかもしれません。

これは、素晴らしいAIですね!

お問い合わせプライバシーポリシー制作物