Visual Studio CodeでPHP開発環境構築

■環境

macOS High Sierra 10.13.1
Visual Studio Code 1.19.0


■Visual Studio Codeの取得

Visual Studio Code(以下、VSCode)本体をダウンロードします。
https://www.microsoft.com/ja-jp/dev/products/code-vs.aspx

ダウンロードしてきたzipを回答するとアプリケーションファイル(.app)が出てくるので、アプリケーションディレクトリへ移動しておきます。

■拡張機能インストール

VSCodeを起動したら上部メニューより表示 > 拡張機能を選択します。
もしくは左側にあるアイコンの中の一番下にある四角いアイコンを選択します。

検索窓が表示されるので、キーワード検索をしてインストールすることが可能です。
以下、私がインストールしてみたものです。

Project Manager

プロジェクト管理をするための拡張機能です。
現在開いているワークスペースをプロジェクトとして保存しておくことで
プロジェクトの切り替えが簡単になります。
NetBeansやEclipseのように複数プロジェクトを同時に開いておくことはできないようです。

■使い方
上部メニューの表示 > コマンドパレットを開き、検索バーにProject Managerと入力するとProject Manager用のコマンドが表示されます。

(コマンドパレットはCommand + Shft+Pでも開けます)

主に使うコマンドについては以下の通り。

コマンド 内容
Save Project 現在のワークスペースをプロジェクトとして保存
Edit Project 保存済みプロジェクトの編集
List Project to Open 保存済みプロジェクト一覧を表示し、選択したプロジェクトを開く

ftp-simple

ファイルやディレクトリをサーバへアップロードしたりダウンロードするための拡張機能。
FTPだけでなく、SFTPも使えます。

■使い方
コマンドパレットに「ftp-simple」と入れれば候補がでます。
コマンドパレットについては上記「Project Manager」と同様なので割愛。

主に使うコマンドについては以下の通り。

コマンド 内容
Config サーバ連携の設定
Save サーバへのファイル・ディレクトリアップロード
Download サーバからのファイル・ディレクトリダウンロード
Diff ローカルとサーバーの差分を表示する
Delete サーバー上のファイル・ディレクトリを削除する

PHP IntelliSense

PHPのハイライトや補完機能を追加する拡張機能。
インストールするだけで良いです。

Path Intellisense

ディレクトリパスを入力する際に自動で補完してくれる拡張機能。
これもインストールするだけで良いです。

Bracket Pair Colorizer

相対する括弧が同じ色となるので、どこからどこまでが括弧で囲われているか分かりやすくなります。
若干エディタがカラフルになり過ぎるので、人によっては嫌いかも。
これもインストールするだけで良いです。

■設定周り

ファイル拡張子毎の言語設定

ファイルの拡張子を通常ではないものにしている場合、ハイライトや補完機能が使えない場合があります。
その場合は対象のファイルを開いた状態で右下の「プレーンテキスト」をクリックします。

※既に他の言語が紐づいている場合は、その言語が表示されていると思います。

すると言語の設定画面が開きます。
同じ拡張子のファイル全てに反映させたい場合は検索バーの下にある「’.xxx’に対するファイルの関連付けの構成」をクリックします。

ここで言語を設定すれば、今後は選択した言語のハイライトなどが反映されるようになります。

Atom IDEの環境構築(PHP、Go)

■環境

macOS Sierra 10.12.6
Atom 1.21.0-beta2

■参考にしたサイト

公式サイト
https://ide.atom.io/
はくたけ氏のブログ
http://tech.innovator.jp.net/entry/2017/09/14/165139
sayama0402さんのQiita
https://qiita.com/sayama0402/items/3bd8d905619c514179b7


ナウいエディタ「Atom」は、前から気になっていたのですが、

  • テキストエディタにしては重い
  • IDEにしては機能がすくない

という理由で、少し敬遠していました。

が、そのAtomからIDEが出たそうなので、試しに使ってみました。

■手順

①Atomの入手

以下サイトより、Atom 1.21.0(ベータ版)を入手してインストールする。
https://atom.io/beta

※いくつかの紹介ページを見ましたが、1.21.0が推奨されているようです。
 試しに1.20.0(安定板)でも試して見ましたが、確かに動きが怪しかったです。

②必須パッケージのインストール

Atomを起動したら、上部メニュー
Packages > Settings View > Install Packages/Themes
より、以下を検索してインストールする。

  • atom-ide-ui
  • ide-php
  • ide-go

③使って見る。

初めてgoのソースコードを開いた際には「ide-go」が依存するパッケージをインストールするか聞かれるので、
インストールします。
また、「linter」と「atom-ide-diagnostics」が競合している旨のメッセージが出るので、
そのメッセージの下にある「Disable linter」をクリックして、競合を解決します。

これで、実際に使い始められそうです。
定義ジャンプや補完機能は十分使えそうなレベルで動いてました。
また、他の無料IDE(EclipseやNetBeans)に比べると、起動が早かったです。

その他パッケージのインストール

IDEとは関係なく便利なパッケージが沢山あるので入れます。
以下、実際に入れて見たパッケージです。

■file-icons
各ファイルの拡張子に合わせてアイコンを変えてくれる。
ちなみに、Atomに新拡張子を紐付けさせるには、上部メニューより「Atom Beta>Config」をクリックし、
config.csonを編集する必要がある。

【例:以下の記載で「.inc」という拡張子をPHPファイルとして認識してくれる】

"*":
  core:
    customFileTypes:
      "source.php": [
        "inc"
      ]

『source.php』に該当する部分はPHPファイルを開いた状態で「cmd + opt + P」を押すとポップアップで表示される。
別拡張子のファイルでも同じ操作でできるはず。

■pigments
色コードを記載したら自動で該当の色でハイライトしてくれる。

■show-ideographic-space
全角スペースを見える化

■git-plus
ターミナルなしでgit操作ができる!だそうです。

■merge-conflict
gitのコンフリクト解消が楽になる。

■highlight-selected
選択した単語と同じ単語をソースコード上でハイライトしてくれる。
選択=ダブルクリックらしい。同じ変数を探す時などに便利。

■linter-php
構文チェックしてくれるパッケージ。
括弧の開閉数が不一致の時とか教えてくれる。
紐づくパッケージを諸々インストールしてねと出てくるので、それらもインストールする。
※AtomIDEにも標準で構文チェックパッケージ(?)が入っているらしく、それと競合すると警告が表示される。
 IDE標準のものはエラー検知をしてくれているのかよく分からなかったので、私は無効化してしまいました。
 (上記警告にDisableボタンが付いているので、それをクリックするだけ)

■project-manager
複数プロジェクトを管理するためのパッケージ。
プロジェクト切り替えが容易になる。
【管理対象のプロジェクトを増やす方法】
 対象としたいプロジェクトを開いた状態で上部メニューより「packages > Project Manager > Save Project」を選択
【管理対象プロジェクトの呼び出し】
 「Ctrl + Command + P」で一覧が表示されるので、そこで選択する。
 上部メニューより「packages > Project Manager > List Project」を選択しても同じ。

【Laravel】migrateで『Class ‘CreateFoooTable’ not found』が発生する

■環境

Laravel 5.1


Laravelの「migrate:rollback」や「migrate:refresh」をしようとして
『Class ‘CreateFoooTable’ not found』というエラーが発生した際の解決方法です。

この事象はmigrateで利用する「/database/migrations」ディレクトリに配置されているファイルが
autoloadされていない事が原因のようです。

解決するにはプロジェクトのrootディレクトリにて以下コマンドを実行し、autoloadを再編成します。

composer dump-autoload

※composerインストールについてはコチラ

もしサーバにcomposerを入れられない場合は作業PCにて上記コマンドを実行すると
「/vendor」ディレクトリ配下が更新されるのでサーバにアップロードしてください。

以上。

【PHP】Laravel5でカスタムバリデーションを追加する

Laravel5でカスタムバリデーションを追加した際の手順です。

■環境
Laravel 5.1

まず、サービスプロバイダーを作成して、バリデーションルールを記載します。
例えば以下のルールの社員番号があったとします。
・頭文字は「A」または「Z」
・2文字目以降は数字6桁

このバリデーションルールを『shainbangou』という名前のルールで登録するとこうなります。
【/app/providers/ValidatorServiceProvider.php】

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Validator;

class ValidatorServiceProvider extends ServiceProvider
{
    public function boot()
    {
        Validator::extend('shainbangou', function($attr, $value, $param) {
            return preg_match('/^[A|Z][0-9]{6}$/', $value);
        });
    }
}

次にエラー文言の設定をします。
viewにて社員番号はempIdという変数名で設定されているとします。
【/resources/lang/ja/validation.php】

return [
〜〜 省略 〜〜
    'custom' => [
        'empId' => [
            'shainbangou' => '社員番号が間違っています。(A/Z + 数字6桁).',
        ],
    ],
〜〜 省略 〜〜
    'attributes' => [
        'empId' => '社員番号',
    ],
];

これで、コントローラなどのバリデーション処理で新ルール「shainbangou」が使えるようになります。

zabbixでPHPの警告が出る場合の対処

■環境
zabbix 3.2
PHP 7.1

PHP7.1でzabbixを動かすと、以下の警告が出ました。

A non well formed numeric value encountered [zabbix.php:21 → require_once() → ZBase->run() → ZBase->processRequest() → CView->getOutput() → include() → make_status_of_zbx() → CFrontendSetup->checkRequirements() → CFrontendSetup->checkPhpMemoryLimit() → str2mem() in include/func.inc.php:410]
A non well formed numeric value encountered [zabbix.php:21 → require_once() → ZBase->run() → ZBase->processRequest() → CView->getOutput() → include() → make_status_of_zbx() → CFrontendSetup->checkRequirements() → CFrontendSetup->checkPhpPostMaxSize() → str2mem() in include/func.inc.php:410]
A non well formed numeric value encountered [zabbix.php:21 → require_once() → ZBase->run() → ZBase->processRequest() → CView->getOutput() → include() → make_status_of_zbx() → CFrontendSetup->checkRequirements() → CFrontendSetup->checkPhpUploadMaxFilesize() → str2mem() in include/func.inc.php:410]

警告が出ている箇所は以下のようになっています。
[/usr/share/zabbix/include/func.inc.php]

 394 /**
 395  * Converts strings like 2M or 5k to bytes
 396  *
 397  * @param string $val
 398  *
 399  * @return int
 400  */
 401 function str2mem($val) {
 402         $val = trim($val);
 403         $last = strtolower(substr($val, -1));
 404
 405         switch ($last) {
 406                 case 'g':
 407                         $val *= 1024;
 408                         /* falls through */
 409                 case 'm':
 410                         $val *= 1024;
 411                         /* falls through */
 412                 case 'k':
 413                         $val *= 1024;
 414         }
 415
 416         return $val;
 417 }

この引数の「$val」には『256M』のように単位付きの数字が入ってくるようで、
それを『$val *= 1024』と数字のように扱っているので警告が出ているようです。
(警告は出ているが、処理自体は正常に行なわれている)

解決策は色々あると思いますが、とりあえず以下のように修正したら
警告は表示されなくなりました。(404行目を追加しています)

 401 function str2mem($val) {
 402         $val = trim($val);
 403         $last = strtolower(substr($val, -1));
 404         $val = intval($val);
 405         switch ($last) {
 406                 case 'g':
 407                         $val *= 1024;
 408                         /* falls through */
 409                 case 'm':
 410                         $val *= 1024;
 411                         /* falls through */
 412                 case 'k':
 413                         $val *= 1024;
 414         }
 415
 416         return $val;
 417 }

PHPExcelの使い方メモ

PHPでExcelを生成できる『PHPExcel』の使い方メモ
※実際に私が使ったものをメモしているだけなので、機能を網羅している訳ではないです。かしこ。

インストールはcomposerを使うか、圧縮ファイルをダウンロードしてきて
適当なディレクトリに解凍します。
あとは以下をrequireするだけ。
/格納したパス/PHPExcel/Classes/PHPExcel.php
/格納したパス/PHPExcel/Classes/PHPExcel/IOFactory.php

実際のソースコードは以下の通り

/**
 * PHPExcelの新規オブジェクト作成
 */
$excel = new PHPExcel();

/**
 * シートを作成してシート名を変える
 */
$sheetIndex = 0; // シート番号は0から
$excel->setActiveSheetIndex($sheetIndex);
$sheet = $excel->getActiveSheet();
$sheet->setTitle('SampleSheet01');

/**
 * セルにデータを入力する
 */
// 基本的な入力
$rowCnt = 1; // 行番号は1から
$clmCnt = 0; // 列番号は0から
$text = 'セルに書き込む内容だよ';
$sheet->setCellValueByColumnAndRow($clmCnt, $rowCnt, $val);

// 文字列型で入力
$rowCnt++; // 1行下に移動
$clmCnt++; // 1列右に移動
$text = '000001'; // 文字列型にしないと、左記は「00001」ではなく「1」になってしまう
$sheet->setCellValueExplicitByColumnAndRow($clmCnt, $rowCnt, $val, PHPExcel_Cell_DataType::TYPE_STRING);

/**
 * セルの書式設定
 */
// シートのデフォルトフォントを設定する
$sheet->getDefaultStyle()->getFont()->setName('MS Pゴシック')->setSize(11);

// 背景色を設定
$bgcolor = '000000'; // 16進数で指定
$sheet->getStyleByColumnAndRow($clmCnt, $rowCnt)->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
$sheet->getStyleByColumnAndRow($clmCnt, $rowCnt)->getFill()->getStartColor()->setRGB($bgcolor);

// 文字色を設定
$fontcolor = 'FFFFFF'; // 16進数で指定
$sheet->getStyleByColumnAndRow($clmCnt, $rowCnt)->getFont()->getColor()->setARGB($fontcolor);

// 太字にする
$sheet->getStyleByColumnAndRow($clmCnt, $rowCnt)->getFont()->setBold(true);

// セル(行列番号指定)の上だけに罫線(二重線)を引く
$sheet->getStyleByColumnAndRow($clmCnt, $rowCnt)->getBorders()->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_DOUBLE);
// セル(レンジ指定)の周り全てに罫線(単一線)を引く
$sheet->getStyle('A1:B3')->getBorders()->getAllBorders()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);


// 列の幅を指定する
$sheet->getColumnDimension('A')->setWidth(14.5);
// 列の幅を自動調整する(※これで効くはずなんですが、効かない事が多々ある)
$sheet->getColumnDimension( PHPExcel_Cell::stringFromColumnIndex($clmCnt))->setAutoSize(true);

以上

brewインストールでphp-mcryptがインストールできない

■環境
OS X El Capitan(10.11.6)
Homebrew 0.9.9

brewインストールでphp-mcryptをインストールした際にエラーが出たので
エラー内容と、その対応をメモしておきます。

まず、エラー内容について
# brew install homebrew/php/php70-mcrypt
〜中略〜
/usr/local/opt/php70/bin/phpize: line 61: /usr/local/Library/Homebrew/shims/super/sed: No such file or directory
/usr/local/opt/php70/bin/phpize: line 62: /usr/local/Library/Homebrew/shims/super/sed: No such file or directory
/usr/local/opt/php70/bin/phpize: line 63: /usr/local/Library/Homebrew/shims/super/sed: No such file or directory
Configuring for:
PHP Api Version:
Zend Module Api No:
Zend Extension Api No:
/usr/local/opt/php70/bin/phpize: line 155: /usr/local/Library/Homebrew/shims/super/sed: No such file or directory
autoheader: error: AC_CONFIG_HEADERS not found in configure.in
〜中略〜

つまり、phpizeで利用している『/usr/local/Library/Homebrew/shims/super/sed』が無いそうです。
色々調べた結果、私の環境ではそもそもHomebrewのパスが
『/usr/local/Library/Homebrew』
ではなく
『/usr/local/Homebrew/Library/Homebrew』
となっていました。(なんだこの階層)

対応としては、phpize内にて$SEDという変数に上記パスを指定していたので、
自分の環境に合わせてパスを書き換えました。
SED="/usr/local/Homebrew/Library/Homebrew/shims/super/sed"

【PHP】Eclipseでカーソルがある変数のハイライトを変更する

たまにカーソルがある変数の色がおかしくなる事があります。
その際は以下の設定を変更すれば治ります。

■環境
Mac (OS X El Capitan 10.11.3)
Eclipse Luna Service Release 2 (4.4.2)

【メニューの場所】
環境設定 → General → Editors → TextEditors → Annotations

【設定箇所】
PHP elements ‘ write’ occurences:カーソルがある変数が書き込まれている箇所のハイライト色
PHP elements ‘ read’ occurences:カーソルがある変数が読まれている箇所のハイライト色

PHPについて記載しましたが、おそらく他の言語でも大体同じだと思います。

※上記変更をしても、既に開いているソースコードの色は変わら無いようです。
 変更した色を確認する場合は、設定変更後にソースファイルを開き直してください。

mysql系の関数がPHP7でエラーになる場合の対応

PHP5.XからPHP7にアップデートした際にmysql系の関数がエラーになっていたので、
その際に行なった対応をメモしておきます。

  1. 関数名を「mysql_xxxx()」から「mysqli_xxxx()」に変更する。
  2. 関数の引数が「第1引数:設定値」「第2引数:mysqlオブジェクト」である場合は
    順番を逆にする。(第1引数がmysqlオブジェクトとなるようにする)
    ※ここで言うmysqlオブジェクトとは、「mysqli_connect」の返却値の事です。
  3. mysqli_error()には、引数にmysqlオブジェクトを設定します。
    これ以外にも「mysql_xxxxx()」では引数不要であったものは「mysqli_xxxxx()」では引数に
    mysqlオブジェクトが必要になっているかもしれません。

【FuelPHP】PHP7対応版へのアップデート

FuelPHPのdev-1.7がPHP7に対応していなかったので、
既存プロジェクトをPHP7に対応しているdev-1.8にアップデートします。
※dev-1.8が正式にmasterとして公開されていない現時点の手順です。
 もし正式にPHP7対応版が出たらこの手順は不要です。

■環境
CentOS Linux release 7.2.1511 (Core)
FuelPHP dev-1.7/master

FuelPHPのプロジェクトディレクトリで以下コマンドを実施してcomposer.jsonを書き換えます。

sed -ie “s/dev-1.7\/master/dev-1.8\/develop/g” composer.json

以下コマンドでFuelPHPのアップデートをします。

php composer.pher update

以上でPHP7対応版にアップデートされます。