噂のGitHub Copilotですが、いつの間にか使えるようになっていました!
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.
ということで、早速使ってみました!
今回は、PHPを使ってみたいので、IntelliJで使ってみようと思います。(おそらくPHPStormも同じはず)
IntelliJにGitHub Copilotをインストール
まずは、IntelliJにGitHub Copilotをインストールします。
インストール手順はいかに書いてあります。
今回はIntelliJということで、JetBrainsを選択します。
ここに書いてある手順通りに進めれば良いだけではあります。
プラグインの検索で「github copilot」と入力すればすぐに見つかると思います。
インストールをして、IntelliJの再起動をすればOKです。
再起動をすると、右下に上の画像のようなポップアップが表示されると思うので、Sign in to GitHubをクリックします。
後は手順に沿って認証を通せば使えるようになると思います。
導入はとても簡単でした!
Copilotを実際に使ってみる
インストールできたので、早速使ってみたいと思います。
合計値を返す関数を作ってみる
まずは簡単に合計値を計算してもらいましょう。
<?php // AとBの合計値を返す
とまで入力してみます。すると、以下のような候補が出てきました。
このままtabキーを押してみると。
このように、sum()
が生成されました。
<?php // AとBの合計値を返す function sum(int $a, int $b): int { return $a + $b; }
フィボナッチ数列を求めてみよう
こういうメソッド作成と言ったら、フィボナッチ数列ですよね。
<?php // フィボナッチ数列を取得する
ここまで入力して出てくる候補は・・・
tabを押す!
あー、再起呼び出しをしているんですが、Undefined variable '$fibonacci'
になってしまいました。
functionにしたいので、functionまで入力してみましょう。
tab!
おー、これで良さそうですね!
当たり前かもですが、候補が出てもすぐにtabは押さず、ちゃんと使えるソースコードかは確認が必要ということですね。
バブルソートしてみる
アルゴリズムといえば、ソートですね。ソートといえばわかりやすいのがバブルソート。
<?php // バブルソートする
ここまで入力するだけで・・・
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; }
おー、ちゃんとバブルソートっぽい処理がされている・・・!
クイックソート
じゃあ、次にやらないといけないのはクイックソートですよね。
想像と違うので、functionまで入力してみます。
<?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)); }
おー、クイックソートっぽい!
二分探索をしてみる
ソート以外のアルゴリズムといえば、探索ですね。探索といえば二分探索。
<?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からデータを取得してみたいなと思います。
<?php // データベースから値を取得 $data = DB::table('users')->get();
すごい、ちゃんとselectしてきてる!
データベースからselectしつつ、カラムを取得
ということは、こういうこともできるのかも・・・?
<?php /** * userテーブルのnameを返す * * @param int $user_id */ function getName(int $user_id): string { }
<?php /** * userテーブルのnameを返す * * @param int $user_id */ function getName(int $user_id): string { return \App\User::find($user_id)->name; }
なんかなんでもできる気がしてきました。
メソッド名まで書けば処理の中身も生成できる
コメントだけではなく、メソッド名から処理の内容を生成してくれます。
<?php function add
まで書くと・・・
<?php function add($a, $b) { return $a + $b; }
このようにメソッド名から処理を予想して補完してくれます。
複数の候補を確認してみる
さて、上までは候補を1つだけ表示して生成していたのですが、macの場合、option + enterを押し、Open GitHub Copilotから候補を複数確認することができます。
例えば、中央値を求める処理だけでもいろんな候補が出てきます。
(上の5個は6個目に似たようなものだったのでここでは省略)
このように、複数の候補から最適なものを選ぶということも可能です。
それっぽいコントローラを書いてみると
おお、なんかそれっぽい候補も出てきてすごいですね。 ちゃんとユーザ情報を取得しそうです。
さいごに
今回はIntelliJにGitHub Copilotをインストールして、いろんなパターンのコード生成を試してみました。
なんか実務で使えそうなコードも生成してくれていたので、もしかしたら将来的にはエンジニアが少なくなってしまうかもしれません。入力文字数も少なくなり、開発スピードが上がるかもしれません。
これは、素晴らしいAIですね!