改善の進捗について

やまげん:(開発スピードが出せるような改善を)半年やられて、今のところは計画どおりに進められているんですか?

金子:あまりしっかりとした計画はまだ立てられていないというか。リプレイスって難しいんですよね。新機能だったら工数とかがある程度は読めるところはありますが、やはりリプレイスだったりバージョンアップって、今がどういう仕様なのかわからないとわからないので。正直やってみないとわからない部分ってあるんですよね。

ざっくり3ヶ月とか半年とか、そういう(計画)はあるんですけれど、「それどおり進められるかはそもそもわからない」と思いながらやっています。(なので、)計画どおりなのかは、まだ考えられていないところですね。

やまげん:そうなんですね。

金子:ただ、PHPのバージョンアップについてはもうかなり見えてきていて、「もういけそうだね」という感じではあります。

やまげん:では、大きな問題は今のところは見つかっておらずというイメージですか?

金子:そうですね。一応問題のあるところはどんどん潰していて、最近はだいぶなくなってきました。もうすでにアプリケーションサーバーを切り替えようとしています。そういう状況まできています。

やまげん:半年で大きな変化(があった)というか。

金子:と言ってもアレですが。PHPのバージョンアップは何回もやらないといけないので、まず第1段階はもう間違いなくいけるし、第2段階もほぼほぼいけるでしょうとはなってきている感じです。なので、近日中にどんどんバージョンアップしていく予定です。

やまげん:おお。それは外に出てくるかわかりませんが、楽しみに待っていますね。

金子:外から見たらわからないですけど。

やまげん:はい(笑)。

金子:会社のブログにも、出せるところは出すと思うので。

やまげん:僕、実はヤフー(ヤフー株式会社)が前職で、いわゆるアメリカのヤフーのコードをリプレイスするようなプロジェクトをやっていて。

金子:はいはい。「YPHPとYApacheと」みたいな話は聞いたことがあります。

やまげん:そうです。「PHPにはYPHPというものがある」みたいな、「ApacheにはYApacheがある」みたいな感じのリプレイスプロジェクトをやっていて、1つのサーバーを置き換えるのに1年かかったりしたので。「けっこう大規模で長いプロジェクトになるんだろうな」と思いながら聞いていました。今はその覚悟で挑戦されているということですよね。

金子:その覚悟でやっていますね。けど、それだけではなくて、新機能もちゃんと出していきたいと思っています。バージョンアップをしているだけだと、開発以外の人からすると「何をやっているんだろう」となってしまうので。

「今の開発本部はちゃんと新機能が出せる部署なんだ」ということを示しつつ、バージョンアップもして、開発速度が出せるような体制に持っていこうとしています。

2022年に入ってから「いいねボタン」だったり(が増えて)、気づいている方がいるかわかりませんが、プレスリリースページのサムネイル画像がきれいになっています。そのサムネイル画像がきれいになっているのも、ちゃんとそういう機能を入れたからです。

そういう機能追加とか改善もやりながら、PHPのバージョンアップもやっていく。まだリリースできていない新機能追加がいくつもあるので、そういったものがどんどん出てくる予定です。

やまげん:なるほど。ちょうどお便りで「いいね、うれしい機能でした」といただいています。

金子:ありがとうございます。

「リプレイスしつつも開発のスピード感を落とさない」ことの難しさ

やまげん:さらっとお話されましたが、リプレイスしながら機能開発のスピード感を落とさないみたいなところは、かなり難しいというか、難易度の高いことですよね。

金子:難しいですが、やはりそこは挑戦しないといけないことだと思っています。「PHPのバージョンが古いからできない」と言っているようじゃ、僕はエンジニアとして二流だなと思ってしまいます。やはりそこは「今できることを考えようよ」と思っています。

やまげん:すごい、今僕に刺さっています(笑)。

金子:うふふふ(笑)。

サムネイル画像の改善で工夫したこと

やまげん:その部分で、工夫した点はあったりしますか?

金子:いろいろあって。今まさに会社の開発ブログを書いてもらっている最中なんですよ。

やまげん:そうなんですね。

金子:そこでどういうところを工夫したかを書いてもらう予定ではありますが、今ちょっと簡単に話してしまうと、今のPR TIMESのプレスリリース画像は、オンプレミスにあるストレージサーバー上に保存されているんですね。このストレージサーバーに保存する時に、サムネイル画像を生成しますが、そのサムネイル画像がすごく小さい画像だったんです。

これをそのまま配信しているので、当然画質が悪いんですよ。(ただ、)サムネイル画像を生成するための大きい画像を保存してしまうと、弊社のストレージサーバーはオンプレのストレージサーバー(なの)で、ストレージがいっぱいになっちゃうと、新しいストレージサーバーに移さないといけません。

僕が入社した後に1回、ストレージの容量が少なくなったという理由でストレージサーバーを新しいものに切り替えています。ですが、数年後にまた同じことをやらなきゃいけなくなるんですよ。それってちょっと大変じゃないですか。

やまげん:はい。

金子:なので、ストレージサーバーの容量が上がるスピードをあまり上げたくないんですよ。というのと、今回はFastlyのイメージオプティマイザー、Fastlyの画像変換サービスを使っているんですけど、Fastlyとつなげるにあたり、自社のストレージサーバーだと、そのストレージの画像を自分たちで配信しないといけないんです。「NGINX」とかを使えばできますが、まあ手間じゃないですか。

やまげん:そうですね。

金子:なので、アプリケーション、PHPからS3に対してアップロードする。サムネイル画像を生成するための大きめの画像を生成して、それをS3に対してアップロードする。そのS3に対してアップロードされた画像を、Fastlyのイメージオプティマイザーで変換してそれを配信するという仕組みになっています。

エディターにちょっと機能を入れて、S3にすでにアップロードされている画像に関しては、そちらに置換して表示するようになっています。Fastlyから配信する時に、新しい画像フォーマットのWebPを有効にして配信されるので、今までよりも実は容量が小さかったりするんです。

やまげん:ええ、そうなんですか。

金子:今までより容量が小さいのに画質がよくなっているっていう機能が実現できています。

こういうことをやったり、工数を下げるために、S3にアップロードした画像をFastly経由で配信するようなことをやっていたり。細かいことを言うとまだいろいろあるんですけど(笑)。

やまげん:いやあ、すごいですね。WebPっていうのがまたアレなんですよね。画像配信の、なんて言うんですかね。

金子:フォーマットですね。“JPEGの新しいやつ”という感じです。

やまげん:なるほど。すごい。それで配信の最適化もして、画像も画質も上がるような感じなんですね。

金子:かなりクリアになっていますね。昔のやつと見比べると、明らかにクリアになっています。

やまげん:おおー、なるほど。そこも抜本的に変えてよりよくして、かつ、効率的な改善をしているということなんですね。

金子:そうですね。プレスリリース配信機能がPR TIMESでやはり一番使われている機能なので、一番使われている機能に対してちゃんと改善を入れていきたいですよね。ただ、現状はけっこう大変です。このサムネイルのこともかなり大変で。

大変だった理由がエディターなんですよね。プレスリリースを投稿する時にみんなが使っている管理画面があってそこに変更を入れたんですが、そこの変更がすっごく大変だったんですよ。なので、今度はここをリプレイスするプロジェクトを始めようとしています。

やまげん:ソフトウェア的に変更するのも大変になっていたというところで。

金子:これも大変だし、先ほど言ったバグが直っていないところが一番(大変)なんですよね。

やまげん:なるほど(笑)。

金子:「ここを直すとさらに壊れそうだから」という理由で、何も触っていない現状があります。しかもここはjQueryで作られていて、もうほとんど誰も触れない状況になってしまっている。無理に触った結果、今回いろいろと大変なことになったんです。

やまげん:はい(笑)。

金子:「ここはリプレイスしないともうこれ以上先に進めないね」という話になっています。なので、リプレイスプロジェクトを立ち上げます。

やまげん:立ち上げます(笑)。

金子:立ち上げます。

やまげん:この放送を聞いてるみなさんも、期待していていいんですかね。

金子:いつ出すかは言えないというか、現状まだ始まってすらいないので。僕もまったくわかりませんが、そのうち出ます。単純にソースコードが変わってリプレイスされるだけなので新機能が出るわけではありませんが、次なる新機能のためにそういったことをやるという覚悟です。

やまげん:なるほど、ありがとうございます。今後チャレンジしていきたいところのもお話もが聞けたので、すごく楽しかったです。

(次回に続く)