YYPHP#57「PHPでマルチスレッドについて聞きたい、php-srcのコミットを日々追っている人を見つけた、オブジェクト指向について話ができたら、Dockerを使ってLaravelプロジェクトを本番デプロイするやり方、他の言語とPHPはどのように違うか、Ubuntu･CentOS･ArchiLinux、アセンブリとOS開発」

これは2018年10月19日に開催したPHPerイベント[YYPHP#57]のイベントレポートです。

[YYPHP]は一言で「PHPerの部室」です。PHPについて、雑に、ゆるく、ワイワイ話し合う集いです。毎回お題を決めずに雑談を出発点にいろいろなことを突発的にやります。集まった人でコードリーディングをすることもあれば、一緒に開発ツールを触ってみたり、フレームワークについての情報交換をすることもあります。開催はほぼ**毎週**、高田馬場にて。

[YYPHP#57]: https://yyphp.connpass.com/event/103259/
[YYPHP]: https://yyphp.connpass.com/
YouTubeでの配信映像はこちら-> [#YYPHP #57【PHPの情報交換・ワイワイ話そう・仲間作り・ゆるめ・にぎやかめ】](https://youtu.be/A6fZV78pc_4)

![](https://qiita-image-store.s3.amazonaws.com/0/889/0051f99f-b555-6064-fcc9-3280e5543a1a.png)

# 参加者9名(うちリモート3名)

* PHP歴
    * 1年未満: 2名
    * 1年: 1名
    * 3年: 1名
    * 4年: 1名
    * 10年以上: 4名

## 今日の話題

### 雑談

* Dart言語はTypeScriptに覇権を奪われた感があったが、Flutterで再注目されてきている。
    * 対抗がReact Native

### PHPでマルチスレッドについて聞きたい

* [PHP: pthreads - Manual](http://php.net/manual/ja/book.pthreads.php)
* 速いんですよね？
    * からなずしもそんなことないですよ
    * CPUのコア数に依存する
    * CPUコア1個だと意味がない
* Go言語のgoroutine
    * マルチスレッドを書きやすい
    * goroutineとchannelがあるから並列処理が書きやすい
    * ミドルウェアが作りやすい
* Ruby
    * スレッドがない
    * GIL (giant interpreter lock)
        * これがあるため複数スレッドを建てられるけど、結局一個一個しか処理されない
* pthreads
    * Posix スレッドを使っている
    * Apacheと組み合わせたらどう動くかはわからない
* Redisを立ててキューに積んだほうがいいかも
    * Laravelのキューなどを使ったほうがよっぽど楽
        * https://readouble.com/laravel/5.5/ja/queues.html
    * [Queues - Laravel - The PHP Framework For Web Artisans](https://laravel.com/docs/5.7/queues)
* 並列処理をしたい、というより他の処理を先に進めたいならasync/awaitを使いますね。他の言語なら
    * JavaScript
* PHPのライブラリで非同期処理
    * ReactPHP
        * https://reactphp.org/

### php-srcのコミットを日々追っている人を見つけた

* https://qiita.com/sj-i
* php-master-changesというタイトルで毎日投稿されている

### オブジェクト指向について話ができたら

* オブジェクト指向の説明に対するストレス
    * まず三大要素の説明になるところ
        * 一番最初に継承でHumanとMonkeyがAnimalクラスを継承をするとか……
    * オブジェクト指向の利便性、なぜオブジェクト指向を使うのかの利点に至るまで遠回りしてきたなと感じた。
* オブジェクト指向は抽象化の技法
* 現実世界を投影してモデルを作るといいながら、抽象化している。
    * AnimalクラスからDogクラスを作っているのに、犬のベロの情報がなくなっているじゃないか
* ミスリード記事が多い
* オブジェクト指向は技術と概念どちらもあるが、わかりやすくしようとして技術と概念ごちゃごちゃに説明した結果、そういう記事ができてしまうのでは
* オブジェクト指向が上達しない理由
    * MVCのフレームワークがあって、それに則った作りをする
    * 何も考えてないと、そういう機会しかクラスを作ることがない
    * 結果、オブジェクト指向がずっとわからないままというパターンが多いのでは
    * 手続き型で済んでしまうパターン
* 必要性にかられないとオブジェクト指向は学べない
* どうしたらオブジェクト指向ってわかるようになるか？
    * わかるとは
        * フレームワークに依存しない開発ができる
        * ちゃんと保守性もありダイジョブなコードが書ける
    * フレームワークを使わない
* オブジェクト指向は理論と修行
    * 理論を学び、実践する
    * 理論: 書籍を読んで学ぶ
    * [エンタープライズアプリケーションアーキテクチャパターン | マーチン・ファウラー, 株式会社テクノロジックアート, 長瀬嘉秀 | プログラミング | Kindleストア | Amazon](https://amzn.to/2O1ysXY)
    * [Clean Code　アジャイルソフトウェア達人の技 (アスキードワンゴ) | Ｒｏｂｅｒｔ Ｃ．Ｍａｒｔｉｎ, 花井 志生 | 工学 | Kindleストア | Amazon](https://amzn.to/2OIShsr)
    * [Clean Architecture　達人に学ぶソフトウェアの構造と設計 (アスキードワンゴ) | Ｒｏｂｅｒｔ Ｃ．Ｍａｒｔｉｎ, 角 征典, 高木 正弘 | 工学 | Kindleストア | Amazon](https://amzn.to/2NXb1Pz)
    * クリーンアーキテクチャ
    * 修行
        * 学んだことを中途半端に理解してても使ってみる
        * オブジェクト指向エキササイズをやってみる
            * [オブジェクト指向エクササイズのススメ](https://www.slideshare.net/yojik/ss-1033616)
        * 達人と一緒に実践してみる
        * 学ばないと、クラスを使った手続き型コードになってしまったりする
        * PSRなどプロトコルになっているものをお手本にする
            * WordPress、CakePHPなどはお手本にならない
    * デザインパターンにハマってしまうと良くない
        * 結果的にオブジェクト指向迷路にハマってしまう
        * だが、学びになるのでハマってみるのもアリ
        * 引き継ぐ人など、人の迷惑にならない程度で
        * [Amazon.co.jp: gof デザインパターン: 本](https://amzn.to/2OHil73)

### Dockerを使ってLaravelプロジェクトを本番デプロイするやり方をお聞きしたい (yamato)

（リモートなので長文失礼します。。）
本番環境にDockerでLarvelをデプロイしている方の運用方法をお聞きしたいです。
お聞きしたい理由
↓
↓
↓
LaravelをAWSのECSなどDockerで本番にデプロイする場合、コンテナは１つにまとめてデプロイしたほうが良いのでしょうか？
（１つのコンテナとは、nginx・php-fpm・supervisorをインストールし、Laravelプロジェクトも内包したコンテナ）

質問の理由は「コンテナは１つにしないとだめじゃない？」と指摘されたからです。

指摘の理由は、「通常の２コンテナ(nginx,php-fpm)の構成だとnginx,php-fpm両コンテナにそれぞれLaravelプロジェクトを内包する必要があり、両コンテナのファイルに差異が生まれると不具合の可能性があるから」
でした。

私個人としては、Dockerのbuild、push、AWSならタスク設定さえ間違えなければ問題ないと考えていますが。。。

経験者の方々のお話をお聞きしたいです。

---

* この構成なら1つでいい気がする(reoring)
* 分けたときのメリットと、設定を間違えたときのダメージを考えると、あまり分ける必要性はなさそう
* 分けたとしても、同時にデプロイしないと壊れる
* どうしてもわけるなら
    * nginxコンテナでphp-fpmコンテナのLaravelコードをマウントするとか
* Istio
    * マイクロサービスを作りやすくするミドルウェア
    * [Istio](https://istio.io/)

### 他の言語とPHPはどのように違うか

* 経験してきた言語
    * Java
    * C#
* 最近Ruby, PHPが良いと聞くようになった
* PHP
    * あまり詳細なプログラミングの知識がなくても書ける
        * ７系になって複雑になってきてはいる
        * Rubyよりは複雑でない
            * わりとストレートに書ける
            * Rubyは読めない、魔術が多い
    * 実行環境を作るのが簡単（構築でもレンタルでも）
* なんの言語を勉強したらいいか？
    * たいていどの言語でも実現できるので、好みの言語を選んでいいが、
    * むいているかどうかは別の問題
        * 機械学習をするのにPythonはやりやすいが、PHPはライブラリがないので大変とか
* CとC＃はどれぐらい違うのか
    * インドとインドネシアくらい違う
* C言語
    * A言語、B言語ときて順番でC言語となった、という説がある。
    * Unixを作るために作られた言語。
* Cを知っておけばなんでも分かるんじゃないかと
    * PHPもPythonもLinuxもC
* C言語から学び始めると、マスターする前に挫折してしまう可能性がある
    * 学びやすい言語をある程度習得してから学ぶと良さそう

### Ubuntu、CentOS、ArchiLinux

* 他とのディストリビューションとの違い
* どれがいいの？
    * CentOS = RedHat Enterprise Linux(RHEL)から商用パッケージを除外したもの
    * 呼び名は「コミュニティベースで開発されたエンタープライズクラスのオペレーティングシステム (Community ENTerprise Operating System) 」に由来する。
        * RedHatは問い合わせできる先があるので、そういうのがほしい会社は使っている
        * 保守的でカーネルのバージョンが古め
        * Fedra
            * RHELのベータ版
            * なので先進的だが、バギーなことも
            * Fedra→RHEL→CentOSのように半年か1年のペースでアップデートが降りてくる
        * Amazon LinuxはRedHat系だが、カーネルが新しいし
    * Ubuntu (Debian系)
        * 先進的な機能を積極的に取り入れている。
        * カーネルのバージョンが新しめ
        * Ubuntuはデスクトップ向けに出てきた
            * GUIを重視
            * 要求するスペック
            * Ubuntuが流行ったからサーバ用も出てきてUbuntu Severになった
            * Ubuntuはユーザが多く情報も多い
        * Debianは保守的
            * リリースサイクルが遅い
            * 安定したパッケージだけ
            * GUIを重視しない
* yumとaptの違い
    * あんまり違わない
* カーネルのバージョン
    * マイナーはポコポコ変わる
        * Androidのせい
    * メジャー

### アセンブリとOS開発 (reoring)

* HELLOを出す
* [www.cs.bham.ac.uk/~exr/lectures/opsys/10_11/lectures/os-dev.pdf](http://www.cs.bham.ac.uk/~exr/lectures/opsys/10_11/lectures/os-dev.pdf)
* プログラマの必読書
    * コンピュータの気持ちがわかるようになる
    * [os-dev.pdf](http://www.cs.bham.ac.uk/~exr/lectures/opsys/10_11/lectures/os-dev.pdf)
* [30日でできる! OS自作入門 | 川合 秀実 |本 | 通販 | Amazon](https://www.amazon.co.jp/30%E6%97%A5%E3%81%A7%E3%81%A7%E3%81%8D%E3%82%8B-OS%E8%87%AA%E4%BD%9C%E5%85%A5%E9%96%80-%E5%B7%9D%E5%90%88-%E7%A7%80%E5%AE%9F/dp/4839919844)

## YYPHPは毎週やってます

PHPについてワイワイ話したい方は、[YYPHPのイベント情報](https://yyphp.connpass.com/)をチェックしてみて下さい。

以上、YYPHPのレポートでした。次回もワイワイやっていきたいと思います！ では、また来週！