tsyama記

プログラミングとそのほか

PHPerKaigi 2019に参戦(一日目) #phperkaigi

phperkaigi.jp

こちらに参戦しております。
1月に参加したPHPカンファレンス仙台 2019が思いの外刺激的だったので、今度は東京まで足を伸ばしてみました。

まだ一日目ですが、今回も相当に刺激的なイベントになりそうです。興奮冷めやらぬうちに今日見たセッションの振り返りをしておきます。

みたもの

PHPStorm30分集中超絶技巧

PhpStorm30分集中超絶技巧 #PHPerKaigi #a - Speaker Deck

仙台で「PhpStorm45分集中超絶技巧」として発表されていた内容のブラッシュアップ版とのこと。前回参加できなかったのと、あの後PHPStormの個人ライセンスを購入したので今回こそはと参加してきました。

内容としては便利なのにあまり知られていないショートカットや機能の説明でした。僕は今回紹介されていた機能はほぼ100%知らなかったですね。

どれもこれも使いこなせるとかっこいいし、開発も捗りそうですが、すぐに使ってみたい度個人的ベスト3としては、

  • 空気を読むショートカット(Alt + Enter
  • Postfix completion(式.if, 式.returnなど)
  • 最近開いたファイル(Ctrl + E)/最近編集した箇所(Shift + Ctrl + E

あたりです。まずはここから覚えてつよそうなPHPerを目指そう。

PHPゆるふわCI入門

www.pixiv.net

仙台のときもtadsanさんのセッションを聞いたので二回目ですね。個人的にCIは心惹かれる領域なのでゆるふわ入門してきました。GitLabCIやPHPStanといったキーワードは業務や個人で導入経験があったので、あまり「難しそうだわー」感なく聞くことができました。

感じたことが広く浅かったので箇条書きにします。

  • PHPUnitはまま使ってるけど、我流で書いているあれが本当にユニットテストと言えるのかを問い直したい
  • 受け入れテストってなんだ?Codeceptionってなんだ?調べてみよう
  • コーディングスタイルベースってどのツールがメジャーなんだろう。元上司が以前PHPMD使ってたのは知ってるけど自分で使ったことはない
  • 静的解析実案件で投入してみたけどほんとオオカミ少年になる。追加スライドにあるけど、「解析に怯えすぎ」ず、かつ「警告を減らす」という価値を見いだせるようなスタンスに立てるといいです。

ランチセッション

ぼーっとしてたら逃してしまいました。不覚。

MySQLにWEBアプリのログを保存しているケースの8割くらいが幸せになる方法

MySQLにWEBアプリのログを保存しているケースの8割くらいが幸せになる方法 - Speaker Deck

PHPerというかMySQLerの方の激強セッションでした。
われわれ弱小PHPerは雰囲気でMySQLをやっているのですが、そんなことではいけないな、もっと意識的にDBの技術選定や戦略を立てていかなければならないな、と勝手にケツを叩かれた気分になりました。

アプリケーションのログを出力する際、「なんかカッコいいから」というクソな理由でMySQLにロギングしてみたり、「なんかめんどいから」というクソな理由でファイルにひたすら垂れ流したりするのですが、MySQLにロギングすることで、あとからSQLでデータにアクセスできるというメリットや、仕組みが重厚すぎてリソースを必要以上に食ってしまうというデメリットが明確に存在します。

これらのメリット、デメリットを理解した上で「どこにどういう形でログを残すのか」という論点を常に心の中に置いておくようにしようと思いました。また、すべてのログを同じところに保存しておく必要はないし、必要性のレベルが変化したタイミングでサマライズするなどして柔軟なロギングをしていくのも大事ですね。

余談ですが、MySQL愛に溢れるセッション後半が大好きでした。

設計力を上げるバリエーションの見極め術

設計力を上げる!バリエーションの見極め術 - Speaker Deck

とっても難しい話題だなあと。仙台のときもありましたが、スライド発表とあわせてQ&Aにも学びのあるセッションでした。

元号対応とか消費税とか、身の回りにも我々の首をぎりぎりと締めようとする「バリエーション」が転がってますよね。それらに対してどこまで予測し、どこまで受け入れるコードを書くのかは人それぞれだし、経験によるところも大きそうです。

Q&Aで出てきた、「早すぎる最適化」というキーワードも合わせて考える必要がありますね。

モバイルアプリ向けAPI開発を通じて学んだこと

モバイルアプリ向けAPI 開発を通じて学んだこと / learned-from-developing-mobile-app-api - Speaker Deck

試行錯誤の共有ありがたいです。
業務でモバイルアプリ向けAPIを作った経験はあるといえばある、程度なのですが、案件規模の事情もあり、ここまで色々考えながら開発してるのか、というギャップに驚かされました。「技術選定には相応の必然性が必要」というのはなるほどですね。

他にも読書会をしたという話があったり、ここまでひとつの案件に対して丁寧に取り組めるというのはそれだけで圧倒的に強いなと、凡百プログラマは感じました。

RESTの力

RESTの力 / The Power of REST - Speaker Deck

圧倒的に力強いセッションでした。これがRESTの力か。

REST周りは、最近たまたま『Webを支える技術』を読み直したときに「やっぱりインターネットの仕組み最初につくった人はすげーな」ぐらいの感情を抱いていたのですが、どうやらそれどころではない深みや思いがあったようです。

正直内容が濃すぎて半分も理解できた自信がないので、仙台に帰ったらあらためて反芻しておきます。

それにしてもスライドのまとめはかっこよすぎた…。

ゼロから始める自作ファミコンエミュレータ生活

仙台のときにも、今回PHPerKaigiで実行委員長をされている長谷川さんがファミコンエミュレータの話をしていましたね。最近流行りなのでしょうか。その時のセッションともかかわりのある話だったので、特にこんがらがることもなく聞くことができました。

それにしてもHello Worldまで3ヶ月というのはなかなかハードル高いですね…。やはり「俺何やってるんだろう」という思いが脳裏をよぎってしまうと続かなそうです。

Swooleでフレームワークを高速化 - もう動作が遅いなんて言わせない!

Swooleって初めて知りました。JSみたいなイベント形式の非同期処理が導入できるPHPエクステンションらしいです。
PHPで非同期処理やったり並列処理やったりするのは魅力的だけど、そうそううまくはいかないぜという話でした。

普通のPHPばっかりやっていると意識することはなかなかありませんが、非同期処理のためにプロセスを使い回すことで、ページ遷移すると状態がすべてリセットされるようなステートレスな動作など、今までのPHPの当たり前が当たり前ではなくなってしまうという気づきが得られました。

PHPerのための計算量入門

PHPerのための計算量入門 / Basic Knowledge of Time Complexity - Speaker Deck

新人研修のときに上司から計算量の話をしてもらった覚えがあり、今日話されていた内容も知識としてはそこまで目新しいものは多くなかったように見えるのですが、計測による結果なども用いながら、計算量を実際の開発でどのように意識していけばいいの?というところにまで踏み込まれたのが初めてだったので、それだけで大きな学びになりました。

  • 本来ならば勘や経験に頼らずに計算量の問題を発見したいが、それはなかなか難しいことである
  • データ量が多くなる見込みがないのであれば問題ないので、無闇にデータ量に関する指摘をコードレビューでしまくるのはよくない

あたりで、実際の業務における計算量との向き合い方のイメージが付きました。

おわりに

なんとか書き切れました。もう寝ましょう。
最後の方の眠気が特に強いので、明日ちゃんと見直そう…。