こんにちは!この度、6/29(土)に開催されたPHPカンファレンス福岡2019にて、BASEがスポンサーとして協賛&2名のメンバーが登壇いたしました!今回は川島(@nazonohito51)・めもりー(@m3m0r7)・東口(@hgsgtk)・田中(@tenkoma)の4名より参加レポートをお届けします!
会場レポート
みなさん、こんにちは!基盤チームのめもりー (@m3m0r7) です!今回、私は参加者として、PHP カンファレンス福岡に参加してきました! BASE では、カンファレンスへ登壇や参加といったメンバーのコミュニティ貢献活動を積極的に支援しており、今回PHPカンファレンス福岡も業務として参加してきました これが決まったのは、実は先週だったこともあり、ホテルや飛行機などの予約が大変でしたがそれでも無事参加することができました。 ということで会場レポをお送りしたいと思います。
会場レポ
今回弊社はブロンズスポンサーとしてスポンサードさせていただいており、かわいい旗がずらりとしている中に弊社が!
弊社デザイナーがめちゃめちゃかわいく仕上げてくれました!ありがとうございます。
まだ、PHPカンファレンス福岡でしか配布していない BASE BANK のステッカーです!
弊社はブロンズスポンサーとはまた別に、2名のエンジニアが登壇させていただいておりました。 下記に詳しく記載します!
一方、セッションの裏では…
セッションの裏では、GMOペパボさんが開催していた、「マネクラからの挑戦状」があり、これは参加しなくては…!ということで参加してきました。
〜
が ?
に文字化けしてる!
具体的には2つに分かれて、一つが脆弱性を見つけていくもの、もう一つが既存のコードを短くしていくもので、通称「コードゴルフ」と呼ばれているものです。 私はコードゴルフの方をやっていました。
もともとのコードは下記でした。
詳しくはペパボさんの GitHub リポジトリを御覧ください。
それを下記のようにしていきました…
追い打ちをかけるようにスコアを更新しまくっていました。
時間が限られていたのでコードがだいぶ雑ですが、最初の4,855,534 スコアから 75,371 スコアまで減らして、無事優勝しました! そして 10 万円分のクーポンをもらってしまいました。本当にいいんですか?ありがとうございます。
コードゴルフ一位は めもりーさんで、10万円クーポンをお渡ししました。 おめでとうございます! #hall_lo #phpcofuk #mclolipop pic.twitter.com/ARuYGO4n8k
— すねこすり (@sunecosuri) June 29, 2019
ということで、セッションの内容も楽しかったですが、合間の時間も楽しく、とても有意義な1日でした。 ありがとうございました!
余談ですが、アフターハックとしてもっと短くできないかと思い、また桁数を1つ減らす形でスコアを更新して最終的に 7,159 となりました。 @tenkoma さんのコードと組み合わせるともう少し短くなりそうです。
<?php array_multisort($v=$_GET,$a=SORT_DESC,$b=SORT_STRING,array_keys($v),$a,$b,$v)?><!DOCTYPE html><style>body,html{height:100vh;margin:0;background-color:#fff;color:#465560;font-family:Arial,Verdana,Meiryo,sans-serif;font-feature-settings:"pkna";letter-spacing:.04em;font-size:1rem;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased}body{font-size:1rem}*{box-sizing:border-box;background-repeat:no-repeat;padding:0;margin:0}table{width:100%;height:100%}html{box-sizing:border-box;-webkit-text-size-adjust:100%}td{text-align:center;height:50%;width:5%}h1{font-weight:400;margin:0}</style><table border="0" cellspacing="0"><tr><td bgcolor="#147ecc"> <td> <td style="width:80%"><table><tr><td style="height:10%;"> <tr><td style="height:80%"><img src="https://raw.githubusercontent.com/pepabo/lolipop-mc-codegolf-challenge/master/mc.png" width="100%"/><br><h1><?=strrev(array_values($v)[2]??'')?></h1><tr><td style="height:10%"> </table><td> <td bgcolor="#147ecc">
マネクラからの挑戦状参加レポート by 田中(@tenkoma)
BASE Product Dev Division 基盤グループの田中です。午前中セッションを聴講して、午後はマネクラからの挑戦状(PHPアプリケーション脆弱性修正チャレンジ)に参加していました。
ルールについてはpepabo/lolipop-mc-vuln-challengeをご覧ください。 用意されたWebページに脆弱性があるのでそれを直す、という問題が5つ用意されていました。時間内に5問解けたので11,000円分のクーポンをいただきました!(最速で解けた場合豪華なクーポンがあったのですが、残念ながら2位でした)
めもりーさんが優勝されたコードゴルフも面白そうだったので、翌日株式会社Fusicで開催された(非公式)PHP Conference Fukuoka 2019 After Hack!!のネタにしたいな、と思いました。楽しむためにはオンラインで動いているチェッカーが必要なので、イベントを開催されたGMOペパボ株式会社の方にお願いしたところ、翌日も動作してもらえることになりました。
マネクラからの挑戦状で使われたチェックサービスを明日も動かしてもらえることになったので、アフターハックでハックしていきましょう!! #phpconfuk #hall_lo https://t.co/kkkEKB9yY1
— Koji Tanaka (@tenkoma) 2019年6月29日
会場で書き換えて、東京に戻ってからも書き換えた結果、PNG画像ファイルを含めて60315というスコアになりました。コードゴルフなのでかなりダーティなコードですが以下のようになります。
<!DOCTYPEhtml><table cellspacing=0><tr><td bgcolor=#147ecc><td><td style=width:80%><table><tr><td style=height:10%><tr><td style=height:80%><img src=m width=100%><h1><?php foreach($_GET as$k=>$v){$t[]=[$k,$v];}usort($t,function($a,$b){$i=$a[1]!=$b[1]?1:0;return strcmp($b[$i],$a[$i]);});echo$t[2]?strrev($t[2][1]):''?><tr><td style=height:10%></table><td><td bgcolor=#147ecc><style>body{height:100vh;font-family:Helvetica;letter-spacing:.04em}table{height:100%}*{border:none;padding:0;margin:0;font-weight:400;color:#465560;text-align:center}td{height:50%;width:5%}
- 見やすくフォーマットされたコードはこちら https://gist.github.com/tenkoma/416cdf36a51c9610e0a7d353102a43ce
実はチェッカーは、リダイレクトをチェックしてなかったため、「コンテナ内の /var/www/html
内にWebサイトを表示するのに必要な全てのコード、およびファイルを設置してください」というレギュレーションを無視すれば以下のコードもチェッカーをパスします。(スコア: 80)
<?=header('Location://phpconfuk-codegolf-php.lolipop.io?'.getenv(QUERY_STRING));
「マネクラからの挑戦状」、ゲームを楽しみながらマネージドクラウドの使い方を覚えるというナイスな企画で、楽しく参加できました。
登壇スライド
今回登壇した、東口(@hgsgtk)・川島(@nazonohito51)の発表内容について発表者自身より紹介します。
ユニットテストの現場の問題を原則に立ち返って考える by 東口和暉
BASE BANK株式会社 Dev Divisionでソフトウェアエンジニアをやっている東口(@hgsgtk)です。
これまでのPHP系のカンファレンスにて、いろいろユニットテストについて話してきたのですが、今回もユニットテストの話です。 今回の内容は、ユニットテストについて現場で起きる問題や悩みがちな意思決定について、問題を整理した上で取りうる戦略とその戦略の良し悪しを様々な文献をもとに説明するものです。各々の現場で異なりうる意思決定の判断材料を提供することを試みました。
駆け足で話してしまったのですが、Ask the Speakerにて、現場でテストを書いてる聴講者の方々に「参考になった」と言っていただけたので、ある程度この発表が目指したいものは実現できたかなと思います。
今年は、今後もCakeFestやGo Conference Summer in Fukuoka、PyCon JP 2019等で、ユニットテストについて話す機会を頂いているので、引き続きユニットテストをはじめとしたソフトウェア開発に関する造形を深めるべく精進していきます。
PHPStanでCustomRuleを作る by 川島慧
BASE Product Dev Division 基盤グループの川島(@nazonohito51)です。今回はPHPStanを使って独自の静的検査を行うことが出来るというお話をさせていただきました。
PHPStanにはCustomRuleという独自の検査を作るための機能が備わっているのですが、READMEにほぼ記述はなく、かなり手探りの作業を要求されます。今回は私が dependency-analyzerという静的解析ライブラリを作った経験から、そのあたりの知見をコミュニティに還元すれば喜ぶ人がいるんじゃないかな?という思いで発表させていただきました。なるべく「こんなに簡単にCustomRule書けるんだよ」と簡単さを押して資料を作りましたが、ありがたいことに意外と簡単にかけそうだぞという感想もいただいて、発表の目指したいところは達成できたかと思います。
同時に気になったのが「静的解析って何ですか?」という質問でした。色々お話させていただいた感触としては、おそらく「PHPStan/Phanというツールの存在はなんとなく知っているが、具体的にそれらがどういうものなのかはみんなハッキリとは認識していない」ぐらいなのがコミュニティの実情なのかなという感触を得ました。@tadsanさんとも懇親会の場でお話しましたが、やはりみんなあまり知らなそうだという認識とのことです。
https://twitter.com/suzuki/status/1144873913790259201
PHPstan + CustomRule によるコードクオリティの維持については、既にアプリケーションエンジニアの範疇を超えて来ている気もするなー。
— suzuki (@suzuki) June 29, 2019
これができるなら、そういう役割のおちんぎんがプラスされても良い世界な気がする。
#phpconfuk
なるほど。たしかにコードクオリティを維持する仕組みづくりは、事業へのコミットしながら同時に手を出すのは難しい領域かもしれません。これらを踏まえて、大多数の人が興味を持ちづらい領域の話だったかな〜と思いました。次回はより多くの人が興味を持ってくれそうな話をしたいと思います!
まとめ
台風が直前に出現するなど困難が現れる中、トラブルなく素晴らしいカンファレンスを運営していただいた、実行委員長の松村様(@tsubakimoto_s)をはじめ実行スタッフの皆様、本当にありがとうございます。 また、登壇者の皆様、スポンサー企業各位、聴講者の皆様方にこの場を借りて御礼申し上げます。 引き続き、PHPコミュニティに積極的な貢献を続けていきたいと思います。