開発部の柳井です。社外イベントの投稿が連続していますが、私も12/15(土)に開催されたPHPカンファレンス2018 GROWTHに参加してきましたので、レポートします。
スライドと、動画配信のリンクがこちらにまとめられています。
PHPのいまとこれから 2018
PHP本体の開発の様子、PHP5.xから以降を迫られている件、PHP7.3の新機能など。マルチバイト文字を扱うmb_stringは、もともと「J」の付く名前(Japanese)でしたが、Javaと紛らわしいので変更されたというような裏話も聞けて面白かったです。
PHPとブロックチェーンを使ったWebアプリ開発
ユーザ認証をブロックチェーンを使って実装しました、というお話。ブロックチェーン認証機能(BC Auth)によって、サーバに個人情報(ID、パスワード、氏名など)を保管しないので、管理者による改ざんが困難になるなどのメリットがあるとのこと。
個人的には、ブロックチェーンはそもそも、サーバ-クライアント型ではなくP2P型なので、脆弱な端末が乗っ取られるリスクが怖いです。
Cygamesにおける長期運用タイトルのこれまでとこれから 〜 負荷対策とPHP7への道 〜 [ランチセッション]
会場に着くとかなり人が入っていましたが、なんとかお弁当にありつけました!唐揚げが美味しかったです。セッションを聞くために急いで食べました。
スマホゲームを多数リリースしているCygamesで、(具体的な年数は忘れましたが)2年以上続いているタイトルで、PHP7対応と負荷対策を行なった際のお話。まず安定した運用のために
- 長期運用で仕様が複雑化、コード自体も複雑化している。新機能追加や、人員の入れ替わりもある→コードをよく読んで実装を把握する
- 機能が複雑になったところ、あまり使われなくなった機能などがある→影響範囲を正確に出す
- 「ついでに修正」をすると思わぬバグが発生しがち→修正の際は、決めた範囲のみ修正する
といった点を気をつけているとのこと。PHP7対応では、完全に移行作業が終わるまでは古い環境でも動かし続けるため、5.xと7.xの両方で動くように、という要件は、日々バージョンアップが行なわれるゲームならではだなと思いました。
負荷対策では、
- 問題の切り分け
- PHPでの処理が遅いのか、Memcachedの処理やネットワークが遅いのかを分析する→PHPの処理に時間がかかっていることを特定
- APIを改善する:単純に処理に時間がかかるAPIとリクエスト数が増えると遅くなるAPI
- forループを減らしたり、DBからデータを取得する時にまとめて取得する
事前に意識を共有する、また対策後も結果を可視化したりノウハウを共有するなどすることが、安定した運用には必要なのだなと学びました。
モノリシックなアプリケーションにおけるフロントエンド部品の共通化
あなたは人生でいくつのDate Pickerを作ってきましたか?(スライドの受け売り)
異なるプロジェクトにコンポーネントを流用したいけど、別の処理と衝突してうまく使えない(ので新たに用意する)ということはよくあることだと思います。ですがGoogleの提唱するWeb Componentsを使えば、Datepicker を流用出来るというお話。
現在弊社で行なっているフロントエンド開発では、Javascriptのフレームワーク選定の基準として、用意されているelementの内容やカスタマイズのし易さというものがありました。
PHPを選ぶ理由
株式会社SCOUTERではLaravel + Vueをよく使っているとのこと。PHPを選ぶ理由の一つは、PHPに強い会社というポジションを形成することで、世の中に認知してもらい、強い人と繋がる(採用戦略)という目的がありました。逆にPHPを選ばない理由としては、静的な型チェックが出来ない、パフォーマンス悪いなどがありますが、PHP7になったことやエンジニアリングで解決出来ると主張しています。しかしPHPが苦手なバッチ処理や機械学習などに至っては、他言語と組み合わせて対応しているそうです。
安全なWebアプリケーションの作り方2018
今回私が一番楽しみにしていた徳丸さんのセッション。OWASPが発表する、アプリケーションの脆弱性10件「OWASP Top 10」の2017年版で新たに登場した「XML外部実体参照(XXE)」と「安全でないデシリアライゼーション」について、デモを交えながら原因と対策を解説されました。いずれもXMLを使う場合の話で、私は普段XMLを使いませんが、使う案件もあるので気を付けたいです。
次にクレジットカード番号の扱いについて。ECサイトの決済処理方法は、大きく分けて2種類があります。
- Javascript型:カード番号などの情報を入力すると、その情報は決済処理を行う別のサーバに送信され、ECサイトにはJavascriptでトークンのみを返す
- リダイレクト型:決済処理は、決済代行サイトで行なうため、別サイトへ移動する
後者は、ドメインもデザインも変わるので、ユーザからすれば詐欺サイトではないかと思われることもあります。いずれも、ECサイトにはカード番号などは残りません。なのでサーバにあるDBやログから情報を盗まれるということはありません。なので安全…かと思いきや、巧妙な手口で入力した情報を盗むことが出来てしまうという事件が起きています。情報は盗まれても、表面上はうまく処理出来ている(商品が届く)ので、被害を受けた後で気付くというのも巧妙なところです。
セキュリティ対策は常に新しい攻撃手法が生まれるため、常に対策し続けなけらばならないと改めて思いました。徳丸試験なども使いながら、勉強していきたいです。
エンジニア経験5ヶ月の新人がDDDやTDD、コンポーネントを駆使してクソコードを改革してきた話
DBから取得するデータが、多重構造で分かりにくい。そしてそれをコントローラで直接変更していたり、処理途中での変更が容易になってしまっているようなコードを改善したというお話。ドメイン駆動開発の内容はよく理解出来ませんでしたが、型を定義して予想外の値を避けるというのは分かりました。また、テスト駆動開発も、失敗するケースを無くしていくというアプローチは面白そうです。でも開発では実践出来ていない…
Lightning Talk
どれも軽い感じ(良い意味で)で分かりやすかったです。特に面白かった3つを紹介します。
「クソコード」言い換えのご提案
クソコードは遺憾コードと呼びましょう。
今からでも間に合うphp5.5からphp7.2にバージョンアップした話
Cygames以外にもPHP7対応が迫られている会社は多いです(弊社も現在進行形)。PHPのみでなく各種モジュールもバージョンアップが必要で、やることとやらないことを決めて取り組んだとのこと。
ハニーポットから見たWebサーバへの攻撃
ハニーポットを植えて、Webサーバへの攻撃方法を観察したというお話。phpMyAdminや、AWSのcredentialファイルなどがありそうなパスが狙われやすい→対策が必要です。そもそも、ハニーポットは「植える」っていうんですね。Closing
PHPカンファレンス仙台2019、PHPerKaigi 2019、Laravelカンファレンスなどのお知らせや、Wi-Fiを提供してくださったPHPCON_NOCさんの活動報告。会場に何かのモニタがあるなと思ったら、やっぱりネットワークの状況をモニタリングしていたんですね。
そしてPHPカンファレンス2019 beyond.*が発表されました。このアスタリスクは何を示しているのか…正規表現?
特にPHPerKaigi 2019のフライヤーは、会場に入ってすぐのチラシ置き場で一際存在感がありました。紙でphp.iniを確認する機会はなかなかありませんからね。
懇親会(LTあり)
懇親会LTで一番印象に残ったのはPHPでLチカです。ラズパイやArduinoといったマイコンはC系の言語でしか制御出来ないと思い込んでいました。動作の様子はこちら。
まとめ
PHPのイベントは初参加でした。主催者の方はおそらく私と同年代、そして自分より年下の方もいて、私も刺激を受けました。懇親会で学生さんと話したのですが、学校で先生からイベントをおすすめされたそうです。アンテナを高く持つことはやはり重要ですね。これからもカンファレンスなどに参加していきたいです。
11月末に最新13インチMacBook Airを買ってもらったのですが、MBAは1ヶ月と経たずにこんな風になりました。楽天のパンダ君は可愛くて使いやすいです。
おまけ
文京区にある印刷博物館に行きました。天文学と印刷 〜新たな世界像を求めて〜という企画展示を見ました。「IT企業の開発ブログで紙の印刷?」と思われるかもしれませんが、印刷は情報と切っても切り離せない技術なのです。
その昔、情報を記録する手段は壁画でした(情況を報せるという意味では、狼煙などもありますね)。やがて紙が発明され、手書きからグーテンベルクの活版印刷機によって大量に複製することが出来るようになりました。これにより文化も政治も大きく変わりました。聖書を大量に印刷出来るようになったことで、限られた教養のある人達しか聖書を読めなかったのが、市井の人達も読めるようになり、ルターの宗教改革は広まりました。大学の授業でこういったことは学びましたが、天文学、医学など様々な学問にも印刷は影響を与えたというのは知りませんでした。過去に提唱された天動説やオカルティックな治療方法を信じるのではなく、それらに疑問を持ち、観測や実験に基付く科学的な研究を進めるきっかけを生んだ活版印刷は、革命的な発明でした。
コンピュータ、インターネットの普及によって、紙の印刷をせずとも情報をやり取り出来るようになっていますが、書籍は完全に電子書籍にはなっていません。印刷機がコンピュータ制御になり、原稿を作成・入稿もデジタルになったことでより速く、個人でも手軽に印刷が出来るようになっています。個人的には電子書籍より紙の方が親しみやすいですし、世界のブックデザイン2017-18の本の装丁は紙の印刷物でないと得られない感動がありました。Webのデザインは印刷物のデザインと通じるところがあるし、プリント基板などにも印刷の技術・ノウハウは用いられているので、もし紙の書籍の印刷の需要が無くなっても印刷のノウハウは無駄になることは無いと考えています。
柳井といえばVRですが、VRシアターは時間の都合で諦めました。また、フォントかるたも買いたかったのですが、残念ながら売り切れ。ネットでも買えますが、拡張パックが気になるのでここで買いたかった…