AmazonアソシエイトアカウントがBANされました

先日、突然アカウントが BAN されました。警告もなく本当に突然のことでした。まったく覚えのないことで利用を停止され、わずかな額ですが、これまでの紹介料もなかったことにされました。

提示された理由に覚えがないことを伝え、この決定が正しいのか問い合わせましたが、簡単なテンプレメールが返ってくるだけです。

1 回目の Amazon からのメール


いつもAmazon アソシエイト・プログラムをご利用いただき、誠にありがとうございます。

お調べしたところ、Amazonアソシエイト・プログラム運営規約を順守されていないことを確認しましたのでご連絡いたします。

貴殿は、書面による明示的な事前の承認を得ずに、ブラウザー・プラグインにおいて、Amazonサイトのコンテンツ、特別リンク、またはその他Amazonサイトに関連する内容を記載しており、Amazonアソシエイト・プログラム参加要件第7項に抵触いたします。

Amazonアソシエイト・プログラム運営規約については、以下のURLをクリックしてご確認ください。
https://affiliate.amazon.co.jp/gp/associates/agreement

早急に貴サイトから特別リンクを含むすべてのAmazonコンテンツを削除し、使用を中止してください。Amazon.co.jpはその裁量の下で、予告なくご利用中の別アカウントまたは今後作成されるアカウントを閉鎖し、紹介料の支払いを停止する権利を留保します。

ご利用ありがとうございました。

Amazon.co.jp カスタマーサービス アソシエイト・プログラムスタッフ

1 回目の返信


ご連絡ありがとうございます。

突然のことで驚いているのですが、Amazonアソシエイト・プログラム参加要件第7項とは、以下でよろしいのでしょうか。

7.
甲乙間で別途本参加要件を参照した書面による合意がない限り、乙は、以下の媒体上でまたはそれに関連して、アソシエイト・プログラム・コンテンツもしくは特別リンクを使用またはアマゾン・サイトにリンクさせてはなりません。

(a) コンピューター、携帯電話、タブレットその他の携帯端末を含むあらゆるデバイス上のあらゆるクライアントソフトウェアアプリケーション(ブラウザプラグイン、ツールバー、拡張機能、コンポーネント、ヘルパーオブジェクトその他エンドユーザが実行またはインストール可能なアプリケーション)。ただし、承認モバイル・アプリは除きます。

(b) あらゆるセットトップボックス(地上・BS・CATV受信用ボックス、デジタルビデオレコーダー、ストリーミングビデオプレイヤー、ブルーレイプレイヤー、DVDプレイヤー等)またはインターネットテレビ(Google TV、ソニーBravia、パナソニックViera Cast、Vizioインターネットアプリケーション等)。

https://affiliate.amazon.co.jp/promotion/participationrequirements

具体的にはどのブラウザプラグインについて、違反がなされているとお考えなのでしょうか。ブラウザプラグインというのは、例えばGoogle Chromeの拡張機能などを指すのでしょうか。

当方としましては、ブラウザプラグインを作成したことがなく、またなんらかのプラグインを利用してアフィリエイトリンクを表示させた覚えもないため、非常に困惑しております。

2 回目の Amazon からのメール


Amazonアソシエイト・プログラムにお問い合わせいただき、ありがとうございます。

貴殿のアカウントは、Amazonアソシエイト・プログラム運営規約違反により、アカウント閉鎖および支払差止を実施させていただきました。閉鎖となったアカウントの復帰、および該当のアカウントについての紹介料の支払いは行われません。

アソシエイト · プログラムへ参加を希望される場合は 改めての申し込みをお願いします。
https://affiliate.amazon.co.jp/

た だ し、アソシエイト・プログラムへの参加にあたりましてはサイト内容を審査 しておりますため、 サイト内容が審査基準に合致しない場合は参加の承認は致しかねます.。あらかじめご了承いただきますようお願いいたします。

Amazon アソシエイト・プログラムをご利用いただき、ありがとうございました。

Amazon.co.jp カスタマーサービス アソシエイト・プログラムスタッフ

2 回目の返信


前回のメール内でご指摘いただいたAmazonアソシエイト・プログラム参加要件第7項に違反した覚えがまったくないのです。一度もブラウザプラグインを作成したことがないため、どうしても納得がいきません。

これは具体的にどのプラグインを指しているのでしょうか。例えば誰かによって悪意を持ってこちらのアカウントを利用された場合、それでもアカウントの停止が行われるということなのでしょうか。

自分に非があるのか、それとも誰かのいたずら、嫌がらせによってこうなっているのか判断しかねますので、ご指摘いただいたブラウザプラグインを教えていただけないでしょうか。無断でアカウントを利用されている場合は、こちらで削除するよう交渉してみます。

3 回目の Amazon からのメール


Amazon.co.jpアソシエイト・プログラムにお問い合わせいただき、ありがとうございます。

アカウントの停止および支払差止の根拠に関しましては先日お送りした文書に記載の通りです。

今後もお忙しい中お時間を割いていただき、当サイトへEメールにてご連絡いただきましてもこれ以上ご案内できる内容がございません。そのため今後、本件に関しましてお問い合わせいただきましても、ご返答はいたしかねますことをご了承下さい。

Amazonアソシエイト・プログラム参加要件を含む運営規約は以下のサイトで確認することができます。
https://affiliate.amazon.co.jp/gp/associates/agreement

アソシエイト・プログラムをご利用いただき、ありがとうございました。

Amazon.co.jp カスタマーサービス アソシエイト・プログラムスタッフ

 


当初は Amazon アソシエイト・プログラム参加要件第7項に違反し、ブラウザプラグインを不正に利用しているという理由でしたが、ブラウザプラグインを作ったことも利用したこともないことを伝えると、次のメールでは Amazon アソシエイト・プログラム運営規約違反という広義の理由を用いて、決定の正当性を主張されました。

勝手な予測ですが、Amazon 側はなんらかの不正発見プログラムなどを走らせていて、そこにひっかかったのだと思います。売上の傾向や数字を見るとブラウザプラグインに広告リンクを貼っているケースと酷似していたため、アカウントを閉鎖したのではないでしょうか。

正直、Amazon アソシエイト・プログラム運営規約違反を持ち出されると、なにも反論できません。Amazonアソシエイトに参加している他のサイトも同じことだと思いますが、規約の全項目を把握し、完全に守れていると言い切れるサイトは少ないはずです。

結局のところ、Amazon の考え一つでほとんどのアカウントを閉鎖できますが、売上に繋がる大手サイトや、影響力のある著名人に対しては、違反を見て見ぬふりをしているのが現状なのでしょう。残念ながら当方は年間 2 万円ほどしか収益を上げられていないため、Amazon にとってはいてもいなくてもいいような存在だったのです。それがこの不幸を呼び込みました。

今回のように Amazon アソシエイト・プログラム運営規約違反を持ち出してアカウントを閉鎖するのなら、他の大手参加サイトに対しても平等な対応をとってもらいたいです。おそらくほとんどのサイトから Amazon のリンクが消えることになるのではないでしょうか。

例え不正を行っていなくても、Amazon アソシエイトでは目をつけられただけで、反論の余地なくアカウントが閉鎖されてしまうようです。ごく普通に利用していただけなのに、こんな扱いを受けるのはあまりにも酷すぎます。

現在の開発環境 – AWS Cloud9 の問題点

Teletype for Atom、Docker、共同開発ができる場所を模索して、いろいろなものを試しましたが、結局、AWS Cloud9 がいいのではないのか?というところに落ち着きました。

AWS Cloud9

Cloud9 はブラウザで使える IDE で、ネットを介して複数人でのコラボレーション開発が行えます。Teletype for Atom も同じような機能が使えるのですが、実際、他のプログラマーに意見を聞いてみると、Atom を利用しての共同開発にはあまりいい印象を持っていないようでした。

当然、プログラマーはそれぞれ自分の好きな環境をすでに構築しているわけで、わざわざそこに新規の環境を構築して(Atom をインストールして)まで参加するのは面倒だと感じるようでした。

Game Users の開発はゲームが好きなプログラマー・デザイナーの方々に気軽に参加してもらいたいという考えがあるので、環境構築で大きな手間がかかるのはやはりいいことではありません。そうなるとブラウザだけで参加ができる、Cloud9 を採用するメリットは大きいのではないかと感じています。

AWS Cloud9 の問題点


使ってみて感じたのですが、いろいろな問題もあります。

 

  • 参加人数が 8 人まで

なんでこんな仕様なんだと言いたいところなんですが、自分を入れて計 8 人までしか参加できません。サーバーの能力依存で参加人数を決めさせてくれればいいのに、最初から IDE 側で人数を制限してるので、どれだけサーバーのリソースに余裕があっても無駄です。

AWS Cloud9 は AWS の管理画面でアカウントを発行して、そのアカウントで IDE に参加してもらう形になっています。Game Users の開発では、いろいろな人に個人用のアカウントを発行して、時間のあるときに気軽に参加してもらえたらなという思いを持っていたのですが、8 人制限のせいでそれができなくなりました。

今は guest-1~2、master-1~5 というアカウントを用意して、そのアカウントにログインして参加してもらう形になっています。個人用のアカウントの場合、自分を除くと 7 人までしかアカウントを発行できませんが、ひとつのアカウントを複数人で使ってもらう場合は、人数制限が緩和されるのでそういう形にしています。ただこれだと誰が参加してくれているのかわかりにくく、とても不便です。

そもそも Cloud9 は不特定多数の人が開発に参加するプロジェクトを想定していないのでしょうが、GitHub を経由した push だ pull だと面倒くさい現在の共同開発環境を変えられるポテンシャルを秘めているので、早急になんとかして欲しいところです。

 

  • IDE の出来が今ひとつ

Atom や Visual Studio Code(触ったことがないのでわからない)は、なんだかんだと言って優秀なんだと思います。様々な機能が最初から提供されていたり、プラグインなどで後から追加することができたり、個人的に使いやすい設定を細かく突き詰めることができたり、当然のようにいろいろできていたことが、Cloud9 ではできなくなりました。

ブラウザだけで開発ができる・コラボレーションが手軽に行える、というメリットは大きいものの、使いづらい・必要な機能がない、といったデメリットも大きいので、現状、上記のメリットを求めている人以外には勧めづらい環境になっています。

アマゾンが買収したので今後の発展に期待したいところですが、今のところは正直なんとも言えないクオリティです。

 

  • ネットに情報がない

これも本当に辛いところなんですが、ネットに情報がありません。なんでもそこそこの規模になってくると、日本語の情報はなくても英語の情報があったりするものですが、Cloud9 はその域にも達していません。

例えば今、ESLint で “extends”: “airbnb” が動かない問題を抱えているのですが、調べても情報がなくて困っています。このプラグインを入れるといいよと英語で書いている情報はひとつ発見したのですが、そのとおりにやっても動かず。それ以外情報がないので、どうにもならない状態に陥っています。

アマゾンのサポートも利用できるようなのですが、技術的なサポートは有料になっているみたいなので、お金持ちや企業でないとサポートを受けられません。

参加者募集!


Cloud9 の至らなさをいろいろと語ってみましたが、Game Users の開発には手軽なコラボレーション機能が必要なので、利用しないという選択肢はありません。

ゲームが好きな開発者の方おられましたら、ぜひ一緒に開発しましょう。参加したとして権利や金銭的な問題はどうなるんだということについて、文章にきっちり残していないので、その辺についてもこのブログで記事にしていかないといけないなと思っております。

YouTube でプログラム配信をしながら開発しているので、もし少しでも興味があったら覗いてみてください。配信中はこのブログのトップページにも、配信が見れる記事が掲載されるようになっていますので、ぜひ!

Dockerってすごくない?

Game Users を Node.js で書き直したいので、本を読みながら Node.js の勉強をし始めました。

JavaScriptでのWeb開発 ~ Node.js + Express + MongoDB + ReactでWebアプリを開発しよう ~ その1(改訂版)

この本を読みながらコードを書きつつ進めていたのですが、MongoDB の導入部分で詰まってしまいました。これまでは XAMPP や Node.js などの Windows 用インストーラーを利用して開発環境を簡単に構築していたのですが、MongoDB は Windows の設定がややこしそうなので、ここらへんで一度、今後の環境構築について見直すべきではないかと考え、新たな道を模索することにしました。

比較的、新しい技術や機能を使おうとしたときに、Windows はやっぱり不便なんですよね。Mac を使っているプログラマーが多い理由が理解できました。

そこで勉強しようと思ったのが、なにかと話題になっている Docker。ネットでプログラム関連の記事を調べていると、あちこちで目につくので名前だけは知っていたのですが、開発環境構築に便利だと聞いて手を出してみました。

とりあえず Docker Toolbox を利用してローカル環境で Node.js の Hello World ページが表示できるところまでは行けました。

本当に初心者レベルなのですが、触ってみて感じたのは Docker(コンテナ技術)はすごいということです。なにがすごいのかというと、例えば Node.js の Docker イメージ(コンテナを作るための元)がオフィシャルから提供されており、それを簡単なコマンドで導入することができるのです。WordPress や各種データベースも公式からイメージが提供されているので、それを元にして、わずか数行のコマンドで開発環境を構築することができます。

これがやばい!Docker を利用すれば本当に簡単に開発環境が作れるのです。Docker はバックエンド臭が強くて(解説サイトは難解な専門用語だらけ!)導入障壁が高いように思われますが、ローカルに開発環境を作るだけなら、そこまで難しいものではないです。

黒い画面に恐怖を感じる人は触りたいと思えないかもしれませんが、そういう人にこそ Docker をお勧めしたいですね。最初に Docker についての学習コストを支払う必要はありますが、昔ながらの方法で手動で開発環境を構築していくよりも、Docker を利用した方が、のちのち楽になるのではないかと感じています。

Docker実戦活用ガイド

自分はこの本を読みながら(値段が高いので Kindle Unlimited で読むことをオススメします)1週間くらいで、とりあえず使うことはできるようになりました。そのくらいのコストで、今後の開発環境構築の手間と憂いが除かれるなら、安いものではないかと思います。

具体性のないぼんやりした内容なので、いまいち良さが伝わってこないかもしれませんが、もうちょっと使いこなせるようになったら、雑魚プログラマー視点からの Docker の利点をまとめた記事を書いてみようと思います。

プログラム配信 – Node.jsでGame Usersを書き直したい

現在、PHP と JavaScript で作られている Game Users を React & Node.js で書き直したいと思っています。そのために Node.js の使い方を覚えなければならないので勉強しながら作っていきます。

今やっていること – 2018/11/28


プレイヤーカード(各ユーザーのプロフィールカードのようなもの)を作っているところで進みが悪くなっています。

Fetch のラッパー関数を作ったり、エラー処理の方法を考え直したり、アカウント作成・ログイン部分を修正したり、いろいろやっていたのですが、そういった基本的な構成を考えるところで詰まってしまうので、時間がどんどん過ぎていきます。ひとつ型ができると、それをベースにしていろいろなページを作っていけるのですが、その型を作るのがとても大変ですね。

昨日はページのローディングが終わってからボタンを利用可能にする機能を作っていました。ページへのアクセス後、現在読み込んでいることを明確に示すために、ローディングアニメーションのアイコンをページのどこかに表示しようと思っています。

http://35.203.143.160:8080/pl/AZ-1979

デザイン済みのページ


作成中のページをリアルタイムでチェックできるようにしています。機能的なことは置いておいて、とりあえず見た目だけを優先的に作っています。ボタンなど、正常に機能しない部分も多いですが、現時点では気にしないでください。

トップページ
http://35.203.143.160:8080/

ユーザーコミュニティ一覧
http://35.203.143.160:8080/uc

ゲームコミュニティ一覧
http://35.203.143.160:8080/gc

ログイン
http://35.203.143.160:8080/login

ログアウト
http://35.203.143.160:8080/logout

ユーザーコミュニティ
http://35.203.143.160:8080/uc/community

プレイヤー(現在ここを作成中)
http://35.203.143.160:8080/pl/player

現在、解決できていない問題


Cloud9 の IDE で ESLint が正常に動きません。airbnb の構文チェックを利用したいのですが機能せず。

以下のページで Cloud9 に入れるといいプラグインについて書かれていたので、入れてみたのですが、それでも動きません。どなたか詳しい方おられましたら教えてください。

https://stackoverflow.com/questions/45572719/use-eslint-on-cloud-9-ide

プラグイン:https://github.com/michaelmitchell/c9.ide.language.javascript.eslintd

AWS Cloud9


Cloud9 を VPS 上に設定して、ブラウザさえあれば、みんなで開発できる環境を作ってみました。

 

ゲストアカウント

  • アカウントID:956477059000
  • ユーザー名(どちらか):guest-1, guest-2
  • パスワード:Password12345

ゲストアカウントでログインすると以下のページが見れるようになります。管理者がいないときは、ゲストアカウントは Read Only になっています。

ログアウトするときはブラウザを閉じるだけで OK です。ゴミ箱ボタンは押さないようにしてください。

 

マスターアカウント

プログラマーやデザイナーの方、または HTML & CSS が理解できる方にはマスターアカウントのログイン情報を、IDE のチャット欄で提供しています。マスターアカウントを利用したい方はいつでも言ってください。

マスターアカウント(master-1~5)でログインできる方は、以下の Cloud9 環境も利用できます。同じ環境で、同時に違うファイルを編集した場合、トランスパイル時にエラーが出ると、他の人もそのエラーに巻き込まれてしまうので、同じ開発環境を複数用意しました。いろいろ試してみたい方は、こちらの環境(URL)にアクセスして、好きなようにファイルを作成・編集してみてください。

git cloneで複製しているだけなので、ぐちゃぐちゃになっても大丈夫です。

こちらの環境はメインの環境を定期的にクローンしていくつもりなので、継続して編集したいファイルがある場合は、手動でメイン環境の方にファイルをコピーしてもらうか、手元に作ったファイルをダウンロードしておいてください。クローン後にアップロードしてもらって制作の続きを行ってもらえればと思います。

別の環境とのファイル共有方法ですが、すごくアナログな方法しか思いつかなかったので、もっとスマートな方法があったら、ぜひ教えてください。

共同開発用リポジトリ


https://github.com/gameusers/collaboration

メモ


2018/11/5

MongoDB でトランザクションが使えるように設定しました。レプリカセット構成じゃないと駄目だとのことだったので、以下の記事を参考にして設定を行いました。

レプリカセットというのは、複数台のデータベースを立ち上げて、それを組み合わせることで安定性をもたらす機能のようです。同じサーバー内に3つのプロセスを立ち上げて構成しているので、安定性の向上にはあまり期待できない状況ですが、とりあえずトランザクションは使えるようになったので良かったです。

現在はプレイヤーカードのデータベーススキーマを作成して、データを挿入できるようにしようとしています。

 

2018/10/16

プレイヤーカードのデザインが完成しました。これからこれをコーディングしていきます。各ソーシャルサイトへのリンクを掲載でき、フレンド募集にも活用できるので、なかなか機能的でいいデザインになったのではないかと思います。

 

2018/10/9

プレイヤーページ(ログイン後に表示されるホーム)の作成に移ります。とりあえずプレイヤーカードのデザインを考えようと思います。プレイヤーカードというのは各ユーザーのプロフィールのようなもので、カード型のデザインで、プレイヤーの各種情報を表示する機能を持たせる予定です。

できればいろいろなページで使い回せるようなデザインのものにしたい。

 

2018/10/4

ログインとログアウト機能はほぼ完成しました。あとはログインしていないときに、ログアウトページにアクセスした場合、ログインページに飛ばすといった、リダイレクト機能を追加するだけです。

それが終わったらプレイヤーページ(ログイン後にアクセスする各ユーザーのホーム)を作成しようと思います。

 

2018/9/25

ログイン機能の reCAPTCHA & CSRF 対策のコードをモジュール化して分離しました。Node.js は import が使えないため、クライアント側と同じ書き方ができないのが不便です。いろいろ調べてはみたのですが、今のところは現実的に import / export 文を使うのは難しいとの結論に達しました。

ES Modules をお試し機能的に使うことはできるようなのですが、安定版として提供されているわけではないので、なにか問題が起こったときに対処ができなくなりそうなので、現時点での利用はやめておこうと思います。

早く正式に使えるようになるといいのですが。

今やろうとしているのはアカウント作成時に、パスワードをハッシュ化して保存し、E-Mail は暗号化して保存する部分です。

 

2018/9/21

Next.js を Ver.7.0.0 にしました。すると以下のエラーが出ました。

Error: [BABEL] /home/cloud9/collaboration/pages/login/index.js: The decorators plugin requires a ‘decoratorsBeforeExport’ option, whose value must be a boolean. If you want to use the legacy decorators semantics, you can set the ‘legacy: true’ option.

MobXで利用しているデコレーター(@)で問題が起きているようです。

  • babel-plugin-transform-class-properties
  • babel-plugin-transform-decorators-legacy

上記の Babel 用プラグインでデコレーターを利用していたのですが、Babel 7 から新しいプラグインが用意されたようです。

  • @babel/plugin-proposal-class-properties
  • @babel/plugin-proposal-decorators

Babel 7 から関係するパッケージは @ つきのパッケージ名になり(スコープ化というらしいです)、同じような機能のものが新しく作られたみたいなので、そちらを利用することにしました。

こちらのサイトを参考にさせていただきました。同じエラーが出ている方は、チェックしてみてください。

引き続きログイン、アカウント作成部分を作っているのですが、ロボットの不正ログイン対策で reCAPTCHA を導入しました。そしてさらに CSRF 対策で、csrf ミドルウェアを利用しようとしています。

 

2018/9/10

ログイン、アカウント作成部分を作っています。

クライアント側から POST でログイン ID、ログイン Password を送信して、ユーザー登録を行おうとしたのですが、Fetch で new FormData を利用してデータを送信しようとすると、Node.js + Express 側で POST 情報が受け取れなくなりました。

これまでは body-parser で POST 情報をパースしていたのですが、そのパッケージだと new FormData で作成した情報は受け取れないようなのです。調べてみたところ new FormData は multipart/form-data なので、body-parser では処理ができないとのことでした。そこで multer をインストールして POST 情報を処理できるようにしました。

Node.js + Express は本当にめんどくさいですね。PHP ではなにも考えずにできていたことが簡単にできなくなっています。裏側の理屈を理解できている人なら原因がすぐにわかるのかもしれませんが、自分レベルだといちいち引っかかってしまうのが苦しいところです。

 

2018/9/3

MongoDB をインストールしてみたものの、全然試さずに外観ばかり触っていたので徐々に不安になってきました。実際、データベースを使ったときに思っていた処理ができなかったら困るので、データベースを利用しながらログインシステムを作ってみます。

これまでインストールされていた MongoDB は Ver.3 だったのですが、Ver.4 にアップデートしました。トランザクションが使えるようになったらしいです。

 

2018/8/24

コメントの投稿フォームと、投稿済みのコメントの画像表示部分が、意図せず連動してしまう問題が起こっていたのですが、コピーが参照になっていたせいでした。昨日1日使ってしまったのですが、冷静に考えたらすぐにわかりました。

もう少し落ち着いて考えないとだめですね。

コメント投稿・編集、返信用フォームも完成していないので、そちらも作成します。

 

2018/8/23

掲示板の画像表示部分を調整しています。1つだけ画像がアップロードされた場合は大きく表示し、複数の画像や動画が同時にアップロードされた場合は、小さく表示しようとしています。

コメント投稿・編集、返信用フォームも完成していないので、そちらも作成します。

 

2018/8/20

Node.js のバージョンを8.11.4にアップグレードしました。nvm でインストールすると、毎回 npm が v5.6.0 になるんですが、これはなにか意味があるんでしょうか。npm もついでにアップグレードしていますが、アップグレードしたらいけないんだろうか。

今日もユーザーコミュニティページの掲示板を作ります。コメントへの返信フォーム、投稿されたコメントを編集するフォームを作成しています。

 

2018/8/6

ストアの構成を見直していました。APIからどういう形式でデータを受け取って、表示に反映させるかということを考えなければならなかったので、その間、プログラム配信は行っていませんでした。だいたいの形は見えてきたので、また再開しようと思います。

現在はユーザーが登録してくれたサムネイルや名前を表示する部分を作成しています。

 

2018/7/19

Swiper で Lightbox(複数の画像を表示するギャラリー) 的な機能を実装しようと思ったのですが、Swiper は本格的な Lightbox パッケージじゃないようなので、納得の行くものになりませんでした。そこで React 用の Lightbox パッケージを探し出してきて、それで画像を表示させようと思います。

できれば動画もギャラリー的に表示したかったのですが、以下のものは画像しか対応していないようです。

React Images: https://jossmac.github.io/react-images/

 

2018/7/17

掲示板にアップロードされた画像や動画を表示する部分を作成します。画像&動画がひとつだけ投稿された場合の表示はすでに完成しています。次は複数の画像、動画が投稿された場合の表示部分を Swiper という Lightbox を利用しながら実装しようと思います。

Swiper: http://idangero.us/swiper/
react-id-swiper: https://github.com/kidjp85/react-id-swiper

 

2018/7/11

掲示板の画像アップロード・動画投稿機能を作成中です。アップロードする画像を選択、または投稿する動画のURLを入力した際に、画像がプレビューされるようにします。複数画像のアップロード、複数動画の投稿に対応しようと考えています。

 

2018/6/19

トップページ、ゲームコミュニティ一覧、ユーザーコミュニティ一覧、ログインページのデザインが終わり、いよいよメイン機能であるコミュニティページのデザインを行うところまで来ました。

掲示板の使い勝手が悪いので、改善案を出してもらいながら、新しいデザインを考えようと思います。

 

2018/6/4

デザインを考えているのですが、機能性といいデザインを両立するのが大変で、かなりしんどいです。基本的に既存のものの切り貼りや、ちょっとしたアレンジで乗り切っていますが、ゼロから想像するセンスがないため、いろいろな面で妥協しないといけなくなるのが辛いです。

現在はカード型デザインでゲームの一覧を表示、検索もできるようになるページのデザインを考えるところです。

 

2018/5/23

Material UI バージョン 1.0.0 に対応しました。これまでと書き方が変わっていたので、戸惑う方もいるかもしれません。

import Button from '@material-ui/Button';
   ↓↓↓
import Button from '@material-ui/core/Button';

開発版が終わって、core をつけなければならなくなりました。

あと Next.js を 6.0 にしてから、getInitialProps (最初に処理される constructor みたいなもの)が正常に動かなくなっていたので、こちらのページを参考に裏側の処理を書き直しました。

https://github.com/mui-org/material-ui/tree/master/examples/nextjs

Node.js なのですが、ブラウザの表示サイズをサーバー側で取得することができないようです。PHP はできていたような気がするのですが。PC でアクセスしたときとスマホでアクセスしたときに表示の違いを設けたいのですが、CSS のメディアクエリですべてを処理するのは大変なので、JavaScript のサーバー側でも取得したいのです。でも方法がわからず。

 

2018/5/9

スタイルシートですが、Next.js がデフォルトに定めている styled-jsx よりも styled-components を使った方がいいような気がしてきました。

複雑な分岐を行う場合などに、クラスの内部にそれ用の function を作ってコンポーネントを返すような構成にすると、styled-jsx がちゃんと反映されません。Material UI を使うときだけ、styled-components を使うというルールもいまいちしっくりこないので、styled-components に統一した方がいいのかなと思ってきました。

まさかスタイルシートでこんなに悩むとは思いませんでした。

また Next.js のバージョンを 6.0 に変更しました。babel-plugin-transform-class-properties というプラグインを入れろという警告が出たので、それを入れて設定もしておきました。コードの書き方や、動作には特に変更がないようです。

 

2018/4/23

Next.js で Material UI を使う方法ですが、前回やっていた方法では、サーバーサイドレンダリング時にスタイルシートが正常に適用されていない。なぜか遅れて適用される?ため、設定を見直しました。

上記サンプルを参考にしながら、設定してみました。

Next.js はデフォルトで styled-jsx というスタイルシートの記述法を採用しているのですが、それを使った場合はサーバーサイドレンダリングする際に、Material UI のコンポーネントに正常にスタイルシートが適用されず、styled-components を使うと正常に適用されるという状況になりました。

設定方法が悪いだけかもしれないのですが、今のところ対処法がわからないので、Material UI のコンポーネントを使うときだけそうしています。

Next.js で Material UI を使う際の書き方がわかる方おられましたら、ぜび教えてください。

 

2018/4/20

Next.js で Material UI を使おうとしたのですが、Material UI のコンポーネントにスタイルシートを適用する方法がわからず1日を費やしてしまいました。

Material UI の公式ページに書かれている方法と、Next.js が推奨しているスタイルシートの書き方が違うため、どう書けば正常に表示されるのか理解するのに時間がかかりました。

結局、以下の書き方でいけました。Material UI のコンポーネントはグローバルスコープのスタイルシートが必要なようです。

<style jsx global>{`
  .list-1 {
    background-color: #81F7F3;
  }
  .list-2 {
    background-color: pink;
  }
`}</style>

 

2018/4/18

複数人の開発者で同時に各ファイルを編集した場合、誰かがエラーを出すと他の開発者にもエラーが出て、開発がスムーズに進まないという問題が発覚しました。

同じ環境でトランスパイルが行われるわけですから、考えてみれば当然なのですが、今まで気づきませんでした。同時に違うファイルを触れないというのは結構致命的な問題です。

そこで Cloud9 の環境を複数用意して、それぞれの開発者が別のファイルを気軽に触れるようにしてみました。

マスターアカウントでログインできる方は、そちらの環境でも開発が行えます。git clone で複製しているだけなので、細かいことは気にせずいろいろ試してみてください。

 

2018/4/17

Next.js を試してみたところ、とても優秀だったので採用することに決めました。サーバーサイドレンダリングの機能や、Code Splitting をデフォルトで行ってくれるのは非常に便利です。ただすべての機能を提供してくれるわけではないので、結局、自分で Express を利用したサーバー用コードを書かないといけない部分も多くあるのですが。

それと Next.js はデータベースへのアクセスをすべて API で行うことを推奨しているようです。そこそこの規模のサイトになると、そういった構成が増えてくるのかもしれないのですが、自分は小規模なサイトしか作ったことがないので、初めての経験でちょっと不安です。

またそれに際して、Cloud9 が提供している URL では、 Fetch → API でのデータ取得が正常にできない問題が出てきました(なぜか Status 499 のエラーが出てしまいます)そのため、サーバー側でファイアーウォールのポートを開けて、普通のウェブサイトとして制作中のサイトにアクセスできるようにしました。

https://df44294c8853471b8ddd609c09af06f3.vfs.cloud9.us-west-2.amazonaws.com/

http://35.203.143.160:8080/

こちらのアドレスでは、Fetch でのデータ取得が正常に行えます。

React の状態管理で MobX を使ってみました。Redux よりコードの記述量がずっと減る感じなので、Next.js と一緒に採用してみます。後は Material UI の使い方を学んで、デザインを触りながら作っていこうと思います。

 

2018/4/9

勉強した本の独自の書き方になっていたので、express-generator をディレクトリ構成のベースにしました。

Webpack の最新バージョンがいつの間にか 4 になっていたので、アップデートしました。webpack.config.js も バージョン4に合わせて書き直しました。ビルドが速くなっているそうです!

React が正常に表示されるかテストしてみました。とりあえず Hello World を表示することができたので良かったです。React のサーバーサイドレンダリングに興味があるので、そちらについて調べてみたのですが、手間が非常にかかるようで、やるべきかやらないべきか悩んでいます。

React は状態管理に Redux を使用していたのですが、コードを書く量が多く、学習コストも高いため、同じ状態管理機能を持った MobXというライブラリに興味を持っています。こちらもいろいろ調べてみようと思います。

 

2018/4/3

IDE のユーザー削除を間違えて行ってしまいました。本来は IDE から削除してから、AWS の IAM でユーザーを削除するという順番で行わければならないのに、先に IAM でユーザーを削除してしまったので、IDE から削除ができなくなってしまいました。

修正方法がわからず、環境を作り直すことになったので、IDE などの URL が変更になりました。ブラウザのお気に入りに入れていた方は、お手数ですが URL の変更をよろしくお願いします。

 

2018/3/30

GCE 上に Cloud9 を構築していますが、あまりにも重たいのでサーバーをスペックアップしました。参加者が3人集まると止まるので。

f1-micro(vCPU x 1、メモリ 0.6 GB)

g1-small(vCPU x 1、メモリ 1.7 GB)

無料で使えるクレジットが30000円分あるので、しばらくは大丈夫そうです。

node.js のバージョンを 8.11.1 にし、.bashrc に source ~/.nvm/nvm.sh を記述して、ターミナルを立ち上げるたびにパスを通さなくてもいいようにしました。

 

Node.js を勉強するために利用した本


2 冊とも読み終わりました。

JavaScriptでのWeb開発 ~ Node.js + Express + MongoDB + ReactでWebアプリを開発しよう ~ その1(改訂版)

JavaScriptでのWeb開発 ~ Node.js + Express + MongoDB + ReactでWebアプリを 開発しよう ~ その2

Kindle Unlimited を契約している方は読み放題で読めます。

勉強した項目

  • Node.js のサーバー起動
  • Hello World の表示
  • MongoDBの導入、データの挿入・表示
  • 画像のアップロード機能
  • Passport(ログイン用パッケージ)を利用して、ID & Passord のログインと SNS 認証でのログイン
  • Winston(エラーログ記録パッケージ)の利用方法
  • 404 ページの表示
  • エラー処理
  • Helmet(セキュリティ用ヘッダーを設定するパッケージ)の設定
  • CSRF対策、トークンをフォームページの <input type=”hidden”> に表示させてチェックする方法
  • CORS(クロスオリジンリクエスト)の設定、開発環境では正常に機能しなかったのでよくわからず
  • HTTPS の設定、本番環境じゃないので後回しにしました

Teletype portal ID(利用停止中)


気軽に参加してください!

portal ID: 

Teletype for Atom


Atom を使ってコラボレーションができる Teletype というプラグインを使ってみようと思います。実際どんな使用感なのかわからないので手探りになりますが。

※ 利用にはGitHubのアカウントが必要になります。

Teletypeの使い方


1. Teletype プラグインをインストールする

まずは Atom に Teletype のプラグインをインストールしてください。

 

2. トークンを取得する

以下のページにアクセスして Authorize atom というボタンを押してください。トークンを取得するページに移動します。

https://teletype.atom.io/login

 

3. トークンを取得します

モザイク部分にトークンが表示されます。それをコピーしましょう。

 

4. Atom の電波塔アイコンをクリックしてトークンを貼り付けます

Atom の右下に電波塔のアイコンがあるので、そこをクリックしましょう。画像のような画面が表示され、トークンを入力するフォームが表示されます。そこにさきほどコピーしたトークンを貼り付けましょう。

そして Sign in ボタンを押すと、Teletype の利用準備は完了です。

 

5. portal ID を入力して参加してください

再度、電波塔のアイコンをクリックして、Join a portal と書かれた部分をクリックすると、portal ID を入力するフォームを開けます。そこにこの記事上部に掲載している portal ID を入力して Join ボタンを押してください。

これでプログラム配信のポータルに参加できます。開発に参加したり、アドバイスをしたりしなくても全然構いません。Teletype を試しに触ってみたいという理由でもなんでもいいので、気軽に参加してみてください。

サーバーをNode.jsにしたい気持ちが高まる

現在、サーバー側はPHPで動いているのですが、いずれNode.jsにして、すべてをJavascriptで動く環境にしたいと思っています。結構な時間をかけてPHPの処理を書いていると、そのうちJavascriptに書き換えることになるのに、どうしてこんなに力を入れてPHPを書いてるんだろうという気持ちになってしまいます。

その思いが重なり重なり、いよいよNode.jsの本でサーバー側の処理を勉強し始めました。ちょっと読んだ感じでは、それほど難しい印象は持たなかったので、比較的簡単にNode.jsで動くページを作成できるかもしれません。しかし現在動いているログインやプッシュ通知など、手間のかかるシステムをNode.jsに置き換えるのは楽じゃないと思うので、サーバー側を短時間に一新することは現実的にできそうにありません。

そこで一部のページから徐々に置き換えていくことを考えたのですが、そうした場合にApacheとNode.jsを同居させなければなりません。この構成で運営されている方はすでにいるようなので、やり方については調べがついたのですが、問題はドメインやサブドメイン単位ではなく、ページ単位でサーバーを振り分けることができるのかということと、SSLが問題なく動くのかわからないという点です。

Node.jsにnode-http-proxyというパッケージがあって、それを利用すればサーバーを振り分けられることまではわかったのですが、ページ単位での振り分けについてはネットに書かれていませんでした。さらにこの前、設定したLet’s EncryptのSSLですが、これがNode.jsのサーバー上でも普通に動いてくれるのかわからないのです。

本当にもうわからないことだらけなんですが、そもそもの話、Web系って覚えること多すぎないですか?範囲が広いのに、一人であらゆることに対応しなければならないので、そろそろ頭がパンクしそうです。

シェアボタンの公式サイトに新しいページを追加

テーマ募集
https://gameusers.org/app/share-buttons/recruitment

キャンペーン
https://gameusers.org/app/share-buttons/campaign

各ページにメールフォームを設置して、簡単に連絡が取れるようにしました。テーマを募集しているのですが、作ってもらったシェアボタンをメールに添付して送ってくださいというのは、テーマを提供してくれる方に負担が大きいのではないかと思うので、専用フォームで必要事項を入力してファイルを送信できるようにしました。

あと Game Users Share Buttons の知名度を上げるために、ブログにシェアボタンの紹介記事を書いてくれたら、ビジネスプランの利用券をプレゼントするキャンペーンも開始。

環境は整ったので、後はユーザー獲得を頑張らなければ!と思っていたところに、ちょうどいい記事を発見。

ポール・グレアムによる「スケールしないことをしよう」
http://postd.cc/do-things-that-dont-scale/

 

創業者が外回りをしてユーザーを獲得するのを嫌がる理由は、2つあります。1つは、内気さと怠慢さの両面です。彼らは外に出向いて、恐らく断るであろう大勢の知らない人たちと話をするよりも、家にこもってコードを書くことを好みます。しかし、スタートアップを成功させるには、最低でも一人の創業者(大抵はCEO)は営業やマーケティングにたくさんの時間を費やす必要があるのです。

 

これは本当にそうです。自分もコードを書いてる方が楽なので、宣伝活動にいまいち積極的になれないでいたのですが、それではダメなんですよね。結局のところ、自分で地道に営業活動を頑張るしかない。せっかく大きな労力を費やしてシェアボタンを完成させたのに、使ってくれる人を増やす努力をしないのはもったいない。

シェアボタンのテーマが増えました

現在のテーマ

テーマを3つ追加しました。ぶっちゃけデザイン的なセンスがないため、産みの苦しみがすごいです。絵が描けたり、グラフィックデザインができるなら、もうちょっとサクサクと完成させられると思うのですが、自分にはそのどちらの能力もないため、どうしても時間がかかってしまいます。

このシェアボタンはリンクを貼れるので、この機能をアピールしてデザインが行える人にテーマを作ってもらえないだろうかと考えているのですが、はたしてうまくいくでしょうか。シェアボタンを見てもらえるとわかるのですが、黒猫の画像に公式サイトへのリンクが貼られています。これを画像ごと他のサイトのリンクに変更できるのです。画像にロゴを利用して、自サイトへのリンクを貼ると、そのテーマを利用してくれた方のブログからリンクが貼られることになります。この宣伝効果はすごいと思うのですが、デザイナーの方々に魅力的に感じてもらえるでしょうか。

もし絵が描ける方やデザインができる方で、この記事を見てくれた方はぜひとも前向きにご検討をよろしくお願いします。時間をかけて作成するだけのメリットはあると思うのでぜひ!

 

最近追加した機能

高さのないシェアボタンを作成したときに、デザイン的にネコの画像も同じくらいの高さにしなければならないのですが、全身の場合、縮小しすぎるとなんの画像なのか認識しづらくなるため、ネコの顔だけの画像を選べるようにしました。全身よりもこっちの方が使いやすそうです。

 

モバイル環境での文字ズレ

以前、モバイル環境でシェアボタンを表示すると文字がずれると記事にしたのですが、あれから時間を設けていろいろ調べてみました。div 1つか2つくらいのシンプルな構成で、スタイルシートも極力シンプルにした状態で文字位置を比較してみたのですが、それでもPCとモバイル環境で同じ表示にはなりませんでした。

どうも使用しているフォントとサイズによってはズレが生じるようなのです。Google Fonts を利用し、フォントサイズを変えながら表示してみたところ、ズレがないサイズとズレのあるサイズが出てきたのです。このため、モバイル環境からのアクセスは一律表示位置を1ピクセル下げて表示するという方法は使えなくなりました。

そこで iOS と Android でのアクセス時にズレを調整するフォームを用意して、そこで各自設定を行ってくださいという方針にしました。どちらのハードも所有していて確認が行える人はなかなかいないと思いますが、一応、機能だけは提供しておくことでこの問題の解決を図ります。

 

機能的にはそれなりのものを提供できていると思うので、後は宣伝を頑張らないといけません。使ってもらえば、それなりに良さはわかってもらえると思うのですが、なにか良い宣伝方法はないでしょうか?

WordPress のプラグイン版が完成しました

WordPress 公式プラグインページ

Game Users Share Buttons

ようやく完成しました!ちょっと前からプラグイン版は公開されていたのですが、プラグインをアップデートするとテーマが消えるというやっかいな問題が発生し、その対応が終わるまで記事にしないでおきました。

何度も修正を重ねたので、バージョンはすでに1.0.9になっています。WordPress 独特の仕様と、プラグインをアップデートした際にファイルがどう扱われるのかについての情報がネットに全然なかったので、その点で苦労しました。

どうもアップデートするとプラグインのディレクトリを内部のファイルごと入れ替えるようなのです。そのせいで内部に作成したテーマファイルも一緒に消えてしまうという、ややこしい仕様です。一時的に削除されない場所にディレクトリを作成し、アップデート後にそこからテーマファイルをコピーするという処理で解決したのですが、これはマナー的にどうなのかという思いもあります。

後日、そのことについて詳しく情報を残すつもりなので、詳しい方が見てくれて情報を提供してくれることに期待!

いろいろ苦戦したのでまだテーマがひとつしかないのですが、WordPress でブログをやっている方はぜひ使ってみてください!サクサク動いてなかなかいい感じだと思います。素材サイトからアイコンをダウンロードするとオリジナルのシェアボタンを作成することも可能です。

WordPress のダッシュボード > プラグイン > 新規追加ページで「Game Users Share Buttons」を検索してください。黒猫のアイコンのプラグインです。

Game Users Share Buttons アイコン

頑張って作ったのでみんなに使ってもらいたい!

まさか、無料でSSLが利用できるなんて!

ある日突然、Chrome の console に以下のような表示が出ていました。

The certificate used to load https://gameusers.org/app/pay uses an SSL certificate that will be distrusted in Chrome 66. Once distrusted, users will be prevented from loading this resource. See https://g.co/chrome/symantecpkicerts for more information.

Google 翻訳
https://gameusers.org/app/payをロードするために使用された証明書は、Chrome 66で信頼されないSSL証明書を使用します。一度信頼されないと、ユーザーはこのリソースを読み込むことができなくなります。詳細については、https://g.co/chrome/symantecpkicertsを参照してください。

 

調べてみたところ、過去に発行されたシマンテックの証明書に問題があるらしいです。Game Users で使っている Rapid SSL もダメとのこと。

シマンテックの証明書に対してGoogleからの制裁が確定した話

2018年3月15日までに証明書を新しいものに書き換えないといけないみたいです。Rapid SSL は他の高価な証明書に比べると格安で良かったのですが、どうせ更新するならと、他にも新しい発行業者が出ていないか調べてみました。すると「Let’s Encrypt 」という無料で利用できるとうたっているサービスを発見。さすがに無料は怪しいだろと思ったのですが、サイトを見てみるとこのように書かれています。

非営利団体の ISRG (Internet Security Research Group) が運営しており、シスコ(Cisco Systems)、Akamai、電子フロンティア財団(Electronic Frontier Foundation)、モジラ財団(Mozilla Foundation)などの大手企業・団体が、ISRG のスポンサーとして Let’s Encrypt を支援しています。

どこかで聞いたことのある名前ばかり。疑念が払拭されたので、これを利用してみよう、仮にまともに使えなかったとしても無料だし、試してみる分には問題ないだろうということで、VPS (Cent OS6) で利用してみました。

 

使い方はここにすべて書いてあります。

 

  • EPEL リポジトリを有効にする
yum install epel-release
  • certbot-auto を拾ってきて実行
wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto
./certbot-auto

以下、certbot 実行時の黒い画面の文字、Google の翻訳も英文の下に載せておきます。

Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): メールアドレスを入力
/opt/eff.org/certbot/venv/lib/python2.6/site-packages/acme/jose/jwa.py:110: DeprecationWarning: signer and verifier have been deprecated. Please use sign and verify instead.
  signer = key.signer(self.padding, self.hash)

電子メールアドレスを入力してください(緊急更新およびセキュリティ通知に使用されます)( 'c'を
キャンセル):メールアドレスを入力
/opt/eff.org/certbot/venv/lib/python2.6/site-packages/acme/jose/jwa.py:110:DeprecationWarning:署名者と検証者は廃止されました。代わりに標識を使用して確認してください。
  署名者= key.signer(self.padding、self.hash)


-------------------------------------------------------------------------------
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf. You must agree
in order to register with the ACME server at
https://acme-v01.api.letsencrypt.org/directory

利用規約をご覧ください
https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf。同意する必要があります
ACMEサーバーに登録するには
https://acme-v01.api.letsencrypt.org/directory
-------------------------------------------------------------------------------
(A)gree/(C)ancel: A(Agree / 同意します)

-------------------------------------------------------------------------------
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about EFF and
our work to encrypt the web, protect its users and defend digital rights.

あなたは電子フロンティアとあなたの電子メールアドレスを共有したいですか?
財団は、Let's Encryptプロジェクトの創設パートナーであり、非営利団体でもあります。
Certbotを開発する組織ですか? EFFについてのメールをお送りしたいと思います
ウェブを暗号化し、ユーザーを保護し、デジタル権利を守るための私たちの仕事。
-------------------------------------------------------------------------------
(Y)es/(N)o: Y(Yes / はいを選択)


Which names would you like to activate HTTPS for?
HTTPSをどの名前で有効にしますか?
-------------------------------------------------------------------------------
1: gameusers.org
2: www.gameusers.org
-------------------------------------------------------------------------------
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel):
1(gameusers.org は www を利用していないので1を選択)

Obtaining a new certificate
Performing the following challenges:
tls-sni-01 challenge for gameusers.org
Waiting for verification...
Cleaning up challenges
Deploying Certificate for gameusers.org to VirtualHost /etc/httpd/conf.d/ssl.conf


Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
HTTPトラフィックをHTTPSにリダイレクトするかどうかを選択し、HTTPアクセスを削除してください。
-------------------------------------------------------------------------------
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.

1:リダイレクトしない - ウェブサーバーの設定をこれ以上変更しないでください。
2:リダイレクト -  HTTPSアクセスを保護するためにすべての要求をリダイレクトします。これを選択してください
新しいサイト、またはあなたのサイトがHTTPSで動作することを確信している場合。これを元に戻すことができます
Webサーバーの構成を編集して変更します。
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):
2(リダイレクトする設定を選択したら失敗しましたと出ました。
すでに .htaccess で http へのアクセスを
すべて https に飛ばしているので
この設定は必要なかったのかもしれません)

Failed redirect for gameusers.org
Unable to set enhancement redirect for gameusers.org
Unable to find corresponding HTTP vhost; Unable to create one as intended addresses conflict; Current configuration does not support automated redirection

gameusers.orgのリダイレクトに失敗しました
gameusers.orgのエンハンスメントリダイレクトを設定できません
対応するHTTP仮想ホストを見つけることができません。意図したアドレスが競合しているため作成できません。現在の設定では、自動リダイレクトはサポートされていません


IMPORTANT NOTES:
 - We were unable to set up enhancement redirect for your server,
   however, we successfully installed your certificate.
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/gameusers.org/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/gameusers.org/privkey.pem
   Your cert will expire on 2018-02-07. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot-auto
   again with the "certonly" option. To non-interactively renew *all*
   of your certificates, run "certbot-auto renew"
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.

- サーバーの拡張リダイレクトを設定できませんでした。
   ただし、証明書を正常にインストールしました。
  - おめでとう!証明書とチェーンは以下の場所に保存されています:
   /etc/letsencrypt/live/gameusers.org/fullchain.pem
   あなたのキーファイルは以下の場所に保存されています:
   /etc/letsencrypt/live/gameusers.org/privkey.pem
   あなたの証明書は2018-02-07に期限切れとなります。新しい、または微調整された
   将来この証明書のバージョンを取得するには、certbot-autoを実行するだけです
   もう一度、 "certonly"オプションを使用してください。 *対話的に更新する* all *
   証明書の "certbot-auto renew"を実行してください
  - アカウント情報がCertbotに保存されている
   / etc / letsencryptの設定ディレクトリ。あなたは
   このフォルダの安全なバックアップを作成します。この設定ディレクトリは、
   Certbotで取得した証明書と秘密鍵も含まれています。
   このフォルダを定期的にバックアップするのが理想的です。

この間、わずか10分ほどです。なんとこれだけで SSL の設定が完了しました。英語ですが数問の対話に答えるだけでウェブサイトへの SSL 導入が完了します。あとは httpd を再起動するだけで反映されます。

service httpd start

 

数年前、初めて SSL を導入したときは中間証明書だなんだと難しい処理をした覚えがありますが、今回はたったこれだけで終了。しかも無料! 証明書の期限が三ヶ月しかないという問題はありますが、これは cron で更新すればいいだけなので、実質なにもしなくても無料で SSL がずっと利用できることになります。

証明書

ちなみに証明書を更新する方法は以下のような感じです。毎日、朝の6時45分に証明書の更新を実行する。更新できた場合は httpd も再起動する。毎日、実行していても、期限の30日前にならないと証明書の更新処理は実行されないので、向こうのサーバーに負荷をかけることもないとのことです。

45 6 * * * /root/certbot-auto renew --post-hook "service httpd restart"

正直、cron を触ることはあまりないので、こっちの設定の方が時間かかりました。この書き方が正しいのか更新されるまでわからないので、cron の部分についてはあまり参考にしないでください。

それにしても Let’s Encrypt すごすぎる!

 

参考サイト

リポジトリ公開 & IEで動きました!

GitHub リポジトリトップ画像

https://github.com/gameusers/share-buttons

GitHub のリポジトリを作成し、シェアボタンのコードを公開しました。いずれ他のソーシャルサイトのシェア方法・シェア数の取得方法を知っているプログラマーの方が現れて、爽やかにコードを提供してくれたらいいのになと夢見ております。

このシェアボタンの使用者が増えて知名度が上がれば、そういう方も出てくるかもしれないので、頑張ってテーマや機能を充実させていこうと思います。

前の記事で言っていた IE でシェアボタンの作成ページが動かない問題ですが、なんと Promise の Polyfill を用意するだけで動きました。最初は babel-polyfill で旧ブラウザ環境に対応しようと思ったのですが、スクリプトのサイズが無駄に大きくなってしまうので、babel-polyfill の使用は諦めたのです。

シェアボタンはシェアボタンを作成するページのスクリプトと、シェアボタンを表示するスクリプトに分かれているのですが、babel-polyfill を充てるとシェアボタンを表示するためのスクリプトが非常に重くなってしまいました。圧縮前は60KB(圧縮後は30KB)程度なのですが、それが330KBに。さすがにこの膨れ上がり方はやばい。

というわけで必要なものだけ Polyfill を充てるという方針になったのですが、その場合は IE での動作は諦めるしかないと思っていたのです。Fetch や Async など、いろいろ IE と相性の悪そうな新機能を使っていましたし。しかし、それらについてはすでに Polyfill が充てられていたので、 後は Promise だけという状況になっていたようです。

業務で IE への対応に四苦八苦している方がいる中、自分は本当に運が良かったと思います。制作中、一度も IE での動作チェックをしなかったのに、この結果はラッキーとしか言いようがない。

本日、WordPress の公式ディレクトリへ登録してもらうため、プラグイン申請を行いました。承認してもらえると WordPress のプラグインページから検索してインストールすることができるようになります。

…が、もし拒否られたら…と思うと心配でなりません。長い時間をかけてプラグインを作成して GitHub のリポジトリまで用意したのに、なにか根本的な問題が見つかって掲載不可になったら…。

大丈夫だろうか?