PHPer が思考を止めないために


言うまでもなくエンジニアにとって「考える」のは重要なことです。
ですが深く考えずにコードを書くことはよくあると思います。
コピペ、設計、インデント、等々。
それらは本当に正しいのでしょうか?思考停止してしまってはいないでしょうか?

時間は有限です。考えることが大事だからと言って意味のないことにまで考える時間を費やしていてはいくら時間があっても足りません。
本題に入る前にエンジニアが何に時間を費やすべきか少しばかり考えてみましょう。
例えばなぜインデントを揃えるのでしょうか?
エンジニアがそこで手を止めなくていいようにするためです。
読みにくいコードを頭の中で整理する時間はプログラミングにとって本質的ではない無駄な時間です。
そんなことに時間を使うよりは少しでも本質的なコードの設計を考える時間に費やした方がいいでしょう。


それでは本題です。
今回は PHP 特有の and/or という 論理演算子 について考えてみようと思います。
&&/|| の代わりに使える演算子です。もちろん普通に &&/|| も使えます。

数ある言語の中で and/or という演算子があるのは PHP だけです。
少なくとも主要言語である C, C++, C#, Java にはありません。
もしかしたら他の言語にはあるかもしれませんが少数派ではあるでしょう。
先に “普通に” と書いたのはそういう理由です。

それでは PHPer はどちらの演算子を使うべきでしょうか?
PHP フレームワークのコード規約やテンプレートエンジンを参考にしようと思いましたがあまり定義されていないようです。
FuelPHP: and/or
CodeIgniter: &&/or
PSR-2, Laravel, CakePHP, Symfony, WordPress, Smarty, Blade: 未定義

私は CodeIgniter と FuelPHP を使うことが多かったので and/or を使うのかーと思った記憶があります。
実際のコードは他言語との兼ね合いから &&/|| を使って書いていましたが。
Smarty では非エンジニアの方も触ることがあるので and/or が使われていることが多い印象です。


ところでこの2種類の演算子、本当に同じものなのでしょうか?
論理演算子のページにはこう書いてあります。

“and” および “or” 演算子が 2 種類あるのは、演算が行われる際の優先順位が 異なっているためです (演算子の優先順位 を参照ください)。

つまりどちらを選ぶかによってコードの実行順序が変わってきます。
具体的には $a = false || true; だと $a は true ですが $a = false or true; だと false になります。

PS C:\> php -r '$a = false || true; var_dump($a);'
bool(true)
PS C:\> php -r '$a = false or true; var_dump($a);'
bool(false)

このような代入、書くことありますよね。
今まで書いたコードでは正しく書けているでしょうか?
もしかしたら &&/|| 演算子を使っている方は自信を持って答えられるかもしれません。
では and/or を使っている方はどうでしょう?優先順位、意識していましたか?
少なくとも私は優先順位が違うことはこの記事を書くまで知りませんでした。


それではあなたのコードではどちらを選ぶべきでしょうか?
優先順位を考えると &&/|| の方がいいのでは?と思った方がいるかもしれません。
ですがテンプレートエンジンとして書くなら優先順位が求められるようなコードを書くことはないでしょうし and/or の方が非エンジニアの方にも分かりやすくていいかもしれません。
他言語を使っていた経験の多い方がチームでロジックコードを書いているなら &&/|| の方が手を止めずに済むかもしれません。
結局はケースバイケースでしかないのです。
思考を止めずにメリット/デメリットを比較して自分のコードに適切な方を選びましょう。


カテゴリー: 雑記 | タグ: | コメントする

Azure Function App で実行する PHP バージョンを指定する

Azure Function App で実行する PHP バージョンを指定するには通常は [アプリケーション設定] から [PHP のバージョン] を選ぶだけです。
しかし最新版を使いたいなど特定バージョンの php.exe を指定したい場合があると思います。

php.exe ダウンロード

https://windows.php.net/download
から使いたい php.exe をダウンロード。( VC15 x64 Thread Safe など)
zip のままで OK 。

Function App に適用

[プラットフォーム機能] から [高度なツール(Kudu)] を開く。
[Debug console] から [PowerShell] を選択。
D:\home\site\tools へ移動。
ダウンロードしておいた zip を [Drag here to upload and unzip] と書いてあるところへドラッグ&ドロップ。( Size のところらへん)

php.ini の設定

php.ini.production をコピーして php.ini を作成。

今回は CURL と OpenSSL が必要だったので以下を設定。

[PHP]
extension=curl
extension=openssl
 
[curl]
curl.cainfo="D:\Program Files\Git\etc\pki\ca-trust\extracted\openssl\ca-bundle.trust.crt"

以上で適用されます。

元に戻す

D:\home\site\tools 以下のファイルを削除すれば元の状態に戻ります。

確認

<?php
echo phpversion().PHP_EOL;

で実行。ログに出力されます。

参考

ちなみに今回はプラットフォーム側の php.exe パスが見つけられず 500 Internal Server Error が出ていたので以下を参考に対応しました。
using PHP functions no longer run #3134
Using a custom version of Python


カテゴリー: Windows Azure | タグ: , | コメントする

Laravel の php artisan serve で実行したサーバーのログファイル

php artisan serve で実行したサーバーのログは storage/logs ディレクトリに保存されています。

標準出力したければ以下を試すといいかもしれません。
Laravelのログを標準エラーに出力する


カテゴリー: Laravel | タグ: | コメントする

Windows 10 で仮想環境を使わずに Laravel 5.6 を動かす

Windows 10 で仮想環境を使わずに Laravel 5.6 を動かす手順。
他のバージョンでも大体同じかと思います。

PHP インストール

https://windows.php.net/download
VC15 x64 Thread Safe の zip をダウンロードして解凍。
解凍されたフォルダーを php にリネームして C:\ 直下へ移動。
php.ini-development をコピーして php.ini 作成。
C:\php へ path を通す。 Windows 10 でのやり方はこちら
PowerShell を開いてバージョンを確認。※既に開いている場合は再起動してください

PS C:\Users\SnowCait> php -v
PHP 7.2.6 (cli) (built: May 23 2018 20:29:41) ( ZTS MSVC15 (Visual C++ 2017) x64 )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies

Composer インストール

https://getcomposer.org/download/
Composer-Setup.exe をダウンロードして実行。
PowerShell を開いてバージョンを確認。※既に開いている場合は再起動してください

PS C:\Users\SnowCait> composer --version
Composer version 1.6.5 2018-05-04 11:44:59

Laravel インストーラーのインストール

https://laravel.com/docs/5.6/installation
PowerShell で composer global require "laravel/installer" を実行。

PS C:\Users\SnowCait> composer global require "laravel/installer"
Changed current directory to C:/Users/SnowCait/AppData/Roaming/Composer
Using version ^2.0 for laravel/installer
./composer.json has been created
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 10 installs, 0 updates, 0 removals
  - Installing symfony/process (v4.1.0): Downloading (100%)
  - Installing symfony/polyfill-ctype (v1.8.0): Downloading (100%)
  - Installing symfony/filesystem (v4.1.0): Downloading (100%)
  - Installing symfony/polyfill-mbstring (v1.8.0): Downloading (100%)
  - Installing symfony/console (v4.1.0): Downloading (100%)
  - Installing guzzlehttp/promises (v1.3.1): Downloading (100%)
  - Installing psr/http-message (1.0.1): Downloading (100%)
  - Installing guzzlehttp/psr7 (1.4.2): Downloading (100%)
  - Installing guzzlehttp/guzzle (6.3.3): Downloading (100%)
  - Installing laravel/installer (v2.0.1): Downloading (100%)
symfony/console suggests installing symfony/event-dispatcher ()
symfony/console suggests installing symfony/lock ()
symfony/console suggests installing psr/log-implementation (For using the console logger)
guzzlehttp/guzzle suggests installing psr/log (Required for using the Log middleware)
Writing lock file
Generating autoload files

バージョンを確認。

PS C:\Users\SnowCait> laravel --version
Laravel Installer 2.0.1

Laravel プロジェクトの作成

適当なフォルダーに移動して laravel new コマンドでプロジェクトを作成。
laravel new blog を実行すると blog フォルダーが作成されます。

PS C:\Users\SnowCait> mkdir Projects
PS C:\Users\SnowCait> cd .\Projects\
PS C:\Users\SnowCait\Projects> laravel new blog
Crafting application...
Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Package operations: 70 installs, 0 updates, 0 removals
  - Installing doctrine/inflector (v1.3.0): Downloading (100%)
(長いので省略)

プロジェクトフォルダーに移動してバージョンを確認。

PS C:\Users\SnowCait\Projects> cd .\blog\
PS C:\Users\SnowCait\Projects\blog> php artisan --version
Laravel Framework 5.6.25

php artisan serve コマンドでサーバーを立ち上げ。
http://127.0.0.1:8000 にアクセス。

PS C:\Users\SnowCait\Projects\blog> php artisan serve
Laravel development server started: <http://127.0.0.1:8000>

以上で Laravel を動かすことができました。

参考

WindowsにComposerをインストールする


カテゴリー: Laravel | タグ: | コメントする

Blazor事始め

Get started with Blazor
こちらに従って進めていきます。

Blazorとは

Web で SPA (Single Page Application) を作成するフレームワークで、
JavaScript の代わりに WebAssembly を使っているので .NET (C#など) を使って開発ができます。

インストール

上記リンク先からダウンロードしてインストール。
Visual Studio 2017 15.7 Preview 5
.NET Core SDK 2.1.300-preview2
Blazor Language Services extension

プロジェクト作成

1. File > New Project > Web > ASP.NET Core Web Application
2. .NET Core / ASP.NET Core 2.0 (or later) になっていることを確認
3. OK を押す

実行

Ctrl + F5 で実行。
デバッグありでの実行 (F5) はまだサポートされていないようです。

参考

aspnet/Blazor – GitHub
Blazor 0.3.0 experimental release now available


カテゴリー: C# | タグ: , , | コメントする