YYPHP#87「PhpStorm有効活用術」「自社サービス開発と受託開発の違いとは？」「ポートフォリオにどんな内容が必要？」「PHPのストリーム」

これは2019年6月7日に開催したPHPerイベント[YYPHP#87]のイベントレポートです。

[YYPHP#87]: https://yyphp.connpass.com/event/132251/
[YYPHP]: https://yyphp.connpass.com/

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

__今回の配信動画__

<blockquote class="twitter-tweet" data-lang="ja"><p lang="fi" dir="ltr">YYPHP <a href="https://t.co/jl0r3ytDz2">https://t.co/jl0r3ytDz2</a></p>&mdash; suin❄️PHPでオブジェクト指向 (@suin) <a href="https://twitter.com/suin/status/1136945524341239808?ref_src=twsrc%5Etfw">2019年6月7日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

__過去回の配信動画__

https://www.youtube.com/playlist?list=PLpOeTEye3Bg6PodrLHHC72jWMJYZz8VbG

## 雑談

### PhpStormを有効活用する方法

テスト周り、実行や、xdebug活用できてないとかで活用できてないと感じる。
docCommentの活用法。

* PhpStorm使ってる人？: 4/7
* PhpStormをテストで使っている人?: 1/7
    * PhpStormにPHPUnitと統合する機能がついている
    * PhpStormのボタンクリック1発でテストができる!
    * phpunit.xml をルー
* xdebug使っている人？: 1/7
    * わりと設定が面倒だった気がする
    * VS CodeでDockerでxdebug
        * xdebugがクライアントになって、ホストOS側に通信できるように設定しないといけないから
        * XAMPPや仮想マシンの方がやりやすい
    * xdebugのメリット
        * ステップ実行ができる
        * 変数が途中で書き換わっているときはステップ実行が便利
        * var_dumpの消し忘れがない
    * 昔はコンテナ内からホストにつなげるのめんどくさかったですけど1年かそこら前からhost.docker.internalという名前でホストにつながるアドレスひけるようになったので、xdebug.remote_host=host.docker.internal と書けば良くなってます
* メソッドに飛ぶのが便利
* [知らないと｢PhpStormのライセンス料をドブに捨ててる｣も同然のショートカットキーを教えてください - Qiita](https://qiita.com/suin/items/bda682201fed0936cf95)
* 英語で使ってます？
    * 英語 3名
    * 会社では日本語
* PHPerなら絶対に入れておきたいプラグイン
    * [Php Inspections (EA Ultimate) - Plugins | JetBrains](https://plugins.jetbrains.com/plugin/10215-php-inspections-ea-ultimate-)
        * 年50ドル
    * [Php Inspections (EA Extended) - Plugins | JetBrains](https://plugins.jetbrains.com/plugin/7622-php-inspections-ea-extended-?)
* コーディングスタイル
    * とりあえずPSRにしている
    * PSR-2が無難
    * PSR-12が策定中(PHP7準拠)
    * [PSR-12 Extended Coding Style Guide - Qiita](https://qiita.com/rana_kualu/items/28f169bb3eadc6f9e3f3)
* リファクタ機能が便利

### 自社サービス開発しかやったことなかったけど、他社のシステム開発を受注した件について

他社のシステム開発するにあたって気をつけておくべきことは？

* 設計が一番大事
    * ビジネス設計
    * 複雑になってるとシステムに落とし込んだときに技術的負債がたくさんできてしまうので気をつけたい
    * 要件定義とか上流工程で決まったことが覆りにくい
    * システムが良く分かってない人が考えると、いい計画にならない
* 契約
    * 委任 → 完成義務がない
    * 請負 → 完成義務が発生
* 工期・金額を見積もらないとあとで泣いちゃう
* 仕事はどういう単位で振られる？
* 要求の段階で不明確のものはもっとヒアリングする
    * 相手「ざっくりと」
    * 自分「ちゃんといえ」
* 自社サービスと受託は学べる事は全くといっていいくらい違うかも
* コミュニケーションが大事
    * 共通認識がずれていないことがすごく気になる
* クライアントにとっての当たり前が前提になっていることも
    * 業務知識があること前提
    * だれがどういうふうに使うのかというのをちゃんと把握しておかないと死ぬ
* なんでもやりたいって言われたとき
    * プロジェクトの目標が定まっているか？
    * 優先順位をつけるときにプロジェクトの目標が定まっていないと決められない。
* 100%安全にやる方法はない
    * 意思疎通を大切にしてカバー
* 受託のイメージはいいイメージがない
    * 言われたままに作ったものって、あとでポートフォリオとして見せたいと思わない
    * もっとキャリアを先に進めたいと思ったときに、自己PRできるものを作りたい

### 自社サービスと受託開発で学べることに違いってある？

* 自社サービスと受託は学べる事は全くといっていいくらい違うかも
* 自社サービス
    * マネタイズを意識したり、顧客のニーズを考えたり
    * エンジニアリングを超えて、浅く広く知れるようになる
    * 自分のこだわりを出せる
        * 受託: 勝手に変えたら怒られる
    * 自分で技術選定できる
        * Laravelでやるとか
    * 運用に必要な機能も見えてくる
    * モダンな技術が取り入れやすいので、新しい技術を学びやすい
        * チャレンジングな技術など
    * スタートアップだと動くものを早く作るのが大事になるので、スキルが上がるかというと疑問
        * 受託でも納期近いと急かされる
* 受託開発
    * 作るプロダクトの全体像が見えないことも

> ※あくまで個人の所感
> 
> 自社サービス
> 
> * 良い点-> 上流から含めて自社内で完結可能な為、サービス全体の把握や融通が利きやすい。サービスの成長を体感できる。
> * 嫌な点 -> 同じプロダクトにかかわる時間が長くなるためとにかく飽きる。サービスで取り入れてる技術以外の学びが少ない
> 
> 受託
> 
> * 良い点 -> 設計開発を自分達の方向性に合ったものを選べば学びと仕事になる。様々な業務知識が得られる。上流からは入れてれば技術選定の自由がある
> * 悪い点 -> サービスの成長と自社の利益は全くシンクロしない

### 受託系でお客さんに振り回されないコツ

* 共通認識をいかに作れるか
    * 誰が見ても同じ認識になるように表現を工夫する
    * 抽象的な表現をなくす
    * バックログという課題管理をするウェブサービスで、議論や決まった結果をきっちり残していく
* お客さんもシステム作ったことがなくてふわっとしていることが多い
    * 説明することに時間がすごく取られることがあるので、とりあえず動くものを投げて見てレビューをもらうのもあり
* ソニックガーデンさんが受託開発うまくいっている
    * [管理ゼロで成果はあがる ~「見直す・なくす・やめる」で組織を変えよう | 倉貫 義人 |本 | 通販 | Amazon](https://www.amazon.co.jp/dp/4297103583/)
    * [「納品」をなくせばうまくいく | 倉貫 義人 |本 | 通販 | Amazon](https://www.amazon.co.jp/dp/4534051948/)
* エンジニアレベルできること
    * 工数の見積もりはバッファを持ったほうが良い
    * 既存システムの改修に対しては、調査する工数をいただく

### ポートフォリオはどんな内容があったら良いのか

プロジェクト管理ツールを作ってはいるが、、
どういう内容があったら採用者に響くか、良いエンジニアと判断されるか

* ポートフォリオを持っている人は少ないと思う
    * ポートフォリオもいいけど、アウトプットがないと面談などで話しづらい
        * QiitaとかGitHubにアウトプットがあると話やすい
        * 採用担当も判断しやすい
    * Twitterでもいい
* 「モデルとビューとコントローラーの数」
* なんでそれを作ったのか、その背景を聞かれた

### PHPのストリーム

単語とか調べたけどいまいちしっくりこなかった

* ストリームって何？
    * PHPのストリームと一般的なアルゴリズム的なストリームは違う
* PHPのストリーム
    * 入出力(I/O)を扱う
* stream
    * ストリームは川
    * 川には水が流れている
    * ソフトウェアでは流れてる水がデータ
    * 川からちょっとずつデータを取り出して処理するのがPHPのストリーム
* PHPではfileの読み込みがストリーム処理
* PHPに限らずJavaとかでもストリームはあるけど、無限の配列とか、違いがある
* [PHP: ストリーム - Manual](https://www.php.net/manual/ja/book.stream.php)
* ストリームフィルター
* ストリームコンテキスト
* ストリームラッパー

# YYPHPは毎週やってます

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

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