SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

「GitHub Copilot」入門

自分でコードを書かずにどこまでやれるか?「GitHub Copilot」をフル活用してReact+ExpressのWebページ実装に挑戦

「GitHub Copilot」入門 第3回

  • X ポスト
  • このエントリーをはてなブックマークに追加

GitHub Copilotの支援を受けてエラーを解決

 一通りの実装が完了したので実行してみます。Expressプロジェクト→Reactプロジェクトの順番で実行すると、表示されるReactのWebページは図10の通りとなり、スマートフォンの一覧が表示されません。

図10 ReactのWebページにスマートフォンの一覧が表示されない様子(p001-react)
図10 ReactのWebページにスマートフォンの一覧が表示されない様子(p001-react)

 この時、Webブラウザーのコンソールには、図11の通りエラーが出力されます。

図11 図10の実行時にコンソールに出力されるエラー(p001-react)
図11 図10の実行時にコンソールに出力されるエラー(p001-react)

[補足]コンソールにエラーが2回出力される理由

 図11でコンソールにエラーが2回出力されているのは、ReactのStrictModeが有効になっているためです。この件もCopilot Chatに質問すると、図12の通り教えてくれます。

図12 コンソールにエラーが2回出力される理由を質問した様子
図12 コンソールにエラーが2回出力される理由を質問した様子

 このエラーを、GitHub Copilotの支援を受けて解決してみましょう。エラーの内容をそのままCopilot Chatに貼り付けて質問すると、図13の通り回答がもらえ、CORSヘッダーの設定が必要と案内されます。この事象は、同一オリジンポリシーにより、クライアント側のWebページ(http://localhost:5173/)から、オリジンが異なるWeb API(http://localhost:3000/phones)へのアクセスができないことが原因です。

図13 エラー内容をCopilot Chatに貼り付けて質問した様子(p001-react)
図13 エラー内容をCopilot Chatに貼り付けて質問した様子(p001-react)

 Copilot Chatで提示された解決策を実行します。「npm install cors」コマンドでcorsパッケージをインストール後、サーバー側のコードを修正します。提案されたコードはリスト5の通りです。(1)でcorsパッケージからcors関数を取得し、(2)のapp.useメソッドにcors関数の戻り値を与えて実行し、CORSミドルウェアを使用するようにします。

[リスト5]CORS対応を行うサーバー側コードの提案内容
const express = require('express');
const cors = require('cors'); // ...(1)
const app = express();

// CORSミドルウェアを使用 ...(2)
app.use(cors());

app.get('/phones', (req, res) => {
  res.json([
    { brand: 'Apple', model: 'iPhone 12' },
    { brand: 'Samsung', model: 'Galaxy S21' }
  ]);
});

app.listen(3000, () => {
  console.log('Server is running on port 3000');
});

 ただし、リスト5はエラーコードから推測して生成したコードなので、元のコード(リスト2)と見比べると、/phones APIの戻り値が変わっている、port変数が消滅している(ポート番号3000が即値になっている)といった、不必要な変更が見られます。

 そこでリスト5と同じ修正内容をリスト2に適用させてみます。リスト2(index.jsの内容)を全選択してインラインチャットを開き、CORSに対応するよう命令すると、図14の通り、リスト5(1)(2)と同じ修正が提案されます。

図14 既存のサーバー側コードに対してCORS対応を提案させた様子(p002-express/index.js)
図14 既存のサーバー側コードに対してCORS対応を提案させた様子(p002-express/index.js)

 ここまで修正後、もう一度Expressプロジェクト→Reactプロジェクトの順に実行して、Webブラウザーで「http://localhost:5173/」にアクセスすると、図15の通りスマートフォンのリストが表示されます。GitHub Coplotに全面的に頼りながら、ExpressによるWeb APIと、それにアクセスして画面に表示するReactのWebページが完成しました。

図15 Web APIから取得したデータを表示するReactのWebページ(p001-react)
図15 Web APIから取得したデータを表示するReactのWebページ(p001-react)

[補足]テスト用のデータをGitHub Copilotに生成させる

 本記事では、プログラムの実装をGitHub Coplotに生成させましたが、テストに利用するデータの生成にもGitHub Copilotが活用できます。特に大量のテストデータが必要とされる場合に便利です。

 例えば、brandとmodelを含むスマートフォンのデータを1000個、JSON形式で生成しようとした場合、Copilot Chatで図16の通り生成方法を提案してくれます。

図16 テストデータの生成方法を質問した様子
図16 テストデータの生成方法を質問した様子

 図16で提案された生成方法は、p003-testdataサンプルコードに含まれています。

さいごに

 本記事では、GitHub Copilotに全面的に頼りながら、クライアント側にReact、サーバー側にExpressを利用したWebページを作成しました。プロジェクト生成や実装、エラー解決などのさまざまな場面で、GitHub Copilotの支援を受けて効率よく作業できることがわかります。

 GitHub CopilotはAIを利用したツールなので、提案された内容を全面的に信用してよいものではなく、最終判断の責任は人間にあります。とはいえGitHub Copilotを利用すると、人間が考える手掛かりとなる提案を、必要な時に好きなだけ受けることができるので、作業効率を大幅に向上させられます。AIの可能性と限界を知ったうえで上手に使っていきたいツールといえるでしょう。

参考資料

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
「GitHub Copilot」入門連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト  吉川 英一(ヨシカワ エイイチ)

WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS Twitter: @yyamada(公式)、@yyamada/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/20100 2024/09/27 11:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング