uzullaがブログ

uzullaがブログです。

PHPerKaigi 2019に参加して、登壇してきました!!

こんばんは、うずらです。PHPerKaigi 2019に参加して、登壇してきました!!

トーク

speakerdeck.com

みんなだいすきなオレオレフレームワークの作り方の話をしてきました。

過去、PHP Conference Hokkaido 2016でオレオレフレームワークの話をしたんですが、わりと好評でしたし、ああいうのは「まっとうなひと」が話すとカドがたつので私がやるかな!とおもって出しました。

真面目な話をすると、マジョリティのウェブ開発においてはマジョリティのフレームワークを使うべきでしょうが、はたして目の前の案件はマジョリティなのか…?というのはあったりしますし、色々悩みがあります。

オレオレFWの話だけではなく、今回はそういった話をしてみました。相変わらずしゃべることはスライドにかいてあることないことなので、もしよろしければ後日公開されるであろう動画を見てください。

さて、登壇した感想としては、非常に皆さんしっかり聞いていただいて、ウケていただいて個人的には大変ありがたく思っております。

質問が結構多かった(登壇後に3人?Ask the speakerで4人?)ので、皆さん色々思う所があるのだと思います。大変に勉強になりました。

オレオレフレームワークはとにかく嫌われていますが、どのフレームワークだって基本的には最初はオレオレです。(公共事業だったり、広く設計の議論からやって、RFCをおこなって、という経緯でできたフレームワークもあるのかもしれませんが、私はちょっとしりませんでした)

駄目だ!だけでは理論的ではないと思います…いやどうかな…ダメでいいかな…。

BEAR.Sunday作者の郡山さんも今回参加しており、「オレオレでない」フレームワークを作る事について質問したのですが、特に海外では自社でフレームワークを作るところは実際には少なくない、それが強みになっている所もあるという観点を頂いたりしました、それを素朴にそうなんだ!というつもりもないのですが、やはりそういう現場はあるのだなと勉強になりました。

目の前のイシュー、あるいはビジネスに対してどのように解決していくか、そしてそれをやっていく現場はそれぞれです。 納得ができる理由、必要性、「マジョリティとは異なるなにか」があれば、汎用のフレームワークでは難しいこともありますよね、うん、ありそう!

まあ、とはいってもオレオレフレームワークをつかうより、普通のフレームワークをつかったほうがよいでしょうけどね!!

オレオレフレームワークの話もっと聞きたいですね〜、みんな隠すんですよね(?)

成功したところ、行けてないところ、微妙なところを話すオレオレ勉強会とかないんですかね??

ちなみに、オレオレフレームワーク話っぽさもあるえんどぅーさんトークは私のような勢と雰囲気だけでなく、トークでしっかり説明しててすごいなとおもいました。

www.fendo181.me

イベント

今回前夜祭をいれると三日間ですよね、三日間PHPerと話したのは初めてかもしれない、とてもよかったです。

なんか、Pre Partyとか、概念を見たことなくてなんぞこれってなったんですが、なるほど〜なるほど〜という感じでした。

(最近ストレスが溜まっていたので、ウイスキー呑んで無心でスピーカーの前でゆれていたのでだいぶ浮いてた気もするのですがw)

実際私はそんなに酒を飲まない(いや本当ですよ、多少音圧がでかくなるだけです)ので、土曜の茶会(酒がほぼ無い懇親会)はとても楽しかったです。

酒は良いものだとはおもいますが、細かい話をするのには @shin1x1 さん(たち)がポッドキャストPHPの現場」でおっしゃっていたように、シラフの脳みそのほうがよいとおもいますね、特にオレオレみたいなのは酔ってるとすぐにイキったり自虐になったりするので重要です。

茶会はおかげで色々と学びがありましたし、 @effy_staffs さんのORMにときめいたり、手元ではこういう問題があるんだみたいなのをお話できたりしました。

しかし、やはり立って話すとコードを見せづらいなとおもうことはあります。ノートPCもってるとお茶ももてませんからね。机があるとかたまっちゃうし、なんらか立ちながら画面を相手にみせられるような(そしてコードがかけるような)工夫がないものかとおもったりします。

(余談ですけど、茶会で出た食べ物をのせるトレーに飲み物がささるのは本当に便利ですね、あともう一本進化して両手がフリーになればさらに!という感じがあります(物理的に不可能では??))

スタッフ業

私はコアスタッフでした、具体的には以下あたりです

  • 荷物着荷の担当
  • 撤収・ゴミ捨て担当
  • 施錠時のダブルチェック担当
  • ゴミ拾い、椅子整列などの割れ窓治安維持
  • 受付でのサポート
  • 某コンテンツの作成
  • ノベルティを入れるバッグ制作
  • サポーター&スピーカーノベルティのパーカー制作

色々やってますが、当日はなにかあったら飛んでいく系のゆるいスタッフでした。

今回tomzohさんhamacoさんががんばってたので、本当にゆるい。(まあ自分のトークなどもあるので、暇ではなかったが)

なので、私がスタッフとして力をいれたのは、開催前の作業となるバッグとパーカー制作でしょうか。

トートはいい加減あきたので(いや、トートはトートで好きですが)今回肩掛けのやつにしてみました。色々部材を探してみて、ちょっとだけコストは高いんですけど肩掛けはなかなかの容量&使い勝手ではないかとおもっています。実際スタッフがつかっているのをみて、ええやん、となりました。

(なんと、自分でつくったのに私の手元にトートの写真がなかった!!ひえー!)

デザインもバッグは私がやりました。まあ、いうてもデザイン素材はchatboxさんのものをそのままつかったのですが、反転すると色々(膨張色とかね)あるので、色々調整したり*1楽しかったです。

イラレを久々に1月だけ契約して10案くらいつくり、スタッフに色々みせて決めました。みんな優しいので「これでもあれでもいいね」って言われるのですが、つまりはなんでもOKでもあるといえる。

そんな時に「いやこれはかわいすぎる!」みたいな強い意見をいただくと「おっ、いいね!」って思ったりします。(迷走がビシッときまり、ありがとうございました)

で、パーカーですね、とにかくプルオーバーのパーカーをつくりたかった。(前にジッパーのないものです)

パーカーの文言のネタは私が考えたのですが(ネタは何種類かつくって、これになった)、実際に人にみせて「わかるわかる!」という人が多少年齢層高いので、なるほど若者はもっと勉強しましょう!とか思いましたね(冗談です)

なお、このパーカーほしいという人が5人くらいみつかったので、再販します。(再販のための確認をしておりました)

再販どうやって募集するかなあっておもったんですけど、とりあえずこちら御覧ください。

PHPerKaigi パーカー再販 · GitHub

まとめ

よかったですね〜PHPerとして満足できるイベントでした。

f:id:uzulla:20190407042550p:plain

カンファレンスはトークの聴講で学びを得るのも重要なのですが、「スライドはあなたのイシューを勘案してくれません」。なので、ぜひこういったカンファレンスで参加者・登壇者に質問したりするのが重要だと思っています。

今後も続いて、聴講からもう一歩先にすすみやすいカンファレンスになることを期待しています!!

またスタッフやります!(多分)

次にみなさんとお会いするのはPHP Conference Fukuokaですかね!よろしくお願いいたします!

*1:ちょっとゾウを調整しちゃったのです、すみません

PHPの扱いづらいエラーをうまい感じにやるのとPHPerKaigi2019で登壇しますの話

今月末開催のPHPerKaigiがみえてきましたね!!

phperkaigi.jp

私もトークする予定です。

fortee.jp

さて、

結構昔にPHPのエラーの話をかきまして、

uzulla.hateblo.jp

uzulla.hateblo.jp

これらもだいぶ古くなったなあ、ということで最近PHP7.3と一緒につかっているタレをかいておきますね。

こちらが最近のタレの様子です

<?php
declare(strict_types=1);

// defines
define("START_MICRO_SEC", microtime(true)); // measure consume time.

// error handling settings
ini_set("display_errors", "0");
ini_set("display_startup_errors", "0");
ini_set('html_errors', "0");
error_reporting(E_ALL);
// Noticeを含むすべてのエラーをキャッチしてExceptionに変換
set_error_handler(function ($severity, $message, $file, $line) {
    throw new ErrorException($message, 0, $severity, $file, $line);
});
// FatalErrorなどリカバリできないエラーをキャッチ
register_shutdown_function(function () {
    $error = error_get_last();
    if (!is_array($error) || !($error['type'] & (E_ERROR | E_PARSE | E_CORE_ERROR | E_USER_ERROR | E_COMPILE_ERROR | E_RECOVERABLE_ERROR))) {
        // 処理時間ログ
        if (getenv('LOGGING_CONSUME_TIME') !== false) {
            $consume_ms = (microtime(true) - START_MICRO_SEC) * 1000;
            error_log("consume time: " . sprintf("%.2f ms", $consume_ms));
            $memory = memory_get_peak_usage(false);
            error_log("consume memory: " . sprintf("%.2f kbyte", $memory / 1024));
        }
        return; // 正常終了系
    }

    // 異常終了系

    // Logging un-excepted output buffer(debug|error messages)
    $something = ob_get_contents();
    if (strlen($something) > 0) {
        error_log($something);
    }
    ob_end_clean();

    // Error Logging
    error_log("Uncaught Fatal Error: {$error['type']}:{$error['message']} in {$error['file']}:{$error['line']}");

    // response error
    if (!headers_sent()) {
        http_response_code(500);
    }
    echo "500 internal server error";
});

try {
    // enable output buffer
    ob_start();

    // ここから
    require(__DIR__ . "/vendor/autoload.php");
    echo "hello!";
    // ここまでにアプリを書く

    ob_end_flush();

} catch (\Throwable $e) {
    // Uncaught Exception

    // Logging un-excepted output buffer(debug|error messages)
    $something = ob_get_contents();
    if (strlen($something) > 0) {
        error_log($something);
    }
    ob_end_clean();

    // Stack trace Logging
    $error_class_name = get_class($e);
    error_log("Uncaught Exception {$error_class_name}: {$e->getMessage()} in {$e->getFile()}:{$e->getLine()}\n{$e->getTraceAsString()}");

    // response error
    if (!headers_sent()) {
        http_response_code(500);
    }
    echo "500 internal server error";
}

こう、非常に富豪なHelloworldですが、まあこれくらいやっておくとだいぶ便利(主観です)かなと思います。

Noticeも通らないですし、へんなログ出力もなくなります。

ただ、Output bufferをつかっているので、フレームワークによっては少々食い合わせに注意が必要です。

これにもうちょっと継ぎ足すならログ周りかなとおもいますが、クリティカルなエラーのあとだとライブラリのロガーは挙動が怪しい事があるので、標準装備のerror_log()を使うほうが良いかなと思います。あ、あとPsyshでシェルに落ちるとかも便利ですよね。

まあ、なにやってんのかわかんねえ!という方もいらっしゃるかと思いますが、大丈夫、こういうのは普通の人は自分でかきません、有名なフレームワークにまかせましょう!!

…といったような話をPHPerKaigiでできるといいなとおもいますので、ぜひ皆さんご参加ください!!

練馬で僕と握手!!!

こちらからは以上です。

デブサミ2019で登壇してきました!!

f:id:uzulla:20190220195418p:plain

event.shoeisha.jp

「あの」、Developers summit 2019で登壇してきました!

発表資料はこちらです。

speakerdeck.com

きっかけとしては「城でカンファレンスやりましたよね?今年のデブサミは「SHARE YOUR FUN!」なのでいい感じに発表しませんか?」ということで近藤さんから登壇をさそっていただき、デブサミ初登壇ができました!ありがとうございます!

変わったトークなので?客入りはそこそこでしたが、質問に来てくれた方は片手では足りず。

なかなか皆さん興味をもって聞いていただけたのかなと思います。ありがとうございました!

f:id:uzulla:20190220195851p:plain

実は初デブサミ

デブ(デブではなくて、デブ的な意味で)なのに一度も参加したことがなかった。

感想としては規模がでかいな!という感じですね、そしてスタッフがなんかプロっぽい(実際ホテルの人がサーブとかしているしな)。

様々なカンファレンスに(といっても偏ってる気もするが)参加していますが、商業のカンファレンスにはあんまりいかないのでやはり新鮮に感じますね。

f:id:uzulla:20190220195704p:plain
(控室もシャンデリアバーンですごい)

色々勝手がわからず、同じ枠に登壇した小西さんに色々サポートしていただきました、本当にありがとうございました。

フィリピンから直行だったので

PHPという通貨をさわりたい!」という理由で(?)前日までフィリピンにいました。

1000PHPを崩すのにめちゃめちゃ苦労した渡航が終わり、登壇日の朝4時に羽田に帰国というエクストリーム登壇だったのもあり、他のトークはあんまり聞けなかったのが心残りです。

今度はちゃんと聴講できるスケジュールで参加したいですね。

f:id:uzulla:20190220200042p:plain
(アカツキさんのスペースで開催された非公式懇親会での15秒トークで「今日はフィリピンからきました」という嘘ではない小ネタをいれたら「フィリピンの人なんですか?」といわれてしまって(まあ当然ですね)すいません!となった)

しかし、いつか私がデブサミに登壇することがあればPHPの話をするのだろう…とPHPerとして考えていましたが、まさかこんな形で登壇することになるとはね。まあ自分が楽しいとおもってやっている趣味が評価されるというのはとても嬉しいものです、光栄でした!

こちらからは以上です!ありがとうございました!

f:id:uzulla:20190220195540p:plain
(ビズリーチさんのPHP水の様子です、うれしいですね!)