コーディングの練習でいつもお世話になっているサイトCodeJumpの課題「HTMLサイトをWordPress化しよう」を進めようとしたら、問題が発生しました。
今回はその問題と解決方法についてお話しします。
コードは正しいはずなのにエラーが…?
練習の為に、解説を読みながらそのままコードを書いていたら、構文エラーが出てしまいました。
少し前の出来事でしたので、スクリーンショットを撮っていなかったのですが、
出ていたエラーはUndefined function ‘~’ すなわち「関数が定義されていません」というエラーでした。
解説を見ながら書いていたので構文は間違えていないはず。スペルミスかもしれないと思い、Difffでチェックしてみましたが、スペルミスもありませんでした。
念のためCodeJumpのソースコードをコピペしても構文エラーが出たままでした。
原因はPHP Intelephense?
いろいろと調べた結果、原因はVSCodeにインストールしている機能拡張のPHP Intelephenseにありそうでした。試しに機能を無効化してみると、構文エラーは消えました。
しかし「これで解決!」という訳にはいきません。なぜならPHP Intelephenseはとても重要な役割を果たしてくれているからです。
PHP Intelephenseとは
ここで簡単に備忘録としておさらいします。
PHP Intelephenseは、VSCodeでPHPコードを書く際に非常に役立つ機能拡張です。
機能は以下の通り。
- コード補完
- 定義への移動
- 参照の検索
- 静的解析
このようにPHP Intelephenseは生産性を高めるためのツールなので、無効化してもPHPのコードを書くこと自体には問題ありません。ですが、私のような初心者にとっては、コードの補完などの機能は必須です。
エラーの原因と解決策
PHP Intelephenseの設定
PHP intelephenseを無効化したままでは困るし、構文エラーが出たままでも困る…。
という訳でAIに相談してみました。とりあえず、一番使いやすいCopilotに訊いてみたところ、
「エラーが表示される原因としては、設定の不一致や互換性の問題が考えられます。Intelephenseの設定を見直すことで、エラーの原因を特定できる場合があります。VSCodeの設定画面からIntelephenseのオプションを確認してみてください。」という回答と共に参照サイトを提示してくれました。
しかし、ここが初心者の悲しいところ、参照サイトを読んで具体的にどうすれば良いのか解らなかったので具体的な設定方法を再び質問。すると、設定画面の開き方から丁寧に説明してくれました。こちらも備忘録として残しておきます。
「PHP Intelephenseの設定にはいくつかの重要なポイントがあります。まず、VSCodeに組み込まれている「PHP 言語機能」を無効にする必要があります。これにより、Intelephenseが提供する機能が最大限に活用できるようになります。以下の手順で設定を行ってください」
- VSCodeで拡張機能の一覧を開く
- 「@builtin php」と検索する
- 「PHP 言語機能」を無効にする
- 「PHP の基本言語サポート」は有効のままにしておく(構文ハイライトのため)
「さらに、拡張モジュールのサポートを有効にするためには、以下の手順を実行します」
- VS Codeの設定画面を開く (Code > Preferences > Settings または Command (Ctrl) +,)
- User設定またはWorkspace設定のいずれかを選び
- Extensions > intelephense > intelephense Stubs で Add Item をクリック
- 有効にしたいモジュール名を入力
とても丁寧に教えてくれたので早速実行しました。
私はPHP Intelephenseのインストール時に言語機能を無効化していたので、実行したのは「拡張モジュールの有効化」のみ。指定どおりにWordPressを追加しました。
これで問題が解決するかと思ったのですが、まだエラーが消えません。そこでまたしてもCopilotに質問しました。
setting.jsonファイルでPHPのバージョンを指定
どうやら、モジュールだけではなくPHPのバージョンが指定されていないことも問題だった模様。Copilotがその指定の仕方を教えてくれました。
これは、VS Code で PHP のコードを編集する際に、Intelephense という拡張機能が使用する PHP のバージョンを指定するための設定です。
以下の手順に従って設定を行ってください:
- VS Code を開く:VS Code を開き、PHP のコードが含まれるプロジェクトを開きます。
- 設定ファイルを探す:プロジェクトのルートディレクトリに
.vscode
フォルダがあるか確認し、中にsettings.json
ファイルがあるかを確認します。 - 設定を追加する:
settings.json
ファイルを開き、以下のようにintelephense.environment.phpVersion
の設定を追加します。
- {
“intelephense.environment.phpVersion”: “7.4“
}
- {
- 上記の
"7.4"
は使用している PHP のバージョンに合わせて適宜変更してください。 - ファイルを保存する:変更を加えたら、ファイルを保存します。
なるほど。jsonファイルでPHP のバージョンを指定すれば良いんだね。と思ったのですが、私のディレクトリにはjsonファイルが存在しませんでした。
setting.jsonファイルの作成
jsonファイルがない場合は作ればいいよ、ということでjsonファイルの書き方も教えてもらいました。
{ "intelephense.environment.phpVersion": "8.1.23", "intelephense.diagnostics.undefinedTypes": false, "intelephense.diagnostics.undefinedFunctions": false, "intelephense.diagnostics.undefinedConstants": false, "intelephense.diagnostics.undefinedClassConstants": false, "intelephense.diagnostics.undefinedMethods": false, "intelephense.diagnostics.undefinedProperties": false, "intelephense.diagnostics.undefinedVariables": true }
教えられたとおりにコードを書いてディレクトリ内に保存したところ、無事にエラーは解決しました。
まとめ
2年ほど前にPythonを独学していた時も同じようなエラーで困ったことがありました。
スクールなどで学習していたり、慣れている人にはなんという事もないエラーでスムーズに解決できるのでしょうが、初心者にとってはエラーの原因を検索して調べるだけでも時間がかかってしまいがちです。
今回AIに質問することによって迅速にエラーが解決でき、AIのありがたみを実感しました。
(もちろんAIの解答は必ずしも絶対ではないので、常に検証が必要ですがCopilotのように参照サイトを提示してくれると、その検証も出来るのでとても助かります)