Featured image of post 【ゴミファイルを減らす】StaticPressで不要ファイルをS3バケットに転送しないようにしてみよう

【ゴミファイルを減らす】StaticPressで不要ファイルをS3バケットに転送しないようにしてみよう

2161文字

おさらい

CloudFrontの自動Invalidateまで

前回までの記事では、StaticPressでHTML化し、
関連記事 【StaticPress】WordpressのブログやサイトをHTML化して爆速管理しよう【使い方/インストール】 2018/05/05 3820文字 約8分で読めます IT Mac Windows Wordpress カスタマイズ

StaticPressS3でS3バケットに転送し、
関連記事 【StaticPressS3】WordpressのブログやサイトをAWSのS3に転送して公開してみよう!【静的サイト】 2018/05/06 3508文字 約8分で読めます IT AWS Mac Windows Wordpress

CloudFrontとRoute53を使って独自ドメインでアクセスし、
関連記事 【Wordpress】AWSのS3とCloudFrontとRoute53を連携して独自ドメインで公開する方法【お名前.com】 2018/05/07 2981文字 約6分で読めます IT AWS Mac SEO Windows

サイトをSSL化し、
関連記事 【無料SSL証明書】AWSでHTTPS通信を取得してCloudFrontに設定してみよう!【Wordpress】 2018/05/08 3849文字 約8分で読めます IT AWS Mac SEO Windows

AWSのLambda関数を利用したStaticPressS3での転送時に自動でCloudFrontをInvalidateするところまで設定しました。
関連記事 【自動キャッシュ削除】StaticPressで転送した際にCloudFrontでInvalidateを自動でする方法 2018/05/15 2521文字 約6分で読めます IT AWS Mac Python Windows

不要なファイルの除去

Wordpress関連の不要ファイルも転送されてしまっている

今の状態だと、Wordpressで利用するテーマファイルやプラグイン、その他不要なファイルまでS3バケットに転送されてしまっています。


転送不要なファイル

その中で以下のファイルは不要なのでStaticPressの出力対象に含めないようにしてみましょう。

ファイルパス説明
/{year}/{month}/{day}/{post_id}/{アップロード画像名}/添付ファイルページを保存するディレクトリ。
このページを直接参照する事はほぼ無いので不要。
/author/*投稿者アーカイブページを保存するディレクトリ。
今回のブログは自分一人で運営しているので、こちらのページは不要。
/wp-admin/*Wordpressの管理画面で使用するファイルを保存するディレクトリ。
S3側で管理画面を開くことは無いので不要。
/wp-content/plugins/*Wordpressのpluginを保存しているディレクトリ。
S3でpluginを動かすことは無いので不要。
/wp-includes/*Wordpressの様々な機能を動かすための主要なファイルを保存しているディレクトリ。
S3で運用する上では参照する箇所は無いので不要。
/wp-json/*WordpressのAPIレスポンスを保存するディレクトリ。
S3側ではこの機能は使わないので不要。

上記を対象外にするには、複数のファイルを修正する必要があるので一つずつ紹介して行きます。

手順

作業をする前に

今回の作業では、pluginのファイルを修正するので万が一記述を間違えるとpluginが動かなくなってしまうので、バックアップ取る等してから作業をするようにお願いします。
また、pluginによっては除外するとページ側でエラーが発生する可能性があるので、お使いのpluginに合わせて除外するディレクトリを精査した上で、自己責任でお願いします。

添付ファイルページを除外

class-static_press.phpの721行目辺り

添付ファイルページを出力しないようにするには、class-static_press.phpの721行目辺りを以下のように修正する必要があります。

<Wordpressインストールディレクトリ>/wp-content/plugins/staticpress/includes/class-static_press.php
$posts = $wpdb->get_results("
select ID, post_type, post_content, post_status, post_modified
 from {$wpdb->posts}
 where (post_status = 'publish'  /* or post_type = 'attachment' */ )
 and post_type in ({$this->post_types})
 order by post_type, ID
");

authorを除外

class-static_press.phpの643行目辺り

authorを出力しないようにするには、class-static_press.phpの643行目辺りを以下のように修正する必要があります。

<Wordpressインストールディレクトリ>/wp-content/plugins/staticpress/includes/class-static_press.php
//643行目辺り
private function get_urls(){
		global $wpdb;

		$wpdb->query("truncate table `{$this->url_table}`");
		$this->post_types = "'".implode("','",get_post_types(array('public' => true)))."'";
		$urls = array();
		$urls = array_merge($urls, $this->front_page_url());
		$urls = array_merge($urls, $this->single_url());
		$urls = array_merge($urls, $this->terms_url());
		//$urls = array_merge($urls, $this->author_url()); ←コメントアウト
		$urls = array_merge($urls, $this->static_files_url());
		$urls = array_merge($urls, $this->seo_url());
		return $urls;
	}

plugins.phpの末尾

次に、pluginsの末尾に以下を追記してください。

<Wordpressインストールディレクトリ>/wp-content/plugins/staticpress/plugin.php
add_action('StaticPress::file_put', 'static_rm', 1);
function static_rm($file_dest, $url){
  if(strstr($file_dest, '/author/')){
		unlink($file_dest);
	}
}

wp-admin、wp-includesを除外

class-static_press.phpの863行目辺り

wp-admin及びwp-includesを出力しないようにするには、class-static_press.phpの863行目辺りを以下のように修正する必要があります。

<Wordpressインストールディレクトリ>/wp-content/plugins/staticpress/includes/class-static_press.php
//863行目辺り
private function static_files_url($url_type = 'static_file'){
		$urls = array();

		$static_files_filter = apply_filters('StaticPress::static_files_filter', $this->static_files_ext);
		foreach ($static_files_filter as &$file_ext) {
			$file_ext = '*.'.$file_ext;
		}
		$static_files = array_merge(
			$this->scan_file(trailingslashit(ABSPATH), '{'.implode(',',$static_files_filter).'}', false),
			//$this->scan_file(trailingslashit(ABSPATH).'wp-admin/', '{'.implode(',',$static_files_filter).'}', true),←コメントアウト
			//$this->scan_file(trailingslashit(ABSPATH).'wp-includes/', '{'.implode(',',$static_files_filter).'}', true),←コメントアウト
			$this->scan_file(trailingslashit(WP_CONTENT_DIR), '{'.implode(',',$static_files_filter).'}', true)
			);

wp-content/pluginsと/wp-json/を除外

plugins.phpの末尾

authorの除外で追加した関数を以下のように修正してください。

<Wordpressインストールディレクトリ>/wp-content/plugins/staticpress/plugin.php
add_action('StaticPress::file_put', 'static_rm', 1);
function static_rm($file_dest, $url){
  if(strstr($file_dest, '/author/')
    or strstr($file_dest, '/wp-content/plugins/')
    or strstr($file_dest, '/wp-json/')){
		unlink($file_dest);
  }

確認

では、一度S3バケットと出力ディレクトリを削除した上で再構築を実行してみましょう。


正常に転送から除外されるようになりましたね♪

終わりに

以上のように、AWSのLambda関数を利用する事でCloudFrontを使っていてもコンテンツの即時反映がされるようになりました。

これで記事を書いて転送することだけに集中出来るので、どんどんコンテンツを増やしてPV増加を狙ってみてください♪