SDKのカスタマイズ

SDKのカスタマイズ

お知らせ:当社は、お客様により充実したサポート情報を迅速に提供するため、本ページのコンテンツは機械翻訳を用いて日本語に翻訳しています。正確かつ最新のサポート情報をご覧いただくには、本内容の英語版を参照してください。

概要。

SDKのカスタマイズとは、アプリケーションや開発環境固有の要件に合わせてソフトウェア開発キット(SDK)を調整することです。SDKには通常、開発者によるアプリケーション構築を支援するツール、ライブラリー、ドキュメント、コードサンプルが含まれています。

PageSense SDKを初期設定で初期化すると、次の設定でPageSenseClientインスタンスが作成されます。
  1. ポーリング間隔:10秒(10,000ミリ秒)に設定されます。SDKは、プロジェクト設定の更新を確認するため、10秒ごとにPageSenseサーバーにアクセスします。
  2. ログレベル:INFOに設定されます。SEVERE、ERROR、WARNING、INFOの各レベルのログメッセージがすべて記録されます。
  3. ロガー:SDKでは、すべてのログをアプリケーションのコンソールに出力する組み込みロガーが使用されます。ログの記録を開始するための追加設定は必要ありません。
これらの初期設定は、すばやく連携する場合に適しており、ほとんどの標準的な用途に対応できます。

カスタマイズ可能な設定。

PageSense SDKには、柔軟性とカスタマイズ性を高めるため、任意で使用できる設定機能が複数用意されています。これらの機能を使用すると、SDKの動作をさまざまな面から制御できます。SDKの初期化時にこれらのオプションを指定することで、アプリケーション固有の要件や環境に合わせてSDKの動作を調整できます。

機能

説明

ポーリング間隔

SDKがプロジェクト設定の更新を確認するためにPageSenseサーバーへアクセスする頻度を指定します。これにより、SDKインスタンスと、PageSenseアプリケーションで設定された最新のプロジェクト設定との同期が維持されます。

ロガー

カスタムロガーを連携し、SDKログを記録して保存する場所や方法を制御できます。SDKログをエンタープライズ全体のログ記録フレームワークに合わせる場合に特に便利です。

ユーザーストレージサービス

カスタムユーザーストレージ機能を使用して、異なるA/Bテスト間でバリエーションの割り当てを保持できます。

ログレベル

記録するログメッセージの最低レベルを設定します。サポートされているレベルは次のとおりです:TRACEDEBUGINFOWARNERRORSEVERE

ポーリング間隔。

addPollingInterval関数を使用すると、PageSense SDKのポーリングサービスのポーリング間隔を設定できます。
初期設定では、ポーリング間隔は10秒に設定されています。次のようにaddPollingInterval関数を呼び出すことで、ポーリング間隔を変更できます。

コード例。

  1. PageSenseClient pageSenseClient = PageSenseClientBuilder.getBuilder(projectSettings).addPollingInterval(60000).buildClient();

パラメーターの詳細。

パラメーター
種類
説明
addPollingInterval
整数
SDKのポーリングサービスのポーリング間隔を設定します

このAPIでは、ポーリング間隔をミリ秒単位で指定します。上記の例では、ポーリング間隔が60,000ミリ秒、つまり60秒に設定されています。
1. アプリケーションの更新頻度、想定されるトラフィック量、サーバーの処理性能に基づいて、ポーリング間隔を選択します。
2. 短い間隔(<10秒)を設定すると、次の問題が発生する可能性があります。
a. サーバー負荷の増加。
b. ネットワークトラフィックの増加。
c. 更新頻度が高い場合に競合状態が発生する可能性。
3. 長い間隔(>5分)を設定すると、次の問題が発生する可能性があります。
a. PageSenseで変更された最新のプロジェクト設定が反映されるまでに遅延が生じる。
b. 古いプロジェクト設定に基づくA/Bテストがユーザーに配信される。

SDKロガーのログレベル。

addlogLevel関数を使用すると、PageSense SDKの組み込みロガーのログレベルを設定できます。この設定では、PageSenseClientが書き込むログの詳細度を制御できるため、ファイルシステムの容量に応じてログストレージを効率的に管理できます。
ログレベルを指定すると、記録されるログメッセージの最低重要度が設定されます。ログレベルは文字列として指定し、TRACE、DEBUG、INFO、WARNING、ERROR、SEVEREのいずれかの値を設定できます(大文字と小文字は区別されません)。

コード例。

  1. PageSenseClient pageSenseClient = PageSenseClientBuilder.getBuilder(projectSettings).addlogLevel(“DEBUG”).buildClient();

パラメーターの詳細。

パラメーター
種類
説明
logLevel
文字列
記録するログの最低重要度を指定します

上記の例では、ログレベルがDEBUGに設定されています。そのため、重要度がDEBUG、INFO、WARNING、ERROR、SEVEREのすべてのログメッセージが記録され、顧客のコンソールに書き込まれます。

カスタムロガー。

PageSense SDKでは、SDKの組み込みロガーに加えて、アプリケーションのイベントを記録する独自のカスタムロガーを連携できます。既存のログ記録フレームワークを使用する場合や、ログの処理方法をより詳細に制御する必要がある場合に便利です。

addCustomLogger関数を使用すると、PageSense SDKがすべてのイベントのログ記録に使用する、ユーザー定義のロガーを登録できます。カスタムロガーを指定すると、PageSense SDKは組み込みロガーの代わりに、指定された実装を通じてすべてのログメッセージを処理します。

コード例。

  1. PageSenseClient pageSenseClient = PageSenseClientBuilder.getBuilder(projectSettings).addCustomLogger(customLogger).buildClient();

パラメーターの詳細。

パラメーター
種類
説明
customLogger
PageSenseLoggerのインスタンス
記録するログの最低重要度を指定します

上記の例で、customLoggerはPageSenseLoggerインターフェースを実装するクラスのインスタンスです。addCustomLoggerに渡す前に、必要に応じてログ記録の動作を処理できるよう、カスタムロガーにこのインターフェースを実装する必要があります。

PageSenseLoggerインターフェースを実装するコード例:

  1. import com.zoho.pagesense.logging.PageSenseLogger;
  2. import org.slf4j.Logger;
  3. import org.slf4j.LoggerFactory;

  4. /**
  5. * PageSenseLoggerシステムと連携するSLF4Jベースのロガー実装。SLF4Jで有効になっている
  6. * 最上位のログレベルを自動的に検出し、PageSenseLoggerを設定します。
  7. */
  8. public class Slf4jLogger extends PageSenseLogger {

  9. /**
  10. * 実際のログ記録呼び出しを委譲するために使用するSLF4Jロガーインスタンス。有効になっている
  11. * 基盤のSLF4Jバインディングのレベルに基づいてメッセージを記録します。
  12. */
  13. private final Logger logger;

  14. /**
  15. * 指定したクラス名のSlf4jLoggerを構築します。
  16. * @param className ログ記録の対象となるクラス
  17. */
  18. public Slf4jLogger(String className) {
  19. // SLF4Jロガーインスタンスを作成する
  20. Logger slf4jLogger = LoggerFactory.getLogger(className);
  21. // クラス名と最大ログレベル(String形式)を指定してスーパークラスのコンストラクターを呼び出す
  22. super(className, determineMaxLogLevel(slf4jLogger));

  23. // ロガーインスタンスを初期化する
  24. this.logger = slf4jLogger;
  25. }

  26. /**
  27. * 現在有効になっている最上位のSLF4Jログレベルを判定し、
  28. * PageSenseLoggerで想定される形式に一致するStringとして返します。
  29. * @param logger SLF4Jロガーインスタンス
  30. * @return 有効になっている最上位のログレベル名
  31. */
  32. private static String determineMaxLogLevel(Logger logger) {
  33. if (logger.isTraceEnabled()) return 'TRACE';
  34. if (logger.isDebugEnabled()) return 'DEBUG';
  35. if (logger.isInfoEnabled()) return 'INFO';
  36. if (logger.isWarnEnabled()) return 'WARNING'; // SLF4JではWARNを使用するため、WARNINGに対応付ける
  37. if (logger.isErrorEnabled()) return 'ERROR';
  38. // FATALに対応するSLF4Jメソッドはないため、通常、SEVEREにはSLF4JのERRORまたはその他のシステムのFATALを対応付ける
  39.         
  40. // どのレベルも有効でない場合は、初期値としてINFOを返す
  41. return 'INFO';
  42. }

  43. /**
  44. * TRACEレベルのメッセージを記録します。
  45. * 通常、詳細なデバッグ情報に使用します。
  46. */
  47. @Override
  48. public void trace(String logMessage) {
  49. if (logger.isTraceEnabled()) {
  50. logger.trace(logMessage);
  51. }
  52. }

  53. /**
  54. * DEBUGレベルのメッセージを記録します。
  55. * アプリケーションの処理フローの診断に役立つ一般的なデバッグ情報に使用します。
  56. */
  57. @Override
  58. public void debug(String logMessage) {
  59. if (logger.isDebugEnabled()) {
  60. logger.debug(logMessage);
  61. }
  62. }

  63. /**
  64. * INFOレベルのメッセージを記録します。
  65. * 通常、一般的な実行時イベントに使用します。
  66. */
  67. @Override
  68. public void info(String logMessage) {
  69. if (logger.isInfoEnabled()) {
  70. logger.info(logMessage);
  71. }
  72. }

  73. /**
  74. * WARNINGレベルのメッセージを記録します。
  75. * エラーではないものの、潜在的な問題や予期しない状況があることを示します。
  76. */
  77. @Override
  78. public void warn(String logMessage) {
  79. if (logger.isWarnEnabled()) {
  80. logger.warn(logMessage);
  81. }
  82. }

  83. /**
  84. * ERRORレベルのメッセージを記録します。
  85. * アプリケーションが実行を続けられる可能性のあるエラーイベントに使用します。
  86. */
  87. @Override
  88. public void error(String logMessage) {
  89. if (logger.isErrorEnabled()) {
  90. logger.error(logMessage);
  91. }
  92. }

  93. /**
  94. * SEVEREレベルのメッセージを記録します。
  95. * 重大なエラーとして扱い、明確にするため[SEVERE]プレフィックスを付けてSLF4JのERRORレベルに対応付けます。
  96. */
  97. @Override
  98. public void severe(String logMessage) {
  99. if (logger.isErrorEnabled()) {
  100. logger.error('[SEVERE] ' + logMessage);
  101. }
  102. }
  103. }
SDKのログレベルをすでに定義しており、customLoggerを使用してSDKを初期化する場合、個別指定のロガーのログレベルがPageSense SDKのログレベルより優先されます

ユーザーストレージサービス

ユーザーストレージサービス(USS)は、プロジェクト内の複数のA/Bテストにわたって、ユーザーに割り当てられたバリエーションを永続的に保存できる外部ストレージ機能です。この機能は、プロジェクトの設定が変更された場合でも、ユーザーに同じバリエーションを継続して表示し、一貫したバリエーションの割り当てを維持する場合に特に役立ちます。

設定変更の例は次のとおりです。
  1. 新規バリエーションの追加
  2. テストのトラフィックの割り当ての調整
  3. バリエーション間のトラフィック配分の調整

ユーザーストレージサービスを使用すると、長期にわたってユーザーエクスペリエンスを維持し、A/Bテスト結果の整合性を保つことができます。USSの利用は任意です。有効にするには、UserStorageServiceインターフェイスを実装し、addUserStorageService関数を使用して、実装したインスタンスをPageSense SDKに渡します。

コード例

  1. PageSenseClient pageSenseClient = PageSenseClientBuilder.getBuilder(projectSettings).addUserStorageService(userStorageService).buildClient();
上記の例で、userStorageServiceは、UserStorageServiceインターフェイスを実装するユーザー定義クラスのインスタンスです。

パラメーターの詳細

パラメーター
種類
説明
userStorageService
UserStorageServiceを実装するクラスのインスタンス
フルスタックA/Bテストで、ユーザーに割り当てられたバリエーションを永続的に管理するためのカスタム実装

PageSense Java SDK向けUserStorageServiceインターフェイスの実装例

  1. import java.util.Map;
  2. import java.util.concurrent.ConcurrentHashMap;
  3. public class IntegratedUserStorageService implements UserStorageService {
  4. // ストレージ変数を宣言
  5. private final Map<String, String> userProfileStorage = new ConcurrentHashMap<>();
  6. @Override
  7. public String lookUp(String userId) {
  8. // ユーザーIDを検証
  9. if (userId == null || userId.trim().isEmpty()) {
  10. throw new IllegalArgumentException('ユーザーIDをnullまたは空にすることはできません');
  11. }
  12. return userProfileStorage.get(userId);
  13. }
  14. @Override
  15. public void save(IUserProfile userProfile) {

  16. if (userProfile == null || userProfile.getUserId() == null ||
  17. userProfile.getUserId().trim().isEmpty()) {


  18. throw new IllegalArgumentException('UserProfileまたはユーザーIDをnullまたは空にすることはできません');
  19. }
  20. try {
  21. // ユーザープロファイルのJSON文字列を取得
  22. String userProfileJSON = userProfile.getUserProfileJSONString();
  23. // ユーザープロファイルのJSON文字列を保存
  24. userProfileStorage.put(userProfileJSON.getUserId(), userProfileJSON);
  25. } catch (Exception ex) {
  26. throw new RuntimeException('ユーザープロファイルの保存に失敗しました:' + ex.getMessage(), ex);
  27. }
  28. }
  29. }

このドキュメントが、設定を円滑に進めるための一助となれば幸いです。詳しい説明が必要な場合やご質問がある場合は、support@zohopagesense.comまでお気軽にメールでお問い合わせください。