vagrant up実行で,SYSTEM_SERVICE_EXCEPTIONでブルースクリーンになる時

Vagrantを使用しているときvagrant upコマンドを実行するとにWindowsがSYSTEM_SERVICE_EXCEPTIONブルースクリーンになる場合があります。このときの可能性の一つとして、Hyper-Vとの設定が競合している(Hyper-Vが有効化されている)可能性があります。

Hyper-V機能の無効化方法


Hyper-V機能は、以下の手順で無効化できます。

  • コントロールパネルから、”プログラムと機能”を選択します。
  • メニューの”Hyper-V”にチェックが入っていたら、チェックを外します。
  • PCを再起動します。
  • Hyper-V機能が問題だった場合、再度vagrant upコマンドを実行すれば、正しく起動してくれます。

次回起動時にVagrant corrupted index… エラーが出る時の対処


ブルースクリーンで異常終了した場合、次回vagrant upした時に下記のエラーが出る場合があります。

The machine index which stores all required information about
running Vagrant environments has become corrupt. This is usually
caused by external tampering of the Vagrant data folder.

Vagrant cannot manage any Vagrant environments if the index is
corrupt. Please attempt to manually correct it. If you are unable
to manually correct it, then remove the data file at the path below.
This will leave all existing Vagrant environments "orphaned" and
they'll have to be destroyed manually.

Path: C:/Users/xxx/.vagrant.d/data/machine-index/index

これは、前回起動に失敗したときに、ロックファイルが残っているためです。

PCの再起動直後など、vagrantが起動していないことが明らかな場合は、指定されたフォルダ(C:/Users/xxx/.vagrant.d/data/machine-index/index)の下にある、indexとindex.lockファイルを削除してから、再度vagrant upすればOKです。

[cmder]右クリックメニューに”Cmder Here”を追加する方法

Windowで使用できる便利なコマンドラインツールであるcmderがあります。
cmd.exeだとShift+右クリックで、”コマンドラインをここで開く”メニューが出るのですが、Cmderで同様に右クリックメニューにCmder Hereを追加する方法を説明します。

Cmderで右クリックメニューに”Cmder Here”を追加する


コマンドラインを、管理者モードで起動します。

cmder.exeがあるフォルダに移動します。

下記のコマンドで登録します。

.\cmder.exe /REGISTER ALL

コマンドを実行しても、以下のように何も出力されませんが…


右クリックメニューには、たしかにCmder Hereが追加されています。


元に戻したい場合は、下記のコマンドで削除可能です。

.\cmder.exe /UNREGISTER ALL

[PHP]Laravelからtwitter bootstrapを使う方法

PHPからbootstrapを使用する場合、bootstrapのサイトからcss/jsをダウンロードしなくても、composer経由でダウンロードすることが可能です。
bootstrapはベンダー名がtwbsで管理されているので、具体的には以下のコマンドでダウンロード可能です。

composer require twbs/bootstrap

この場合、ダウンロードされたファイルはvendorの下に入るので、DocumentRootから見えない場所に設置されてしまいます。Laravelフレームワークを使用している場合、artisan asset:publishコマンドを使用することで、Webサーバから見える場所に設置することが可能です。

php artisan asset:publish --path="vendor/twitter/bootstrap/bootstrap/css" bootstrap/css
php artisan asset:publish --path="vendor/twitter/bootstrap/bootstrap/js" bootstrap/js

[PHP7.1]タイプヒンティングで関数の戻り値にvoidを指定したときのふるまい

PHP7.1では、タイプヒンティングで関数の戻り値で値を返さないことを明示するために、voidの指定が可能です。
voidを指定したときに、正しく実行できるコード、エラーが出るコードを確認してみました。

下記はOKパターンです。

<?php

// OK: return文に戻り値を指定しないコードは正しく実行できる
function foo_ok2() : void
{
    return;
}


// OK: return文自体を書かなくてもよい
function foo_ok1() : void
{
    // do nothing.
}

一方、下記コードはNGです。

// NG: "void"のタイプヒンティングでは、空文字列を返せない
function foo_ng($option) : void
{
    return "";
}

// NG: "void"のタイプヒンティングでは、nullを返せない
function foo_ng2($option) : void
{
    return null;
}

NGパターンのコードを書いた場合、実行時に下記のエラーが出力されます。

PHP Fatal error:  
 A void function must not return a value

PHP Fatal error: 
 A void function must not return a value 
 (did you mean "return;" instead of "return null;"?)