YYPHP#37「セッションの削除頻度、Kubernetes、プログラミングコンテスト、Rails vs Laravelをやってみて感じたこと、他」

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

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

[YYPHP#37]:  https://yyphp.connpass.com/event/86847/
[YYPHP]: https://yyphp.connpass.com/
YouTubeでの配信映像はこちら-> [YYPHP #37【PHPの情報交換・ワイワイ話そう・仲間作り・ゆるめ・にぎやかめ】 - YouTube](https://www.youtube.com/watch?v=HtxDFB0h8zU)

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

## 参加者 9名

* PHP歴の分布
    * 1年未満: 5名
    * 3年: 1名
    * 10年〜: 3名

# 話したいこと/聞きたいこと

## セッションの削除はどのくらいの頻度でやったほうがいいか？

* 頻繁に削除したほうがいいと参考書に書いてあった
* 頻度はあんまり考えたことない
    * デフォルト、1440秒 (24分)
    * デフォルトそのままでいいんじゃないか？
    * アプリの要件次第な気がする
* セッション何に使うのか？
    * HTTPはステートレス
    * サーバはブラウザが誰なのかは分からない
* COOKIE🍪
    * セッションを使うための技術がクッキー
* セッションハイジャック
* テレビ番組連動型のアプリ
    * URLにセッションIDが出ていてた(PHPSSID)
    * URLを掲示板に貼り付けられると、そのURLにアクセスした人が、貼り付けた人になってしまう不具合があった
    * `session_regenerate_id(true)` を頻繁にやるようにした
* httponlyとsecure
    * [Cookie の仕様とセキュリティ](http://www.yunabe.jp/docs/cookie_and_security.html#httponly)
    * httponly → JavaScriptからCookieが見れなくなる → 万が一XSSの脆弱性が有っても安心
    * secure → HTTPSでしかクッキーを送らない
* PCIDSSとかでセッションID再作成する要件があった気がする
    * PCIDSS → Payment Card Industry Data Security Standard
    * 金融機関が定めたセキュリティ認証規格
    * 毎年、監査があって、セキュリティが弱いと取れない
    * 厳しめの規格
    * 世界的なもの

## APIとXMLについて
* こうやって勉強したらいいよとか知りたい
* XML
    * APIで使うことが多い？？
    * XMLをデータベース代わりに使っているシステムがあった
    * [第1回 進化するフォーマット｜CSV、XML、JSON…データフォーマットの変遷について考える | GiXo Ltd.](https://www.gixo.jp/blog/3965/)
* API
    * JSONでデータのやりとりをするイメージだったが、
* SOAP、XML-RPC
    * XMLでやりとりする
* XMLは複雑だった
* XMLってどこで使われているの？
* SOAP WS Security
* XMLが共通規格
    * プロトコルが決まっている
    * RSS、ATOM
    * WebDav
* どうやって勉強したらいいか？
    * XMLそのものについて学ぶ
    * XMLのバリデーションについて学ぶ
        * DTDとか
        * [DTDで要素型宣言を定義する (1/3)：XMLテクニック集（3） - ＠IT](http://www.atmarkit.co.jp/ait/articles/0307/16/news001.html)
    * スキーマ
    * [PHP: SimpleXML - Manual](http://php.net/manual/ja/book.simplexml.php)
    * [PHP: DOM - Manual](http://php.net/manual/ja/book.dom.php)
* XSDとは
    * XML スキーマ定義言語 (XSD) では、XML ドキュメントの構造とデータ型を定義することができます。 XML スキーマでは、World Wide Web Consortium (W3C) XML Schema Part 1 に準拠する要素、属性、およびデータの種類を定義します。
    * 見つけた ── [goetas-webservices/xsd2php: Convert XSD into PHP classes and JMS serializer definitions](https://github.com/goetas-webservices/xsd2php)
* [Response::xml macro を作ったよ - localdisk](https://localdisk.hatenablog.com/entry/2014/01/27/Response::xml_macro_%E3%82%92%E4%BD%9C%E3%81%A3%E3%81%9F%E3%82%88)
* [Xml - 3.6](https://book.cakephp.org/3.0/ja/core-libraries/xml.html)


## Dockerでローカル環境を作りたいけど全くわからない

* Dockerさわりはじめ
    * ローカルにApache立てるは普通にできるが、
* [#マンガでわかるDocker 〜基本のキ〜 ダウンロード版 #技術書典 4 - - BOOTH（同人誌通販・ダウンロード）](https://llminatoll.booth.pm/items/825879)
    * なんとなくイメージが掴めた
    * 入門書としては分かりやすい
* コンテナは「仮想化」ではない
    * Macで使うときはLinuxの仮想マシンを入れないといけないから、「仮想化」が必要……
* apacheとmysqlを動かしたい
    * docker-composeというのを使うと起動できる
    * dockerはそれぞれバラバラにコンテナを立ち上げて、繋がないといけないが、docker-composeは1つの定義ファイルで複数コンテナを組合せて起動できる
    * [CakePHP3もくもく勉強会#2レポート「DockerでPHPの開発環境を構築しよう」 - Qiita](https://qiita.com/suin/items/6d70f9c960056533ebb2)
* メリット
    * 本番環境とほぼ同じ環境を作れる

## Kubernetes

* 本番サーバをどうやってDockerでどうやって作るか？
* オーケストレーションを簡単にする
* サーバN台あつめて、ひとつのLinuxのような見え方になるっぽい
* Kubernetesは宣言的な定義ができる
    * 「定義した状態を保つ」
* デメリット
    * 複雑になる
* GoogleはマネージドのKubernetesを提供している
    * 自分でAWSとかにKubernetesを構築しなくていい
    * [Google Kubernetes Engine  |  Google Cloud](https://cloud.google.com/kubernetes-engine/?hl=ja)
* docker-composeをkubernatesに変換するツールがある
    * [Kubernetes + Compose = Kompose](http://kompose.io/)
* サーバ1台だったら
    * docker-compose
* サーバが2,3台だったら
    * docker swarm
* 結構大規模なら
    * kubernetes

## プログラミングコンテストいっしょにやってみませんか？

* [AtCoder](https://atcoder.jp/)
    * C++が圧倒的に多い
    * PHPは人気が少ない
* 問題に応じたコードを書けているかが評価される
* たとえば
    * 数字が3つ与えられるので、その中で最も大きいものを返して
* 過去問はいつでも解ける
* 一番難しいのは？
    * 4000都市を最短距離で回れ

## Rails vs Laravelをやってみて感じたこと

* 3時間くらいやってみての感想
* いままでRailsばっかりやってたけど、スタートアップでぱっと作るならLaravelのほうが早い
* Railsは認証とか、ソーシャルログインなんだとかgemを探して選んで入れないといけない
* Laravelは公式でパッケージが公開されている
    * 普通に使う機能が公式である
        * 認証
        * ジョブキュー
* Railsは同じ機能でもgemがいろいろあって自分で選択しないといけない
    * cancan, cancancan, pundit
    * Laravelならまよわずさっと使える
* LaradockというDockerの開発環境があっていい
    * すぐに開発環境が立ち上げられる

## ｊｕｐｙｔｅｒ
* web browser上でpythonが実行できる

## YYPHPは毎週やってます

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

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