PHPWeekly 191114 簡単サマリー



PHPWeeklyの内容を簡単に翻訳し、興味のある内容に対してコメントを残します。

知っている知識の中で、ブログを書こうと思っていますが、間違ってる内容が含まれている可能性もあります。

間違っているところに対する指摘はいつも歓迎ですが、`非難・悪口`は求めていません。

## 記事

### [GitHubから選ばれたランキング10位までのプログラミング言語](https://www.businessinsider.sg/most-popular-programming-languages-github-2019-11/)

上の記事でPHPに対して`プログラマーに最悪なプログラミング言語といわれている`と説明しています。

PHPを使用している1人として心が痛くなる評価だし、ほかの言語も使ったことがある僕からしたらPHPがそんなに最悪なのか疑問は持ています。

PHPに対しての討論は山ほどありますが、僕はまだそこまでのレベルではありませんので、リンクをいくつか共有します。

> 韓国語のブログです。クロームの翻訳機能を使えば、韓国人のプログラマーたちの意見を知ることができると思います。意外とおもしろいです。

1. 박종희様: [今になって話せるPHPで開発しなきゃいけない理由](https://www.tokyobranch.net/archives/6693)

2. perillamint様: [[ko] 今になって話すPHPで開発しちゃダメな理由](https://blog.quendi.moe/2017/02/17/%EC%9D%B4%EC%A0%9C-%EC%99%80%EC%84%9C-php%EB%A1%9C-%EA%B0%9C%EB%B0%9C%ED%95%98%EC%A7%80-%EB%A7%90%EC%95%84%EC%95%BC-%ED%95%A0-%EC%9D%B4%EC%9C%A0/)

3. jujumilk4様: [多くの人々はなぜPHP環境に囲まれているのにPHPを嫌悪しますか?](https://okky.kr/article/479323)

4. 안형우様: [[翻訳版] 誰も話してないPHPのいいところ](https://mytory.net/2018/10/13/good-thing-in-php-nobody-talks-about.html)


|順位|言語|
|:---:|:---|
|10位|Ruby|
|9位|C|
|8位|Shell|
|7位|TypeScript|
|6位|C++|
|5位|C#|
|4位|PHP|
|3位|Java|
|2位|Python|
|1位|JavaScript|


### [Node.jsからPHPに戻るのはどう?](https://dev.to/adnanbabakan/how-is-it-like-to-be-back-from-node-js-to-php-3nk1)

`Adnan Babakan`はPHPとNode.jsを使っているプログラマーに見えます。


PHPとNode.jsの好き嫌いな理由を簡単に作成し、PhpStorm IDEを使ったらLaravelフレームワークが簡単に使えたのが印象的だったと話しています。

PHPの設定・作成が簡単なのは僕も同意しますが、PHPが嫌いな理由に対しては`なんでまたこんな話を出しているか？`と疑問を持っています。

またNode.jsの短所に対して[コールバック地獄](http://callbackhell.com/)と言いましたが、そこに対しては僕も割と感じました。

`Promise`、`async/await`の登場である程度コールバック地獄が解決されましたが、そうとしても非同期Requestは使いにくいです。（これは完全に個人の実力の問題ですが...）

このブログを読んで一言すると、`だから何が言いたいの？`でした。

（そう思えば、このブログもどうでもいい話をずーっと書いているんですね）

単純に`PHPを使って面白かった！`との内容なのに大きなPHPに対する討論問題を投げちゃいました。

### [専門家から一言: WP-VCD マールウェアーでワードプレスが攻撃されている](https://www.informationsecuritybuzz.com/expert-comments/experts-comments-on-wordpress-sites-hit-by-malware-wp-vcd/)

タイトルで内容は想像できますね。パスします。

参考: [WP-VCDマールウェアーって何？](https://www.getastra.com/blog/911/how-to-fix-wp-vcd-backdoor-hack-in-wordpress-functions-php/#What-is-WordPress-wp-vcd-Malware)

### [Laravelリリースプロセスはどうやって動作しているか？](https://laravel-news.com/laravel-releases)

以前のLaravelは5.4、5.5みたいにVersioningされましたが、6からは[Sementic Versioning(Semver)](https://semver.org/)方式を使います。

`Semver`により`MAJOR.MINOR.PATCH`の形式を持っているVersioningをします。
`Semver`を使うことによりMINORバージョンの変わりで新しい機能が追加されたことがはっきりわかるようになりました。

## チュートリアルおよびスキール

内容を全部説明するには時間が足りません。

簡単な内容とコメントを残します。

もし原作者の許可が得られたら、翻訳する可能性もあります。

### [Ubuntu 19.10にLAMP環境を作る方法](https://www.techrepublic.com/article/how-to-install-a-lamp-server-on-ubuntu-server-19-10/)

読む価値のあるブログと思っていますが、急いで必要な内容ではないのでアーカイブだけしておきます。

### [PHP REPL: PHPを学ぶためのInteractive編集エディター(ホットリロード)](https://dev.to/datmt/php-repl-interactive-editing-tool-for-learning-php-hot-reload-f67)

簡単にPHPをテストしたいときに使用可能

### [一日でPHPUnit4からPHPUnit8にアップグレードする方法](https://www.tomasvotruba.cz/blog/2019/11/04/still-on-phpunit-4-come-to-phpunit-8-together-in-a-day/)

開発だけを考えると1人で環境設定からやっている、慣れてない、ランニングカーブが高い...などの理由でUnitTestをしてない自分に対して反省が必要と思っています。

プロジェクトは少しずつユニットテストを導入したうえ、また読んでみようと思っています。


### [あなたのコードのバグを予防し、探し、直す7個のTip](https://laravel-news.com/7-tips-to-prevent-bugs)

内容は次のようです。

1. 理解しやすい名前を付ける

2. PSR-2のようなスタンダードを使う

3. テンポラリー変数はできれば使用しない

4. `マジックナンバー`はできれば使用しない

5. Divide and conquer

6. Default to simple solutions.(SOLIDを守ろう)

7. テスト自動化

6番項目を読みながら、俺はSOLIDを守ってたか？ちゃんと知ってたのかな？と思いました。
また、逆にコードを理解するのにもっと時間がかかるんじゃないかとも思いました。

やっぱり勉強不足ですよね。

7番項目のテスト自動化に対しては`口があっても話せない`状態です。

もっと頑張ります。

### [Prefixingを超えて: PHP名前空間に対するワードプレス開発者案内書](https://wptavern.com/beyond-prefixing-a-wordpress-developers-guide-to-php-namespaces)

ワードプレスはコードを識別するため、すべてのところにPrefixをつけてきましたが、それはPHPのスタンダートに合わない方法です。

名前空間を使うことでコードを直感的に変えられます。

PHPerなら読んでみたほうがいいブログです。

### [関係問題](https://stitcher.io/blog/laravel-custom-relation-classes)

ORMを使用したら複雑な関係構造の問題・遅延ローディングによる`n+1`問題が発生します。

Laravelで`Pivotテーブル`、`Resources`、`Relations`、`Eager Loading`を利用し、パフォーマンスを改善する例が書いてあります。

データベースに対する知識が浅い僕には理解するのにかなり時間がかかりましたし、理解するのに相当のメモが必要でした。

(絵をかきながら理解するタイプなので、複雑なのを理解する時にはノートのメモが必要です。)

実はこのブログを作成している今にも半分くらいしか理解していません。

Laravelを使用する新しい方法がわかりましたので、すごくうれしいです。
 
まだ適用するところはないですが、次回もっと大きいシステムを作ろ時にこのブログを参考しようと思っています。

### [セキュリティーコーナー: Twist and Shout](https://www.phparch.com/2019/11/security-corner-twist-and-shout/)

ブログを開いた瞬間、`これは理解できないじゃん！`という印象で、やっぱりそうでした。

セキュリティーに対するいろんな内容が書いてありますが、理解できたのはたった１つです。

`mt_rand()`はレガシーアプリの保守目的以外には私用しちゃだめで、`random_bytes()`と`random_int()`は現在安全で、利用していいということでした。

## おもしろいプロジェクト、ツール、ライブラリー

PHPWeeklyへ紹介されたプロジェクトリストです。

おもしろいと思ったら参加してもよいかと思います。

`phpspreadsheet`、`php-defer`、`k-box`、`lighthouse`は結構おもしろそうですね。

1. [phpspreadsheet](https://github.com/PHPOffice/PhpSpreadsheet): PHPでスプレッドシート管理

2. [php-defer](https://github.com/php-defer/php-defer): Go言語で遅延実行のために使われる`defer`をPHP化

3. [twigview](https://github.com/WyriHaximus/TwigView): Twigテンプレート

4. [k-box](https://github.com/k-box/k-box): ウェブ基盤ドキュメント/写真/映像/地理情報を管理するアプリ

5. [symfony-blog](https://github.com/pifaace/symfony-blog): Symfonyで作られたブログツール、サンドボックス形式

6. [lifterlms](https://github.com/gocodebox/lifterlms): ワードプレス学習管理システム(LMS)

7. [postfixadmin](https://github.com/postfixadmin/postfixadmin): メールサーバーを基盤にしたドメイン/メールボックス/別称管理

8. [portable-ascii](https://github.com/voku/portable-ascii): ASCII変換ライブラリー

9. [contao](https://github.com/contao/contao): オープンソースCMS

10. [lighthouse](https://github.com/nuwave/lighthouse): LaravelでGraphQLエンドポイントを作成するためのライブラリー

11. [bagisto](https://github.com/bagisto/bagisto): E-Commerceフレームワーク

12. [leaf](https://github.com/leafsphp/leaf): マイクロフレームワーク

13. [sulu](https://github.com/sulu/sulu): Symfonyフレームワークを使用して作られたCMS