https://phperkaigi.jp/2020/ に行ってまいりまして。
プロポーザル出したら採択していただけたので、自分も30分枠で喋ってきました。
前夜祭(day-0)については参加を見送って、登壇準備等に費やしておりました・・
そのおかげもあって「発表用」と「公開用」の2タイプを用意できそうな兆しがあるので、ちょっと遅らせてupさせてください。
その代わりに・・・って事でもないですが、主旨をテキストに起こしてまとめてみます。
(簡単にまとめます、って言おうとしたけど30分枠の話なのでそこそこの分量になりました😇)
色々な感想などは終了後に書きますので(iwillblog)、この記事は「発表した内容の掻い摘み」と「Twitterで拾った感想・声に絡んで見る」というものです。 会場にてバタバタと書いているので、見直しとかは後ほどやりますが、ご感想・ご質問・ツッコミなどあったら呟いていただけると!
発表内容の掻い摘み
- Pt.1 「レガシー」「モダン」とは?
- このトークでは「改修・保守」といった「進化させる」のが難しいモノを「レガシー」と呼びたい
- 「ソフトウエアは使われ続ける限り進化していく」もの(リーマンの法則より)
- 「レガシー」の逆サイドに「モダン」があるなら
「腐った(腐りかけの)コード」に対応するのは「防腐剤」とでも言えそうに思う - 肝要なのは「新しい機能を取り入れたもの」ではなく、「未来に向かってついていけるもの」という点。
これが「モダンであるか」という問いなのではないか
- Pt.2 PHPの進化
- 言語としてのPHPや、コミュニティ(PHPで書かれたソフトウェア等)の進化を振り返ってみる
- 〜2008年 / 〜PHP5.2
- Ruby on Railsの登場時期、フルスタックFWの隆盛
- CakePHP, Symfony, Zend Framework, Yiiが出てきたのがこの時期
- 「1つのFWで上手くやりたい」雰囲気?
- 〜2014年 / 〜PHP5.6
- 2015年〜 / PHP7.0+
- 〜2008年 / 〜PHP5.2
- あらゆるものは「因果」があり、「ダイナミズム」が根底にある。
色々な変化を微分して、「大きな流れ」を読み解きながら「モダンさ」を考えて見るとよいのでは
- 言語としてのPHPや、コミュニティ(PHPで書かれたソフトウェア等)の進化を振り返ってみる
- Pt.3 CakePHPを例にとって「進化」を見てみる
- 主に3点。
- 使い手に対して親切にすることで、「レガシー」を排除していける状態を保つ
- コミュニティの資産を活用する
- コードの品質を保ちやすくする
- ソフトウェアの進化にとってはフィードバックがあることが重要で、OSSでは「コミュニティ」の力が欠かせない
- しかしCakePHPは「2.x->3.0」への変更が大きく、ユーザーが「断絶」してしまった
- この時の経験から、「4.0へはユーザーにとって優しく変化を促す」ことを重要視し始めた
- CakePHP3は、「3.6からは機能の追加ではなく、4.0へ向けた準備にフォーカスする」という流れを作った
(最終的に3.8まで進展し、4.0がGAになった)- 具体的には
@deprecated
の付与やE_USER_DEPRECATED
の活用。
丁寧に「廃止予定」を分かりやすくしつつ現行ユーザーには影響のない形で、進化を促した - 「親切さ」と「コードのリストラ」が共存している
- 具体的には
- 移行ツールの提供
- 過去にも同様の独自ツールを提供していたが、Rectorベースになった
- これにより、「Rectorを使えれば誰でも使える・コードもフィードバックできる」という状況を生み出せた。「とっつきやすさ」と「フィードバック可能性」の拡大
- コミュニティの資産に乗っかることは「オリジナルのソフトウェア」であることのリスクを減らすし、流動性も高める
- 静的解析やチェックの強化を進めている
- declare(strict_types=1)の全面適用
- 引数・戻り値の型宣言の必須化
- これは3xと違いPHP7以下を切ったから出来たことでもある
- PHPStan / Psalmの適用
- 元々PHPStanは利用されていたが、適用レベルが大幅に引き上げられた
- これにより、(FWの)開発者にとっては「不正確なコードを書いてしまう」という蓋然性が排除されやすくなる。他方で、利用者にとっては「(取り分け型宣言により)IDE等の利用時の開発体験が向上する」という恩恵がある
- 主に3点。
- まとめ
- 「何のためにモダンが良いの」?
- 未来に近い場所にいるため!
- 時代に取り残されるのが「レガシー」
- 「どうモダンさを獲得するか」に対して、PHPやコミュニティの大きなトレンドに則って「モダンさ」を考えるのは1つのヒントになるはず
- CakePHP4はたんまり”今っぽさ”を実践しているよ!!!
- 「進化を止めない」ための仕掛け方、という観点で社内プロダクトなどにも参考になるポイントがあるはず
- 「何のためにモダンが良いの」?
ツイートへのリアクション
このイベントには前回も参加させていただいて、発表内容に対してフィードバックを送れるオンラインシステムを提供してくれているのは大好きな点の1つです。5分間のLTでしたが、色々な声をもらって嬉しいものでした。
それともう1つ、「この時間帯のツイートを見る」が出来ることですね!(冒頭のキャプチャを参照!!)
折角ご感想をいただいているので、リアクションしてみたいと思います。
普段、CakePHP使わないから「CakePHPの進化から読み解く、PHPフレームワークの“今”っぽさ」を聞いて雰囲気のアップデートをする試み #PHPerKaigi #b
— 山岡広幸 | Hiroyuki Yamaoka (@hiro_y) 2020年2月10日
当初は「CakePHPの設計がどうなったか」みたいな話をしようと思っていたのですが、内容を詰め始めたら「そこら辺は一切触れる余裕無さそうだな・・」となりました🙇♂️
今おそらく「クリーンに作ること」のもたらす価値〜みたいなのが再発見されてきつつあるのかな?という雰囲気は感じていて、その観点に対して「CakePHPのような、縛りの強いフレームワークはどうなのか」というのは、トピックになるのかなぁと思っています。
本トーク中で「コードの寿命」というのを強調していたので、例えば「FWの死によってアプリケーションが身動き取れなくなう」というのはリスクとして挙げられそうです。に対して、(実現できれば)クリーンアーキテクチャは処方箋になりそうかも・・・・?
と思うのですが、「寿命」というのは、「手前」にも伸ばせる事ができると思っていて、「悩みを少なくして、オーバーヘッドも少なくして」作り始める・動かし始めるというのは強烈な価値だと思います。 ので、「レールを敷く」ようなフレームワークは好物です。
CakePHPは、3.x/4.xになっても「道を示してくれる」力を保ちながら、「パーツを交換することはしやすくなった」状態だと思っています。ふわっとした言い方・・・
一応、CakePHP3をガッツリ使っていたのは前職時代になりますが、その当時は「CakePHPが足かせになっている」と感じたことはなかったです。
レガシーコードだけで自分が思うんは「セキュリティ的に欠陥かあるコード」が思い浮かぶ。モダンではないけど生存させれる。#phperkaigi #b
— おつじ (@w_o2z) 2020年2月10日
これもめちゃくちゃ大事な視点だよな!!と思いました。
そのためにも「(言語やFWの)セキュリティアップデートを迅速に行える状態を保つ」のも必要そうかもな、と感じました。
(何かポジショントーク的な話の展開の仕方になったぞ)
パッチとか新しいの出たらガンガン適用していこうぜ!そのために普段から備えておこうぜ!!となると、テストコードやCI/CD環境の充実も重要になってきそう。ココらへんもまた、「未来に近い場所に居続ける」努力なのかもなぁと思った次第です
')' が一個足りてないw #PHPerKaigi #b
— どぅーあき (@do_aki) 2020年2月10日
コード写してた時間は短かったはずなんですが、このツイート見てビビってましたw
レガシーとかそういう次元じゃない・・・😇
資料公開時には直します!!
#PHPerKaigi #b ただ機能を正しく使えなければ意味がないけどね。
— げんえい☕ (@gennei) 2020年2月10日
そうなんですよ、これは最低限かつ最重要なポイントですよね!!
「なんとなくカッコ良さそう」が「モダン」じゃねーぞ、と思います。
例えばPHP話でいうと、7.0から入った null合体演算子は便利で「使えそう」な場面も多いのですが、乱用しすぎるとリスクになりそうです。
「定義したつもりの変数(やプロパティ)」をウッカリ混入してしまうことになります。
ので、「既存コードを、新しいやり方で、短く書き換えられそう」な時でも、「手段と目的を履き違えるな」というのは言い続ける必要がありそう。
#PHPerKaigi #b 『パーフェクトPHP』10年前なのか。
— げんえい☕ (@gennei) 2020年2月10日
パーフェクトPHP は10年前 www #PHPerKaigi #b
— どぅーあき (@do_aki) 2020年2月10日
資料作成中に調べていて、「もう10年前!」と個人的に驚いたので言及した話。
今でも読むに値する話が詰まった、素晴らしい本だと思っています。そのため自分としては「今でもおすすめしたい」のですが、確かに「書き方が古い」部分もあるだろうな、って思うと悩ましい・・・
PHPの「中級者になるための」みたいな入門書、決定版がほしい。
こういった "言語の進化の流れ" って、 一つの言語だけ見ててもあまり見えなくて、 いろんな言語や環境の影響を受けてると思ってる。 #PHPerKaigi #b
— どぅーあき (@do_aki) 2020年2月10日
これも凄い有り難い指摘だなぁ〜と思っています!!
触れていなかったのは、発表枠の時間的な問題と、自分の見識の浅さの両面からです。
例えば,PHPのyieldはPythonのジェネレータに影響を受けていますし(PHP: rfc:generatorsのFurther resources等を見ると面白いです)、「CakePHPはRuby on Railsの」「Composerはnpmの」影響を受けている〜〜っていうのが、何よりの証左な気がします。ちょっと毛色は違いますが「PHP7はHackの」とか。
ということで、他言語や他文化圏も含めて流れを感じ取れたら、武器な気がします。とりわけPHPは、キャラクター的に他言語の影響を受けやすい印象があるんですが、どうなんですかねー
CakePHP 2→3 のときは大規模な変更を「断絶」という言葉を使って失敗だと認識し、
— おかしょい@アーキテクト 兼 技術広報 (@okashoi) 2020年2月10日
3 → 4 には軟着陸を仕込んだ#PHPerKaigi #b
※あとで展開する資料には参考文献をのせます
元lead developerであるMark Storyさんの発表から引用したものです。
CakePHP - The Road Ahead
ここで「CakePHP3の時どうだったのか」が語られているので、ご興味がありましたら読んでみていただけると。
OSSとしての進化、CakePHP 3から4にどう軟着陸できるようにするか。2から3への「断絶」を鑑みての。deprecatedをたくさん用意して、後方互換性を保ちつつ整理されたコードに。 #PHPerKaigi #b
— 山岡広幸 | Hiroyuki Yamaoka (@hiro_y) 2020年2月10日
去年のCakeFest(※CakePHP4の正式リリース直前)でのMark Storyさんの発表において、「4.xに移行するにはどうすればいいですか?」という説明の中で使われたスライドがコレですからねw
実際どのくらいdeprecated付けられたんだろう。後で数えてみよう
※ 今回の僕のトークに興味を持ってくれた方には面白がってもらえると思うのでオススメです!
具体例でいうと、「setter/getterの分離」みたいなのが実施されました。
( $a>value($v)
をdeprecatedにして、 $a->getValue()
と$a->setValue()
を提供)
これは「コードの可読性を上げる(for human, for 静的解析)」ためのイシューといえますが、急に破棄されたらアプリケーションが死滅しかねないなぁというAPIなので、廃止予告を出してもらえて助かりました。CHANGELOGや移行ガイドを見ると、3.6~3.8時代にかけて、様々な箇所で「setter/getter分離」ポリシーを拡大適用していった様子が感じ取れるかと思います。
Rectorって初耳。後で調べておこう #phperkaigi #b
— のりぃ (@m_norii) 2020年2月10日
ちなみに、地味に私もPR送ったりしてます ✨
CakePHP Add Fixture importing name style rector(for 3.7) by o0h · Pull Request #1252 · rectorphp/rector · GitHub
余談ですが、当然ながらRectorの作者があらゆるFWを使い倒してる可能性は低いので、これOSSコントリビュートデビューのチャンスが転がってる気がします!!!
Cf: もっと気軽にOSSに Pull Requestを出そう!/ Let’s make a PR to OSS more easily - Speaker Deck
> CakePHP は FIG メンバー
— おかしょい@アーキテクト 兼 技術広報 (@okashoi) 2020年2月10日
たしかに、そうだった。
これにより PHP コミュニティの資産を活用できる、と。#PHPerKaigi #b
ここ、ニュアンス結構ムズいんですけどね。
トーク後に呟いてた補足的な私見です。
FIGさいこ〜PSRはいいぞ〜〜〜みたいなのが、どこまで信頼できるかは割とシビアに見ても良いかもな?という気もしてる。正直どうなっていくのか読めん。
— 今日も誰かのにちようび(おいしい鮭親子丼) (@o0h_) 2020年2月10日
個人的にはFIGの活動素晴らしいし、流行って欲しいし応援したいんですけど。
で、「強い人達が集まって良いものを作ってくれる」というところで、自分でオラオラするよりは信頼できるヒントがある・・という事で参考にしています。
他方で、↓でも触れたことがありますが、「必ずしもどうなん」みたいな話もある〜というのも理解できます。
そんな感じなので、 「PSRが標準で、絶対だ!」ということはないぞ というのは、周りに勘違いしている人がいたら教えてあげてください・・・という気持ち。
(この記事のURLを共有するだけで良さそう PSRの誤解 - Qiita
ということで、「取り急ぎお返事」みたいなやつでした! 「反応してもらってるし自分の意見を返してぇ〜〜」って思いつつ、でも引用ツイートとかしたくねーな、って思いからこのタイミングでブログを書いてみたフシがあります。
では、引き続き PHPerKaigiです・・・!
おまけ的に宣伝
気が向いた時に「Cake縛りブログ」みたいのをやっていますので、何か「気になる!」とか「他の人どうしてるのか知りてぇ」みたいな話があったら、適当にIssueを立ててみてもらえると喜びます!必ずしも、全て拾えたりはしないと思いますが、自分の知識のアップデートしつつ・・