VS CodeからPHPアプリをローカル実行/デプロイ!Visual Studio Code+PHPの可能性を探る

VS CodeからPHPアプリをホスト可能な拡張機能やWebサーバへのデプロイに使える拡張機能などを紹介。

» 2018年09月25日 05時00分 公開
[かわさきしんじInsider.NET編集部]
「Visual Studio Code+PHPの可能性を探る」のインデックス

連載「Visual Studio Code+PHPの可能性を探る」

 前回は、PHPコードの記述を支援する拡張機能を紹介した。今回は、前回に紹介しきれなかった拡張機能をさらに幾つか取り上げることにする。

PHP Server拡張機能

 PHP Server拡張機能は、現在開発しているPHPアプリをローカル環境でホストしてくれる拡張機能だ。Webサーバが公開しているフォルダ(例えば、本連載で使用しているXAMPPなら、XAMPPのインストールフォルダにあるhtdocsフォルダ)以下で開発を進めるということはないだろう(と言いながら、前回はサンプルということもあり、そうした作りをしていたが)。Webサーバの管理下にないフォルダでPHPアプリの開発/デバッグなどを行い、それを何らかの手段でサーバへデプロイするといった場合に、アプリの挙動を手軽に確認したいことがあるはずだ。そのような場合に、この拡張機能が役立つ。

PHP Server拡張機能 PHP Server拡張機能

 この拡張機能をインストールすると、VS Codeのウィンドウ右上に[PHP Server: Serve Project]ボタンが表示されるようになる。

[PHP Server: Serve Project]ボタン [PHP Server: Serve Project]ボタン

 ボタンの名前から分かる通り、このボタンをクリックすれば、PHPアプリがローカルにホストされる。注意点としては、VS Codeのエディタでアクティブになっているファイルを含んだURLでブラウザが開かれる点だ。何らかのHTMLファイルをアクティブにした状態で、このボタンをクリックするようにしよう。

 あるいは、コマンドパレットから[PHP Server: Serve Project]コマンドを実行するか、エディタを右クリックしてコンテキストメニューから[PHP Server: Serve Project]を選択してもよい。

 ここでは、前回見たアプリを基にしたアプリを、XAMPPの管理下にはないフォルダに作成して(C:\project\vscodephp\vscodephp_03フォルダ)、PHP Serverを利用してみよう。

C:\project\vscodephp\vscodephp_03フォルダでPHPアプリを記述 C:\project\vscodephp\vscodephp_03フォルダでPHPアプリを記述
ポップアップを見ると分かる通り、XAMPP管理下のフォルダ(C:\xampp\htdocs\vscodephp_03など)とは異なるフォルダにプログラムファイルが置かれている。

 この状態で、[PHP Server: Serve Project]ボタンをクリックする(あるいはコンテキストメニューやコマンドパレットから該当するコマンドを実行する)と、デフォルトではlocalhost:3000でPHPアプリがホストされる。

PHP Serverを起動
PHP Serverを起動
PHP Serverがホストを開始したことを示すメッセージがウィンドウ下部に表示される
PHP Serverがホストを開始したことを示すメッセージがウィンドウ下部に表示される
エディタでアクティブになっていたファイルがlocalhost:3000で開かれる
エディタでアクティブになっていたファイルがlocalhost:3000で開かれる

PHP Serverを起動
[PHP Server: Serve Project]ボタンをクリックしてもよいし、エディタを右クリックしてコンテキストメニューの[PHP Server: Serve Project]を選択してもよい(コマンドパレットを使ってももちろん構わない)。

 PHP Serverを終了するには、エディタを右クリックしてコンテキストメニューから[PHP Server: Stop]を選択するか、コマンドパレットから[PHP Server: Stop]コマンドを実行する(残念ながら、[PHP Server: Serve Project]ボタンがホストを終了するボタンに変化することはない)。

 PHP Server拡張機能を使えば、ローカル環境で開発しているPHPアプリの動作確認を簡単に行えることは分かった。次は、これをWebサーバにデプロイする機能が必要になる。

Deploy (Reloaded)拡張機能

 ローカルフォルダにあるPHPアプリプロジェクトをWebサーバへデプロイするには、Deploy (Reloaded)拡張機能が使える(実際には、何らかの手段でCI/CD環境を構築していることが多いと思われるので、あくまでも小規模なアプリのデプロイや、ローカル環境で実行されているWebサーバへのデプロイなどが主な用途になるだろう)。

 この拡張機能は、VS Codeのワークスペース(フォルダ)にあるファイルをさまざまなターゲットに配備するために使える(PHPプロジェクトに限定されない)。また、「Reloaded」とあるように、同じ作者によるDeploy拡張機能の後継バージョンとなっている。

Deploy (Reloaded)拡張機能 Deploy (Reloaded)拡張機能

 この拡張機能をインストールしたら、すぐにデプロイが可能になるというわけでもない。実際には(ユーザー設定ではなく)「ワークスペース設定」で、デプロイ先やデプロイするファイル群(パッケージ)を指定する必要がある。実際には、ワークスペース設定(settings.jsonファイル)にdeploy.reloaded項目を作成して、その子項目としてtargets項目(デプロイ先)やpackages項目(デプロイするファイル群)を指定していく。

 ここでは、XAMPPが管理するhtdocsフォルダ(にあるvscodephp_03フォルダ)をデプロイ先として、これらの設定を行ってみた。

{
  // …… 省略 ……
  "deploy.reloaded": {
    "targets": [
      {
        "type": "local",
        "name": "deploy to xampp htdocs",
        "description": "deploy to xampp htdocs",
        "dir": "C:\\xampp\\htdocs\\vscodephp_03"
      }
    ],
    "packages": [
      {
        "name": "sample package",
        "description": "sample",
        "files": [
          "**/*.php",
          "**/*.html"
        ],
        "exclude": [
          ".vscode/**"
        ]
      }
    ]
  }
}

デプロイ先とデプロイするファイル群(パッケージ)の設定

 上でも述べたように、deploy.reloaded項目にはtargetsとpackagesの2つの子項目があり、そこに必要となる記述を配列として記述していく。ここではローカルマシンのフォルダがデプロイ先となっているので、targetsにあるdir項目にそのフォルダを指定している。また、packages以下ではfiles項目にデプロイ対象のファイルを、exclude項目に不要なフォルダを指定している。

 これらを記述したら、コマンドパレットから[Deploy Reloaded: Deploy]コマンドを実行する。すると、デプロイ対象を選択するダイアログが表示されるので、ここでは[Package]を選択する(この「Package」の内容を上のsettings.jsonファイルで指定したということだ)。

[Deploy Reloaded: Deploy]コマンドを実行する
[Deploy Reloaded: Deploy]コマンドを実行する
[Package]を選択する
[Package]を選択する

[Deploy Reloaded: Deploy]コマンドの実行

 これにより、先ほどtargetsのdir項目で指定したフォルダにデプロイが行われる。以下はデプロイ先となったXAMPP管理下のhtdocs\vscodephp_03フォルダをエクスプローラーで開いたところだ。

デプロイ後のhtdocs\vscodephp_03フォルダの内容 デプロイ後のhtdocs\vscodephp_03フォルダの内容

 上に示したように、2つのPHPファイルと1つのHTMLファイルがデプロイされたことが分かる。

 ここでは、ローカルマシンのフォルダを対象としたが、この拡張機能は他にも多くのデプロイ先に対応しており、ワークスペース設定の記述方法もさまざまだ。また、デプロイ先からのファイルの取得なども可能だ。詳細については、この拡張機能のリポジトリにあるWikiページを参照されたい。

 PHP Server拡張機能とDeploy (Reloaded)拡張機能があれば、ローカル環境でのちょっとしたPHPアプリの開発とテスト実行とそのデプロイまでをVS Code内で完結させられるので、必要な方はぜひインストールしてみよう。

 最後に、PHPコードの記述を簡単にする拡張機能をあと2つ紹介したい。

PHP Namespace Resolver拡張機能

 PHP Namespace Resolver拡張機能は、その名の通り、PHPコードを記述している際に、何らかの識別子がどの名前空間に属しているものかを解決してくれるものだ。

 例えば、以下のようなユーティリティークラスを含むPHPコードがあったとする。

<?php

namespace mylib;

class Util
{
  public static function createMessage($h)
  {
    if (6 <= $h && $h <= 11) {
      $msg = "Good morning!, ";
    } elseif (12 <= $h && $h <= 18) {
      $msg = "Good afternoon!, ";
    } elseif (19 <= $h && $h <= 22) {
      $msg = "Good evening!, ";
    } else {
      $msg = "Good night!, ";
    }
    return $msg;
  }
}

Utilユーティリティークラスを含んだUtil.phpファイル

 このファイルでは名前空間mylibにUtilクラスを作成し、そこに静的メソッドcreateMessageを定義している。このcreateMessageメソッドを利用するコードを以下に示す。

<?php

require "Util.php";
use mylib\Util;

date_default_timezone_set('Asia/Tokyo');
$d = getdate();
$h = $d["hours"];

$msg = Util::createMessage($h);

print($msg . $_POST["whom"]);

createMessage関数を利用するPHPコード(hello.phpファイル)

 ここではrequire文で、ユーティリティークラスを含んだUtil.phpファイルを読み込み、use演算子でUtilクラスのエイリアスを作成し、その後、「Util::createMessage($h)」としてcreateMessage関数を呼び出している。このとき、「use mylib\Util」行がないと、関数呼び出しには名前空間(mylib)を付加して「mylib\Util::createMessage($h)」のようにする必要がある。が、実際にはプログラムコードを書いているときには、そのような行を記述する前に、名前空間のことを気にせず次のようなコードを書いてしまうこともあるだろう。

<?php

require "Util.php";
// use演算子を忘れたまま

date_default_timezone_set('Asia/Tokyo');
$d = getdate();
$h = $d["hours"];

$msg = Util::createMessage($h);  // UtilクラスのcreateMessage関数を呼び出す

print($msg . $_POST["whom"]);

use演算子でエイリアスを作成しないまま、Utilクラスを直接使おうとしているコード

 PHP Namespace Resolver拡張機能は、そうしたコードで名前空間を解決するのに役立つ。名前空間をまだ解決していないクラスを右クリックして、コンテキストメニューから[Import Class]を選択すると、対応するuse演算子を含んだコードが挿入される。

クラスのインポート クラスのインポート

 この場合は、上で見たのと同様なコードが自動的に挿入される(挿入位置はファイル先頭なので、必要に応じて、位置の調整を行った方がよいかもしれない)。

 あるいはコンテキストメニューから[Expand Class]を選択すると、use演算子を含んだ行ではなく、名前空間を修飾したクラス表記にしてくれる。

クラスの展開 クラスの展開

 上のコードなら、次のようになる。

<?php

require "Util.php";

date_default_timezone_set('Asia/Tokyo');
$d = getdate();
$h = $d["hours"];

$msg = \mylib\Util::createMessage($h);

print($msg . $_POST["whom"]);

クラスを展開したコード

 あらかたコードを記述したところで使うというよりは、コードをガンガン書きながら、その途中で必要に応じてエイリアスを作成したり、名前空間を付加したりといった使い方をするのがよいだろう。

PHP File Types拡張機能

 PHP File Types拡張機能は、新規にPHPファイルを作成する際に、素のPHPファイル、クラス、インタフェース、トレイトのひな型も同時に作成してくれるものだ。

PHP File Types拡張機能 PHP File Types拡張機能

 この拡張機能をインストールすると、[エクスプローラー]ビューを右クリックしたときのコンテキストメニューに[New PHP ~]という項目が追加される。これを利用することで、簡単に新規クラスなどを作成できるようになる。

コンテキストメニューから[New PHP Class]を選択して、クラスを新規作成 コンテキストメニューから[New PHP Class]を選択して、クラスを新規作成

 クラスやインタフェースなどを作成するときには、コンテキストを考慮して、名前空間なども自動的に生成してくれる。ただし、判断が付かないときには名前空間を指定するダイアログが表示されるようになっている。

 ひな型といっても簡単なコードが追加されるだけではあるが、人によっては便利に使えるかもしれない。


 本連載では、VS CodeでPHPプログラミングを快適に行えるようにするための拡張機能を紹介してきた。これらを活用して、ぜひともVS CodeでPHPプログラミングをエンジョイしてほしい。

「Visual Studio Code+PHPの可能性を探る」のインデックス

Visual Studio Code+PHPの可能性を探る

Copyright© Digital Advantage Corp. All Rights Reserved.

スポンサーからのお知らせPR

総合 記事ランキング

本日月間

注目のテーマ

4AI by @IT - AIを作り、動かし、守り、生かす
Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。