Yoast.comのウェブショップをEDDからWooCommerceに移行する
公開: 2018-02-27Yoastでは、ウェブサイトのパフォーマンスのあらゆる側面を最適化します。 私たちの目標は、Webサイトをより使いやすく、ナビゲートしやすく、より速く、より信頼できるものにすることで、Webをより良い場所にすることです。
2017年9月に、ウェブショップをEasy Digital Downloads(EDD)からWooCommerceに移行しました。ここでは、yoast.comで利用できるすべてのツール、製品、コンテンツを販売しています。 この投稿では、なぜそれを行ったのか、何を構築したのか、そして将来的に私たちとユーザーにとってどのようなメリットがあるのかを説明します。 WooCommerceは、今後何年にもわたって構築するための技術的基盤を提供してくれました。
なぜ変更するのですか?
Yoast.comは、プラグインの人気とSEOブログの視聴者の拡大という、2つの主要なコンポーネントによって推進される驚異的な成長を遂げています。 ただし、これら2つの要素の組み合わせにより、yoast.comは管理が難しいWebサイトになります。
歴史的に、このサイトは単純なWordPressのインストールから進化してきました。 Easy Digital Downloads(EDD)は、プレミアムプラグインの販売を容易にするために、Yoastの創設者であるJoostdeValkによって追加されました。 また、EDDを使用して、世界中のすべてのプレミアムインストールの更新を提供しました。
何年にもわたって、EDDが私たちのニーズに応えられるように、ますます多くの調整を行ってきました。 たとえば、お客様がユーロまたはドルで支払うことを可能にすることは、多大な努力でした。 将来的に他の通貨を追加したかったので、別の解決策を見つける必要がありました。
他のオプションを検討するとき、いくつかのニーズを考慮しました。
- 複数通貨の購入をサポートできること。
- 定期的な支払いをサポートできること。
- 統合を構築するためのコストとプラットフォームの保守性。
- ユーザーアカウントをサポートできること。
- SEOプラットフォームの作成。
- 将来の互換性を考慮して、5〜10年も機能するサイトを作りたいと考えています。
上記のすべてを達成するために、私たちは計画を立てなければなりませんでした。
アイデア
2017年1月、私たちは建築家のチームであるJoost、Omar、Jip、そして私とのミーティングを予定しました。 私たちは自分たちのニーズが何であるか、そしてどのようにそれらを最もよく満たすことができるかについて話し合いました。
私たちの最初の結論は、WordPressから離れたくないということでした。 現在、他のプラットフォーム用のプラグインがありますが、私たちはWordPressファンであり、その使命に深く関心を持っています。 WordPressは私たちのルーツであり、CMSとして非常にうまく機能しています。
なぜWooCommerceなのか?
次に、使用するeコマースプラットフォームを検討しました。 WordPressに最適なeコマースソリューションは何かを自問し、それがWooCommerceであるという結論に達しました。 しかし、EDDのように、WooCommerceは複数の通貨をサポートしていませんでした。 そのため、解決策が必要でした。
私はすべてがリミックスであるという考えの大ファンです。 私たちは、言語ごとに異なるサイトを使用するというアイデアに触発されました。これは、MultilingualPressプラグインによってうまく実行されたアイデアです。 そこで、リミックスしました。大量のカスタムコードを記述しなくても済むように、マルチサイトインストールを使用することにしました。
その結果、WooCommerceは異なる通貨を管理する必要がありません。 ドルサイトでは、WooCommerceはすべてをドルで行います。 ユーロサイトでは、WooCommerceはすべてをユーロで行います。 これにより、新しい通貨の追加も比較的簡単になります。 新しいサイトを追加して設定をコピーするだけです。 MultilingualPressと組み合わせることで、将来的にはさまざまな言語をサポートできるようになります。
WooCommerceは、いくつかの理由でyoast.comに最適であることになりました。
- 優れたデータモデル。
- 大規模なエコシステム。
- 組み込みのRESTAPIとWebhookのサポート。
- WooCommerceと組み合わせてプラグインをドッグフードする可能性。
- WooCommerceはeコマースドメインを解決します。 eコマースドメインの開発に多くの時間を費やしたくありませんでした。 SEOは私たちの専門知識なので、SEOに焦点を当てたいと思います。
- WooCommerceには、私たちが参加できる活気のあるコミュニティがあります。
eコマース:SKU、履歴レコード、および払い戻し
eコマースドメインに少し焦点を当てたいと思います。 ここで考慮すべき1つの側面は、SKUです。 すべての製品にはSKU(一意の識別子)があります。 SKUは余分なもののように聞こえるかもしれません。 データベースにIDがあるのにSKUが必要なのはなぜですか? しかし、その後、すべての企業のすべての財務部門がすでにこのシステムを導入していることに気付きます。 SKUは自動インクリメントされません—明確な方法で製品を追跡する方法が必要です。 名前はこれには適していません。 そのため、yoast.comでは、SKUは財務部門が製品の追跡に使用するのと同じ番号になりました。
もう1つの要件は、すべての購入の履歴を記録することでした。 WooCommerceはデフォルトでこれを行います。 注文が完了すると、それだけです。 すべてのデータは不変です。 顧客が名前、住所、または電子メールを変更した場合、新しい情報は新しい注文にのみ使用されます。 開発者にとって、これは奇妙に聞こえるかもしれませんが、実際には強みです。 事後に銀行が取引を変更することも望まないでしょう。取引が完了すると、取引は完了します。 突然変異はすべて新しいトランザクションです。
過去の記録を持つことは、払い戻しに関して最大の違いを生みます。 以前の設定では、返金された注文はエクスポートから消え、その月の収益が変わります。 WooCommerceでは、すべての払い戻しには独自の日付と金額があります。 ですから、月に一度行われると、それは本当に行われます。
WooCommerceでは、すべての払い戻しには独自の日付と金額があります。 ですから、月に一度行われると、それは本当に行われます。
Yoast.comからWooCommerceへの移行に関する技術的な詳細
移行
履歴データがたくさんあるため、大量の注文を移行する必要がありました。 大規模なデータセットを処理するように設計されたパンダと呼ばれるツールを選択しました。これは、一度にすべてを移行するのに適したツールです。 別の移行を計画した場合、おそらく別の方向に進むでしょう。数か月にわたって履歴データをゆっくりとフォーマットします。 これにより、実際の移動日に移行するデータの量が大幅に削減されます。
プロセスを必要以上に複雑にする主な問題点が1つありました。 すべてのデータがデータベースの1つのメタ値に保存されたため、シリアル化を解除する必要がありました。 PythonにはPHPの非シリアル化を行うための効率的で正しい方法がないため、このデータを非シリアル化できるようにするためにPHPにシェルアウトすることになりました。
データの集約
お気づきかもしれませんが、現在2つのサイトがあります。 ただし、すべてのデータの概要を1か所にまとめたいと考えています。 これが、MyYoastを構築する理由の1つです。 私たちが受け取るすべての注文はMyYoastに同期されます。 これは、MyYoastがすべてを知っていることを意味します。
WooCommerceには、すべての注文を同期するシステムがあります:webhooks。 一般に、Webhookの最大の欠点は、受信システムがダウンしている場合、Webhookが受信されないことです。 webhookのコードを見ると、次のスニペットが見つかります。
「`
/ *
*他のプラグインがrabbit/zeromqのようないくつかのメッセージキューの配信をインターセプトできるようにします
* /
return apply_filters('woocommerce_webhook_should_deliver'、$ should_deliver、$ this、$ arg);
「`
コメントで提案されているようにメッセージキューを使用することを検討しましたが、より単純なアプローチを採用しました。
RubyonRailsコミュニティからdelayed_jobプロジェクトがあります。 ニーズに合ったPHPポートを見つけました。 遅延ジョブは、その名前が示すとおりに実行されます。つまり、後で実行されるジョブをスケジュールします。 これは、仕事が失われることは決してないことを意味します。 また、ジョブが失敗した場合は、さらに4回再試行されます。 その後、ジョブを使用して、問題が発生したことをデバッグできます。 これにより、非常に堅牢なセットアップが可能になります。
WebhookをカスタムダミーURL`http://my-yoast-job.url`に送信するようにWooCommerceを構成しました。 これにより、コードからこれらのリクエストを確実にキャッチできます。 ジョブのスケジュールを担当する`Scheduler`クラスが1つあります。 Webhookリクエストをキャッチし、代わりにジョブに変換します。
yoast.comの基本的な構成要素ごとに1つずつ、ジョブを処理するクラスがいくつかあります。 その後、ジョブはバックグラウンドでワーカーによって処理されます。 このプロセスは迅速であるため、顧客はMyYoastで製品をすぐに見ることができます。
アプリケーションとしてのWordPress
The Twelve-Factor Appを一度も読んだことがない場合は、読むことを強くお勧めします。 これは、Webアプリケーション開発のための非常に堅牢なフレームワークを示唆しています。 これはWordPressコンテキストにどのように変換されますか? あなたが思っているよりはましだ。
WordPressには、セットアップを困難にするいくつかの独自の機能があります。 ただし、これらを回避して、堅牢なWordPressインストールを取得できます。 これらの1つだけを実行する場合は、それが依存関係の要因になるはずです。 Composerの使用を開始してください! ここにあり、動作します。 Rarstは、WordPress開発にComposerを使用する方法の概要を作成しました。 自動更新は、複雑なWebアプリケーションのオプションではありません。 したがって、別のソリューションが必要であり、Composerは非常に優れた仕事をします。
パフォーマンス
オブジェクトキャッシュを使用せずに開始しました。 それは悪い考えであることが判明しました。 WooCommerceを使用して大量の販売を処理する場合は、オブジェクトのキャッシュが必要です。 それがなければ、注文モデルは、その注文に関するすべての要求で完全に再インスタンス化される必要があります。 注文モデルは多くのページで必要になるため、非常にコストがかかります。 少なくとも、すべてのチェックアウトページが注文にアクセスする必要があります。
また、キャッシュなしでパフォーマンスを向上させるために、WooCommerce自体にいくつかのプルリクエストを作成しました。 これらの1つは、通貨をキャッシュするための変更でした。 変更前は、コードの一部に1つの通貨が必要になるたびに、すべての通貨が変換されていました。 各ショップが1つの通貨でしか運営されていないことを考えると、これは非常に非効率的です。
WooCommerce自体の内部で簡単に修正できなかったことの1つは、注文とサブスクリプションの検索でした。 これを行うと、ウェブサイト全体を停止させる可能性のあるクエリが発生します。このクエリには投稿メタの検索が多数含まれており、それらには長い時間がかかります。 MyYoastの上に独自の検索機能を構築することで、この問題を回避しました。
メタ検索の問題は、WooCommerceがカスタムテーブルを使用した場合にも解決されます。これは、幸いにもWooCommerceの技術ロードマップにすでに含まれています。 この問題は、私たち自身のプラグインについての考えにも役立ちました。 Yoast SEOが作成するメタキーの量を減らすことはできますか? その結果、独自の技術ロードマップにもカスタムテーブルの作成を追加しました。
WordPressプラグインとWooCommerce拡張機能の現在のリスト
着陸した場所を包括的に把握するために、現在使用している、ストアとしてのサイトの機能に関連するプラグインのリストを示します。 完全なリストには、55のアクティブなプラグインが含まれています。
- CMB2:投稿タイプにカスタムフィールドを追加するために使用されます。
- CMB2フィールドタイプ:複数の投稿をメタ値として添付するために使用されます。
- CMB2投稿検索フィールド:メタ値として添付する単一の投稿を検索するために使用されます。
- Google認証システム:ログインに2FAを追加します。
- Google認証システム、ユーザーごとのプロンプト:この方法で、すべてのYoast従業員は2FAを使用できますが、顧客は使用する必要はありません。
- MailChimpforWordPressおよびMailChimpforWordPress –プレミアム:注文をMailChimpに接続するために使用されます。
- メンバー:サポートエンジニアなど、さまざまな役割へのアクセス許可を管理します。
- MultilingualPress:マルチサイト内のさまざまなサイトを管理するために使用されます。
- MyYoastカスタムログイン:ログイン画面のスタイルを設定します。
- WordPressのNewRelicレポート:NewRelicを使用してパフォーマンスを追跡します。
- 消印:メールを確実に送信するため。
- ロマンス管理者の配色:誰もが自分たちの生活に少しピンクが必要です!
- WooCommerce:ご想像のとおり、yoast.comで注文を処理します。
- Yoast SEO:WooCommerce:WooCommerceとYoastSEOの間に互換性を追加します。
- Yoast SEO Premium:リダイレクト、内部リンクの提案、および複数のキーワードに使用されます。
WordPressプラグインとWooCommerce拡張機能の現在のリスト
- WooCommerce –国ベースの支払い:さまざまな国の顧客にさまざまな支払い方法を表示するために使用されます。
- WooCommerce AdyenCw:Adyen支払いゲートウェイをWooCommerceに追加するために使用されます。
- WooCommerceクーポンリンク:特定のクーポンを自動的に適用するリンクを作成するために使用されます。
- WooCommerce Dynamic Pricing :一括購入の割引を提供するために使用されます。
- WooCommerce Email Customizer:WooCommerceが送信するEメールのスタイルを設定するために使用されます。
- WooCommerce EU VAT番号:ヨーロッパの顧客のVAT番号を収集し、VIESサービスを使用してその番号を検証するために使用されます。
- WooCommerce Give Products:製品をプレゼントするために使用されます。
- WooCommerce PayPal Expressチェックアウトゲートウェイ:WooCommerceサブスクリプションをサポートするPayPal支払いゲートウェイをWooCommerceに追加するために使用されます。
- WooCommerce製品バンドル:ストアでバンドルを作成するために使用されます。
- WooCommerceサブスクリプション:プラグインのサポートとアップデートの残り時間を追跡するために使用されます。
要点と結果
この新しいプラットフォームは2017年8月29日にリリースされました。その後の数週間で、サイトのパフォーマンスが大幅に向上しました。 達成したいすべての目標を達成しました。 移行以来、他にも多くのものを構築し始めました。 私たちのサポートチームは、アカウントの払い戻しと転送をはるかに簡単に行えるようになりました。 Yoastアカデミーをマルチサイトに移行しました。 そして、2018年には次のようなエキサイティングな計画がたくさんあります。
- 英国ポンドで販売するショップを追加します。 過去の選択とWooCommerceへの移行のおかげで、これを1日で行うことができ、追加のコードはほとんど必要ありません。 営業チームの営業ダッシュボードを追加します。
- 営業チームの営業ダッシュボードを追加します。
- プレミアムプラグインにComposerサポートを追加します。
WooCommerceは、Yoastに、次の10年に向けてプラットフォームを構築および改善するための技術的基盤を提供しました。 既存のWebショップを別のプラットフォームに移行することを検討していますか? もうこれをしましたか? コメントであなたの経験を共有してください。