Skip to content

Conversation

@mtdkei
Copy link
Contributor

@mtdkei mtdkei commented Mar 28, 2025

チケットへのリンク / 変更の理由(元のissueがあればリンクを貼り付ければOK)

#660

どういう変更をしたか?

スクリーンショットまたは動画

変更前 Before

変更後 After

実装者の確認事項

実装者はレビュワーに回す前に以下の事を確認してチェックをつけてください。

  • 複数の意図の変更 ( 機能の不具合修正 + 別の機能追加など ) を含んでいないか?
  • Files changed (変更ファイル)の内容は目視で確認したか?
  • readme.txt に変更内容は書いたか?
  • 本当にちゃんと確認をしたか?

プログラムの変更の場合

テストを書かないのは普通ではありません。書けるテストは極力書くようにしてください。

  • 書けそうなテストは書いたか?

変更内容について何を確認したか、どういう方法で確認をしたかなど

レビュワーに回す前の確認事項

  • 実装者はこのテンプレートのチェック項目をちゃんと確認してチェックしたか?

レビュワー確認方法・確認内容など


レビュワー向け

レビュワーが確認して変更が反映されていない場合の確認事項

レビューしてみて意図した動作をしない場合は再度ビルドするなど以下の項目を確認してください。

  • プルしたか?
  • ビルドしたか?
  • ビルドしたディレクトリは正しいか(別の開発環境のディレクトリを見ていないか)?
  • npm install したか?
  • composer install したか?
  • キャッシュをクリアして確認したか?

Summary by CodeRabbit

  • 新機能
    • 最初のスライド画像を優先的にプリロードするようになりました。PC/モバイル両対応で、ビューポートに応じた最適な画像をプリロードし、LCP改善に寄与します。表示設定が無効なスライダーではプリロードを行いません。
  • ドキュメント
    • Changelog に「最初のスライド画像プリロード」を追加しました。

✏️ Tip: You can customize this high-level summary in your review settings.

@coderabbitai
Copy link

coderabbitai bot commented Dec 21, 2025

Walkthrough

スライダーの最初の画像をプリロードする処理を追加。コンストラクタで wp_head にフックを登録し、静的メソッド preload_first_slide_image() で PC/モバイルのバリアントを考慮した link rel="preload" 出力と最初の画像に対する fetchpriority="high" を出力するようにした。

Changes

Cohort / File(s) Summary
First Slide Image Preload Feature
_g3/inc/ltg-g3-slider/package/class-ltg-g3-slider.php
コンストラクタで wp_head フックを登録し、最初のスライド画像をプリロードする新しい静的メソッド public static function preload_first_slide_image() を追加。PC/モバイル両バリアントの判定に応じて単一またはレスポンシブな link rel="preload" タグを出力し、最初の画像要素に fetchpriority="high" を付与する条件ロジックを実装。
Documentation
readme.txt
Changelog に "[ G3 ][ Add function ] Add preload for first slide image to improve LCP" を追記。

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~8 minutes

  • preload_first_slide_image() の早期リターン条件(スライダー非表示時)確認
  • 出力される link rel="preload" の属性(as, type, href, media 等)と MIME タイプ推定の整合性確認
  • PC/モバイル両画像が同一の場合や片方のみ存在するケースの分岐網羅性確認

Poem

🐰 ぴょんと跳んで一枚先取り、
目に映る前に足音軽やか。
早く届く光の道しるべ、
LCP に向けて小さなダッシュ。
ぴょん♪✨

Pre-merge checks and finishing touches

✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed プルリクエストのタイトルは、スライドショーの最初の画像のプリロード設定によるLCP改善という主要な変更を明確に要約しており、実装内容と一致しています。
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feature/g3/top-slider-lcp

📜 Recent review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 224150c and 2d5694f.

📒 Files selected for processing (1)
  • _g3/inc/ltg-g3-slider/package/class-ltg-g3-slider.php
🚧 Files skipped from review as they are similar to previous changes (1)
  • _g3/inc/ltg-g3-slider/package/class-ltg-g3-slider.php

Comment @coderabbitai help to get the list of available commands and usage tips.

@mtdkei mtdkei marked this pull request as ready for review December 21, 2025 23:54
@mtdkei
Copy link
Contributor Author

mtdkei commented Dec 21, 2025

@CodeRabbit
レビューしてください。

@coderabbitai
Copy link

coderabbitai bot commented Dec 21, 2025

@mtdkei さん、承知いたしました。PRのレビューを開始いたします。

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (2)
_g3/inc/ltg-g3-slider/package/class-ltg-g3-slider.php (2)

22-22: スライダー表示条件のチェックが必要です

このフックはすべてのページで実行されますが、スライダーはトップページにのみ表示される可能性があります。preload_first_slide_image() メソッド内で、is_front_page()$options['top_slide_display'] をチェックして、スライダーが実際に表示されるページでのみプリロードタグを出力するようにすることを推奨します。

🔎 推奨される修正案

preload_first_slide_image() メソッドの冒頭に条件を追加:

 public static function preload_first_slide_image() {
+	// Only preload on pages where the slider is displayed
+	if ( ! is_front_page() ) {
+		return;
+	}
+
 	$options = get_option( 'lightning_theme_options' );
 	$default = function_exists( 'lightning_g3_slider_default_options' ) ? lightning_g3_slider_default_options() : array();
 	$options = wp_parse_args( $options, $default );
+
+	// Check if slider is set to display
+	if ( isset( $options['top_slide_display'] ) && 'hide' === $options['top_slide_display'] ) {
+		return;
+	}

867-867: 末尾の空白文字を削除してください

Line 867の閉じ括弧の後に不要な空白文字(タブまたはスペース)があります。

📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 77d0463 and 10c5929.

📒 Files selected for processing (2)
  • _g3/inc/ltg-g3-slider/package/class-ltg-g3-slider.php (3 hunks)
  • readme.txt (1 hunks)
🧰 Additional context used
🧬 Code graph analysis (1)
_g3/inc/ltg-g3-slider/package/class-ltg-g3-slider.php (1)
_g3/inc/ltg-g3-slider/config.php (1)
  • lightning_g3_slider_default_options (15-54)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
  • GitHub Check: php unittest (7.4)
  • GitHub Check: php unittest (8)
  • GitHub Check: php unittest (8.1)
🔇 Additional comments (2)
readme.txt (1)

38-39: LGTM!

変更履歴の記載が適切で、追加機能の説明が明確です。

_g3/inc/ltg-g3-slider/package/class-ltg-g3-slider.php (1)

754-757: LGTM!

最初のスライド画像に fetchpriority="high" を適切に追加しており、LCP改善に効果的です。条件分岐も正確です。

Comment on lines 861 to 867
if ( $pc_image === $mobile_image || ( $pc_image && ! $mobile_image ) || ( ! $pc_image && $mobile_image ) ) {
$img = $pc_image ? $pc_image : $mobile_image;
echo '<link rel="preload" as="image" href="' . $img . '" fetchpriority="high" />';
} else {
echo '<link rel="preload" as="image" href="' . $mobile_image . '" media="(max-width: 767px)" fetchpriority="high" />';
echo '<link rel="preload" as="image" href="' . $pc_image . '" media="(min-width: 768px)" fetchpriority="high" />';
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

空の画像URLで無効なHTMLが出力される可能性があります

Line 861の条件式に論理的な欠陥があります。$pc_image$mobile_image の両方が空文字列の場合、$pc_image === $mobile_image が真となり、空の href="" を持つ無効なプリロードタグが出力されます。

🔎 提案される修正
 public static function preload_first_slide_image() {
 	$options = get_option( 'lightning_theme_options' );
 	$default = function_exists( 'lightning_g3_slider_default_options' ) ? lightning_g3_slider_default_options() : array();
 	$options = wp_parse_args( $options, $default );

 	$pc_image     = ! empty( $options['top_slide_image_1'] ) ? esc_url( $options['top_slide_image_1'] ) : '';
 	$mobile_image = ! empty( $options['top_slide_image_mobile_1'] ) ? esc_url( $options['top_slide_image_mobile_1'] ) : '';

-	if ( $pc_image === $mobile_image || ( $pc_image && ! $mobile_image ) || ( ! $pc_image && $mobile_image ) ) {
+	// Early return if no images are set
+	if ( ! $pc_image && ! $mobile_image ) {
+		return;
+	}
+
+	if ( $pc_image === $mobile_image || ( $pc_image && ! $mobile_image ) || ( ! $pc_image && $mobile_image ) ) {
 		$img = $pc_image ? $pc_image : $mobile_image;
-		echo '<link rel="preload" as="image" href="' . $img . '" fetchpriority="high" />';
+		echo '<link rel="preload" as="image" href="' . esc_attr( $img ) . '" fetchpriority="high" />' . "\n";
 	} else {
-		echo '<link rel="preload" as="image" href="' . $mobile_image . '" media="(max-width: 767px)" fetchpriority="high" />';
-		echo '<link rel="preload" as="image" href="' . $pc_image . '" media="(min-width: 768px)" fetchpriority="high" />';
+		echo '<link rel="preload" as="image" href="' . esc_attr( $mobile_image ) . '" media="(max-width: 767px)" fetchpriority="high" />' . "\n";
+		echo '<link rel="preload" as="image" href="' . esc_attr( $pc_image ) . '" media="(min-width: 768px)" fetchpriority="high" />' . "\n";
-	}			
+	}
 }
🤖 Prompt for AI Agents
_g3/inc/ltg-g3-slider/package/class-ltg-g3-slider.php around lines 861-867: the
current condition treats equal empty strings as valid and outputs <link
href="">; change the logic to first ensure at least one non-empty image URL
exists and use strict non-empty checks (e.g., !empty(trim($pc_image)) /
!empty(trim($mobile_image))) before printing preload tags; if both are empty
output nothing, if only one is non-empty preload that one (no media attribute if
only single), and if both non-empty keep the media-specific preload tags as
currently implemented.

@mtdkei
Copy link
Contributor Author

mtdkei commented Dec 22, 2025

@CodeRabbit
レビューしてください。

@coderabbitai
Copy link

coderabbitai bot commented Dec 22, 2025

@mtdkei さん、承知いたしました。PRのレビューを実施いたします。

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (1)
_g3/inc/ltg-g3-slider/package/class-ltg-g3-slider.php (1)

850-874: 以前のクリティカルな問題が解決されています

過去のレビューで指摘された以下の問題が適切に修正されています:

  • Line 863の if ( $img ) チェックにより、空のURLによる無効なHTMLの出力を防止
  • Lines 864, 868, 871で esc_attr() を使用し、HTML属性のエスケープを実施

スライダーの表示設定の確認を推奨

$options['top_slide_display']'hide' の場合、スライダーは表示されませんが、このメソッドは画像をプリロードします。パフォーマンスの観点から、スライダーが非表示の場合は早期リターンすることを検討してください。

🔎 提案される改善
 public static function preload_first_slide_image() {
 	$options = get_option( 'lightning_theme_options' );
 	$default = function_exists( 'lightning_g3_slider_default_options' ) ? lightning_g3_slider_default_options() : array();
 	$options = wp_parse_args( $options, $default );
+
+	// Early return if slider is hidden
+	if ( isset( $options['top_slide_display'] ) && 'hide' === $options['top_slide_display'] ) {
+		return;
+	}

 	$pc_image     = ! empty( $options['top_slide_image_1'] ) ? esc_url( $options['top_slide_image_1'] ) : '';
 	$mobile_image = ! empty( $options['top_slide_image_mobile_1'] ) ? esc_url( $options['top_slide_image_mobile_1'] ) : '';

行末の空白文字

Line 873に不要な空白文字が含まれています。

🔎 提案される修正
-	}			
+	}
📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 10c5929 and 224150c.

📒 Files selected for processing (1)
  • _g3/inc/ltg-g3-slider/package/class-ltg-g3-slider.php
🧰 Additional context used
🧬 Code graph analysis (1)
_g3/inc/ltg-g3-slider/package/class-ltg-g3-slider.php (1)
_g3/inc/ltg-g3-slider/config.php (1)
  • lightning_g3_slider_default_options (15-54)
🔇 Additional comments (2)
_g3/inc/ltg-g3-slider/package/class-ltg-g3-slider.php (2)

22-22: wp_headフックへの登録が適切です

preload_first_slide_image メソッドを優先度1で wp_head に登録することで、プリロードリンクが <head> の早い位置に出力され、LCP改善に効果的です。


754-757: 最初のスライド画像へのfetchpriorityの設定が正確です

最初のスライド画像($i === 1)のみに fetchpriority="high" 属性を付与することで、LCP画像の優先読み込みを実現しています。

@mtdkei
Copy link
Contributor Author

mtdkei commented Dec 22, 2025

@CodeRabbit
最終レビューしてください。

@coderabbitai
Copy link

coderabbitai bot commented Dec 22, 2025

@mtdkei さん、承知いたしました。PRのレビューを実施いたします。

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai
Copy link

coderabbitai bot commented Dec 22, 2025

@mtdkei さん、承知いたしました。スライダーが非表示の場合の早期リターン処理を追加されたとのことですね。変更内容を確認してレビューを実施いたします。

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai
Copy link

coderabbitai bot commented Dec 22, 2025

@mtdkei さん、承知いたしました。最終レビューを実施いたします。

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants