<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>高速化 &#8211; JunkHack Feed</title>
	<link>/</link>
	<description>アリエクでポチった JUNKHACK</description>
	<lastBuildDate>Wed, 19 Jul 2023 01:49:40 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.4.3</generator>

<image>
	<url>/wp-content/uploads/2020/09/logo.png</url>
	<title>高速化 &#8211; JunkHack</title>
	<link>/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>アルゴリア検索を導入してみたら、速くて便利で気に入った話！</title>
		<link>/2022/05/05/post-11202.html</link>
		
		<dc:creator><![CDATA[JunkHack]]></dc:creator>
		<pubDate>Wed, 04 May 2022 20:08:40 +0000</pubDate>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[新ブログ]]></category>
		<category><![CDATA[高速化]]></category>
		<guid isPermaLink="false">/?p=11202</guid>
				<media:thumbnail url="/wp-content/uploads/2022/05/AlgoliaSearch.png" />
							<description><![CDATA[ゴールデンウィーク真っ最中ですね！ 皆さんは何してますか？ 僕は、まったりとPCと戯れて、世界中の面白いネタを探しています。もうね、あるわあるわ。面白ネタがたくさんあって、世界は広いなと、再認識しました。 さて、今回のネ [&#8230;]]]></description>
										<content:encoded><![CDATA[
<div class="wp-block-word-balloon-word-balloon-block"><div class="w_b_box w_b_w100 w_b_flex w_b_div"><div class="w_b_wrap w_b_wrap_talk w_b_L w_b_flex w_b_div" style=""><div class="w_b_ava_box w_b_relative w_b_ava_L w_b_col w_b_f_n w_b_div"><div class="w_b_icon_wrap w_b_relative w_b_div"><div class="w_b_ava_wrap w_b_direction_L w_b_mp0 w_b_div"><div class="w_b_ava_effect w_b_relative w_b_oh w_b_radius w_b_size_M w_b_div" style="">
<img decoding="async" src="/wp-content/uploads/2020/09/abata.png" width="96" height="96" alt="じゃんくはっく" class="w_b_ava_img w_b_w100 w_b_h100  w_b_mp0 w_b_img" style="" />
</div></div></div><div class="w_b_name w_b_w100 w_b_lh w_b_name_C w_b_ta_C w_b_mp0 w_b_div">じゃんくはっく</div></div><div class="w_b_bal_box w_b_bal_L w_b_relative w_b_direction_L w_b_w100 w_b_div"><div class="w_b_space w_b_mp0 w_b_div"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="1" height="38" viewBox="0 0 1 1" fill="transparent" stroke="transparent" stroke-miterlimit="10" class="w_b_db w_b_mp0"><polygon fill="transparent" stroke="transparent" points="0,1 0,1 0,1 0,1 "/></svg></div><div class="w_b_bal_outer w_b_flex w_b_mp0 w_b_relative w_b_div" style=""><div class="w_b_bal_wrap w_b_bal_wrap_L w_b_div"><div class="w_b_bal w_b_relative w_b_talk w_b_talk_L w_b_shadow_L w_b_ta_L w_b_div"><div class="w_b_quote w_b_div">
<p>静的サイトでも動作する検索を模索してみたよ</p>
</div></div></div></div></div></div></div></div>



<div class="wp-block-word-balloon-word-balloon-block"><div class="w_b_box w_b_w100 w_b_flex w_b_mla w_b_jc_fe w_b_div"><div class="w_b_wrap w_b_wrap_talk w_b_R w_b_flex w_b_jc_fe w_b_div" style=""><div class="w_b_bal_box w_b_bal_R w_b_relative w_b_direction_R w_b_w100 w_b_div"><div class="w_b_space w_b_mp0 w_b_div"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="1" height="38" viewBox="0 0 1 1" fill="transparent" stroke="transparent" stroke-miterlimit="10" class="w_b_db w_b_mp0"><polygon fill="transparent" stroke="transparent" points="0,1 0,1 0,1 0,1 "/></svg></div><div class="w_b_bal_outer w_b_flex w_b_mp0 w_b_relative w_b_div" style=""><div class="w_b_bal_wrap w_b_bal_wrap_R w_b_div"><div class="w_b_bal w_b_relative w_b_talk w_b_talk_R w_b_shadow_R w_b_ta_L w_b_div"><div class="w_b_quote w_b_div">
<p>Google検索とかじゃなくて？</p>
</div></div></div></div></div><div class="w_b_ava_box w_b_relative w_b_ava_R w_b_col w_b_f_n w_b_div"><div class="w_b_icon_wrap w_b_relative w_b_div"><div class="w_b_ava_wrap w_b_direction_R w_b_mp0 w_b_div"><div class="w_b_ava_effect w_b_relative w_b_oh w_b_radius w_b_size_M w_b_div" style="">
<img decoding="async" src="/wp-content/uploads/2020/09/pi-.png" width="96" height="96" alt="ぴー" class="w_b_ava_img w_b_w100 w_b_h100  w_b_mp0 w_b_img" style="" />
</div></div></div><div class="w_b_name w_b_w100 w_b_lh w_b_name_C w_b_ta_C w_b_mp0 w_b_div">ぴー</div></div></div></div></div>



<div class="wp-block-word-balloon-word-balloon-block"><div class="w_b_box w_b_w100 w_b_flex w_b_div"><div class="w_b_wrap w_b_wrap_talk w_b_L w_b_flex w_b_div" style=""><div class="w_b_ava_box w_b_relative w_b_ava_L w_b_col w_b_f_n w_b_div"><div class="w_b_icon_wrap w_b_relative w_b_div"><div class="w_b_ava_wrap w_b_direction_L w_b_mp0 w_b_div"><div class="w_b_ava_effect w_b_relative w_b_oh w_b_radius w_b_size_M w_b_div" style="">
<img decoding="async" src="/wp-content/uploads/2020/09/abata.png" width="96" height="96" alt="じゃんくはっく" class="w_b_ava_img w_b_w100 w_b_h100  w_b_mp0 w_b_img" style="" />
</div></div></div><div class="w_b_name w_b_w100 w_b_lh w_b_name_C w_b_ta_C w_b_mp0 w_b_div">じゃんくはっく</div></div><div class="w_b_bal_box w_b_bal_L w_b_relative w_b_direction_L w_b_w100 w_b_div"><div class="w_b_space w_b_mp0 w_b_div"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="1" height="38" viewBox="0 0 1 1" fill="transparent" stroke="transparent" stroke-miterlimit="10" class="w_b_db w_b_mp0"><polygon fill="transparent" stroke="transparent" points="0,1 0,1 0,1 0,1 "/></svg></div><div class="w_b_bal_outer w_b_flex w_b_mp0 w_b_relative w_b_div" style=""><div class="w_b_bal_wrap w_b_bal_wrap_L w_b_div"><div class="w_b_bal w_b_relative w_b_talk w_b_talk_L w_b_shadow_L w_b_ta_L w_b_div"><div class="w_b_quote w_b_div">
<p>自分のサイトにもっと特化して検索できるやつが欲しかったのよ</p>
</div></div></div></div></div></div></div></div>



<div class="wp-block-word-balloon-word-balloon-block"><div class="w_b_box w_b_w100 w_b_flex w_b_mla w_b_jc_fe w_b_div"><div class="w_b_wrap w_b_wrap_talk w_b_R w_b_flex w_b_jc_fe w_b_div" style=""><div class="w_b_bal_box w_b_bal_R w_b_relative w_b_direction_R w_b_w100 w_b_div"><div class="w_b_space w_b_mp0 w_b_div"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="1" height="38" viewBox="0 0 1 1" fill="transparent" stroke="transparent" stroke-miterlimit="10" class="w_b_db w_b_mp0"><polygon fill="transparent" stroke="transparent" points="0,1 0,1 0,1 0,1 "/></svg></div><div class="w_b_bal_outer w_b_flex w_b_mp0 w_b_relative w_b_div" style=""><div class="w_b_bal_wrap w_b_bal_wrap_R w_b_div"><div class="w_b_bal w_b_relative w_b_talk w_b_talk_R w_b_shadow_R w_b_ta_L w_b_div"><div class="w_b_quote w_b_div">
<p>このブログってGitHub Pagesでしょ？ どうやるのかしら？</p>
</div></div></div></div></div><div class="w_b_ava_box w_b_relative w_b_ava_R w_b_col w_b_f_n w_b_div"><div class="w_b_icon_wrap w_b_relative w_b_div"><div class="w_b_ava_wrap w_b_direction_R w_b_mp0 w_b_div"><div class="w_b_ava_effect w_b_relative w_b_oh w_b_radius w_b_size_M w_b_div" style="">
<img decoding="async" src="/wp-content/uploads/2020/09/pi-.png" width="96" height="96" alt="ぴー" class="w_b_ava_img w_b_w100 w_b_h100  w_b_mp0 w_b_img" style="" />
</div></div></div><div class="w_b_name w_b_w100 w_b_lh w_b_name_C w_b_ta_C w_b_mp0 w_b_div">ぴー</div></div></div></div></div>



<p>ゴールデンウィーク真っ最中ですね！ 皆さんは何してますか？</p>



<p>僕は、まったりとPCと戯れて、世界中の面白いネタを探しています。もうね、あるわあるわ。面白ネタがたくさんあって、世界は広いなと、再認識しました。</p>



<p></p>



<p>さて、今回のネタは「検索」です。このブログはgithub pages ってのを使っていて静的なサイトなんです。見た目はWordPressのブログサイトっぽいのですが、htmlとcssとjsだけの構成でPHPとかデータベースとか動作していないんです。なので、自分のサイトの検索機能はGoogleのを使っているんですが、もっと良いのはないかなーと探していました。こういう分野のエンジニアは、フロントエンド・エンジニアと、いうんですが、自分は苦手分野なのであまり知識がありませんでした。</p>



<h3 class="wp-block-heading">見つけたところは、Electronのサイト！</h3>



<p><ruby>Electron<rt>えれくとろん</rt></ruby>っていう、仕組みがあるのですがこの本家サイトの日本語ドキュメントにその良い例が載っています。</p>



<blockquote class="wp-block-quote"><p>Electron ドキュメント</p><cite><a href="https://www.electronjs.org/ja/docs/latest/" target="_blank" rel="noreferrer noopener external" data-wpel-link="external" class="wpel-icon-right">https://www.electronjs.org/ja/docs/latest/<span class="wpel-icon wpel-image wpel-icon-1"></span></a></cite></blockquote>



<p>このサイトを見ると、キーボード操作 CMD＋K で検索ウィンドウが出てきます。</p>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1024" height="633" src="/wp-content/uploads/2022/05/Electron-doc-1024x633.png" alt="" class="wp-image-11205" srcset="/wp-content/uploads/2022/05/Electron-doc-1024x633.png 1024w, /wp-content/uploads/2022/05/Electron-doc-768x474.png 768w, /wp-content/uploads/2022/05/Electron-doc-984x608.png 984w, /wp-content/uploads/2022/05/Electron-doc.png 1099w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>こんな感じで、検索文字をタイプするごとにそのキーワードを含んだページとヒットした文字部分が出てくるわけです。検索キーワードの提案（サジェスト）が出るのではなく、検索結果がリアルタイムで表示されるイメージです。このキーワードに対して、その候補のページが出てくる仕組み・検索システムが優秀で使いやすいんです。</p>



<p>で、この仕組みってどうやって作っているんだろうなーと思っていたところ、このウインドウの下には<ruby>algolia<rt>あるごりあ</rt></ruby> と表示されています。どうやら、algolia の検索システムを使っているようです。</p>



<p>ちなみに、Electronっていのは、簡単に紹介すると以下です。そのうち、ネタにしようかなと思っています</p>



<blockquote class="wp-block-quote"><p><strong>Electron</strong>（エレクトロン）とは、ウェブ技術でデスクトップアプリケーションを作成できるテクノロジーです。 HTMLとCSS、JavaScriptを使って開発し、WindowsとmacOSの両OSのアプリケーションを1つのコードから作ることができます。</p><cite><a href="https://ics.media/entry/7298/" target="_blank" rel="noreferrer noopener external" data-wpel-link="external" class="wpel-icon-right">https://ics.media/entry/7298/<span class="wpel-icon wpel-image wpel-icon-1"></span></a></cite></blockquote>



<h3 class="wp-block-heading">algolia の検索システムとは何なのか？</h3>



<p>さて、algoliaの検索とはいったい何なのでしょうか？ 英語サイトですが、サービス名称は「<ruby>Algolia Search<rt>あるごりあ　さーち</rt></ruby>」と言うようです。</p>



<blockquote class="wp-block-quote"><p>Algolia Search</p><cite><a href="https://www.algolia.com/products/search-and-discovery/hosted-search-api/" target="_blank" rel="noreferrer noopener external" data-wpel-link="external" class="wpel-icon-right">https://www.algolia.com/products/search-and-discovery/hosted-search-api/<span class="wpel-icon wpel-image wpel-icon-1"></span></a></cite></blockquote>



<p>FAQのところを見ると、概要が見えてきます。まず、Algoliaは高速で、<ruby>SaaS<rt>さーす</rt></ruby>製品でモバイル向けにも特化してあり、日本語も使えるようです。</p>



<p>機能は大きくわけて、２つあるようです。１つは、Autocompleteと呼ばれる、検索キーワードを入れると、リアルタイムで検索結果が出る仕組み。もう一つは、検索キーワードの提案（サジェスト）のAutoCompleteで、これは「Query Suggestions」を設定すると可能のようです。</p>



<p>こういうのは、まず使ってみるのが手っ取り早いです。幸い、WordPressでalgolia検索を使うのは簡単です。まずは、このサイトですでに実装してあるので、それを紹介してみます。</p>



<h3 class="wp-block-heading">このブログでの実装例</h3>



<p>このブログでは、キーボード操作「/」スラッシュをタイプすると、以下のような検索ウィンドウが出てきます。</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="795" height="266" src="/wp-content/uploads/2022/05/screenshot-1.png" alt="" class="wp-image-11209" srcset="/wp-content/uploads/2022/05/screenshot-1.png 795w, /wp-content/uploads/2022/05/screenshot-1-768x257.png 768w" sizes="(max-width: 795px) 100vw, 795px" /></figure></div>



<p>検索テキスト入力エリアにフォーカスするには、「.」ドットをタイプするかマウスでフォーカスします。適当な検索ワードをタイプすればその結果を含むページが下に表示されます。これは、検索キーワードのサジェストとは違いますが、検索結果がすぐに出てくるので検索結果に遷移しなくても良くて便利です。検索ワードをタイプしてから、検索結果が出てくるのが異常に速くないでしょうか？</p>



<h3 class="wp-block-heading">WordPressに入れてみる</h3>



<p>では、このブログと同じことをしてみたい人向けに具体的な手順の紹介です。２つプラグインを入れるのですが、まず、１つ目は以下です。</p>



<blockquote class="wp-block-quote"><p>WP Search with Algolia</p><cite><a href="https://ja.wordpress.org/plugins/wp-search-with-algolia/" target="_blank" rel="noreferrer noopener external" data-wpel-link="external" class="wpel-icon-right">https://ja.wordpress.org/plugins/wp-search-with-algolia/<span class="wpel-icon wpel-image wpel-icon-1"></span></a></cite></blockquote>



<div class="wp-block-image"><figure class="aligncenter size-full"><a href="https://ja.wordpress.org/plugins/wp-search-with-algolia/" target="_blank" rel="noopener external noreferrer" data-wpel-link="external"><img loading="lazy" decoding="async" width="940" height="417" src="/wp-content/uploads/2022/05/WP_Search_with_Algolia.png" alt="" class="wp-image-11210" srcset="/wp-content/uploads/2022/05/WP_Search_with_Algolia.png 940w, /wp-content/uploads/2022/05/WP_Search_with_Algolia-768x341.png 768w" sizes="(max-width: 940px) 100vw, 940px" /></a></figure></div>



<p>次に、algolia のサイトではアカウントを作成し、Applicationを作成し、APIキーを参照します。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="628" src="/wp-content/uploads/2022/05/API_Keys-Algolia-1024x628.png" alt="" class="wp-image-11212" srcset="/wp-content/uploads/2022/05/API_Keys-Algolia-1024x628.png 1024w, /wp-content/uploads/2022/05/API_Keys-Algolia-768x471.png 768w, /wp-content/uploads/2022/05/API_Keys-Algolia-984x604.png 984w, /wp-content/uploads/2022/05/API_Keys-Algolia.png 1079w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>で、その各種項目を先ほどのWordPressプラグインに設定します。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="779" src="/wp-content/uploads/2022/05/6478b83905b21b77062736e51ba56372-1024x779.png" alt="" class="wp-image-11211" srcset="/wp-content/uploads/2022/05/6478b83905b21b77062736e51ba56372-1024x779.png 1024w, /wp-content/uploads/2022/05/6478b83905b21b77062736e51ba56372-768x584.png 768w, /wp-content/uploads/2022/05/6478b83905b21b77062736e51ba56372-984x748.png 984w, /wp-content/uploads/2022/05/6478b83905b21b77062736e51ba56372.png 1069w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>少し説明は端折りますが、「Search Page」では、とりあえず真ん中の「Use Algolia in the backend」を選んでおけば良いでしょう。Autocomplete では、検索させる対象、たとえば「投稿」を選択してインデックスを再作成しておきます。</p>



<h3 class="wp-block-heading">WP標準の検索ウィンドウで確認</h3>



<p>WP標準の検索ウィンドウで、検索キーワードを入れたら、検索結果が出てくるようになっていれば成功です。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1005" height="927" src="/wp-content/uploads/2022/05/wp-search.png" alt="" class="wp-image-11213" srcset="/wp-content/uploads/2022/05/wp-search.png 1005w, /wp-content/uploads/2022/05/wp-search-768x708.png 768w, /wp-content/uploads/2022/05/wp-search-984x908.png 984w" sizes="(max-width: 1005px) 100vw, 1005px" /></figure>



<p><ruby>アイキャッチ<rt>記事の画像</rt></ruby>があれば、こんな感じで表示されるかなと思います。</p>



<h3 class="wp-block-heading">キーボード操作で検索ウィンドウを出す</h3>



<p>続いて、キーボード操作で、検索窓がポップアップする部分です。検索結果に遷移しなくて良いので、どのページからも検索ウィンドウが表示されれば便利かなと思いました。</p>



<p>そのような動作をするプラグインを昔みたことがあったので検索してみました。「wp-keyboard-nav」というのがあったので、それには検索窓がついていないので、少し手直しして、以下のような野良プラグインを作ってみました。</p>



<blockquote class="wp-block-quote"><p>Keyboard PopUP algolia search<br>WordPress の野良プラグインです。プラグイン名称は、<code>Keyboard PopUP algolia search</code>&nbsp;です。 キーボード操作でポップアップする検索ウィンドウです。algolia検索と組み合わせて使うために、改造しました。元ソースは、wp-keyboard-nav&nbsp;<a href="https://github.com/tareq1988/wp-keyboard-nav" data-wpel-link="external" target="_blank" rel="external noopener noreferrer" class="wpel-icon-right">LINK<span class="wpel-icon wpel-image wpel-icon-1"></span></a>&nbsp;というプラグインです。</p><cite><a href="https://github.com/take-i/wp-keypopup-algolia" target="_blank" rel="noreferrer noopener external" data-wpel-link="external" class="wpel-icon-right">https://github.com/take-i/wp-keypopup-algolia<span class="wpel-icon wpel-image wpel-icon-1"></span></a></cite></blockquote>



<p>こちらは何も設定は必要ありません。プラグインを入れれば、すべてのページでキーボード操作で検索ウィンドウが出てくるかと思います。</p>



<h3 class="wp-block-heading">レスポンス時間はどのくらいなのか？</h3>



<p>検索ウィンドウに１文字づつタイプするごとに、Algolia のAPIにリクエストが飛び、レスポンスされます。何回か試したのですが、ほとんどが100ms 以内に帰ってきています。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="802" height="650" src="/wp-content/uploads/2022/05/r-time.png" alt="" class="wp-image-11220" srcset="/wp-content/uploads/2022/05/r-time.png 802w, /wp-content/uploads/2022/05/r-time-768x622.png 768w" sizes="(max-width: 802px) 100vw, 802px" /></figure>



<p>以下のように、20ms以内くらいで帰ってくるようです。劇速いです！</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="798" height="581" src="/wp-content/uploads/2022/05/r-time1.png" alt="" class="wp-image-11221" srcset="/wp-content/uploads/2022/05/r-time1.png 798w, /wp-content/uploads/2022/05/r-time1-768x559.png 768w" sizes="(max-width: 798px) 100vw, 798px" /></figure>



<p></p>



<h3 class="wp-block-heading">まとめ</h3>



<p>今回、なんとなくわかったのは以下となります。</p>



<p>・Algolia の無料枠は、10,000検索リクエスト/月<br>・検索対象の数制限は、10,000 レコード<br>・無料枠利用にカード登録は必要なし<br>・個人用サイトなら無料枠で足りそうだが、しばらく運用してみる<br>・有料版は、1000リクエスト/月 で1.5ドル<br>・検索クエリーは１文字づつ、APIリクエストが飛んでいる<br>・その、ほとんどが20ms以内にレスポンスされている<br>・検索結果が検索窓に検索キーワードを入れた時点で表示される<br>・↑これがすごく便利で気に入りました<br>・日本語にも対応していている<br>・紹介はしきれなかったが、静的サイトでも少しの手入れで動作する<br>・速いというのは、正義だなと改めて実感<br>・キーボードで出てくる検索ウィンドウは思ったより、便利<br>・algolia にINDEXデータを入れる部分はwordpressで可能<br>・algoliaの管理画面でAnalyticsがあり、検索ワードや表示ページなど統計データが見れる<br></p>



<h3 class="wp-block-heading">あとがき</h3>



<p>英語サイトの情報なので、まだあまり日本語の情報がないのですが、この手のサイト内検索を商材にするサービスは他にもたくさんあります。商用のサイトなら、たくさんある商品や情報の中から、お客さんが希望するモノにたどり着きやすくするため、サイト内検索は結構重要だと思っています。</p>



<p> 今回の話は、バックエンドにデータベースがあって、それを直接検索参照させる従来のやり方ではないケースです。このブログのように、静的なページがあってそれを対象に高速で検索させる場合は何が正解なのでしょうか。ある人は、全文検索エンジンを入れたらどう？ とか。検索用のインデッックスを持ったDBを用意すればよいとか。</p>



<p>このブログの場合は、記事の作成時点ではWordPressで管理していて、書き出すときに静的なHTMLにしています。全ての記事のインデックス（目次情報）は、WordPressで動作している時点でAlgolia に投げられます。静的ページからの検索は、JavaScript経由でAlgoliaに参照され、文字が入るたびにリアルタイムに検索結果が表示される仕組みです。</p>



<p>データベースは無く、作るつもりもないので静的ページをどうやって手間なく、検索させるか？ の１つの解だとは思います。</p>



<h3 class="wp-block-heading">著者にメッセージ</h3>



<p></p>


<p>間違いのご指摘など、コメントじゃなくて、個人的にやりとりしたい場合は<a class="c-link-text" href="/mail.html" target="_blank" rel="noopener noreferrer" data-wpel-link="internal">こちらから</a>どうぞ。お返事が遅くなるときもありますが、ご了承を。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>KeyCDNという安いCDNを半年使った感想、価格や月維持費などレポート！</title>
		<link>/2022/01/02/post-10979.html</link>
		
		<dc:creator><![CDATA[JunkHack]]></dc:creator>
		<pubDate>Sun, 02 Jan 2022 00:01:22 +0000</pubDate>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[cdn]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[高速化]]></category>
		<guid isPermaLink="false">/?p=10979</guid>
				<media:thumbnail url="/wp-content/uploads/2022/01/KeyCDN.png" />
							<description><![CDATA[KeyCDNは数年前、１位か２位くらいの安さでしたが、今はもっと安いのがあるようです。CDNのコスト計算サイトでは以下のようでした。blazingcdnというのが破格の安さのようです。 今回は前から気になっていたKeyC [&#8230;]]]></description>
										<content:encoded><![CDATA[
<div class="wp-block-word-balloon-word-balloon-block"><div class="w_b_box w_b_w100 w_b_flex w_b_div"><div class="w_b_wrap w_b_wrap_talk w_b_L w_b_flex w_b_div" style=""><div class="w_b_ava_box w_b_relative w_b_ava_L w_b_col w_b_f_n w_b_div"><div class="w_b_icon_wrap w_b_relative w_b_div"><div class="w_b_ava_wrap w_b_direction_L w_b_mp0 w_b_div"><div class="w_b_ava_effect w_b_relative w_b_oh w_b_radius w_b_size_M w_b_div" style="">
<img loading="lazy" decoding="async" src="/wp-content/uploads/2020/09/abata.png" width="96" height="96" alt="じゃんくはっく" class="w_b_ava_img w_b_w100 w_b_h100  w_b_mp0 w_b_img" style="" />
</div></div></div><div class="w_b_name w_b_w100 w_b_lh w_b_name_C w_b_ta_C w_b_mp0 w_b_div">じゃんくはっく</div></div><div class="w_b_bal_box w_b_bal_L w_b_relative w_b_direction_L w_b_w100 w_b_div"><div class="w_b_space w_b_mp0 w_b_div"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="1" height="38" viewBox="0 0 1 1" fill="transparent" stroke="transparent" stroke-miterlimit="10" class="w_b_db w_b_mp0"><polygon fill="transparent" stroke="transparent" points="0,1 0,1 0,1 0,1 "/></svg></div><div class="w_b_bal_outer w_b_flex w_b_mp0 w_b_relative w_b_div" style=""><div class="w_b_bal_wrap w_b_bal_wrap_L w_b_div"><div class="w_b_bal w_b_relative w_b_talk w_b_talk_L w_b_shadow_L w_b_ta_L w_b_div"><div class="w_b_quote w_b_div">
<p>CDNってのを半年、使ってみましたよ</p>
</div></div></div></div></div></div></div></div>



<div class="wp-block-word-balloon-word-balloon-block"><div class="w_b_box w_b_w100 w_b_flex w_b_mla w_b_jc_fe w_b_div"><div class="w_b_wrap w_b_wrap_talk w_b_R w_b_flex w_b_jc_fe w_b_div" style=""><div class="w_b_bal_box w_b_bal_R w_b_relative w_b_direction_R w_b_w100 w_b_div"><div class="w_b_space w_b_mp0 w_b_div"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="1" height="38" viewBox="0 0 1 1" fill="transparent" stroke="transparent" stroke-miterlimit="10" class="w_b_db w_b_mp0"><polygon fill="transparent" stroke="transparent" points="0,1 0,1 0,1 0,1 "/></svg></div><div class="w_b_bal_outer w_b_flex w_b_mp0 w_b_relative w_b_div" style=""><div class="w_b_bal_wrap w_b_bal_wrap_R w_b_div"><div class="w_b_bal w_b_relative w_b_talk w_b_talk_R w_b_shadow_R w_b_ta_L w_b_div"><div class="w_b_quote w_b_div">
<p>クラウドからコンテンツを配信するってヤツですね。</p>
</div></div></div></div></div><div class="w_b_ava_box w_b_relative w_b_ava_R w_b_col w_b_f_n w_b_div"><div class="w_b_icon_wrap w_b_relative w_b_div"><div class="w_b_ava_wrap w_b_direction_R w_b_mp0 w_b_div"><div class="w_b_ava_effect w_b_relative w_b_oh w_b_radius w_b_size_M w_b_div" style="">
<img loading="lazy" decoding="async" src="/wp-content/uploads/2020/09/pi-.png" width="96" height="96" alt="ぴー" class="w_b_ava_img w_b_w100 w_b_h100  w_b_mp0 w_b_img" style="" />
</div></div></div><div class="w_b_name w_b_w100 w_b_lh w_b_name_C w_b_ta_C w_b_mp0 w_b_div">ぴー</div></div></div></div></div>



<div class="wp-block-word-balloon-word-balloon-block"><div class="w_b_box w_b_w100 w_b_flex w_b_div"><div class="w_b_wrap w_b_wrap_talk w_b_L w_b_flex w_b_div" style=""><div class="w_b_ava_box w_b_relative w_b_ava_L w_b_col w_b_f_n w_b_div"><div class="w_b_icon_wrap w_b_relative w_b_div"><div class="w_b_ava_wrap w_b_direction_L w_b_mp0 w_b_div"><div class="w_b_ava_effect w_b_relative w_b_oh w_b_radius w_b_size_M w_b_div" style="">
<img loading="lazy" decoding="async" src="/wp-content/uploads/2020/09/abata.png" width="96" height="96" alt="じゃんくはっく" class="w_b_ava_img w_b_w100 w_b_h100  w_b_mp0 w_b_img" style="" />
</div></div></div><div class="w_b_name w_b_w100 w_b_lh w_b_name_C w_b_ta_C w_b_mp0 w_b_div">じゃんくはっく</div></div><div class="w_b_bal_box w_b_bal_L w_b_relative w_b_direction_L w_b_w100 w_b_div"><div class="w_b_space w_b_mp0 w_b_div"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="1" height="38" viewBox="0 0 1 1" fill="transparent" stroke="transparent" stroke-miterlimit="10" class="w_b_db w_b_mp0"><polygon fill="transparent" stroke="transparent" points="0,1 0,1 0,1 0,1 "/></svg></div><div class="w_b_bal_outer w_b_flex w_b_mp0 w_b_relative w_b_div" style=""><div class="w_b_bal_wrap w_b_bal_wrap_L w_b_div"><div class="w_b_bal w_b_relative w_b_talk w_b_talk_L w_b_shadow_L w_b_ta_L w_b_div"><div class="w_b_quote w_b_div">
<p>どんな効果があって、月維持費はどのくらいかレポートしてみます。</p>
</div></div></div></div></div></div></div></div>



<div class="wp-block-word-balloon-word-balloon-block"><div class="w_b_box w_b_w100 w_b_flex w_b_mla w_b_jc_fe w_b_div"><div class="w_b_wrap w_b_wrap_talk w_b_R w_b_flex w_b_jc_fe w_b_div" style=""><div class="w_b_bal_box w_b_bal_R w_b_relative w_b_direction_R w_b_w100 w_b_div"><div class="w_b_space w_b_mp0 w_b_div"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="1" height="38" viewBox="0 0 1 1" fill="transparent" stroke="transparent" stroke-miterlimit="10" class="w_b_db w_b_mp0"><polygon fill="transparent" stroke="transparent" points="0,1 0,1 0,1 0,1 "/></svg></div><div class="w_b_bal_outer w_b_flex w_b_mp0 w_b_relative w_b_div" style=""><div class="w_b_bal_wrap w_b_bal_wrap_R w_b_div"><div class="w_b_bal w_b_relative w_b_talk w_b_talk_R w_b_shadow_R w_b_ta_L w_b_div"><div class="w_b_quote w_b_div">
<p>私は、月500円くらいまでなら出せるかなー</p>
</div></div></div></div></div><div class="w_b_ava_box w_b_relative w_b_ava_R w_b_col w_b_f_n w_b_div"><div class="w_b_icon_wrap w_b_relative w_b_div"><div class="w_b_ava_wrap w_b_direction_R w_b_mp0 w_b_div"><div class="w_b_ava_effect w_b_relative w_b_oh w_b_radius w_b_size_M w_b_div" style="">
<img loading="lazy" decoding="async" src="/wp-content/uploads/2020/09/pi-.png" width="96" height="96" alt="ぴー" class="w_b_ava_img w_b_w100 w_b_h100  w_b_mp0 w_b_img" style="" />
</div></div></div><div class="w_b_name w_b_w100 w_b_lh w_b_name_C w_b_ta_C w_b_mp0 w_b_div">ぴー</div></div></div></div></div>



<p>KeyCDNは数年前、１位か２位くらいの安さでしたが、今はもっと安いのがあるようです。CDNのコスト計算サイトでは以下のようでした。blazingcdnというのが破格の安さのようです。</p>



<figure class="wp-block-image size-large"><a href="https://www.cdnperf.com/tools/cdn-calculator" data-wpel-link="external" target="_blank" rel="external noopener noreferrer"><img loading="lazy" decoding="async" width="1024" height="548" src="/wp-content/uploads/2022/01/CDN_Calculator_-_CDNCalc_-_CDNPerf-1024x548.png" alt="" class="wp-image-10983" srcset="/wp-content/uploads/2022/01/CDN_Calculator_-_CDNCalc_-_CDNPerf-1024x548.png 1024w, /wp-content/uploads/2022/01/CDN_Calculator_-_CDNCalc_-_CDNPerf-768x411.png 768w, /wp-content/uploads/2022/01/CDN_Calculator_-_CDNCalc_-_CDNPerf-984x526.png 984w, /wp-content/uploads/2022/01/CDN_Calculator_-_CDNCalc_-_CDNPerf.png 1443w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<p>今回は前から気になっていたKeyCDNをこのスマホサーバのWordPressサイトに適用してみましたので、実際どのくらいの値段で運用できるんだ？　みたいな感想をレポートしてみたいと思います。</p>



<h3 class="wp-block-heading">そもそもCDNって何？</h3>



<p>CDNは平たく言えば、画像やコンテンツを本家とは違うサーバから配信するというものです。キャッシュサーバとか、エッジサーバとか表現したりしますが、要は静的なファイルを本家サーバからではなく、CDNのクラウドから配信することによりネットワーク負荷や、レスポンス改善（時に改悪）したりするのが目的です。</p>



<blockquote class="wp-block-quote"><p>コンテンツデリバリネットワーク（英語: content delivery network、CDN）</p><cite>wiki</cite></blockquote>



<h3 class="wp-block-heading">いくらするの？</h3>



<p>ほとんどの人が気になるのは、初期や維持費などの価格がいくらなのか？　っていうことと、速度はどのくらい改善されるのか？　ってことだと思います。こればっかりは使ってみないとなんとも言えない部分があります。早速、値段からレポートしてみたいと思います。</p>



<p>　まず、KeyCDNは最初にクレジットを入れてそれを消費する仕組みです。最小の入金単位は 49ドル となります。日本円で当時のキャッシュカード換金レートで、5,553円でした。</p>



<p>　入金したのが、2021年の06月/01なので現時点で半年使っていることになります。クレジットの消費は以下のようになっています。</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="649" src="/wp-content/uploads/2022/01/Overview-1024x649.png" alt="" class="wp-image-10986" srcset="/wp-content/uploads/2022/01/Overview-1024x649.png 1024w, /wp-content/uploads/2022/01/Overview-768x487.png 768w, /wp-content/uploads/2022/01/Overview-984x624.png 984w, /wp-content/uploads/2022/01/Overview.png 1132w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure></div>



<p>残りクレジットは18くらいです。49から約36%残っていますので半年で67% 消費したことになります。半年で、約3720円ですので、１ヶ月あたり620円という感じですね。</p>



<p>　グラフの途中に、ガクンとクレジットが消費しているところがありますが、これはキャッシュを完全に消去して作り直している部分です。</p>



<h3 class="wp-block-heading">どのくらいのアクセス数なの？</h3>



<p>統計期間が約４ヶ月くらいなので、KeyCDN上のデータでは以下のようです。</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="668" src="/wp-content/uploads/2022/01/Analytics-1-1024x668.png" alt="" class="wp-image-10987" srcset="/wp-content/uploads/2022/01/Analytics-1-1024x668.png 1024w, /wp-content/uploads/2022/01/Analytics-1-768x501.png 768w, /wp-content/uploads/2022/01/Analytics-1-984x642.png 984w, /wp-content/uploads/2022/01/Analytics-1.png 1132w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure></div>



<p>1日あたり、cssや画像やhtmlなど合計して1.8万くらいのヒットがあります。PV的な数値は１つ前の記事に載せてありますので、参考にしてください。</p>



<h3 class="wp-block-heading">１ヶ月のデータ転送量は？</h3>



<p>このサイトの１ヶ月のデータ転送量（総トラフィック）は、KeyCDNの統計データで見ると以下のようです。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="468" src="/wp-content/uploads/2022/01/Usage-1024x468.png" alt="" class="wp-image-10988" srcset="/wp-content/uploads/2022/01/Usage-1024x468.png 1024w, /wp-content/uploads/2022/01/Usage-768x351.png 768w, /wp-content/uploads/2022/01/Usage-984x449.png 984w, /wp-content/uploads/2022/01/Usage.png 1130w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>PV的には2000〜2500くらいでこの転送量です。3000〜5000くらいのPVでも15GBを１ヶ月に超えることはありませんでした。</p>



<h3 class="wp-block-heading">CDNの効果はどのくらい？</h3>



<p>ページ計測サイトで、CDN適用前と適用後のデータを測っておきましたので載せておきます。</p>



<p>まずは、CDN適用前。</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="563" src="/wp-content/uploads/2022/01/cdn_b-1024x563.png" alt="" class="wp-image-10989" srcset="/wp-content/uploads/2022/01/cdn_b-1024x563.png 1024w, /wp-content/uploads/2022/01/cdn_b-768x423.png 768w, /wp-content/uploads/2022/01/cdn_b-984x541.png 984w, /wp-content/uploads/2022/01/cdn_b.png 1403w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure></div>



<p>次は、CDN適用後。</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="555" src="/wp-content/uploads/2022/01/cdn_a-1024x555.png" alt="" class="wp-image-10990" srcset="/wp-content/uploads/2022/01/cdn_a-1024x555.png 1024w, /wp-content/uploads/2022/01/cdn_a-768x416.png 768w, /wp-content/uploads/2022/01/cdn_a-984x533.png 984w, /wp-content/uploads/2022/01/cdn_a.png 1402w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure></div>



<p>だいぶ改善されていますね。適用前は、最初のレンダリングが始まるのに、約4.2秒かかっていますが、適用後は、0.8秒です。CDNの効果は絶大です。</p>



<h3 class="wp-block-heading">まとめ</h3>



<p>今回、なんとなくわかったのは以下となります。</p>



<p>・このサイトのようにPVが月に２０００〜５０００くらいでは、月600円〜700円くらいのCDNコスト</p>



<p>・設定は非常に楽</p>



<p>・CDNの効果は絶大で、最初の描画が<meta charset="utf-8">4.2秒から0.8秒となった</p>



<p>・<meta charset="utf-8">blazingcdnというCDNはKeyCDNより激安で、どんな効果があるのか試してみたい気もする</p>



<h3 class="wp-block-heading">あとがき</h3>



<p>WordPressのように、コンテンツ側で結構リソースを使うタイプや、スマホサーバのように非力な環境ではCDNの効力は絶大です。しかし、利用コストが月に600円〜700円くらいかかり趣味で使うのなら良いのですが、静的HTMLにして運用したほうが、良いなという結論に至りました。要はWordPressは、リソースを使うし無駄が多いんです。近々、そういう運用に方針を変えますので、紹介したいなと思っています。</p>



<h3 class="wp-block-heading">著者にメッセージ</h3>



 


<p>間違いのご指摘など、コメントじゃなくて、個人的にやりとりしたい場合は<a class="c-link-text" href="/mail.html" target="_blank" rel="noopener noreferrer" data-wpel-link="internal">こちらから</a>どうぞ。お返事が遅くなるときもありますが、ご了承を。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>スマホ上に作った自宅サーバのWordPressで、テスト評価がほぼオールAになった！</title>
		<link>/2020/09/12/post-9466.html</link>
		
		<dc:creator><![CDATA[JunkHack]]></dc:creator>
		<pubDate>Fri, 11 Sep 2020 19:51:21 +0000</pubDate>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[高速化]]></category>
		<guid isPermaLink="false">/?p=6030</guid>
				<media:thumbnail url="/wp-content/uploads/2020/09/allA.png" />
							<description><![CDATA[はい、ただ今引っ越し準備中でして、このブログをスマートフォン上に作ったWordPressサーバに引っ越しします。９月末か１０月頭予定で各種チューニングをやっていましたが、ついにスピードテスト系の評価サイトでほぼオールAを [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>はい、ただ今引っ越し準備中でして、このブログをスマートフォン上に作ったWordPressサーバに引っ越しします。９月末か１０月頭予定で各種チューニングをやっていましたが、ついにスピードテスト系の評価サイトでほぼオールAを取ることに成功しました。</p>



<figure class="wp-block-image size-large"><img decoding="async" src="/wp-content/uploads/2020/09/webpagetest_test_result_-_tokyo___jh_gpl_jp__-_09_12_20_01_36_13.png?w=952" alt="" class="wp-image-6034" /></figure>



<p>いくつかある評価サイトの中では、ここが一番好きです。ここの計測サイトは東京リージョンもあり、また各種グラフが見やすくビデオプレビューまで付いて来ます。</p>



<blockquote class="wp-block-quote"><p>WEBPAGETEST</p><cite>https://www.webpagetest.org/</cite></blockquote>



<p>主な評価観点は、左から以下のようになっています。</p>



<ol><li>セキュリティ</li><li>初期アクセスまでの時間</li><li>Keep-alive通信がONか？</li><li>圧縮転送されているか？</li><li>イメージの圧縮はどうか？</li><li>静的コンテンツがキャッシュされているか？</li><li>CDNを使っているか？</li></ol>



<p>７番のCDNは一部、WordPressのをつかっていますが、全部は使っていないので、x　になっています。これはどうするかまだ迷っています。一度、国内のCDNをテストで使ってみようと思ったのですがうまく動作せずでした。まだ原因がわかっていません。</p>



<p>　難易度的には、簡単なものから３・４・５・６・２・１・７で難しかったです。今回は、自分なりの考えをメモりつつ、１つづつ紹介していきたいなと思います。必ず正解っていう部分はないところでもあるので、あくまで自分はこんな対策と対応をしたよっていう感じです。いろいろツッコミどころはあるとは思いますが、何かあればコメントでお気軽にどうぞ。</p>



<h3 class="wp-block-heading">難易度G・Keep-alive通信がONか？</h3>



<p>これは apache を使おうが、nginx を使おうが最初からデフォルトONになっているので意識せずともAになると思います。今回は、最終的に nginx を使うことにしましたので、nginx.conf に以下を設定しています。タイムアウト時間は短いほうが良いと思います。でも、ここは突き詰めると難しい部分です。興味がある方は、以下などを一読されると良いかなと思います。</p>



<blockquote class="wp-block-quote"><p>ぜんぶTIME_WAITのせいだ！</p><cite>https://qiita.com/kuni-nakaji/items/c07004c7d9e5bb683bc2</cite></blockquote>



<pre class="wp-block-code"><code>http {
::（省略）
    keepalive_requests 100;
    keepalive_timeout  3;
::（省略）</code></pre>



<p>termux 上の android OSでは、一般的なLinuxと違ってKernelパラメータも調整されているはずですので、ここが何が適切なのかを明確にするには root権限のあるスマホで termux を動かし負荷テストをしながら、各種TCPの状態遷移を見ていくのが正しい姿勢です。という意味では一番難しい部類ですが、今回はそこまで突っ込まないことにします。</p>



<h3 class="wp-block-heading">難易度F・圧縮転送されているか？</h3>



<p>圧縮レベルは１でも十分という意見はありそうです。</p>



<pre class="wp-block-code"><code>http {
::（省略）
    gzip  on;
    gzip_vary       on;
    gzip_proxied    any;
    gzip_comp_level 6;
    gzip_types      text/plain text/css text/xml text/javascript
                    application/json application/javascript application/x-javascript
                    application/xml application/rss+xml application/atom+xml
                    image/svg+xml;
::（省略）</code></pre>



<h3 class="wp-block-heading">難易度E・イメージの圧縮はどうか？</h3>



<p>これは今回は、ジェットパックのプラグインでwordpress のCDN側から画像が出ています。そこで適切に圧縮してくれているので簡単です。ただ、やりだすと奥が深いので、中間くらいの位置付けにしてあります。</p>



<h3 class="wp-block-heading">難易度D・静的コンテンツがキャッシュされているか？</h3>



<p>これは、レスポンスヘッダに<strong>No max-age </strong>または<strong> expires</strong>をつければ解決します。具体的には、nginxの設定で以下を設定すればOKです。</p>



<pre class="wp-block-code"><code>location ~* \.(jpg|jpeg|gif|png|css|js|swf|ico|pdf|svg|eot|ttf|woff)$ {
    expires 60d;
    add_header Cache-Control "public, no-transform";
    access_log off;
}</code></pre>



<h3 class="wp-block-heading">難易度C・初期アクセスまでの時間</h3>



<p>これは、WordPress側でキャッシュを作るのが一番最速です。各種プラグインがありますが、いろいろ試した結果、今の所はAutoptimizeに落ち着いています。</p>



<div class="wp-block-image is-style-default"><figure class="aligncenter size-large"><a href="https://ja.wordpress.org/plugins/autoptimize/" target="_blank" rel="noopener noreferrer external" data-wpel-link="external"><img decoding="async" src="/wp-content/uploads/2020/09/autoptimize_e28093_wordpress_e38395e3829ae383a9e382afe38299e382a4e383b3___wordpress_org_e697a5e69cace8aa9e.png?w=743" alt="" class="wp-image-6040" /></a></figure></div>



<p>デフォルト設定でも十分効果はあります。迷ってる設定としては、Google フォントの削除　をするかしないかです。表示の綺麗さを取るか、お客様に快適にアクセスしてもらうのを取るか　ですね。あとは、ネットワーク的な速度の部分があります。今は InterLink の回線上にいますが、少し工夫してある部分といえば、常時利用する経路とは分離してあるくらいでしょうか？　WiFiの5G接続でもこのくらいは出ますよという参考値になればと思います。WiFiルーターの側にスマホ（サーバ）は置いてあります。距離を離すと応答速度が遅れます。</p>



<h3 class="wp-block-heading">難易度B・セキュリティ</h3>



<p>これが結構難しかったです。まず、WordPress の最新を使ってもjquery 1.12.4でした。これは脆弱性があるので、あげて置きたいところですが WordPressはIE8のことも考えて意図的に落としているようです（たぶん）。なので、以下プラグインで上書きしています。</p>



<div class="wp-block-image is-style-default"><figure class="aligncenter size-large"><a href="https://wordpress.org/plugins/jquery-manager/" target="_blank" rel="noopener noreferrer external" data-wpel-link="external"><img decoding="async" src="/wp-content/uploads/2020/09/jquery_manager_for_wordpress_e28093_wordpress_plugin___wordpress_org.png?w=846" alt="" class="wp-image-6042" /></a></figure></div>



<p>しかし、これ以外もやることがあって以下のチェックサイトに行ったほうがわかりやすいかもしれません。各種セキュリー関連のhttpヘッダーを付与する必要があります。</p>



<p>https://securityheaders.com/</p>



<figure class="wp-block-image size-large is-style-default"><img decoding="async" src="/wp-content/uploads/2020/09/scan_results_for_https___jh_gpl_jp_.png?w=683" alt="" class="wp-image-6045" /></figure>



<p>最初はここ、真っ赤でF判定だったです。</p>



<p>対策としては、NGINXの設定でヘッダに以下をつければA判定となりクリアになりますが、まだiFrameの設定が未完結です。X-Frame-Optionsは、古く　Content-Security-Policy　の指定で行うのが良さそうです。frame-ancestors　を指定し組み込める参照元を制限する方法が良いということはわかっているのですが、まだ設定値が決まりません。A判定は取っていますが、内容がない状態です。</p>



<pre class="wp-block-code"><code>add_header Strict-Transport-Security "max-age=15552000"; 
add_header X-XSS-Protection "1; mode=block";
add_header X-Frame-Options SAMEORIGIN;
add_header X-Frame-Options "ALLOW-FROM https://www.youtube.com/";
add_header X-Content-Type-Options nosniff;
add_header Content-Security-Policy "default-src * 'self' data: 'unsafe-inline' 'unsafe-eval' ;";
add_header Referrer-Policy strict-origin always;
add_header Permissions-Policy "fullscreen=() geolocation=()";</code></pre>



<h3 class="wp-block-heading">難易度A・CDNを使っているか？</h3>



<p>ここは、DNSの向け先を変えたり、CDNのキャッシュをコントロールしたりする必要があり、運用とも関わる部分です。一度設定したのですが、うまく動作せずここは今の所一番の課題となっています。そもそも、月間５０００ページビューにも行かないこのサイトでCDNを導入する必要があるかどうか？　という点もありますが、一度やって見ないとわかりません。あと仕事ではなく、趣味なので無料のものしか使う気はありません。さて、どこがいいんでしょうかね？</p>



<h3 class="wp-block-heading">あとがき</h3>



<p>このサーバは、スマホで動いていてWiFiの無線で繋がっていますが、こんなちっさな筐体でもWordPressが動く、しかもA評価までもらえるなんて！　感動です。Termuxは最高のアプリですね。神アプリ認定です。</p>



<p>　しかも、常時SSL対応ですよ。もちろん、無料のSSL証明書です。なんだか時代は刻々と進化していますね。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Termuxでのスマホサーバ、SSLアクセスでも耐えれそうかな？</title>
		<link>/2020/09/10/post-9464.html</link>
		
		<dc:creator><![CDATA[JunkHack]]></dc:creator>
		<pubDate>Wed, 09 Sep 2020 17:27:32 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[高速化]]></category>
		<guid isPermaLink="false">/?p=5980</guid>
				<media:thumbnail url="/wp-content/uploads/2020/09/termuxssl.png" />
							<description><![CDATA[TermuxでのLet&#8217;s Encrypt　SSL化がやっとできたのでメモっておきます！ まず心配だったのは、SSLアクセスしたときのレスポンスですが、まぁ我慢どころといった感じでしょうか。 非SSLと比べる [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>TermuxでのLet&#8217;s Encrypt　SSL化がやっとできたのでメモっておきます！</p>



<p>まず心配だったのは、SSLアクセスしたときのレスポンスですが、まぁ我慢どころといった感じでしょうか。</p>



<figure class="wp-block-image size-large"><img decoding="async" src="/wp-content/uploads/2020/09/webpagetest_test_details_-_tokyo___jh_gpl_jp__-_09_10_20_00_45_09.png?w=937" alt="" class="wp-image-5982" /></figure>



<p>非SSLと比べると、接続には少し時間がかかっています。実際にスマホからSIM通信してみると、若干ワンテンポ送れる感じです。</p>



<p>証明書は、Let&#8217;s Encrypt でこれは３ヶ月ごとに更新しないといけないので自動化が必須となってきます。手動でやってもいいのですが、絶対面倒になって証明書を切らしてしまうので。で、自動化には <a rel="noreferrer noopener external" href="https://certbot.eff.org/" target="_blank" data-wpel-link="external" class="wpel-icon-right">certbot<span class="wpel-icon wpel-image wpel-icon-1"></span></a> のスクリプトが有名なんですが、これは依存関係などがあったり、root （スクリプト中で su したり）が必須とかで、Termux では動きません。動かす方法もあるのでしょうが、世の中にはもっと小さな自動化ツールがありました！</p>



<p><a rel="noreferrer noopener external" href="https://github.com/diafygi/acme-tiny" target="_blank" data-wpel-link="external" class="wpel-icon-right">acme-tiny<span class="wpel-icon wpel-image wpel-icon-1"></span></a> っていうPython製の自動化PGです。pythonとopenssl があれば動くそうです。pip で入れて見ます。</p>



<h3 class="wp-block-heading">ステップ１ pythonを入れる</h3>



<p>pythonが必要なので、なければ入れます。今回は、もう入れてあるので次です。</p>



<pre class="wp-block-code"><code>$ dpkg-query -l | grep python
ii  python             3.8.5             aarch64      Python 3 programming language intended to enable clear programs

$ pkg install python -y</code></pre>



<h3 class="wp-block-heading">ステップ２　PIPで acme-tiny を入れる</h3>



<pre class="wp-block-code"><code>$ pip install acme-tiny</code></pre>



<p>pip が古いとか言われたら、以下で。</p>



<pre class="wp-block-code"><code>$ python3 -m pip install --upgrade pip</code></pre>



<p>以下に入るようです。</p>



<pre class="wp-block-code"><code>$ which acme-tiny
/data/data/com.termux/files/usr/bin/acme-tiny

$ find $PREFIX -name *acme*
/data/data/com.termux/files/usr/bin/acme-tiny
/data/data/com.termux/files/usr/lib/python3.8/site-packages/acme_tiny.py
/data/data/com.termux/files/usr/lib/python3.8/site-packages/__pycache__/acme_tiny.cpython-38.pyc
/data/data/com.termux/files/usr/lib/python3.8/site-packages/acme_tiny-4.1.0.dist-info</code></pre>



<h3 class="wp-block-heading">ステップ３　Let&#8217;s Encryptアカウントの秘密鍵</h3>



<p>どこか適当な場所にディレクトリを作って、そこで作業します。</p>



<pre class="wp-block-code"><code>$ cd
$ mkdir ssl
$ cd ssl
$ openssl genrsa 4096 &gt; account.key</code></pre>



<h3 class="wp-block-heading">ステップ４　ドメイン用の秘密鍵を作成</h3>



<p>ドメイン名は、読み替えてみてください。</p>



<pre class="wp-block-code"><code>$ openssl genrsa 4096 &gt; www.example.jp.key</code></pre>



<h3 class="wp-block-heading">ステップ５　ドメインの証明書署名要求（CSR）を作成</h3>



<pre class="wp-block-code"><code>シングルドメイン
$ openssl req -new -sha256 -key www.example.jp.key -subj "/CN=www.example.jp" &gt; www.example.jp.csr</code></pre>



<p>サブドメインのワイルドカード証明書はどうやって作るのかまだ知りません。課題です。</p>



<h3 class="wp-block-heading">ステップ６　証明書に署名してもらう</h3>



<pre class="wp-block-code"><code>$ mkdir -p /data/data/com.termux/files/home/【WEBROOT】/.well-known/acme-challenge/

$ acme-tiny --disable-check --account-key ./account.key --csr ./www.example.jp.csr --acme-dir /data/data/com.termux/files/home/【WEBROOT】/.well-known/acme-challenge/ &gt; ./www.example.jp.crt</code></pre>



<p>ここで、&#8211;disable-check　を入れていますがこれは先日記載したUターンNAT（ヘアピンNAT）ができないため、自分自身のWEBにアクセスできないからです。そういう問題がない場合は、削除してください。</p>



<p>こんな感じで出来ると思います。crtができない場合は何かが悪いです。ログにヒントがありますので慌てず、探りましょう！</p>



<pre class="wp-block-code"><code>.
├── account.key
├── www.example.jp.crt　署名された証明書
├── www.example.jp.csr
└──  www.example.jp.key　鍵

.WEBROOT
    └── .well-known
        └── acme-challenge
           └──xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</code></pre>



<h3 class="wp-block-heading">ステップ７　nginxの設定</h3>



<p>設定ファイル抜粋。ルータとtermuxはポート転送しています。</p>



<pre class="wp-block-code"><code>http {
：：（略）
    ssl_session_timeout 30m;
    ssl_session_cache   shared:SSL:10m;
    ssl_session_tickets off;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256;
：：（略）
server {
     listen      8443;
：：（略）
     ssl_certificate     /data/data/com.termux/files/home/ssl/www.example.jp.crt;
     ssl_certificate_key /data/data/com.termux/files/home/ssl/www.example.jp.key;
：：（略）
</code></pre>



<p>なぜか、location で、.well-known/acme-challenge/　の場所が以下のように指定したら、アクセスできませんでした。なので、これは消して、実際のWEBROOTに/.well-known/acme-challenge/を作りました。</p>



<pre class="wp-block-code"><code>location ^~ /.well-known/acme-challenge/ {
    root /data/data/com.termux/files/home/【acme-challengeがあるパス】;
}
location = /.well-known/acme-challenge/ {
    return 404;
}</code></pre>



<p>以下の評価が先にマッチしてしまって、これも一時的に消しました。</p>



<pre class="wp-block-code"><code>location ~ /\. {
    return 404;
}</code></pre>



<p>nginxの設定、不慣れなんでどこかおかしいんでしょうね。</p>



<p>ワイルドカード証明書が取得できるようにしたら、cronに定期実行してもらおうと思いますが、もう少しいろいろ試してみてからにします。</p>



<p>SSLのチェックも良さそうです。</p>



<figure class="wp-block-image size-large"><img decoding="async" src="/wp-content/uploads/2020/09/ssl_server_test__jh_gpl_jp__powered_by_qualys_ssl_labs_.png?w=1024" alt="" class="wp-image-5993" /></figure>



<p>PageSpeed Insightsのモバイルのスコアも良さそうです。</p>



<figure class="wp-block-image size-large"><img decoding="async" src="/wp-content/uploads/2020/09/pagespeed_insights-1.png?w=744" alt="" class="wp-image-5995" /></figure>



<p>PC版は１００点出ました！</p>



<figure class="wp-block-image size-large"><img decoding="async" src="/wp-content/uploads/2020/09/pagespeed_insights-2.png?w=737" alt="" class="wp-image-5997" /></figure>



<p>ということで、Termux のnginxとphp-fpmで無料の証明書を入れて速度的にも問題なさそうかなという感じです。</p>



<p>あとは、今回出たもろもろの問題をクリアにしてマクロを定期実行できればOKです。ぼちぼちやっていきます。でも、10月はじめまでには、移行完了しないといけませんので、それまでにはCDN問題もクリアして試してみたいです。</p>



<h3 class="wp-block-heading">良くわからんこと！</h3>



<p>・nginxのlocationのマッチはどうなってるのか？</p>



<p>・ワイルドカード証明書はどうやって作るのか？CSRの作り方っぽいが？</p>



<p>・リバースプロキシーでSSLアクセスするにはどうしたら？</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>スマホサーバの構成をNGINX+php-fpm+mariadbの構成にしてWordPressを動かして速度を計測しておいた</title>
		<link>/2020/09/08/post-5943.html</link>
					<comments>/2020/09/08/post-5943.html#comments</comments>
		
		<dc:creator><![CDATA[JunkHack]]></dc:creator>
		<pubDate>Mon, 07 Sep 2020 19:48:02 +0000</pubDate>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[高速化]]></category>
		<guid isPermaLink="false">/?p=5943</guid>
							<description><![CDATA[NGINXとphp-fpm構成にしてみました。いつもの計測サイトです。 夜間のネットワークが一番空いている時なんで、速い感じでしょうか？ GCP東京リージョンからの、apache ab は以下。182/sec　〜！速っ　 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>NGINXとphp-fpm構成にしてみました。いつもの<a href="https://www.webpagetest.org/" target="_blank" rel="noreferrer noopener external" class="broken_link wpel-icon-right" data-wpel-link="external">計測サイト<span class="wpel-icon wpel-image wpel-icon-1"></span></a>です。</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img decoding="async" src="/wp-content/uploads/2020/09/webpagetest_test_details_-_tokyo___jh_gpl_jp__-_09_08_20_04_17_28.png?w=940" alt="" class="wp-image-5945" /></figure></div>



<p>夜間のネットワークが一番空いている時なんで、速い感じでしょうか？</p>



<p>GCP東京リージョンからの、apache ab は以下。182/sec　〜！速っ　78秒かかっていたテストが５．５秒。あ、これWordPressのキャッシュ効かせる前でしたね。apache構成でも同じ条件でサイド計測しておかないと。</p>



<pre class="wp-block-code"><code>$ ab -n 1000 -c 100 http://jh.gpl.jp/
：：
Server Software:        nginx
Server Hostname:        jh.gpl.jp
Server Port:            80

Document Path:          /
Document Length:        15997 bytes

Concurrency Level:      100
Time taken for tests:   5.479 seconds
Complete requests:      1000
Failed requests:        0
Total transferred:      16202000 bytes
HTML transferred:       15997000 bytes
Requests per second:    182.52 &#091;#/sec] (mean)
Time per request:       547.887 &#091;ms] (mean)
Time per request:       5.479 &#091;ms] (mean, across all concurrent requests)
Transfer rate:          2887.87 &#091;Kbytes/sec] received

Connection Times (ms)
              min  mean&#091;+/-sd] median   max
Connect:       16   20   6.5     19     149
Processing:    57  487  82.1    480     747
Waiting:       39  467  82.0    460     724
Total:         88  507  82.5    501     783

Percentage of the requests served within a certain time (ms)
  50%    501
  66%    531
  75%    544
  80%    551
  90%    578
  95%    642
  98%    702
  99%    738
 100%    783 (longest request)</code></pre>



<p>まだ、SSLとか設定はこれからでパラメータなども未調整です。設定値は以下のサイトを大いに参考にさせていただきました。</p>



<blockquote class="wp-block-quote"><p><a href="https://worklog.be/archives/3222" target="_blank" rel="noreferrer noopener external" data-wpel-link="external" class="wpel-icon-right">NginxでWordPressを使う時の設定をまとめてみた<span class="wpel-icon wpel-image wpel-icon-1"></span></a></p></blockquote>



<p>あとは、SSL設定をtermuxでどうやるかですね。自動化したいので、どんな感じの仕組みが動くんでしょうか。</p>



<p>あ、それからRapid START CDNのフェイスブックチャットに応答があったんで、もう一度試してみるかもしれません。</p>



<h2 class="wp-block-heading"> 追記</h2>



<p>やっぱりWEBフォント読まないほうが速いんで、Autoptimizeで試験的にカットしてみました。</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img decoding="async" src="/wp-content/uploads/2020/09/webpagetest_test_details_-_tokyo___jh_gpl_jp__-_09_08_20_17_40_55.png?w=941" alt="" class="wp-image-5953" /></figure></div>



<p>読み込むものが少なくなれば、表示するのも速いですね。WEBフォントがなくなることで、多少文字の表示は意図したものと違うことになりますが、快適に読んでもらえるほうが良いと思うので、とりあえずはWEBフォントは外す方向で。</p>



<p>あと、モバイル向けのスコアがかなり変わりました。</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><a href="https://developers.google.com/speed/pagespeed/insights/" data-wpel-link="external" target="_blank" rel="external noopener noreferrer"><img decoding="async" src="/wp-content/uploads/2020/09/pagespeed_insights.png?w=700" alt="" class="wp-image-5956" /></a></figure></div>



<p></p>



<p>まぁ、そのうち気が変わるかもしれませんが。</p>
]]></content:encoded>
					
					<wfw:commentRss>/2020/09/08/post-5943.html/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
	</channel>
</rss>
