Let’s Encrypt でサイトの SSL 化

Let’s Entrypt という素晴らしいサービスが無料のSSL証明書が提供していると同僚に教えてもらったので、試しにこのサイトに導入することにしました。
このエントリーは導入過程のメモです。

Let’s Encrypt は Certbot というコマンドラインインターフェースを持っていて、証明書の取得とインストール、更新までコマンドでできるようになっているとのこと。なんとまあ便利ですね。

証明書の有効期限は90日間しかないので、crontab などで有効期限前に自動で更新していく運用が望ましいみたいです。ではそうしていきましょう。

事前に以下の準備をしておきます。

  • Really Simple SSL プラグインを WordPress にインストールしておく
  • ファイヤーウォールがあるならインバウンド 443 ポートを開けておく

また、環境としてはさくらのVPS(CentOS 6)で Nginx + WordPress を動かしている状態です。

証明書のインストールとWebサーバーの設定

サーバーに SSH でログインして、作業開始。
certbot-auto スクリプトをダウンロードして、 /usr/bin に移動、実行権限をつけて、実行。ウェブサーバーは Nginx なので、--nginx オプションをつける。

$ wget https://dl.eff.org/certbot-auto
$ sudo mv ./certbot-auto /usr/bin/certbot-auto
$ sudo chmod a+x /usr/bin/certbot-auto
$ sudo certbot-auto --nginx

これでインストールウィザードが始まる。 以下のくだりでは「2」と答えておくと、Nginx 設定ファイルにリダイレクトの設定を勝手に書き込んでくれる。

Please choose whether HTTPS access is required or optional.
-------------------------------------------------------------------------------
1: Easy - Allow both HTTP and HTTPS access to these sites
2: Secure - Make all requests redirect to secure HTTPS access
-------------------------------------------------------------------------------

設定を反映させる。

$ sudo service nginx reload

この状態でもうすでにSSL化はできていた。https でサイトにアクセスしてみると以下のような状況。

SSL証明書を表示確認しているところ

http 接続を https 接続に強制リダイレクトをかける。
certbot-auto が /etc/nginx/conf.d/default.conf に設定を書き込んでいるが、コメントアウトされているのでそれを外して有効にする。

     # Redirect non-https traffic to https
-    # if ($scheme != "https") {
-    #     return 301 https://$host$request_uri;
-    # } # managed by Certbot
+    if ($scheme != "https") {
+        return 301 https://$host$request_uri;
+    } # managed by Certbot

設定を反映させる。

$ sudo service nginx reload

最後に自動更新の設定。
毎週日曜日の5時に更新処理が走るように設定した例。

$ sudo crontab -e

0 5 * * 0 certbot-auto renew --post-hook "service nginx reload" >/dev/null 2>&1

Really Simple SSL プラグインを使う

インストールしてアクティベートすると以下のようなメッセージが表示される。

Relly Simple SSL Plugin

「Go ahead, activate SSL!」ボタンを押す。すると以下のようなメッセージが表示される。

SSL activated!  Don't forget to change your settings in Google Analytics en Webmaster tools.  More info.

えっと…、本当に簡単だな…。
Google Analytics と Webmaster tools の面倒も見ろとな。あとでね。

以上です。


P.S.

URLが変わるので、はてブ数などはリセットされてしまいます。まぁそれはそうだわな。
本文「likealunatic.jp」を検索 - はてなブックマーク


References

webpack にまつわるぐだぐだ。キャッシュ対策と CommonsChunkPlugin

webpack (version 2) の公式ドキュメントではバンドルファイルのブラウザキャッシュ対策として、ファイル名にハッシュ値を埋め込む方法が提案されている

こうするとアプリのコードを変更する度に、バンドルファイル名に埋め込まれたハッシュ値も更新され、ブラウザキャッシュ対策ができる、という寸法だが…。
当然ファイル名が変わるわけだから、<sript> タグも更新しなくてはならない。それを解決するには、HTML ファイルも動的に扱わなければならない。chunk-manifest-webpack-pluginhtml-webpack-plugin を導入し、HTML のテンプレーティングを行い…、となると今使っている Pug はどうなる…、となってさらにさらに掘り下げないといけなくなり、はっきり言ってソリューションとして無理がある。

閑話休題。

webpack をヘビーに使っていると、サードパーティーフレームワークやライブラリのコード(npm install でインストールしたようなモジュール)を出力ファイル(バンドルファイル)から切り離したくなる。 バンドルファイルにライブラリが直接含まれるが故に、以下のような事象に直面したことがある開発者は多いのではないだろうか。

  • 複数人で開発していて各自のライブラリのバージョンが微妙に異なり、Git経由でやり取りされるバンドルファイルに環境の差分までが含まれてしまう
  • 使っているライブラリが増えて、コンパイルがとても遅くなる

解決策として、フレームワークやライブラリはまとめて別のバンドルファイルにする、もしくは単独で配布されたものを <script> タグを読み込む、という解決方法を取ることもできる。 これを可能にするのが externals オプションで、ここで宣言された名前については、依存関係がグローバルスコープから参照されるようになる。

externals: {
  jquery: 'jQuery'
}

webpack.config.js に設定しておくと、 import jQuery from 'jquery'; というコードはグローバルスコープの jQuery を参照するようになり、バンドルファイルに jQuery のコードは含まれないようになる。 もちろんこの場合には jQuery は新たに別の <script> タグで読み込む必要ある。

よりスマートな解決策としての CommonsChunkPlugin

CommonsChunkPlugin を使うと、複数のバンドルファイルから共通の依存モジュールを切り出してくれる。 サードパーティーライブラリをアプリのコードと分割する、という使い方ももちろんできる。 公式で示されている設定は以下のようなものだ。

plugins: [
  new webpack.optimize.CommonsChunkPlugin({
    name: "vendor",
    minChunks: function(module){
      // node_modules のディレクトリ下に含まれるものだけに絞る
      return module.context && module.context.indexOf("node_modules") !== -1;
    }
  }),
  new webpack.optimize.CommonsChunkPlugin({
    name: "manifest", // 名前は "manifest" でないとダメ
    minChunks: Infinity // entryがいくつあろうと生成。省略可
  }),
]

サードパーティーコードを別にしたいだけなら vendor だけでも目的は果たせるが、manifest を入れると、webpack バンドル共通部分(ソースには webpackBootstrap とコメントが書かれている部分)が manifest.js として別ファイルに書き出される。こうするとビルドするたびに vendor のハッシュ値が変更されることを防げるとのこと。
でもこれ、先述のハッシュ値をファイル名に含めるキャッシュ対策をやっていないと、意味はなさそう。なぜならハッシュ値はバンドルファイルのコード内には現れないから。

manifest を定義した場合、以下のように manifest.js も読み込まないとコードは動かないので注意。

<script src="/js/manifest.js"></script>
<script src="/js/vendor.js"></script>
<script src="/js/bundle.js"></script>

References

書類をスキャンして捨てる

今日は有給休暇で会社を休んだ。自宅の設備点検があったためなのだが、一人暮らしでは自分が対応するしかないので仕方ない。

持て余した時間で、Amazonなどの買い物明細をスキャンしてシュレッダーにかけて捨てた。しばしば休みの日にこういうことをするのが習慣になっている。

shredded documents

ここ数年で手に入れたものの中で最も “Life Changing” なものは何か、と言われたら ScanSnap を挙げたい。 紙の書類は捨てなければ溜まる一方だが、それを捨てられるようになったのはこれのおかげだ。スキャンしたら、そのまま Evernote に送る。この辺はどっかのライフハック系の本に書いてあったことの受け売りだ。それを真に受けてやってみたら、とても良かったという話である。

書類をただ捨てるという行為は小心者の僕にとっては大胆すぎる。ここにある情報がいつか必要になるんじゃないか、という意識に囚われているからだ。スキャンしてデジタルデータにすれば後から見返すことができるのでそんな躊躇もなく捨てられる、という寸法だ。

ScanSnap とシュレッダーを買ってからというもの、ありとあらゆる書類をスキャンして捨てた。光熱費やクレジットカードや携帯電話の明細書、レシートや領収書の類、家電等の説明書、保証期間の切れた保証書、過去に住んでいた物件の関連書類、昔の日記、プリクラ、旅行の記録、手紙などなど。 多分見返すことのないもの、しかし捨てるには躊躇してしまうものを捨てることができた。 部屋が片付くのはもちろん、なんだか気持ちが軽くなる。

もちろんいいことばかりではない。ScanSnap は紙送りの性能がしょぼく、紙を重ねて置くと2枚以上いっぺんに吸い込まれたり、紙詰まりしたりする。1枚でも、厚かったり折り目があったりすると斜めに吸い込まれたりして手に負えない。なのでスキャンするときは手を添えて、真っ直ぐスキャンされるようにサポートしている。コンパクトボディなので仕方がないところもあるのか…と思いつつそこは割り切って使っている。 (今では進化したモデルがあるよね…と思ったら3年経った今もモデルチェンジしていなかった)。

シュレッダーはコクヨ S-tray KPS-X30W という商品を使っている。性能は…とにかくパワー不足で、紙を数枚も入れると満足に裁断されない。コンパクトさが仇になって投入口が小さいためA4の書類などは折って入れるしかなく、折った分だけ厚みが増してパワー不足の壁にぶつかり…と負のスパイラルになる。しかも連続使用するとオーバーヒートして動作しなくなるというおまけ付き。騙し騙し使っているというようなシロモノ。こう書くといいところがないが、インテリアとして目にうるさくない見た目だし、やはりコンパクトだということは正義。毎日使うものでもないので、それなりに使えればよいということにしている。

安くない買い物だったが、もう元を取る以上に役に立ったのでブログに書いておこうと思った。書類をスキャンして捨てるのはおすすめ!

久しぶりにギターレッスンを受講

卒業した音楽学校のギターレッスンに久しぶりに顔を出した。師は、いつでもレッスンに遊びに来てよいと言ってくれる心の広い人。

思えば、僕は自称音楽好きでギタリストでっていう領域に収まっていればよかったんだと思う。自己満足の、オナニーの世界にいればよかったのかもしれない。

しかしとある音楽学校に飛び込んで師に出会い、同じく音楽を志す若人達に出会い、本気で音楽を志す人間達は自分よりもはるかに必死に、深く音楽に興味を持って接し、研究し、愛しているかを知った。自分の中途半端さを恥じると共に、もっと音楽を愛したい、詳しくなりたい、プレイしたいという欲求を強めた。

そんな気持ちを、かつてのようなレッスンを受けるとまた思い出す。

その道を志すならなるべく高い志を持つ人間に触れた方が良い。そういう意味で僕は本当に良い師を持ったと思う。

いまでもレッスンに遊びに来てくれと彼は言ってくれる。その言葉に甘えて僕はまたレッスンを受けに行きたいと思う。 しかし恥ずかしながら何年経っても僕のギターの上達度合いはたかが知れている。 なんせそれを「仕事にしよう」としている若人とは必死さが違う。

しかしそれでもいい。僕は僕のペースで前に進む。それだけのことだ。 ギターも音楽も好きだから、それを止めるという選択肢は今のところない。

我が母校野球部の夏が終わった

今年の夏の甲子園大会には我が母校、早稲田実業が出場していたため、比較的よく試合をTV視聴していた。

清宮涙 土持たず聖地に「また戻ってくるので、いらないです」 (デイリースポーツ) – Yahoo!ニュース

清宮くんのコメントは出来すぎだと思う。末恐ろしい選手だわ。

彼のバッティングにも言えることだが、試合を見ていて最近の高校生は非常にフォームがきれいだ、と思った。バッティングフォーム、ピッチングフォームどちらもとても成熟した選手が多かったように思えた。きっと指導の方法も日々進化しているだろうし、生活管理も行き届いているんですね。

日曜日、準々決勝、中京vs関東第一の試合をTVでずっと見ていた。

印象的だったのはエース上野くんの素晴らしい投球。この試合は投手戦となり、0対0のままずっと進んだが、9回裏に関東第一からスポンとソロホームランが飛び出してサヨナラゲームになった。打線は両チームとも決定力を欠いていたが、投手の投球内容は中京、上野くん方がずっと良かったように記憶している。彼は身体も大きくて(ちゃんとトレーニングで鍛えられた身体なんだと思う)、投球フォームも本当に素晴らしくて「これが高校生か」と思った。
まさに一打に泣いた、そんな試合内容だった。

しかし最近の高校生って「ここ一番」ってときでもガチガチに緊張したりしないものなのかな。チームが負けている状況での笑顔もよく見たし、試合自体を楽しんでいる選手が多かったように思えた。

今日の早実の試合も淡々と進んでいったように感じたんですよ。いや、音声だけで中継を「聞いていた」からかもしれないけれども。仕事中だったのでじっと見ているわけにも行かず(笑)もっと感情的にというか、プレッシャーでガタガタになったり、気迫丸出しのプレイをして見せて欲しいものなんです。それこそが高校野球の見どころだったりする。しかしやっぱり映像で見ないとダメだ、そういうところは…。

そんなシーンももちろん見られたけれど、自分の基準以上に今の選手たちが成熟したプレイをしてくれるものだから、感心の連続だった、そんな印象の大会でした。
いや、まだ大会は終わっていません。明日が決勝です。