筆者は、「ChatGPT」が技術的な手がかりを得るためのツールとして役に立つかどうかを知るために、テストを続けている。
提供:Frank Rumpenhorst/picture alliance via Getty Images
以下では、ChatGPTとのやりとりを引用文として示す。筆者が入力した文章は太字で、続いてChatGPTの返答を示している。この記事では、まず実際に尋ねた質問とChatGPTからの回答を見ていったあと、その意味について議論したい(編集部注:この記事で引用しているChatGPTの回答は、英語で出力されたものを人力で日本語に翻訳したものだ)。
プログラミング言語の変更点について調べる
筆者が使っているホスティングプロバイダーは、すべてのサイトを時代遅れの「PHP 7.4」から「PHP 8」に移行した。PHPは、「WordPress」をはじめとする多くのウェブ管理ツールに使用されているウェブプログラミング言語だ。筆者が使っているプラグインの中には、PHP 8に対応していないものがいくつかあり、そのコードのどの部分を修正する必要があるかを特定する必要があった。
通常であれば、PHP.netのサイトを漁ったり、Googleで大量の検索を行ったり、StackExchangeのコメントを調べ回ったりして、どんなプログラミング作業が必要になるかを調べることになる。しかしそれは、それなりに面倒で時間がかかる作業だ。そこで今回は、ChatGPTに直接、細かい質問をしてみた。その結果、非常に有益な回答を入手できた上に、コードのサンプルまで得ることができた。
今、PHPのextract関数で、配列を渡さないと致命的なエラーが出るという問題を抱えています。PHP 7.4ではエラーが出なかったのですが、PHP 8ではエラーになるようです。PHP 8でextract関数が変更されたのですか。
PHP 8ではextract()関数の挙動が変更され、より厳密になりました。以前のバージョンのPHPでは、extract()関数に配列が渡されなかった場合は単にfalseを返していましたが、PHP 8では、配列が渡されなかった場合は致命的なエラーをスローします。この変更の目的は、関数の堅牢性を高め、予期せぬ入力による潜在的なバグを防止することです。
関数に渡される変数が配列かどうかは、extract()を呼び出す前にis_array()関数を使用することで確認できます。
提供:ChatGPTまた、array_key_exists()関数を使っても、渡される変数が配列かどうかを確認できます。
提供:ChatGPTほかにも、「...」演算子を使って配列を変数に分解できます。
提供:ChatGPT
尋ねてみた結果、ChatGPTの回答は非常に有用で、このバグを数分で修正できた。このバグを修正できたのは、どこを見ればいいかを知ることができたことが大きい。ChatGPTは、PHPのバージョンによって、問題の関数の挙動がどう変わったかを明快に説明してくれた。