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

php://temp

2018

でいいじゃん

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

私からは

異常です