WordPressをSSL移行でアクセス数が大幅に減少・・・原因を考察

最近のGoogleからの推奨で、ウェブサイトの全体SSL化が推奨されていますね。

私が運営している複数のサイトも、SSLに対応するため、複数のサイトをSSLに対応しました。

SSL移行の手順

手順としては以下の通りです。

1. サイトをHTTPSで見れる設定にして、記述を諸々変更する
2・ 301リダイレクトでHTTPへのアクセスはHTTPSへ飛ばす
3・ ウェブマスターツールでHTTPSのサイトを新しく登録し、Google AnalyticsのサイトのURL設定を変更する

といった形で、複数のサイト(10サイト程度)をほぼ同時期にHTTPS化しました

SSL化する方法としては、Cloudflareの無料SSLを使っています。

結果

結果としてですが、複数のサイト(10サイト程度)で、アクセス数の増減が発生しました。

SSL化してすぐに発生したわけではなく、1週間か2週間程度経ってから発生しました。
(それまでは問題なかったのにです。)

サイトのアクセス数の減少度合いはサイトによってばらつきがあり、最も大きく減少したサイトは、アクセス数が6割程度減少しました。

少ないサイトでは2割程度の減少で、サイトによってはアクセス数がほぼ変動なしのサイトや、むしろ増加したサイトも見られました。
(大幅に増加したサイトはなく、微増といったかんじです)

何故アクセス数が減少したかの考察

アクセス数が減少した理由についていろいろと調査してみましたが、まず、ウェブマスターツールを調べてみたところ、サイト全体の平均検索順位の低下はそこまで顕著には見られませんでした。

それにも関わらずアクセス数が減少幅が大きいサイトで6割も減少したのは、別の理由がありました。

原因としては、HTTPS移行後の特定のURLがインデックスに登録されなくなったことにありました

ウェブマスターツールで調べてみたところ、以前はインデックスされて上位に表示されていた複数のページが

「Google により、ユーザーがマークしたページとは異なるページが正規ページとして選択されました」という結果でインデックスから削除されていることが確認されました。

それらのページがランディングページとしてサイトに流入していたアクセスがごっそり消えてしまったわけです

上記のエラーは、HTTPのURLとHTTPSのURLが混在しているため、HTTPSのほうを非表示にしているといった内容ではなく、何故か移行後の特定のURLがそれまでは単一のURLとみなされていたのが重複URLをみなされてインデックスから除外されてしまうということが発生してしまったわけです。

これには正直困りました。

なぜなら、そのサイトでも、特定のページは問題なく移行できているものもあるのに、特定のURL(パーマリンク設定のURL)のぶんだけ移行できなくなってしまったからです。

設定に不備がなかったからサイトのページを何度も確認してみましたが、Canonical設定の不備や記述の不備も見当たらず、困り果ててしまいました。

そもそも、サイトやページによって何故こうもばらつきがあるのかも理解できませんでした。

HTTP→HTTPSへの完全な移行には一ヶ月ほどかかるそうなので時間がかかるのであれば仕方がないですが、もし回復しなかった場合、致命的な結果ということになります。

結論:サイト全体のHTTPS化は一概に推奨はできない

HTTPSの通信は、ネット通販で個人情報を入力するサイトなど、サイトによってはなくてはならない必須の技術です。

しかし、サイト全体のHTTP→HTTPS化は、移行に伴う検索順位の低下のリスクが伴うことが分かりました。

移行手順に不備があった可能性も考えられますが、それがGoogleの管理コンソールにどういった理由かも表示されず、ただ一方的に順位の低下やインデックスからの削除のみ、結果として受け取らないといけないのは、Google側の不備としかいいようがない気がします。

HTTPS化はGoogleから推奨はされているものの、検索順位のアップなど、メリットが明確に受け取れるわけではないので、どうしても必要という場合以外は見送ったほうが賢明な判断だと思いました。

kusanagiのphp.iniの設定変更方法

利用しているサーバはConohaのKusanagiで、Nginx+php7の環境。

phpでフォームを作った際に、PHPの「max_input vars」の設定に引っかかって、変数が投稿できなくなってしまった。

調べてみると、現状の設定が

max_input vars 1000

になっていて、これを

max_input vars 3000

あたりに変更したい。

nginxは、.htaccessが使えないので、php.iniで設定を変更するが、どのファイルを変更したらいいのか分かりにくい。

そのときは、phpinfo()で出力したファイルで、php.iniの設定ファイルの場所が確認できるので、場所を確認する

私の環境の場合には

/etx/php7.d/php.ini

を変更すればよかった。

上記のphp.iniを開き

max_input vars 1000

max_input vars 3000

に変更

その後、設定を反映させるためにphpを再起動

kusanagi php7

私の環境はphp7なので、上記のコマンドでphpを再起動して反映できる。

現在の自分の環境を確認するには、

kusanagi status

のコマンドが便利な他、phpの設定の確認には phpinfo() を利用するとよいだろう。

Nginx+php7へのWordPress移行で苦労した点まとめ

PHP7+Nginx

サイト運営に利用していたサーバを、サーバの運営に利用していたPleskの値上がりを受けて別のサーバへ移行しました。

サーバの環境もけっこう代わりました。

移行前の環境
php5+Apache

移行後の環境
php7+Nginx

すんなりサーバが移行できたわけでなくて、いろいろとトラブルも発生したので発生した問題点と、解決方法について備忘録として書いておきます。

1.サーバを移行しようと思った理由

これまで使用していたサーバの月額費用が、Pleskのライセンス費用で値上がりしたと、いってみればそれだけの理由です。
試算してみると、Plesk抜きのサーバへ移行すると月額2000円〜最大で3000円ほど(年額換算で3万円ほど)節約できる試算になったのでこのタイミングで移行することにしました。

2,移行したサーバ会社

ConohaのVPSに移行しました。

Conohaを決めた理由としては

  • サーバに最新技術が導入されていてサイトの動作速度向上が期待できる
  • Pleskは使えないが、Kusanagiコマンドで簡単にサイト設定を行うことができる
  • 費用面でサーバのメモリを少なくすれば月額費用はかなり少なくてすむ

という点になります。

2.移行プロセス

カスタムパーマリンクが機能しない

まず、サーバ管理のソフトウェアをApacheからNginxに変更しました。

理由としては、速いから? よく分かりませんがそうしました。

そしてPHPのバージョンを7にしてみたのですが、これはうまく行かず、理由としては、WordPressのカスタムパーマリンクが上手く機能しなかったから。

URL/〜〜〜/〜〜〜/

上記のようなWordPress上で設定していたURL設定が機能せず、Not Foundとなる。
この解決方法がわからなかったので、別の方法を考えました。
(理由としてはNginxの設定だったのですが、最初は分かりませんでした)

Apache + HHVMを試してみる

結局サーバのNginxではだめだったので、HHVMでサーバを変更してみることにしました。

HHVMというのはPHPのバージョンの1つのようなものなのですが、NginxではなくApacheで動作します。
kusanagiだとワンボタンでサービスを変更できるので、変更してみたところ、問題なくサイトが機能した・・・ように見えました。

訪れる謎の高負荷と、サーバダウン

HHVM+Apacheは、HHVMのキャッシュに機能で動作が非常に高速で、サーバ移行前と比べると動作が高速化してめでたしめだたし・・・・かと思いました

が、数時間おきにサーバに謎の高負荷がかかりサーバダウンするという現象が起きました。

とりあえず応急処置としてこまめにHHVMの再起動設定

調べてみたところ、ConohaのKusanagiのHHVMは不安定でときどきダウンすることがあるということでした。

応急処置として、cron設定で1分ごとにHHVMを再起動するように設定しました。
これにより、仮にサーバがダウンしても長時間そのままダウンし続けるという自体は避けることができます。

原因はよく分からないのですが、とりあえず同様の現象の方はいたようで、またあくまで応急処置で、数時間に一度、数分程度サーバがダウンしてしまうということ自体が解消されたわけではなく、さすがにその状況でサーバを運営し続けることは品質面で問題といえます。

そこで、別の方法を検討することにしました。

すると、Nginxに切り替えると安定するということでした。

Nginx+PHP7に再度挑戦

最初にいったんやろうとしてあきらめたNginx+PHP7への移行に再度挑戦してみることにしました。

Conohaのサービスでは、サーバをイメージ保存しておいて、そのコピーのサーバを簡単に作成できるので、HHVMのサーバは残した状態で、コピーしたサーバを作成し、Nginxの設定に変更してテストを行いました。

こういうことがコントロールパネルから簡単にできるのも、Conohaの優れている点です。

カスタムパーマリンクの対応

まず、カスタムパーマリンクが動作しない点については、Nginxは.htaccessが使えないのでNginxの設定ファイルに記述しないといけないということでした。

Nginxの設定ファイルは、nginx.confというファイルに設定されているのですが、このファイルに正規表現を使って様々な記述がされていたので、この設定をサイトごとに設定しました。

この作業は少し手間がかかる作業でしたが、完了することで、無事パーマリンクが機能するようになりました。

PHP7で動作しないファイルの修正

次に、以前のサーバがPHP5で動かしていたので、PHP7になることで動作しないファイルが大量に出現したので、これらのエラーファイルを順に修正していきました。

エラー箇所の特定は、Nginxのエラーログファイルを見ながらエラー箇所を特定し、修正してきました。

これらは運営しているサイトの数が多かったのでかなりの作業量が必要になり、なかなか大変な作業だったのですが、HHVMにしたときに数時間おきに少しの間サーバがダウンするのはサービス品質に対して影響が大きいだろうということでやむをえず行いました。

PHP5の記述とPHP7では、特にデータベース回りの記述が変更になっている箇所が多かったので、修正箇所は多岐に渡りました。

また、WordPressのプラグインも、PHP7に対応していないプラグインは削除したり、ファイルの修正で対応できるものは対応するということが必要になりました。

サーバの移行完了

これらの作業を終えることで、無事Apache+PHP5からNginx+PHP7への移行が完了しました。

つまづいた点としては、

  • .htaccessが使えないのでパーマリンク設定をnginx.confに記述しなければならない
  • PHP5の記述が一部動作しないのでエラーが起こる点はPHP7で動作するように修正しなければならない

という主に2点になります。

思った以上に移行作業は時間はかかりましたが、結果的にサーバのランニングコストを下げることができ、サイトもNginx+PHP7になったことで高速化したように見えるのは良い点ではないかと思います。

まだサーバが移行したばかりなので予期せぬトラブルはあるかもしれませんが、しばらく様子見したいと思います。

phpでファイルをinclude時に謎の空白行が入る問題を解決

  • 2018年5月10日 6:46 PM
  • php

phpのファイルで、特定のファイルをincludeして読み込んだ場合に、謎の空白行が上に1行入る問題がありました。

発生した問題

phpファイルのヘッダの上に謎の空白行が1行表示される

原因の究明方法

まずはchromeのデベロッパーツールでソースコードを調べたが、ソースコード上には何の問題も見られない。
phpファイルのプログラムの行を削除して調べていたところ、特定のphpファイルをincludeした際に改行が入っていた。
該当のphpファイルを調査したが、問題ないソースコードであるように見受けられ、不要な出力や改行、全角文字なども見当たらなかった。

解決策

該当の問題となっていたphpファイルを新規作成して作り直し、同様のコードをコピーペーストして同様の内容とした。
作り直したファイルをアップロードしたところ問題は解消した。

つまり、もともとのファイルを作成した際に、文字コードや改行コードの微妙な違いがあったようである。

詳しい原因は分からないが、作成した時に使っていたエディタや環境と、現在使っている環境(phpstorm)が異なっていたために、微妙な差があって発生していた問題かもしれない。

メルカリをはじめて使ってみた感想

メルカリ

これまでネットショップで売買をするのにはもっぱらヤフオクを使っていたのだが、新しいものも使ってみないと分からないということで、使ってみました。

以下、メルカリを使ってみた感想です。

メルカリの良い点

1.登録が簡単

サイトに登録をするのがまず簡単です。
本人確認やらややこしい作業が必要かなと予想していたのですが、かなり簡単に登録することができました。
口座情報などは後から設定が可能です。

2.出品が簡単

出品するのが簡単です。
使ってみたのは、本を出品する「メルカリカウル」というサービスがあってそれを使ってみたのですが、本の出品がバーコードをスマホで読み取ると登録でき、値段も売れ筋の価格が自動で登録されるというもの。
本1冊の登録に1分もかからないという手軽さに驚きました。

3.配送が簡単

配送も提携しているヤマトなどの配送所やコンビニを使うと簡単です。
スマホから生成したバーコードを読み取ることで送り主と宛先の情報が自動で登録されます。
手書きで住所や氏名、電話番号を書く必要が無いことには驚きました。

欠点

1・手数料を取られる

欠点としては、手数料を取られることがあげられます。
手数料は売上の10%取られるので、1万円の商品を売り上げたら1000円は手数料で取られてしまいます。
このため、高額の商品であればせっかく売れても手数料である程度取られてしまうのがネックです。
自分で経営しているネットショップであれば手数料をとられずにすむので、仮にそちらで売ることができるのであれば、そちらのほうが利益率は高いですね。

総合的な感想

総合的な感想としては、「とにかく簡単」ということは何よりもメリットとしてあげれます。
めんどくさい部分をシステム化・自動化して、利用者にとって取引が楽にできる形態がつくりあげられていると思います。

EC-CUBE3インストール時のステップ4:データベース接続エラーを解決

EC-CUBE3のインストールをローカル環境で試していたところ、ステップ4のインストール時のデータベース設定でエラーが出た。

データベースに接続できませんでした。 || An exception occured in driver: SQLSTATE[HY000] [2002] No such file or directory

データベースはMySQLを使用していて、データベースとユーザは作成済みだったがエラー。

原因はよくわからなかったが、以下の方法で解決した。

ホスト名の部分を

localhost

から

127.0.0.1

に変更

これで通るようになった。

原因はよくわからないが、おそらくローカル開発環境の設定上の問題であろうと思われる。

ウェブ制作の市場規模について

ホームページ制作会社でかつて働いていたものとして、ウェブ制作の規模というものについて調べてみました。

1.Web制作の市場規模

正確な数字の把握は難しいですが、2017年のWebインテグレーションの市場規模は

1270億円

ということでした。

毎年10%程度の市場が増加していっているということです。

ただし、上記はどういった方法で集計されているのかは不明です。
クラウドソーシングなどもあると思うので、実際はもっと大きい可能性もあると思います。

2.都道府県別分布

都道府県別にどのくらいホームページ制作会社が分布しているのでしょうか。

以下のサイトによると、ほとんどの仕事が東京に集中しているのが分かります。

全国のWebデザイナーの求人分布 – 求人数が色分け地図でわかる「ココある!仕事」

地方のほうでは求人数が10とかなのに対して東京都が5000とかになっていて、500倍くらいの仕事の数に差があるということが分かります。

都会の中でも東京が圧倒的で、2位の大阪の10倍くらいの求人が存在していますね・・・。

上記はWebデザイナーについてでしたが、Webエンジニアにしても同様でした。

世の中にある様々な仕事で地方と都会はどれも差がありますが、IT系の仕事は特に都会と地方の格差が大きくなっている印象があります。

1の結果により、ウェブ業界全体では1200億ほどの市場規模はあるそうですが、東京に仕事がほとんどの仕事を集中していることを考えると、地方の県では市場規模が2億程度しかない?という感じではないかと思われます。

県全体で2億円ということは、それをその県内にいる複数の事業者が奪い合うことになるので、トップクラスの事業者でも数千万円の売上といったかんじでないのではないかと思います。

MacのOSをHigh Sierraにアップデートしたらphpが動作しなくなったので対処メモ

MacのOSアップデートが来ていたので、Hight Sierraにアップデートしたら、ローカルの開発環境のApacheのphpプログラムが動作しなくなってしまった。

具体的にいうとソースコードが表示されてプログラムが動作していない。

原因を調べてみると、とりあえずMacのOSを最新版にアップデートすると、Apacheの設定ファイルであるhttp.confが最新版に置き換わってしまうので、設定内容を確認する必要がある。

ちなみに、Macのhttpd.confは /etc/apache2/httpd.conf にあるが、OSアップデート時にアップデート前の設定ファイルが httpd.conf.pre-update にバックアップされている。

diff /etc/apache2/httpd.conf /etc/apache2/httpd.conf.pre-update

上記のコマンドで差分を確認できる。

差分を確認していると、結論から言うと MacのOSをHigh Sierraにアップデートすると、phpの推奨環境は php7 になっていて、php5は推奨されないようだ。

High Sierraでは、デフォルトの設定が

LoadModule php5_module libexec/apache2/libphp5.so

だったのが、

LoadModule php5_module libexec/apache2/libphp7.so

になっている。

無理にphp5を動かすことも可能だろうが、おとなしく推奨環境のphp-7に対応してみることにした。

対応としては、一旦phpをアンインストールしてから、最新版のphp7をインストールする。

homebrewを使っているので、まずは brew-update で homebrewを最新版にアップデートしてから、php5.6をアンインストールしてphp7をインストールすることにした。

ざっくりというと下記のようなかんじ。

brew update //homebrewを最新版にアップデート
brew unlink php56 //php5.6をアンインストール
brew install php71 //php7.1をインストール
php -v //バージョン確認

これでphpのバージョンが7にできていることを確認できた。

これで httpd.confの諸々の設定を変更してみたのだが、相変わらず動作しない。

Apacheのエラーログをあさってみたところ

#LoadModule unixd_module libexec/apache2/mod_unixd.so

LoadModule unixd_module libexec/apache2/mod_unixd.so

この読み込みができていなくてエラーが出ているようだったので、コメントを外すことで動作するようになった。

しかし、これでようやくApacheのサーバは動作するようになったのだが、phpのプログラムがエラーで動作しなくなった。

調べてみると、php7系では、mysql系の関数がオブジェクト指向の使い方が推奨されていてmysql系の関数が使用できなくなっているようなので、諸々修正する必要があるようだ。

とりあえず、データベース接続関係以外のプログラムは問題なく動作していたので、該当箇所だけ修正しないといけないのだが、けっこう多くの修正が必要となってしまうが、この対応はまた時間があるときにする予定。

MacでAirPodsの音が出なくなった場合の対処法

Macで、Apple製のイヤホンAirpodsをbluetooth接続したときに、音が出なくなりました。

対処法として試した見たことを書いておきます。

まず、Macの右上のツールバーで、Bluetoothのメニューから、表示されているAirpodsのメニューから「サウンド環境設定を開く」を選択します。

設定画面1

設定画面が開いたら、下にある「主音量」のメニューから音量が入っているかどうかを確認します。
また、「消音」にチェックがもし入っている場合は外します。

上記の設定を確認してみてください。
私の場合は、主音量が一番低くなっていたので、音量を調整することで治りました。

この手順でなおらない場合は、一旦blutoothの設定をオフにして再度オンにしてAirpodsを設定したり、Macを一旦再起動してみたりすると治る場合もあるようです。

phpにmycrypt拡張を追加する

phpmyadminを使っていたところ、画面の下に「mycrypt拡張がない」と表示が出たので、調べて入れてみた。

yumでepelリポジトリからインストール

yum install –enablerepo=epel php-mcrypt

エラーが表示された(以下訳)

Resolving Dependencies
依存性を解決しています

There are unfinished transactions remaining. You might consider running yum-complete-transaction first to finish them.
終了していないトランザクションが残っています。
完全なyumのトランザクションを最初から完了まで実行することを検討してください。

The program yum-complete-transaction is found in the yum-utils package.
yumの完全なトランザクションプログラムはyumのユーティリティのパッケージに見つかりました。

–> Running transaction check
トランザクションの実行をチェックしています。

—> Package php-mcrypt.x86_64 0:5.3.3-5.el6 will be installed
php-mcrypt.x86_64 0:5.3.3-5.el6のパッケージがインストールされます。

–> Processing Dependency: php(zend-abi) = 20090626 for package: php-mcrypt-5.3.3-5.el6.x86_64
パッケージのためのphp(zend-abi) = 20090626は依存性があります。

–> Processing Dependency: php(api) = 20090626 for package: php-mcrypt-5.3.3-5.el6.x86_64
パッケージのためのphp(abi) = 20090626は依存性があります。

–> Finished Dependency Resolution
依存性の解決が終了しました。

Error: Package: php-mcrypt-5.3.3-5.el6.x86_64 (epel)
Requires: php(api) = 20090626
Installed: php-common-5.4.20-1.el6.remi.x86_64 (@remi)
php(api) = 20100412-x86-64
Available: php-common-5.3.3-49.el6.x86_64 (base)
php(api) = 20090626

エラー:
パッケージのためにphp(api) = 20090626が必要です。
php-common-5.4.20-1.el6.remi.x86_64 (@remi)がインストールされています。
php-common-5.3.3-49.el6.x86_64 (base)が利用可能です。

You could try using –skip-broken to work around the problem
–skip-brokenをつけることでこの問題に対処できるかもしれません

You could try running: rpm -Va –nofiles –nodigest
rpm -Va –nofiles –nodigestを実行してみてください

訳してみたが、訳しきれないし、結局意味もよく分からない。

ただいえることは、依存性関係でエラーが起きているということである。

エラーメッセージの中の

Installed: php-common-5.4.20-1.el6.remi.x86_64 (@remi)

に注目すると、php-commonがremiで入っているということなので、remiリポジトリからインストールしてみた

yum install –enablerepo=remi php-mcrypt

すると今度は問題なく実行できた。

よく意味は分からないが、結果的にインストールできたので良しとする・・・。

ダイジェスト認証を使うメリットと使用方法

特定のサイトや、公開していない特定のディレクトリに閲覧制限をかけるときによく使われるのが基本認証(basic認証)です。

ただし、基本の認証方法の問題点として、パスワードが平文で送信されてしまうというものがあります。

このため、公衆無線LANなど暗号化されていない場合、かつ非SSLのようなサイトで基本認証のみに頼るのはセキュリティ的に問題があるといえます。

この問題点を解消しているのがダイジェスト認証です。
認証をかけているサイトにアクセスした場合、IDとパスワードを入力するとアクセスすることができるのは同じですが、パスワードが暗号化されて送信されるため、基本認証よりもセキュリティ的に安全性は高いといえます。

ただし、問題点としては基本認証に比べると新しいためか一部の古いブラウザなどに対応していないことです。
ただし非対応ブラウザがIE5以前とか、古いガラケーなどということで、多くの人が通常使用しているブラウザには概ね対応しているということなので、開発用に使用するにあたってはそれほど大きな問題とは言えないと思います。
なお、対応していないブラウザでアクセスした場合はエラーを返してアクセスはできないようです。

また、サーバによっては使用できない場合もあるそうなので、その場合はApacheであればhttpd.confの設定を一行変更することで使用できるようになります。

LoadModule auth_digest_module modules/mod_auth_digest.so

上記記述(最初からある)がコメントアウトされていなければ問題なく使用できます。

設定方法に関してですが、基本認証と同じように .htaccessに記述する方法で設定できます。

ほとんど基本認証と変わりませんね。

.htpasswdの記述方法に関しては、以下のように書きます。

ユーザ名:認証名:暗号化したパスワードフレーズ

例えば、以下の例であれば

user:auth:password

パスワードの部分には、上記の文字列を(user:auth:も含めて)そのままMD5暗号化したものが入ります。

上記の例であれば

user:auth:4481f9057c05e4c3c85c52d9d7dee0f0

が入るわけです。

設定方法は以上になります。

基本認証よりはセキュリティ的に強度は高いので、問題がなければ基本認証よりはダイジェスト認証を使うので良いのではないかと思います。

phpmyadmin設置時に画面が真っ白になるエラー(500)に対処

使用していたサーバに最新のphpmyadmin(この記事を書いている時点で4.7.4)を設置したところ、画面が真っ白になるエラーに見舞われた。

chromeの場合は画面が真っ白になって
「このページは動作していません(500エラー)」
といった内容で、SafariとFirefoxではただ真っ白になるだけ。

初期設定がいるのかと思い、調べてみたところphpmyadminはファイルをアップロードするだけでよく特に初期設定は不要ということ。

とりあえずphpmyadminは、プログラムはphpファイルなので、index.phpに

ini_set( ‘display_errors’, 1 );

を頭に追加してやり、エラー表示をさせたところ、読み込んでいる特定のphpファイルで

phpmyadmin Parse error: syntax error, unexpected なんちゃらなんちゃら

といったエラーが表示された。
構文エラーが起こっているということ。

調べてみると、最新のphpmyadmin(4.7.4)には、動作するのに php5.5〜7.1 と MySQLの5.5が必要となるということ。

結論をいうと、サーバのphpのバージョンが最新版に対応していませんでした。

phpmyadminのダウンロードサイトで旧バージョンも提供されていたので旧バージョンをインストールしなおすことで解決しました。

CentosでデータベースのバックアップをDropboxに転送する

CentOSでデータベースのバックアップをDropboxに転送する方法についての解説です。

データベースの二重バックアップの必要性

CentOSのサーバでデータベースを使ったサイトを運用している場合に、まずやる設定がデーターベースのバックアップを取って(mysqldump)、同じサーバのバックアップ用のディレクトリに保存するということをやる人は多いと思います。

しかし、この方法だともしサーバ自体に障害が発生して使えなくなったり、あやまって全部消してしまった場合などにデータの復旧ができなくなります。

この場合に、サイトを運用しているサーバ内に保存し、かつ外部のストレージにも保存しておくと、もし何らかの障害がサーバに発生した場合でもデータの復旧が可能になります。

外部ストレージに何を使うか

保存する外部ストレージには最近ではいろいろありますが、安価で有名なストレージはDropboxがあります。
無料の場合は容量に制限がありますが、それでも2GBまでであれば保存可能なので、ある程度までのデータであれば保存可能です。

欠点としては、セキュリティ上の問題は考えられますので、個人情報など重要な情報を含むDBの場合はもっと安全な方法を取るべきです。

Dropboxへのデータの保存手順

Dropboxへのデータへの保存手順にはいくつか方法があります。

まず、サーバにDropboxをインストールして、直接サーバ内のDropboxの保存ディレクトリに保存するという方法もあります。
この方法は分かりやすいですが、調べた所によると問題もいろいろあるようなので今回はパスしました。

他には、Wordpressの場合であればプラグインを使うことでも簡単に設定可能ですが、サイトの数が増えていくると都度プラグインを入れて設定する必要があるので多少手間がかかります

別の方法としては、サーバ内のデータを指定してDropboxにアップロードする方法です。
今回はこの方法を採用しました。

分かりやすいサイトとしては、以下のサイトの説明をほぼそのまま参考にしました。

第54回「SORACOM応用編!ラズベリーパイからDropboxへファイルをアップロード(1)Dropbox-Uploader」 | Device Plus – デバプラ

詳しくは上記のサイトに手順が書いてあるので詳細は割愛。

やり方としては至極単純で、Dropbox Uploaderという便利なシェルスクリプトがあるので、これをダウンロードしてサーバ内に設置して実行権限をつけるだけ。

最初にこのシェルスクリプトを実行するときにDropboxのアクセストークンについて入力しないといけないので、その設定をDropboxのサイトにログインして取得しないといけません。
必要な作業としてはそれだけです。

あとは、そのシェルスクリプトを実行して、引数にファイル元とアップロード先のディレクトリとファイル名を指定してDropboxにアップロードするだけです。

実行してアップロードが確認できれば、それをcronにセットしてやると問題なくDropboxへの転送ができました。

問題点

この方法の問題点としては、まずはDropboxのセキュリティ上の不安というのはあるかもしれないと思うので、個人情報を含むデータなどの場合は注意する必要があります。

それ以外では、Dropboxの容量が知らない間にいっぱいになっていてアップできていなかったというトラブルが起きる可能性はあるので、データのアップロードと保存が失敗した場合にメールでアラートが届くようになるとなお信頼性が高くなります。

phpでGoogleでの検索ランキングを取得する

PHPのプログラムで特定のサイトURLとキーワードからGoogleでの検索順位を取得し、結果を返すプログラムを作りたいと思いました。

理由としては、運営しているサイトの検索順位の日時変動を手動でチェックして記録するというのは手間がかかる作業だからです。

プログラムで実行でき、さらにcronで自動実行し、結果をデータベースに保存するということができれば楽になります。
そういうツールもあるのですが、何かと制限があったり、融通はきかないので。

まず、プログラムで検索順位を取得する方法についてですが、考えられる方法として、Googleの検索フォームにポストで変数を投げて、結果をスクレイピングするというものですが、これは規約によりやるとまずい場合があるということでやめました。
実行回数が多かったり検知されるとIPアドレスをブロックされるということがあるみたいです。
実際にやってないので分かりませんが・・・。

もう1つの方法として、Google Custom Search APIを使用するというものです。
こちらは公式に許可されている方法なので問題はないのですが、無料の場合は1日100クエリまでということで制限が入るようです。

それでこの方法を試してみたところ、一応目的に近いものはできたので、詳細は省略しますが、ざっくりとその過程と、この方法の現状での問題点を書いていこうと思います。

1. Google Custom SearchのAPI keyを取得する

Google Custom SearchのAPIを使用するにはAPI KEYが必要となるので取得します。
方法はネットを探すと出て来る思うのでここでは省略します。

2. カスタム検索エンジンIDを取得する

プログラムの中で使用するカスタム検索エンジンの検索エンジンIDを取得します。
カスタム検索エンジンIDは、カスタム検索エンジンを作成してから、詳細の画面で「検索エンジンID」というボタンを押すと表示されます。
※ 画面はときどき変わってしまいますが、探すと詳細画面のどこかで取得できると思います。

なお、カスタム検索エンジンを作成の際にはどのサイトで使用するかのサイト名を入力する必要があるのですが、作成後に詳細画面から「基本」タブの「検索するサイト」の項目で「追加したサイトを重視して、ウェブ全体を検索する」に設定を変更することで、

3. プログラムを作成する

1.2.のAPI KEYとカスタム検索エンジンIDを作成できればあとは、目的のサイトURLとキーワードから検索結果を取得できます。

プログラムの詳細としては、カスタム検索エンジンに、検索キーワードと、その他のパラメータを引数にしてクエリを作成して引き渡すことで、JSON形式でデータが返ってくるので、それをデコードして解析します。
こう書くとややこしそうですが、プログラムとしてはそれほど複雑ではありません。
以下のサイトが参考になりました。

Google Custom Search APIを使って検索結果のURLを取得する【PHP】 – autofocus onfocus

あとは、それを目的に応じてプログラムをチューニングすると完成です。

私の場合は、複数のサイトとキーワードとサイトで調べたいので、それをテーブルに保存して引っ張り出してきてキーワードとサイトごとに実行して順位を返す。
帰ってきた順位と日付をDBに保存というところまではできました。

問題点

これで一応目的としたものについてはできたのですが問題もあります。

1.無料でのクエリ数の制限

まずは先にもあげたように、無料の場合は1日100クエリまでしか実行できないというもの。
このため、サイトの数やキーワードが増えてくると無料では対応しきれませんので、調べたい数を絞る必要があります。
増やそうと思った場合、1日に追加で1000クエリあたり$5がかかるようです。

2.検索順位が微妙に本家サイトと違う?

あと1つの問題点は、この方法で得られた検索結果と順位が微妙に本家のものと違うということです。
これは理由がよく分からないので、検索結果の厳密さを必要とする場合にこの方法はあまり推奨できないのですが、大まかな目安とする程度であれば問題なく使用できます。
これは、何故検索結果が本家と異なるのかがよく分かっていないので、今後もし原因が分かれば追記しようと思います。

phpでYoutubeの短縮URLを埋め込み用URLに変換して出力する方法

PHPで、Youtubeの短縮URLを、埋め込み用URLに変換して出力する方法についての解説です。

Youtubeの短縮用URLとは、

youtubeの短縮URL

上記のようなURLで、Youtubeの動画を共有ボタンを押すと表示されて、それをSNSやブログに投稿すると、Youtubeの動画が埋め込まれた状態で出力されます。

これは、例えばそれぞれのブログエンジンや、SNSなどが上記の短縮URLを埋め込み用のコードに変換して出力する仕様になっているのでそのようになっています。

そのため、例えばPHPのファイルで、上記のYoutubeの短縮用URLを受け取ってそのまま出力すると、そのまま短縮用のURLが出力されるだけで、埋め込まれた状態で出力されません。

これをそのまま埋め込み用の動画として出力したい場合は、埋め込み用のURLに変換して出力する必要があり、そのための関数を作ってやると出力することができます。

埋め込み用のコード

埋め込み用のコードについてですが、基本的にiframeを使って、先程の短縮URLを一部変形させて埋め込んでやればそのまま出力できるので、それほどややこしい処理は必要ありません。

以下は私の方で作成した関数例です。
関数呼出し時に関数に短縮用URLを渡し、埋め込み用のiframeにしたURLを返却します。
ifameの横幅はデフォルトが560にいていますが、引数として渡すことで大きさを変える事が可能です。

ゲーム市場についての考察

最近のゲーム市場と、今後のゲーム市場についての考察です。

1・日本のゲーム市場について

2016年の日本のゲーム市場は全体が1兆4000億円程度の市場規模。
オンラインプラットフォーム(PC、スマホだが、おそらくほぼスマホ)がここ5年くらいで大きく成長しているが、スマートフォンの普及に伴って
成長率はここ最近は伸びが低調になってきている。
家庭用ソフト、家庭用ハードの合算の合計は10年間で約半分になっていて、ここから増える見込みはあまり考えられない。
一方で、スマートフォンのゲーム市場もある程度天井に近い状態になっている。
スマートフォンゲームの市場規模は大きいが、これもここから増える見込みも今のところ大きく考えられない。
(つまり、競争は激しくなっていく)

現在の日本の市場規模でいうと、家庭用ソフト:スマホアプリ、PCゲーム=2:8。
ユーザ数でいうと家庭用ゲーム:PCゲーム:スマホゲーム=20:10:35 くらいである。

2・世界のゲーム市場について

世界のゲーム市場は10兆円近く。
日本全体と比べると約10倍近い市場規模がある。
日本はゲーム市場として大きいが、中国に抜かれている。(とはいえ、それほど差が大きくない)

ゲームの事情は国によって大きく異なっている。

北米

北米市場は、専用ゲーム機が人気で全体の約半数を占めている。
つまり、PS4やXboxOneや任天堂のゲーム機である。
スマートフォンの市場は全体の15%程度しかない。
ゲーム市場の中でPCゲーム市場が25%程度ある。

中国

中国は全体の7割近くがPCゲーム市場である。
これは政府が海外の専用機のゲームの販売を禁止していたことに起因すうr.
スマートフォンゲームの市場は全体の2割程度である。
家庭用専用機の市場は1割程度しかない。

3・世界のゲーム市場の動向

ゲーム市場を考える上での考え方としての主なポイントは「ゲームをプレイされるハードの種類」「国別・地域別」でどのように市場の大きさが推移していくかということである。

まず、ハードの種類は主に「スマートフォン」「家庭用ゲーム専用機」「PC」という区分に大きく分けることができ、この3つのカテゴリーはそれぞれ推移こそしてもなくなることはほとんど考えられない。
ただ、その割合はある程度変化しつつ推移していくことが予想される。
世界のゲーム市場は今度も成長することが予想されるが、主に成長する市場はスマートフォン市場である。

また、現在主要となっている地域の勢力が今後どのように推移していくかということに注目される。
この15年くらいで起きた変化で一番大きなものは「中国」という国の市場が大きくなり世界最大となったことだろうが、今後どうなるのかということを考えると、まずは多くの人口を抱えているインドだろう。
それ以外にも、人口を多く抱えているアジアがどうなっていくかというところに注目が集まる。
アジアは世界全体の60%の人口が住んでいるが、現在も全体の50%程度の市場規模を持っている。
ただし、これはほとんどが中国、日本、そして韓国で構成されていて(あと少し台湾、インド)それらの構成がどう変化していくか。

2017年のスマホゲームの注目ゲーム

2017年の半分が終わりましたが、下半期にリリースされるスマホゲーム(iOS/Android)で、注目のゲームについてまとめてみました。

テラバトル2(夏)

ミストウォーカーの発売したパルズゲーム「テラバトル」の続編に当たる作品。

予想DL数:150万

テラバトル2 公式トレイラー

ドラゴンクエストライバルズ(未定)

人気ゲーム「ドラゴンクエスト」をモチーフにした本格的なカードゲーム。
ゲームシステムは「ハースストーン」や「シャドウバース」を彷彿とさせる。

公式サイト

予想DL数:1000万

『ドラゴンクエストライバルズ』ティザー映像

どうぶつの森

任天堂とDeNAが共同で開発している人気ゲーム「どうぶつの森」のスマホアプリ。
2017年度後半リリースの予定。

予想DL数:1000万

ファイナルファンタジー エクスプローラーズ フォース

ファイナルファンタジーシリーズのスマートフォンアプリ。
3DSで発売された作品の系列で、ジャンルはハンティングアクション。

予想DL数:200万

公式サイト

アークザラッド

プレイステーションの人気ゲーム「アークザラッド」の続編アプリ。
どういったゲームシステムなのかなど、詳細は現段階では不明。

予想DL数:200万

妖怪ウォッチ

3DSでの人気作品「妖怪ウォッチ」のスマートフォンアプリ。
ゲーム内容は3DSの妖怪ウォッチと近い。

予想DL数:500万

【プレイ映像】『妖怪ウォッチforスマートフォン』

2018年発売の専用ゲームの注目ゲームと販売本数予想

2018年に専用ゲーム機発売予定での個人的に注目のゲームと、販売本数の予想についてまとめました。

モンスターハンターワールド(上半期・PS4)

PS4でのモンスターハンターの最新作。
大幅に進化したリアリティのあるグラフィックが最大の特徴。

予想販売本数: 日本:150万本 海外:150万本

ディシディアファイナルファンタジー NT(上半期・PS4)

ディシディアファイナルファンタジーのPS4での最新作。

予想販売本数: 日本:50万本 海外:100万本

シェンムー3(下半期・PS4)

クラウドファンディングで制作が決定したシェンムーの最新作。

予想販売本数: 日本:20万本 海外:100万本

エースコンバット7(未定:PS4)

PS4で発売予定のエースコンバットの最新作。

予想販売本数: 日本:20万本 海外:100万本

2017年の専用ゲーム機での注目ゲームと売上予想

2017年も残り半年となりましたが、2017年に専用ゲーム機での、個人的に注目の発売ゲームスケジュールについてまとめています。

7月

ファイナルファンタジー12 ゾディアックエイジ(7/13/PS4)

ファイナルファンタジー12のPS4でのリマスター作品。
FF12のHDリマスターでありながら、ジョブシステムなど新要素が追加されている。

売上予想:日本40〜50万本 世界100万本くらい?

スプラトゥーン2(7/21/Switch)

人気を博したスプラトゥーンの続編に当たる作品。
売上予想:日本 100万本 世界:250万本 合計350万本

ドラゴンクエスト11(7/29/PS4・3DS)

国民的RPGドラゴンクエストのナンバリングタイトルに当たる作品。

売上予想:日本 250万本 世界:150万本 合計 350万本

8月

モンスターハンターダブルクロス Switch Ver(8/25/Switch)

ニンテンドースイッチでのモンスターハンターダブルクロス。
高精細な画質でダブルクロスをプレイできる。

売上予想:日本:30万本

NEW みんなのGOLF(8/31/PS4)

PS4で発売するみんなのGOLF。
売上予想:日本:80万本 世界:100万本

9月

アンチャーテッド 古代神の秘宝(9/14/PS4)

PS4で発売されるアンチャーテッドシリーズの作品。
売上予想:日本:10万本 世界:400万本

ファイアーエムブレム無双(9/28/Switch)

Switchで発売されるファイアーエムブレムの無双系の作品。
売上予想:日本:5万本 世界:50万本

英雄伝説 閃の軌跡Ⅲ(9/28/PS4)

英雄伝説、閃の軌跡の続編シリーズ。
売上予想:日本:15万本 海外:15万本

10月

スーパーマリオオデッセイ(10/27/Switch)

スーパーマリオのオープンワールド系のゲーム。
売上予想:日本:100万本 海外:500万本

11月

二ノ国Ⅱ レヴァナントキングダム(11/10・PS4/PC)

レベル5の二ノ国の続編に当たる作品。
スタジオジブリとのコラボではないが、元ジブリの百瀬義行氏とのコラボ作品。
作曲は久石譲氏。

売上予想: 日本:20万本 海外:100万本

ポケットモンスター ウルトラサン・ウルトラムーン(11/17/3DS)

ポケットモンスターの3DSの新作。
売上予想: 日本:300万本 海外:500万本

発売日未定

グランツーリスモ SPORT(秋頃・PS4)

PS4で発売されるグランツーリスモシリーズの新作。
売上予想: 日本:80万本 海外:600万本

ゼノブレイド2(冬/Switch)

Switchでのゼノブレイドの新作。
売上予想: 日本:20万本 海外:80万本

iPhone,iPadでスイッチコントロールが解除できなくなった場合の対処法

iPhone、iPadには「スイッチコントロール」という機能があり、使用することで、特定の入力を繰り返してくれたり、あるいは入力の補助に使えたりしてくれてます。

ただし、何かバグのようなものがあるようで、通常であればホームボタンをトリプルクリックすることで解除できるのですが、解除できなくなる場合があります。

その場合、通常の操作に戻れなくなり、例えば電源を長押しにして一旦再起動をかけようと思っても「電源オフにする場合は横にスライド」のところで詰まってしまい再起動できなくなってしまいます。

その場合の対処法についてなのですが、「ホームボタン+電源ボタンを長押し」で強制再起動をかけることができ、この方法で再起動をかけることで直すことができました。

Yahooショップの在庫なし商品を一括で非表示にする方法

Yahooショップの在庫なし商品を一括で非表示にする方法についてです。

Yahooショップは、ユーザ側在庫がない商品を商品一覧でチェックを入れることで非表示にすることができるのですが、チェックを入れない場合在庫なし商品でもずっと商品一覧に表示されたままになってしまうので、あまり見栄えが良い状態にはなりません。

また、その状態で管理画面から一括で商品を非表示にすることができないので、基本的には一つ一つ商品を非表示にしていくしかない、数が多い場合は対応が大変になります。

そこで、CSVを使うことで一括で非表示にする方法について調べてみました。

1.在庫なし商品一覧をダウンロードする

ストアエディタの「在庫管理」から、左下のほうにある「在庫切れの商品データ」の「ダウンロード」でデータをダウンロードします。
在庫なし商品のcsvファイルがダウンロードできます。
また、もう1つの在庫がある商品も含めての商品データのダウンロード(在庫の商品データのダウンロード)も合わせて行います。

2.商品データをダウンロードする

ストアエディタの「商品管理」から、左下の商品データの「ダウンロード」で商品データをダウンロードします。
このときに、事前に上にある「CSVダウンロード項目の選択」で、必要なもの以外のチェックを外します。
必須項目以外は全てチェックを外して下のほうにある「display/ページ公開」にチェックを入れて保存します。
CSVダウンロードには時間がかかる場合があるので、その場合は一度ダウンロードをして、少し時間が立ってからもう一度実行するとダウンロードできます。

3.CSVファイルを1つのエクセルシートに開く

ダウンロードした3つCSVファイル(全在庫商品データ、在庫切れ商品データ、全商品データ)をエクセルファイルで3つのシートにそれぞれ開きます。
この場合、普通にエクセルファイルを開くと先頭の0が消えたりとおかしくなるので、データインポートを行います。
エクセルの「データ」→「外部データの取り込み」→「テキストファイルのインポート」からインポートします。
データのファイル形式:区切り記号付き、元のファイルで適切なのを選んで「次へ」→区切り文字が「コンマ」のみにチェックで「次へ」→列のデータ形式「文字列」で、データのプレビューで全選択(一番右までスクロールしてシフト+クリック)で「完了」→既存のワークシートで「OK」

なお、エクセルがない場合はGoogleスプレッドシートでもできると思いますが、ここではエクセルで調べていますので、おそらく同様のことはスプレッドシートでもできると思います。

4.CSVファイルの編集

CSVファイルの中で、商品データが入ったシートを編集します。

まずは、「全商品の在庫」が入っているシートを編集します。
ここで、「quantity」の列をフィルタで「0」、「」(空)のセルのみをフィルタして、フィルタされた行を全て削除します。
これで、全商品の在庫のシートでなく、在庫がある商品のみのシートになります。

次に、全商品のシートを編集します。
は、「display」の列の右の列に、次の数式を入れます。

これがどういう式かというと、商品コードを比較して、在庫なしシートに商品コードが存在した商品の場合は0にして、存在しなかった場合は1にしています。
つまり、在庫なし商品に商品があった=0、なかった=1で値が入ります。
この数式を一番下までコピーします。
(一番下までコピーするのは数式セルを選択して、右下の小さい四角をダブルクリック)

次に、さらにその右側の列に次の数式を入れます。

これはどういう式かというと、在庫のある商品の場合は1を表示し、それ以外は0を表示しています。
この数式を一番下までコピーします。

最後に、その右の列に次の数式を入れます。

これがどういう式かというと、もともと0の場合は0(もともと非表示の商品は非表示のまま)で、
そうでない場合(1で表示商品の場合)で、在庫がある場合も1で(在庫がある商品場合は1のまま)
そうでない場合で、在庫がない商品の場合は0にしています。
この数式を一番下までコピーします。

こうすることで、もともと0:非表示、1:表示

なのですが、現在表示になっている商品で、在庫なしの非表示にしたい商品は0になります。
何故こんな複雑な方法をとっているかというと、同じ商品コードでも複数の商品がある場合があり、ある商品コードが在庫が0でも、同じ商品コードで在庫がある場合があり、その場合は表示にする必要があるからです。
これで、もともと表示している商品の中から、本当に在庫がない商品は0になります。

5.CSVファイルの作成

上記のシートが完成したら、まずCSVを編集する専用のソフトで、最初にダウンロードして、もともとの全商品のデータファイルを開きます。
そして、displayの列を、4の手順で最後に作成した列で置き換えます。
その後、CSVを保存します。
このときに項目ごとの引用符などは最初にダウンロードした状態の設定と合わせて保存します。
何故CSVを編集できるソフトで保存するかというと、エクセルがCSVを作成する専用のソフトではなくデータが変更されていると困るからです・・・。

6.CSVファイルのアップロード

最後にCSVファイルのアップロードを行います。
アップロードはYahooストアエディタの「商品管理」から行います。

アップロードする前に「バックアップ」で全データのバックアップを念のためとっておきます。(これも商品数によっては時間がかかります)
また、今回更新するデータは商品データなので「商品データ」→「ダウンロード」でもバックアップをとっておくとよいです。
バックアップをすることで、もしアップロードでデータの更新に失敗した場合でもあとで巻き戻せます。

「商品データ」→「アップロード」から「項目指定」にチェックを入れ、「ファイルを選択」で、5の手順で編集したCSVファイルを選択し、アップロードします。

アップロードが完了したら「反映管理」からサイト全体に反映を行います。
反映には15分ほど時間がかかるので、サイトを確認して正しく更新ができていれば作業完了で、万が一失敗した場合にはバックアップからデータを巻き戻すことも可能です。

WordPressサイトのサイト全体SSL手順(Cloudflare使用)

とあるWordPressで管理しているサイトを、世の中の流れでサイト全体をSSL化して、何箇所か苦労した箇所があるので手順を残しておきます。

1.Cloudlareで対象サイトをSSL化

まず、SSL証明書をCloudflare経由で無料で入手し、適用されるのを待ちます。

手順は簡単で、まずはCloudflareを導入して、対象のサイトを管理します。

対象サイトのDNS設定が完了したら、上メニューの「Crypt」を選択し、SSLのメニューの選択メニューで「Flexible」を選択します。
時間が経つと「Status:Active Certificate」となり、サイトにhttpsでアクセスできるようになります。

なお、この手順で使用できるようになるSSLは通常のSSL証明書とは異なるので、一部のブラウザでは挙動に問題が起こる場合もあるので、企業サイトなどきちんとしたサイトでの使用は推奨できませんが、個人サイトレベルであればほぼ問題無いと思います。
(一般に使用されるようなブラウザでは問題なく表示されます)

2.WordpressサイトをSSL化する

まず、私の場合はWordPressのサイトをSSL化するのに、プラグイン「Really Simple SSL」プラグインを使用しました。
プラグインを導入後、WordPress管理画面にhttpsでアクセスし、プラグインを有効化して設定を適用させることで反映されます。
なお、このプラグインはデータベース設定をhttp→httpsに置換するので、適用前にデータベースのバックアップを取っておいたほうが良いようです。

その後、管理画面からログアウトしてから再度管理画面にアクセスすると、リダイレクトループが発生してしまいました。
この問題は、wp-config.phpに以下の記述を追記することで解決しました。

次に、もともとのサイトがhttpで検索エンジンに認識されていたので、301リダイレクトをhttpからhttpsにかけました。
.htaccessに以下の記述を追記しました。
最初はリダイレクトループしてしまったのですが、WordPressには最初から.htaccessに記述があるのですが、その記述の
上に書いておくと動作しました。

WordPressの管理画面とサイトでそれぞれリダイレクトループが発生したのですが、上記の方法でそれぞれ対処できて問題なくhttpsでの動作確認ができました。

3.Google Analyticsの設定変更

Google AnalyticsのサイトURLもhttp→httpsに変更します。
プロパティ設定、ビュー設定のhttpをhttpsにそれぞれ変更します。

4.ウェブマスターツールの再登録

ウェブマスターツールにhttpのサイトを登録していた場合、httpsのサイトは別サイトとして登録する必要があります。
httpsからはじまるURLで登録をしておきます。
2の手順でhttp→httpsにリダイレクトをかけているので、サイトの評価はそのまま引き継がれます。

phpmyadminのCSVエクスポートで日本語が文字化けする場合の対処法

phpmyadminのCSVエクスポートで日本語が文字化けする場合の対処法についてです

エクスポートの「エクスポート方法」で「詳細」の項目をチェックを入れます。

下に表示される項目に
「出力をファイルに保存する」→「ファイルの文字セット」の項目がああるので、ここを「Shift-JIS」に変更してから出力します。
これで、フォーマットをCSVに設定してファイルを出力すると日本語が正しく出力されます。

キャプチャ画面

楽天の検索での文字化けの対応について

楽天goldに検索窓を設置して検索をしたところ、gold領域のサイトをUTF-8で作成していた場合文字化けを起こします。
原因としては、楽天のサイトがEUC-JPだからです。

以前は以下の方法で対応していたのですが、原因はよくわかりませんが再び文字化けを起こすようになっていました。

以前は、検索フォームの検索ボタンに以下のコードを追記することで動いていました。

それが、理由はよくわかりませんが、先日再び文字化けを起こすようになっていました。
formタグに以下のコードに挿入することで動くようになりました。
frmは、該当formのname属性です。

楽天の仕様が変わったのか、ブラウザのバージョンが上がって対応しなくなったのかはよく分かりません・・・。

ウェブマスターツールのfetch as googleでエラーが発生。解決までの経緯

この記事を書いているのが2017/4/20の夕方なのですが、4/20の朝からgoogleウェブマスターツールの「fetch as google」がエラーになっていました。

具体的な現象としては、ウェブマスターツールのfetch as googleで、ページURLの取得は可能なのですが、インデックスに送信をするとポップアップがでてきて「このURLのみをクロールする」にすると、「エラーが発生しました」と表示されて登録できない情況。

どうやって解決したかというと、結論から言うとGoogleのシステム側の不具合だったようで、朝やってみるとエラーになって、夕方には解決していました。

何故Googleのシステムの不具合だったと思うかというと、Twitterで検索をしてみると同様の現象があると同じ日時で書き込みをしていた人がいたからです。

上記の不具合とは異なるのですが、以前には「fetch as google」で「インデックスに送信」を押すと「取得できませんでした」のエラーが発生したことがあったのですが、このときも結局時間経過で解決しました。

いずれのケースも結論としては、サイトがペナルティを受けているというような話ではなく、単なるGoogleのシステム不具合だったので、もどかしいと思いますが待つとなおると思います。
ちなみに1日以上たっても治らなかったケースはいずれもありませんでした。

hhvmのログローテーションの設定方法

運用しているとあるサイトのサーバが低速化していたので、原因を調べてみるとhhvmのログサイズが肥大化していた。

ちなみに、linuxでどのフォルダが肥大化しているかを調べるには以下のコマンドが便利

容量を使っているディレクトリ上から30個表示
du / | sort -nr | head -30

調べてみたところ、hhvmのエラーログが肥大化していた。

/var/log/hhvmd/error.log

これがサーバ全体を圧迫するほど巨大化して容量を占有していた

該当ディレクトリまで移動し、このコマンドでとりあえず空にする

: > error.log

hhvmのログファイルのローテーションだが、以下のファイルで編集できる

/etc/logrotate.d/hhvmd

編集すると、初期設定では以下のようになっていた

/var/log/hhvmd/*log {
daily
rotate 52
missingok
notifempty
compress
delaycompress
sharedscripts
copytruncate
}

デイリーでログをローテーションし、52世代まで残す設定となっていた。
ファイルの上限がなかったので、ファイルサイズを追記しておいた。

/var/log/hhvmd/*log {
daily
rotate 52
size 5M
missingok
notifempty
compress
delaycompress
sharedscripts
copytruncate
}

上記の設定では5Mを超えるとローテーションされるので、最大でも 5M×52で250M程度しか容量を圧迫することはない。

設定後、Apacheの再起動を行って反映させた。

【FFBE】クラウド狙いガチャ挑戦結果・・・

FFBEでついにクラウドが参戦しましたね。

クラウド自体の性能は優秀なアタッカーではありますが、チートレベルの性能というわけではないようです。
ただ、歴代のFFファンの方では思い入れもあるので是非入手したいという方も多いのではないかと思います。

私もかねてから貯めていたレアガチャチケット(50枚近く)と、ラピス10000を全て消費して、クラウド狙いのガチャに挑戦してみました。

<ガチャ回数>
70回

<ガチャ結果>
ピックアップ対象

ウィリアム×3

コンラッド×11

ピックアップ対象外

ルーネス

その他☆6キャラ
シャイン×2
天風のヴェリアス×3
メリアドール
ナイン
エリア
グレイス

はい、というわけでまあまあ爆死でしたね。
クラウドは出なかったですが、代わりに虹から「ルーネス」が出ました。

まあ、ルーネスは若干強さとか役割がクラウドと被ってはいますけどねw
クラウドの代わりにルーネスを使えということでしょうか・・・

もうラピスとレアチケットをほぼ使い果たしてしまったので、期間中に半額ガチャをほそぼそと回していこうと思います。

apple-touch-iconがiPhoneで反映されないときの対応

「apple-touch-icon」とは、iOS用に、ホーム画面にサイトが追加されたときに表示されるアイコンです。
iPhoneで、サイト閲覧時にメニューから「ホーム画面に追加」をしたときに表示されます。

設置方法としては、アイコン用の画像をアップロードし、ヘッダで

のように記述してからアップします。
画像名は「apple-touch-icon.png」としておくとヘッダに記述しなくても拾ってくれるらしいのでそうしておくのが一般的のようですが、必ずしも指定しないといけないわけではないようです。

このアイコンを設置されたときに、「正しく記述して画像もアップしたのにテストしてみると反映されていない」ということがあったので対応方法について書いておきます。

まずは画像サイズによっては反映されないこともあるようなので、画像サイズは適切かどうかを確認してみてください。
(※サイズは様々なサイズで可能なようですが、私が試してみた場合では144×144で反映されました)

以下の方法を試してみると良いと思います。

1・Safariのキャッシュを消去する

iPhoneのSafariに残っているキャッシュがクリアされていないと反映されなことがあるようです。
キャッシュの消去は「設定」→「Safari」→「履歴とWebサイトデータを消去」から消去できます。

2・画像名を変えて、パスの記述も変えてアップしてみる

この方法でも解決することがあります。
結局、キャッシュの問題なようですが、別名にした画像ファイルをアップしてみて、パスの記述を変更すると試してみると反映されていることがあります。

【FFBE】常闇のヴェリアスの「暗黒の罪科」と「暗黒の刃」はどっちが強いか

FFBEのキャラクター「常闇のヴェリアス」の攻撃パターン「暗黒の罪科」と、「暗黒の刃」はどちらが強いかについての考察です。

まず、常闇のヴェリアスですが、FFBEで強力なユニットの1体です。
「暗黒の罪科」と「暗黒の刃」はどちらも消費MPが45の強力な攻撃ですが、どちらがダメージ効率が良いのかを検証してみました。

まず、基本的な性能は以下の通りです。

暗黒の罪科
消費MP45
実質倍率400%ダメージ
闇耐性-50%

暗黒の刃
消費MP45
実質倍率400%ダメージ
攻撃に闇属性付与

まず基本的なことですが、上記の2つの攻撃は片方だけ使うだけでなく併用すると強いです。

暗黒の罪科は敵の闇耐性を下げるので暗黒の刃のダメージ(闇属性)を底上げしますし、暗黒の刃は攻撃に闇属性を付与するので、暗黒の罪科のダメージをアップします。

調べてみたところでは、

ダメージ倍率が同じというだけあって、単発で使用した場合の総ダメージはどちらも同じ

でした。

また、2つのアビリティはどちらも消費MPは同じですが、ヒット数は暗黒の罪化のほうが多くチェインを稼ぎやすく、暗黒の刃はヒット数は少ないですが、闇属性なので他の闇属性の攻撃とエレメントチェインを稼ぐことができます。

これらのことを踏まえて状況に応じて使い分けると良いでしょう

結論

  • どちらの技もダメージ倍率は同じ
  • 相乗効果があるので、併用が基本
  • 常闇のヴェリアスの武器が闇属性の場合、攻撃に闇属性を与える「暗黒の刃」の追加効果は意味ないので「暗黒の罪科」が基本でOK。
  • 「暗黒の罪科」はヒット数が多くチェインを稼ぎやすい。チェインを稼げる場合「暗黒の罪科」はダメージを稼ぎやすい

【FFBE】ライトニングの絶影とエレキブラストはどっちがダメージが出るか

スマホゲームでやっているFFBEに関する話題ですが、ライトニングの「絶影」と「エレキブラスト」はどちらがダメージが出るかを計算してみました。

まず、絶影は+2までアビリティ覚醒させているという前提での話です

絶影+2
・単体物理350%
・雷耐性3ターン-75%

エレキブラスト
・物理200%雷ダメージ

ということで、何でこの計算をするかっていうのは、要するに

絶影で雷耐性が下がった状態でのエレキブラストと、絶影はどちらがダメージが出るのかよく分からない

からですね。
ダメージを観測しても、絶影はヒット数が多いのでトータルでのダメージ量がよくわからない

そこで検証してみたところ、結論としては
雷耐性低下状態でも絶影のほうがダメージ量が少しだけ上

でした。

雷耐性が下がってない状態でのダメージ量が絶影のほうが上なのはいうまでもないですが、雷耐性が75%下がっている状態でも、絶影のほうが僅かにトータルのダメージ量が上でした。

しかし、それほどダメージ量に差があるわけではないので、絶影が消費MPが45なのに対してエレキブラストは23と絶影のほうが消費MPが多いので、MPが少ないときはエレキブラストでも遜色ないダメージは与えられるかと思います。

また、これに加えて絶影は通常のヒット数でのチェインを稼ぎやすいのに対して、絶影は他のキャラが雷属性の攻撃を使用したときにエレメントチェインになるという違いがあるので、上記をふまえてダメージを与えやすいアクションを選択すると良いと思います。

ホーム

フィード
リンク集

ページの上部に戻る