PR TIMESで定期開催されている社内勉強会。先日は執行役員CTO金子達哉主催で、社内のPHPバージョンアップkickoffイベントを開催しました。今回は本編後半に実施したCTO金子達哉、山岡広幸氏、uzulla氏の座談会の記録をお届けします。
不平不満をオブラートに包んで、情報として共有していく
uzulla:スライドでも話しましたが、まずは、精神論をします。僕は「PHPの新しい機能を使いたいから、絶対バージョンアップしてやる!」みたいな、無限のモチベーションにプッシュされる人間ですから、モチベーションは自己回復していくタイプです。無茶なスケジュールを切らなければなんとかこなしていける。
それでも、レガシーシステムの改善ってあまり高くは評価されないし、デプロイで壊せば落ち込みます。それを「気にするな」と言うのは無理な話なんです。「辛いな」と思った時に、うまく「辛い」という感情を共有していくのがとても重要なんですよね。
加えて、「ここで困っている」とか「今ならこうすべき」とか、「うんざりしてきた」とか……そんなことを宣言しちゃいけない雰囲気は作るべきではないと思うんです。辛い仕事には不平不満は絶対出ます。“前向きな憂さ晴らし”と“後ろ向きな逃げ”は別物です。
金子達哉(以下、金子):つまり、大事なアクションというのは?
uzulla:活発に情報を共有することだと思います。「ここはこう直して、いい感じになったよ」みたいなことをシェアしていく。なんせレガシーシステム改善って、自分たちでやっていくしかないんです。不平不満も外部に出せる話ではないから、それもオブラートに包んで情報として共有していく。ちょっと精神論すぎるかな(笑)。

山岡広幸(以下、山岡):でも、すごくわかりますよ。この辺の話って、やはり精神論になりがちですよね。仕方ない。
金子:大事なのは“気合い”ですよ。
uzulla:そうそう、気合い。技術的なことは所詮技術で解決できるので。
“魔法”はないからこそ、コツコツ、チームでやってみる
山岡:とにかく、コツコツやっていけばいつか終わるものですしね。ただ、何かあっという間に終わる魔法があるわけでもない。少しずつ、一個一個片づけていくしかないんです。そうなると、やはり長期戦になることは覚悟しなければなりません。正直、このバージョンアップ作業って、終わりがないじゃないですか。ゴールにたどり着いたかなと思うと、また新しいバージョンが当然出るので。その前提に立った上で、チームとして「長期戦でやって行くぞ」という心構えができれば、とてもいいと思います。

uzulla:そうそう! その“チームとしてやる”というのがまた、難しいんですよね。なぜか、一人の人に負担が偏りがちになるんです……僕とか(笑)。僕は一人でも「全部やるぞ!」ぐらいの気持ちでいますが、誰かに任せ続けるとそこがSPOFになっちゃうんで、、できるだけ「組織でできる」形になってほしい。僕は補助輪というか、呼び水というか、最初に走り出すための役割なんだと思います。
だから、みんなにも積極的に挑戦してほしい。なんでもそうですが、やってみないと自信がつかないしできない。デプロイ当番とかから逃げてると自分に回ってきた時、冷や汗かきながらやる羽目になっちゃう、だからとにかくやってみる。
バージョンアップも一度したことがあれば、自然とできるようになる。
金子:僕も一回やったことあるんで「できるでしょ!」と思えます。時間をかければ、絶対できる。
uzulla:「自転車に乗れた人間は、自転車の乗り方が分からない自分には戻れない」、みたいな世界なんですよね。ただ、みなさんが悩んでいる気持ちも分かります。やり方がよく分からないと多くの人は疎んじゃう。バージョンアップって、誰かがちまちまと枝きりをして、道を作っていくものだし、ほとんど同じ道もないから手探りで進むしかないんです。
「終わらせる」ことが絶対正義
金子:そういえばuzullaさん、当社のリポジトリ上ではPECLが使われていないっていう話をしたじゃないですか。僕、それ奇跡だなと思って。PECLのメンテナンスって結構止まってて。特にPHP7で、結構ジャンプがあったから、メンテナンスが止まったPECLのモジュールは多いんですよ。
uzulla:うん、無理なモジュール多いですよね。もうそのPECLのモジュールの代わりにピュアPHPで実装されたライブラリーを探してきて入れるか、そのPECLのモジュールがOSSならフォークするしかないこともあるんで……まぁ、やってみたら案外軽い地獄の場合もありますが、やはりひどい地獄の場合もある、やってみないとわからない(笑)。でも、そういうのを粛々とやっていくしかないんですよね。やったら慣れる、ただ、やらないと慣れない。その経験は絶対に役に立ちます。
どんな言語でも、あるいはフロントエンドの領域でも、jQueryで作られて、Vue.jsになって、突然今度はReactがいいぞってなって、そして次はSvelteだとか変わっているらしいじゃないですか。つまりはどこだって大変なんですよね。
山岡:結局、言語じゃなくても、フレームワークとかライブラリ単位でバージョンアップって絶対あるし、そこで何かを書き換えなきゃいけないことは絶対ありますからね。
uzulla:そうそう。かっこいいライブラリーとかフレームワークを使っている人も、使い続けて、ちゃんとバージョンアップしつづけていればいいですね。 まぁ僕はフレームワークがあっても死んでる人も何度も見ましたけど! とにかく長くサービスを続けていくのが何よりいい経験になると思います。
山岡:uzullaさんも本編の中でおっしゃってましたが、「リファクタリングとは違う」という考え方は私も結構大事だと思っていて。コードを見始めると、ついついリファクタリングしたくなってしまうんですけどね…。
uzulla:そうなんですよ!
金子:そこは我慢して、本当に最低限にしとかないと終わんないんですよ。とにかく、終わらせること。終わらせることこそが、正義なんで。

山岡:そうそう。それって今やるべきことではないし、さらに違う問題が発生するかもしれない。
uzulla:終わらないっていうのが一番、“悪”なんですよ。とにかく「終わらせる」ことが重要。終わらせる為にタスクを細かく刻んだりもする。
「問題に立ち向かっているのはあなただけじゃない」を共有して
uzulla:結局冒頭の精神論に戻るんですが、普通に「根性でやるしかない」みたいなことを言ってもいいと思います。ただ、それより皆さんの同僚と「やっていこう」という同意を取るのが重要だと僕は思っているんです。みんなで共有できないと、チームが一つになれないじゃないですか。そのチームビルディングはとても大切で。「俺は頑張ったのに、なんでそっちは他人事なんだ?」「いや、僕には他人事だし……」みたいな断絶ができないようにしないといけない。まぁ、多分そこはCTOが頑張るんじゃないかなと思いますね(笑)。
金子:なんか困ったら言ってください! 基本的に、なんか障害起こったら僕のせいにしてもらって大丈夫です。そもそも僕が全社員に向けてそういう説明をしているので。
uzulla:ぶっちゃけ障害が起こった時に、相手のせいにしていいですよって堂々とする胆力があれば、こんな話をする必要はない気がするんですが(笑)。
金子:誰がやっても障害になるので。進みましょう。
uzulla:そうなんですよ、マジで。そういう意味では精神論も、自分のせいにしないのもありで。あまり深いこと考えず、単なる業務だと思ってやっていくしかないんですよね。
山岡:私も一番言いたいのは「一人じゃないぜ」ってことで。これはuzullaさんと共通している話だと思います。とにかく、チームとして解決していく。「問題に立ち向かっているのはあなただけじゃない」という空気を、体制のなかで作れるといいですよね。
どうしても、体制づくりをしていくと、中心となって担当する人を立てることになるから、エンジニア全員が「バージョンアップやるぜ!」っていう感じになりづらいこともあると思います。でも、みんな同じ場所に立っている。バージョンアップは倒すべき“敵”ではなくて、向かうべき“ゴール”だったり乗り越えなくてはならない“壁”だったりするんです。それにみんなで向かっていくべきなんですよね。
まとめ / エンジニア採用に奮闘しています!
今回のイベントは、PR TIMES開発本部で実際に取り組むPHPバージョンアップのキックオフにあたり、社内向け勉強会をオープンに実施するかたちで行いました。当日の登壇者資料も興味のある方はぜひご覧ください。イベントページにも公開しています。
PHPバージョンアップけもの道(uzulla氏)
PHPのバージョンアップ実際のところどうなの? / How actually upgrade of PHP is(山岡氏)
開発基盤チームが目指す事 #pixiv_night(金子)
21年4月にリスタートしたPR TIMESの開発本部。技術的な挑戦として3つの成果指標を掲げ、走り始めたところです。
5万4千社超の企業の一次情報が集う「PR TIMES」を社会的な情報インフラにするために、まだまだ挑戦の担い手が足りません。PR TIMESを本気で改善したいと思う方に、是非ジョインしてほしいと思っています。「ちょっと話が聞きたい」という方も歓迎していますので、興味のある方はこちらから気軽にエントリしてみてください。
また次回のイベントも、レポートしていきます~!