Skip to content

PHP筋肉をつける💪

公開日:

東京都大田区蒲田大田区産業プラザ PiOで開催された『PHPカンファレンス2018』でライトニングトーク(5分)として発表しました。

Download PDF

スライドテキスト

Page 1

PHP筋肉をつける

I want to get PHP muscle

2018-12-15 Japan PHP Conference Kamata, Tokyo, Japan #phpcon2018

Page 2

お前誰よ

  • うさみけんた (@tadsan) / Zonu.EXE
  • GitHub/Packagistでは id: zonuexe
  • ピクシブ株式会社 pixiv運営本部
  • Emacs Lisper, PHPer
  • Emacs PHP Modeのメンテナ引き継ぎました
  • 好きなリスプはEmacs Lispです
  • Qiitaに記事を書いたり変なコメントしてるよ

Page 3

待ってるにょ

Page 4

Page 5

Page 6

趣味

趣味はQiitaとphpusers-jaのSlackで困ってる人が居たら即レスすることです

Page 7

💪

日々の筋トレのたまもの

Page 8

<?php

Page 9

💪

Page 10

日本語でおk

PHP: Hypertext Preprocessor (or simply PHP)is a server-side scripting language designed for Web development, and also used as a general-purpose programming language.

Page 11

インターネッツ

Web開発汎用言語

Page 12

ヒト形決戦兵器

汎用

Page 13

ボクのAA

++ + / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄∧_∧ < わーいPHPだー! PHPだーbr(´∀` )ワーイ ! | 何でもできるぞー+ ヽ つ \____________(⌒_ノし'ゝ ;;::⌒::

Page 14

並列処理…

なんでもできるとは言ってない

Page 15

できないこと以外なんでもできる

Page 16

バックグラウンド

Page 17

かけらに眠る勇者の心…

Rubyを勉強してRailsに

ジョブチェンジしました!

Page 18

PHPつらたんみたいな話は結構よく聞く

Page 19

Ruby最高、一番好きなLispです

私は逆でRubyから

PHPに入りました

Page 20

PHP関係なく強い人はたくさん居る2014年当時の社内にはPHPが好きでPHPを極めてるような人はごく少数だった

Page 21

PHP関係なく強い人はたくさん居るすくなくともPHPの極意を伝授してくれるひとは居なかった

Page 22

力が… 欲しい

なので2014年くらいからやってみた

Page 23

契機

Page 24

ちょっとAPI叩いてファイルに書き出すだけだしRubyで書くか…

pixiv本体の一部だしPHPで

アッハイ…

Page 25

なるほど…

PHPで書いた

Page 26

力が… 欲しい

そのとき作ったもの

Page 27

メタプログラミング

サブコマンドが作れるCLIツール

Page 28

gitgitにしてやんよ

サブコマンド

||

git diff とか git statusみたいに第二引数の文字列によって動きを変えるコマンド

Page 29

Rubyでタスク定義するなら

そのとき念頭にあった

Rake

Page 30

Hash[]がない

IO/StringIOがない…

Rubyみたいにメタプロるには…

Page 31

メタプログラミング

うまくいった点

Page 32

よっしゃ

Reflectionでクラスの定義が実行時に取れる

Page 33

オプションごとにヘルプを書きたかった

Page 34

メタプログラミング

車輪の再発明

Page 35

メタプログラミング

必要な機能を持ったStringIOクラスを作ってみる

Page 36

継承関係はない

RubyのStringIOは実際のファイルと紐付いてないがIOクラスと同じメソッドを持つクラス

Page 37

継承関係はない

このときは文字列をバッファ代りにしてポインタを保持してシークするようにした

Page 38

2018

php://tempでいいじゃん

Page 39

new SplFileObject

第一引数にファイル名をとるが、実は "php://memory"という文字列も渡せる

この仕様を知ったのは後だった

http://php.net/manual/ja/wrappers.php

Page 40

そのあとやったこと

Page 41

http://php.net/manual/ja/

信頼できる

情報源を知る

Page 42

コードを読むとか仕様書を読むとか、できるならそれに越したことはない

Page 43

http://php.net/manual/ja/

PHPマニュアル

Page 44

JavaScript

HTML, CSS, JavaScript

MDN web docs(Mozilla)

Page 45

http://php.net/manual/ja/

PHPマニュアル

を読む

Page 46

http://php.net/manual/ja/

載ってる関数を

実際使ってみる

Page 47

http://php.net/manual/ja/

配列関数

SPLイテレータ

Page 48

PHPコードを書く手数を増やす

Page 49

read–eval–print loop

RubyだとIRBがある

Page 50

read–eval–print loop

JavaScriptでもChromeにコンソールがある

Page 51

read–eval–print loop

PHPだとどうすれば…

検索をすればいろいろあるけど

Page 52

なんか作り込まれてる

PsySH

Page 53

過去のPHPが比較

https://3v4l.org/

Page 54

Rubyのsortとsort!の違いはどう表現するか

Page 55

sortしてみる

<?php

$a = [4, 3, 1, 2];$b = $a;sort($b);// $a は変化なく $b だけがソートされる// Rubyで書くと b = a.sort

sort($a);// Rubyで書くと a.sort

Page 56

こういう挙動を調べるとRubyのArrayとPHPの配列が全然別物だとわかってくる

Page 57

read–eval–print loop

ほかの言語から拝借したものをPHPに持ち込んでどやってみる

Page 58

http://php.net/manual/ja/

ほかの言語でできることを実現してみる

Page 59

Page 60

http://php.net/manual/ja/

一見役に立たなそうでもPHPの世界になかったものを実現できてしまった

Page 61

http://php.net/manual/ja/

Rubyで特別に見えた機能Enumerable#lazy

Page 62

http://php.net/manual/ja/

PHPのarray_mapと同じような機能だが、実行タイミングを必要になるタイミングまで遅らせられる

Page 63

http://php.net/manual/ja/

実はPHPでは遙かに簡単に遅延評価mapが作れるとわかった

Page 64

baguette/copipe-iter

Page 65

他の言語に無根拠に羨ましがらなくなった

Page 66

PHPは便利なのでEmacs LispからPHP関数を実行できるようにもした

Page 67

まとめ

Page 68

増井先生という人は「PHPの関数の数は人がWebでやりたいことの数」だと言った

Page 69

隣の芝は青くない!俺たちの方が青い!

Page 70

筋肉は自信!

Page 71

同僚がPHPがそこまで好きじゃないことは知ってる

Page 72

みんな違ってみんないい

Page 73

方針を決められれば手早く解決できる人たちはいっぱい居る

Page 74

知らないことは調べる

Page 75

だから創作活動が好きな人は来てくれ

Page 76

私からは異常です