PHPerKaigi2020前夜祭だけ行ってきたよー!

お久しぶりです!PHPerKaigi2020前夜祭だけ行ってきましたー!
(1日目は月曜平日なので、チキってしまいました。)
名古屋-東京って新幹線ですぐなのに、片道一万もするのどうにかならないですかねえ😌

間違えてペチコンの流れで京急蒲田にむかっておりました。品川で気づかされました。

さて、入場してもらえたもの(勝手にピックアップ)

  • トートバッグ(ジーパン生地かわいい)
  • 名札
  • トレンディングカード(プロフィール登録ミスっててアイコンがない…)
  • GameWithさんのモバイルバッテリー(これはありがたいです🙇‍♂️)
  • デジタルサーカスさんの熱伝導式のアイススプーン(ほんとにカチカチのアイス食べやすかったです)
  • GMOさんのチョコ

参加したセッション

Deep module in PHP

前提:いいコード=複雑じゃないコード
=内容を理解するのが簡単で、変更するのが大変ではない とする

どうやって複雑で名はないコードを書くか?
→ Deep module

Deep module とは?
- モジュール設計の考え方
- 様々な角度から複雑さを減らす方法 例)技術的負債、抽象化、エラー

モジュールとは?
→インターフェイスと実装をもつあらゆるレベルにおけるコードの塊

インターフェイスとは?
→他のモジュールがそのモジュールを呼び出すために知る必要があるもの

理想のモジュール
→多くの機能を提供しながら、インターフェイスはシンプルなもの

Deep module ⇔ shallow  module

- moduleが深くなることを目指す
  - 抽象化することを意識する
    重要ではない実装の詳細を隠すことで、インターフェイスをシンプルにできるかつ多機能の両立ができる
  - 可能な限り、一般的なケースに最適化された設計を行う

deep moduleの具体例🙆‍♂️
- CakePHPのsaveメソッド …詳細を知らなくてもデータを保存できる
  - エンティティ渡すだけでよい →シンプルなインターファイス
  - インサートかアップデートかどちらかをよしなにしてくれる →多機能(cakePHPでは、save時にcreated/modifiedをするか自動で決めるのは一般的な機能)
  ↑ある種の決めつけで、インターフェイスをシンプルにしている
  - データベースの種類を意識する必要がない →抽象化

shallow moduleの具体例より🙅‍♂️
小さなモジュールだけど、インターフェイス(メソッド名)に実装詳細がダダ漏れしている。
エンティティ操作をするサブクラスだが、直接エンティティから操作したほうが早い。
→ インターフェイスのコストが、機能の利益を上回っている

しかし、小さい(モジュール)はいいことなのでは?
例) Sandy metzルール(クラス内コードは100行以内、メソッドは5行以下) ←Ruby

↓

小さいことはNot Shallow!
- モジュールが小さいと持っている情報量が少なく、多機能ではないから
→何でもかんでもメソッド化するのは良くない

- 1つのメソッド内に大量のコードが書かれると読みづらい
→ 実装が膨れたら、適宜メソッドに分割する


まとめ

Deep moduleとは、、、
インターフェイスがシンプルで、多機能なモジュール
このモジュールはDeepか?という問いにを立てながらコードを書くと良いコードになるかも

マルチパラダイムモデリング

- オブジェクトの歴史

  - 構造化プログラミング     
  - モジュラープログラミング
   ↓
  - データ抽象
    ↓ データ抽象を実現する手段の一つとして提唱されたのが、抽象データ型
  - 抽象データ型
   ↓ さらに、抽象データ型の具体的実装としてクラスに多くの機能を導入
  - クラス 🌟モジュール化の手法のひとつ!
  
  - ここまでのまとめ: クラスベースのオブジェクト指向におけるソフトウェア構築は、抽象データ型の構造化された集合としてシステムを構築すること

- マルチパラダイム・モデリング
  - 関数を他のデータ型同様に扱うことによって、モジュール間の依存関係を適切にできる可能性がある。(関数がファーストクラスオブジェクトである)🤔
  - 抽象データ型は、データ構造を隠蔽するため、データモデルの理解は必要不可欠🤔

- 計算モデル
  - チューリングマシーンとは?...チューリングさんが提唱した

>「計算可能性」に関する議論のために提示した抽象機械である。

調べたけど[宇宙一わかりやすい](https://www.yukisako.xyz/entry/turing-machine)でもわからなかった、、

  - (帰納的関数、よくわかってない...)

- 計算モデルとしてのデータモデル

  - データモデルを用いることで計算を行いやすくなるという意味で計算モデルとみなすことができる
  
    例)リレーショナルモデル → リレーショナル演算
  
  - ただし、チューリング完全であるとは限らない🤔
  
  - リレーショナルモデルとERモデル
  
    - リレーショナルモデル ...述語理論、なんらかの命題を満たす事実の集合を捉えるデータモデル。関係演算によるデータ操作が可能になる。
    
    - ERモデルはリレーショナルモデルではない?
      - リレーショナルモデル 計算携帯持つ
      - ERモデル それ自体は計算携帯をもたない。複数のデータモデルの包括的なビュー。

私のレベルではちょっと難しいお話でした...勉強します...

Inside SWOOLE:非同期処理はどのようにして動くのか

- swooleとは?
  - PHPで非同期処理を実現できる機能拡張
  - 2012年~
  - Transfonさんによって
  - 中国の開発者が猛烈

- 非同期処理
  - 並行/並列
  - コルーチン?

- C++でできている

- swooleまだまだ開発環境レベルでしか使用できてない、本番で使ってる例は少なそう。(会場内で使ってるのは、uzullaさんと郡山さんくらいだった)

BEAR.Sundayのマニュアルにもswooleが追加されていたので気になってました。

感想

  • トレンディングカードもっと交換したかった😭(切実)
  • フェスみたいに一日券が欲しい。
    例)前夜祭のみとか、1日目のみなど
  • 地方枠でちょい安なチケットが欲しい。(現在地証明が難しそうだけど)
  • もっと勉強しよ…

とはいっても、とても楽しかったです!実行委員のみなさんありがとうございました🙇‍♂️
来年も楽しみにしています!!!

投稿者:

kin29man

農学部卒の7年目エンジニアです👩‍💻 PHPとGASが好きです!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です