WordPress案件のバージョンアップを行っている話

こんにちは、ソフトウェアエンジニアの荻島です。 当社で現在受諾案件の運用開発(バグ修正や追加改修)を主に対応しています。

最近の業務の一つとしてやや古いPHPで稼働しているWordPressのバージョンアップを絶賛対応中なので、本日のエントリーはそれにまつわるあれこれを書ければと思っています。

バージョンアップに至った経緯

発端はある機能の実現のために必要なライブラリが現行のPHPでは動かないということが発覚したことでした。

対象のプロジェクトで使用しているPHPは7系で、既に最新の7.4もEOLを迎えていたため、

  1. バージョンアップ時に最新の8系にアップデートを行う
  2. 使用しているWP本体のバージョンやプラグインなども最新の8系に対応したものにアップデートする
  3. アップデート後に本来実装したかった機能を実装する

という話に広がり、今回の改修PJがスタートした形です。

※システムのバージョンアップをした方がいい理由に関しては先日弊社CTOの山岡が記事を書いているのでそちらも是非読んでみてください! tech.innovator.jp.net

一次調査開始!

最初はどこから手を付けて良いのか分からない状態だったので、まずは全体の工数感の洗い出しのために一次調査としてフェーズを切り、対応が必要そうな部分の洗い出しを行いました。

幸いなことに今回の案件は

  1. 本番環境はAWS上で稼働
  2. メディアファイルはS3に上がっていてCloudFrontから配信されている
  3. サーバーはEC2だがEBSにあるのはソースコードと若干のキャッシュファイルだけ

という状態だったので比較的インフラ周りは気にすることが少なそうだなという印象。 アプリケーション側の主な対応は

  • プラグインのアップデート
  • 独自実装している部分(とそれに使われているライブラリ)のアップデート

であろうとアタリをつけて手元の開発環境で調査を実施、いくつか課題を発見しました。

課題①:ローカル開発環境

現行のローカル環境はDockerのAlpineベースのコンテナを利用しているのですが、何も考えずにPHPのバージョン指定だけ変えたところ、PHPのバージョンアップに伴い拡張周りの変更などが入った影響でイメージがビルドできなくなりました。しかも自分はAlpine系のコンテナに関する知見(主にAPK周り)がなく、なかなかうまく解決ができず...

こちらに関しては本番のOSとローカルのOSが元々揃っていなかったのと、自分でなんとかできるようにするしかなかったことから、コンテナを自分でも多少触ったことのあるDebianベースのものに切り替えることにしました。

課題②:メジャーバージョンの壁

ローカル環境が一先ず動くようになったところで次は

  • 元々少し古めのバージョンのPHPで動いていたこともあり、全体的にプラグインのソースも古め
  • プラグインを最新にするにはそもそもPHPのバージョンを上げないといけない
  • PHPのバージョン一気に8系まで上げると一部プラグインが壊れて動かなくなる

という合わせ技の課題にぶつかりました。

ここに関しては

  1. ローカルの環境を7系最新の7.4まで上げる
  2. WP本体やプラグインを最新にする(この時点で対応していないプラグインやライブラリに対処)
  3. ローカル環境を8系に上げる
  4. 再度プラグインとライブラリを精査して対応していないものに対処

という風に少し段階を踏んで調査を進めることにしました。

課題③:DBスキーマの変更を伴うプラグインの更新

一部のプラグインではアップグレード時にDBのスキーマ変更が必要なものがありました。 対象のプロジェクトではサーバーを冗長構成にしているのですが、DBは一つのRDSインスタンスを共有しているのでプラグインのバージョンアップは同時に行わないとプラグインが動かなくなるということが判明。

元々は段階的に新しいPHPのインスタンスをリリースできればなーと考えていたのですが、これにより本番デプロイ時は一気に全てのインスタンスを入れ替える必要が出てきてしまいました...

まとめ

一次調査で当初は予想していなかった課題もいくつか出てきましたが、ローカル環境がDocker化されていたおかげで比較的容易に調査が行なえ、おおよそやらないといけないところも見えてきました。

今回の調査では普段の改修や追加あまり意識することのないようなプラグインのコードや使用している外部ライブラリの実装/テストコードになどにも目を向けることになり、改めて先輩方から聞いていた

  • 技術選定時にはメンテナンスされているかを重視しないといけない
  • バージョンアップはとにかく地道にやるだけ
  • やれば力が付く、レガシー案件は宝の山

みたいなところを肌で感じられるいい機会になりました。

バージョンアッププロジェクトはまだまだ始まったばかりなので、しっかりと移行をやりきって経験値にしていきたいと思います!

お読み頂きありがとうございました!

Vimiumで快適ブラウジング、ときどき除外設定

こんにちは、アプリケーションエンジニアのたべたつです。

私は普段の開発ではエディタにVim拡張を入れて使っているのですが、Vimの使用感になれるとVimのキーバインドでブラウジングしたくなります(なりますよね?)

本日紹介するのはそんなあなたの願いを叶えてくれるChrome拡張がこちら!

続きを読む

システムの保守には修繕計画が必要という話

こんにちは、CTOの山岡(@hiro_y)です。

ソフトウェア開発(特にWebアプリケーション開発)に携わっていると「レガシー」という表現をよく聞きます。でもよくよく考えてみると、ソフトウェアは放っておいても腐りませんし、錆びてしまうこともありません。しかし現実問題として、ソフトウェアは放っておくと否応なく「レガシー化」します。どうしてそうなってしまうのでしょうか。

(「レガシー」それ自体は悪い意味の言葉ではないはずですが、不思議とソフトウェア開発の文脈だとよくない意味合いの方が強くなってしまいますね…。)

続きを読む

SDP(Salesforce Data Pipeline)で大量データをSalesforceに集約する

こんにちは、ソフトウェアエンジニアの小野寺です。

データ利活用のためにSalesforceを導入してる企業は多いのではないでしょうか。システムに散らばる情報をSalesforceに集約して営業戦略に役立てている企業が増えつつあると思います。

SDP(Salesforce Data Pipeline)について

大量データを連携する場合はSDPを検討してみても良いかもしれません。SDPはSalesforceとデータオブジェクトをすばやく同期してくれるサービスです。 実際にSDPを用いたRDSとSalesforce連携を順を追ってご紹介します。

続きを読む

zassouを続けている話

こんにちは、CTOの山岡(@hiro_y)です。

以前、当社のコーポレートブログ「OMOSAN」に「zassouを始めた話」を書きました。当時はコロナ禍が始まり、リモートワーク導入も緒についたばかり。肩肘を張らずに1on1を続けていく仕組みとして「雑談と相談」を月に一度行うようにしたのでした。当時どのような経緯で始め、何を考えていたかはあちらの記事をご覧ください。

それから二年が経ちましたが、今でもzassouを続けています。形式はオンラインだけでなく、オフライン(対面)で行うことも増えてきました(当社の勤務形態は基本、出社とリモートのハイブリッド形式です)。どのように続けて現在に至っているか、簡単にふりかえります。

続きを読む

STUDIOで画像が流れるスライダーの実装

こんにちは、フロントエンドエンジニアのうじたです。

皆さんは、ノーコードWebサイト制作ツールのSTUDIOを使ったことがありますか? 今回はこのSTUDIOで以下のように画像が永遠と流れるスライダーの実装方法について紹介します。(画像が永遠と流れるスライダーの正式名称あれば教えてください)

画像が流れるスライダー

続きを読む