Shopify App Bridgeのパフォーマンス改善と予期せぬ変更への対応

1. 技術的課題の定義と現状分析

Shopifyでは、スクリプトタグを介したApp Bridgeを使用する組み込みShopifyアプリのロード時間を半分にする機能のテストを行っています。しかしながら、アプリがドキュメント化されていないname="app-iframe"プロパティに依存してiframeにアクセスする場合、アプリが正常に動作しないケースが報告されています。

2. 具体的な技術的ソリューションの提案

あなたのアプリがname="app-iframe"プロパティを使用して組み込みアプリのiframeを見つけている場合、以下のスニペットを参照するか、App Bridge React v4へのアップグレードを検討してみてください。

3. 実装手順とコード例

以下のスニペットを参考に、name="app-iframe"プロパティの使用をやめ、新しいフレーム名を使用するようにコードを修正します。この修正により、パフォーマンス改善が適用される2024年5月以降もアプリが正常に動作し続けます。


const APP_ID = ''; // accessible via window.shopify.config.apiKey

interface FrameList extends Window {
   [index: number]: Window;
}

function findAppFrameSafely(frameName: string) {
   if (window.parent) {
       const frames = window.parent.frames as FrameList;
       for (let i = 0; i < frames.length; i++) {
           const frame = frames[i];
           try {
               if (frame.name === frameName) {
                   return frame;
               }
           } catch (_) {
               // noOp
           }
       }
   }
}

const legacyFrameName_doNotUse = 'app-iframe';
const futureProofFrameName = `frame:${APP_ID}/main`;

const appFrame = findAppFrameSafely(legacyFrameName_doNotUse) || findAppFrameSafely(futureProofFrameName);

// continue doing whatever you were doing with the app's main frame
appFrame?.postMessage({}, window.location.origin);

4. パフォーマンス・コスト分析

この変更により、埋め込みShopifyアプリのロード時間が半分になる可能性があります。ただし、アプリのiframeへのアクセス方法を変更するため、コードの修正が必要となります。これにより短期的に開発コストが発生する可能性がありますが、ロード時間の短縮によるUXの向上を考慮すると、長期的な視点で見れば十分な価値があると言えるでしょう。

5. 実装時の注意点・ベストプラクティス

この変更により、name="app-iframe"プロパティは一意でなくなります。そのため、新しいフレーム名を使用してアプリのiframeを見つけることが必要となります。さらに、今後の変更に備えて、フレーム名にAPP_IDを含む新しいパターンを採用することを推奨します。

6. 次のステップ・発展案

Shopifyは、アプリのパフォーマンスを向上させるために、新しい機能のテストとロールアウトを続けています。開発者としては、これらの変更に迅速に対応することで、アプリのパフォーマンスとユーザーエクスペリエンスを最適化することが可能です。最新の情報に常に目を光らせ、適切な対応を行うことをお勧めします。

参考記事: App Bridge Performance Enhancements & Potentially Breaking Changes