2026年11月1日

2026年11月1日

WordPressのCSSとJSを最小化(minify)する方法・ファイルサイズ削減

はじめに

「PageSpeed InsightsでCSSとJSの縮小化を推奨されている」「複数のCSSファイルが読み込まれてページが遅い」——CSS/JSのminifyとファイル結合はサイト速度改善の基本施策のひとつです。

症状・原因

WordPressは複数のプラグインやテーマが追加するCSSとJSファイルがそれぞれ個別に読み込まれるため、HTTPリクエスト数が増加して表示速度が低下します。minify(空白・コメント・改行の除去)とファイル結合でデータ量とリクエスト数を削減できます。

解決手順

ステップ1:不要なCSSとJSを削除する(最優先)

// functions.php: 不要なスクリプトを無効化
add_action( 'wp_enqueue_scripts', function() {

    // コメントを使わない場合はコメント関連JSを削除
    if ( ! is_singular() || ! comments_open() ) {
        wp_dequeue_script( 'comment-reply' );
    }

    // WooCommerce未使用ページのスクリプトを削除
    if ( ! is_woocommerce() && ! is_cart() && ! is_checkout() ) {
        wp_dequeue_style( 'woocommerce-general' );
        wp_dequeue_style( 'woocommerce-layout' );
        wp_dequeue_style( 'woocommerce-smallscreen' );
        wp_dequeue_script( 'woocommerce' );
        wp_dequeue_script( 'wc-cart-fragments' );
    }

    // Contact Form 7 を使わないページで無効化
    if ( ! is_page( [ 'contact', 'お問い合わせ' ] ) ) {
        wp_dequeue_style( 'contact-form-7' );
        wp_dequeue_script( 'contact-form-7' );
    }

    // 使用しないWordPress絵文字スクリプトを削除
}, 99 );

// 絵文字スクリプトを削除
add_action( 'init', function() {
    remove_action( 'wp_head', 'print_emoji_detection_script', 7 );
    remove_action( 'wp_print_styles', 'print_emoji_styles' );
} );

// oEmbedスクリプトを削除(埋め込みを使わない場合)
add_action( 'init', function() {
    remove_action( 'wp_head', 'wp_oembed_add_discovery_links' );
    remove_action( 'wp_head', 'wp_oembed_add_host_js' );
} );

ステップ2:プラグインでminifyを設定する

【主要なminifyプラグインの比較】

WP Rocket(有料・推奨):
  設定 → ファイル最適化
  ✅ CSS最小化・結合
  ✅ JS最小化・結合・遅延実行
  ✅ Google Fonts最適化

LiteSpeed Cache(LiteSpeedサーバー向け):
  設定 → ページ最適化
  ✅ CSS/JSのminify・結合
  ✅ HTML最小化

Autoptimize(無料):
  設定 → JS・CSS・HTML
  ✅ CSS最小化・インライン化
  ✅ JS最小化・フッター移動
  ⚠️ 設定ミスで表示崩れのリスクあり

W3 Total Cache(無料):
  Minify タブ
  ✅ CSS/JS/HTMLのminify
  ⚠️ 設定が複雑

ステップ3:ビルドツールでminifyする(開発者向け)

// package.json: @wordpress/scriptsでビルド
{
  "scripts": {
    "build":   "wp-scripts build",
    "start":   "wp-scripts start",
    "build:css": "node-sass src/css/style.scss dist/css/style.min.css --output-style compressed"
  },
  "devDependencies": {
    "@wordpress/scripts": "^27.0.0",
    "node-sass":          "^9.0.0"
  }
}
// webpack.config.js: カスタムminify設定
const defaultConfig = require( '@wordpress/scripts/config/webpack.config' );
const TerserPlugin  = require( 'terser-webpack-plugin' );

module.exports = {
    ...defaultConfig,
    optimization: {
        ...defaultConfig.optimization,
        minimizer: [
            new TerserPlugin( {
                terserOptions: {
                    compress: {
                        drop_console: true, // console.logを削除
                    },
                    format: {
                        comments: false, // コメントを削除
                    },
                },
                extractComments: false,
            } ),
        ],
    },
};

ステップ4:インラインCSSでクリティカルCSSを最適化する

// ファーストビューに必要なCSSをインライン化(LCP改善)
add_action( 'wp_head', function() {
    $critical_css_file = get_theme_file_path( 'css/critical.css' );
    if ( ! file_exists( $critical_css_file ) ) {
        return;
    }
    $critical_css = file_get_contents( $critical_css_file );
    echo '<style id="critical-css">' . $critical_css . '</style>';
}, 5 );

// その他のCSSは非同期で読み込む(レンダリングブロック解消)
add_filter( 'style_loader_tag', function( $html, $handle ) {
    $async_styles = [ 'my-theme-style', 'google-fonts' ];
    if ( in_array( $handle, $async_styles, true ) ) {
        // メディアをprintにして初期ロードをスキップ、onloadで切替
        $html = str_replace(
            "media='all'",
            "media='print' onload=\"this.media='all'\"",
            $html
        );
    }
    return $html;
}, 10, 2 );

ステップ5:minify後の動作確認と問題解決

# minify後の動作確認チェックリスト

# 1. ブラウザのコンソールでJSエラーを確認
# Chrome DevTools → Console タブ

# 2. 全ページタイプで表示確認
# □ トップページ
# □ 投稿ページ(single.php)
# □ 固定ページ
# □ カテゴリーアーカイブ
# □ 検索結果
# □ お問い合わせページ(CF7等)
# □ WooCommerceカート・チェックアウト

# 3. minify除外リストの設定(Autoptimize等)
# 特定のJSが壊れる場合はハンドル名または部分URLで除外
# 例: jquery.min.js, slider.js

# 4. WP-CLIでキャッシュをクリア
wp cache flush
wp rewrite flush

注意事項

  • minify(ファイル結合含む)を有効化したら、サイトの全ページタイプをブラウザで確認してください。JavaScriptが壊れてスライダー・フォーム・カートが動作しなくなる場合があります。問題のあるファイルは除外リストに追加します。
  • 本番環境で直接試すのではなく、ステージング環境でminifyの動作確認をしてから本番に適用することを強く推奨します。
  • deferやasync属性を付けたJSは実行順序が保証されないため、jQuery依存のスクリプトに付ける場合は動作確認が必須です。

まとめ

CSS/JSのminifyは「不要スクリプトの削除→プラグインでminify設定→ビルドツールで自動化→クリティカルCSSのインライン化→全ページ動作確認」の順で進めます。まず不要なスクリプトを削除するだけで大幅な改善が見込めます。関連記事:WordPressのサイト速度を計測して改善する方法、WordPressのGZIP圧縮を有効化する方法。

お気軽にご相談ください

お見積りへ お問い合わせへ
▲