Twitter Facebook github

Category “Tech”

はじめてのgit

gitについて話すときにこの記事をたたき台にしたい。はじめてgitに触れる人の理解の助けになれば。

個別のgitコマンドについては、「頻出gitコマンド入門」で紹介しているのでリファレンス的に使ってください。ここでで紹介しているコマンドに関してはさらっと流して、できるだけシンプルに。

Read More »

頻出gitコマンド入門

最近、gitの使い方を人に説明することが多くなってきたので、頻出コマンドの使い方をリファレンス的に纏めておこうと思います。

なお、対象読者はgithubを用いてチーム開発をしているプログラマーです。
一人で開発するのであれば、例えばリモートサーバーへのpushやpullなどは無視してよいでしょう。

応用的なコマンドは分量を考えてまた別の記事にするかもしれません。適当にアップデートしていきます。

Read More »

VagrantのゲストOSから名前解決できない件

昔の記事「Vagrant+Chef-Zero入門」でprovisionを行おうと思い、vagrant upしたところ、次のエラーでプロビジョニングがコケました。

よく見るとinline scriptとchef両方でコケてる

inline script はゲストOSにchefをインストールするスクリプトで、opscode.comからダウンロードしてくるのですが、3行目でこれが失敗しています。
原因はホストアドレスの名前解決ができなかったようですね。

chefがインストールできていないので、chef provisionがコケるのは当然なのですが、14行目でも network is unreachable ということで、ゲストOSから名前解決が正しくできていないために、インターネットに出て行けなかったのではないかと推測できます。

解決策

ゲストOSから名前解決がうまくいかないとき、ホストOSで名前解決するようプロキシする設定にすることが可能なようで、VirtualBoxの NAT Networking settings に詳細が記載されていました。

https://www.virtualbox.org/manual/ch08.html#idp46608649138592

今回はこの設定の中の natdnshostresolver をVagrantfileから有効にします。

vagrant up でVMを立ち上げ直すと、正しく名前解決が行われるようになります。

このオプションを有効化することによる副作用はなさそうなので、配布する場合は付けておいたほうがよさそうです。

所感

この原因が解明できておらず曖昧なのですが、Vagrantを使っているとネットワーク周りの問題にはよく遭遇します。
自分の中でネットワークに関しては知識面において弱点でもあるので、克服できるように精進したいと思います。

余談ではありますが、本記事内や以前の記事で書いた opscode.com は chef.io に引っ越しが行われており、古いドメインでもリダイレクトされますが、DNSルックアップが2度走ることになるので気になる方は新しい方を参照するように修正すると良いでしょう。

git-secretsでAWSの不正利用を防ぐ

最近、アプリケーションなどから利用するAWSの認証情報(credentials)をgithubなどの公開リポジトリに誤ってコミットしてしまい、不正利用され高額な使用料を請求されるケースが増えています。
いくらルートアカウントを無効化してIAMユーザーを使おうが、2段階認証を導入しようが、認証情報をヒューマンミスで公開してしまっては意味がありません。

万が一、認証情報を公開してしまった場合は、一刻も早くAWSの管理コンソールから公開してしまった認証情報のアクセス権限を取り消しましょう。もしそれが会社で使っている認証情報だとしたら本当に1分1秒を争いますので、深夜だろうが構わずにAWSを管理しているエンジニアを電話で叩き起こして助けを求めてください。放置すると高確率で首が飛びます。

こういった大事故を防ぐためにAWSが公開している git-secrets というgitのプラグインがあります。

https://github.com/awslabs/git-secrets

インストールする

つい先月末までは、インストールするためにソースをローカルにクローンしてきた後で make install する必要がありました。しかし、先月の26日にformulaがHomebrewのmasterにマージされ、brew経由でより簡単にインストールできるようになりました。

昔からhomebrewを使っていた人は、formulaの一覧を更新しないとインストールできないため、まずupdateしてからinstallします。

git secrets コマンドが使えるようになっているはずです。

リポジトリへ設定

git-secretsはまだ有効になっていません。

リポジトリ単位で有効化する必要があるので、ここでは適当に新しいリポジトリを作ることにします。

リポジトリの中にcdしたら –install で有効化。

見ての通り、pre-commitをフックして実現しています。

拒否ルールの設定

次にどのルールにマッチしたとき、コミットを拒否するか指定します。AWSの認証情報については、 --register-aws パラメータを使えます。

設定された拒否ルールは、 --list パラメータで確認できます。

上の出力3行目では、大文字英数20文字にマッチして拒否しているようですね。乱暴じゃないかと思いましたが、実際プログラミングをしていて大文字固定で20文字も打ちませんからね。

6,7行目はAWSの公式ドキュメントなどでも使われている、サンプルのアクセスキー/シークレットキー(Allowed patterns for example AWS keys)だそうです。

実際に使ってみる

ちゃんと弾いてくれるか確認してみます。

適当にそれっぽいのを書いて、これでコミット。

弾いてくれました!

まとめ

実際の運用では、認証情報やパスワードなど本当に外部に漏れてマズいものは、環境変数にセットするのが個人的にはオススメです。そもそもファイルに書かない運用であれば、ファイルの取扱い不備でリークする可能性がゼロになり、セキュリティリスクを減らせます。

とはいえ、実情そんなこと言ってられないケースも多いですので、ファイル+.gitignoreで気をつけて運用するのが一般的でしょうか…。万が一のためにAWS内外問わず、トークンごとに権限設定ができるものは必要最小限の付与に留めるようにしましょう。AWSの場合、ルートキーでないと使えないAPIがあったりもするみたいですが……。

今回のgit secretsは他にも、既にインデックスされているファイルの中にキーが混ざっていないかどうかをスキャンしたりすることもできます。詳しく知りたい方は公式のドキュメントをどうぞ。

所感

AWSなんかは凄い勢いで請求額が増えていくサービスが山ほどあります。ルートキーなんかが漏洩したと思うとゾッとしますね……。従量課金制のクラウドサービスを使う際には、そのセキュリティにはより一層の注意を払って取り扱いたいですね。

FT2用インジケーターを作る(C++編)

この記事はPascal編の内容をC++向けに書き換えたものです。

Forex Tester 2で読み込める、一目均衡表のテクニカルインジケーターを描画するDLLを作成することをゴールにします。

Pascal編と同様の部分は省略していますので、先にそちらの記事をお読みなることをお勧めします。

Read More »

FT2用インジケーターを作る(Pascal編)

こんにちは

わたしは為替のバックテストと検証に、ForexTester 2(以下FT2)という有料のソフトウェアを使っていて、
実際のトレードはMetaTrader 4(以下MT4)を使っています。

これらのソフトウェアは、プログラムの知識があれば、テクニカル分析に用いることのできるインジケーターや、自動売買用のプログラム(EA; Expert Advisor)を自作することができます。
MT4の場合は、本体インストール時にコンパイラも同時にインストールされ、プログラミング言語といっても習得が容易なオリジナル言語MQL4でより容易にプログラムすることができ、ソースコードが公開されていることも多いのですが、FT2の場合はC++またはPascalを使って、これらのdllを作る必要があります。

普段Mac使いなこともあって、数年ぶりにこれらの開発環境を整えるときに躓いたことがあったので、備忘録として手順を書き留めようと思います。

ちなみに、言語はPascalでもC++でもどちらでも良いと思います。C++は後で別に記事にするつもりです。プログラミング初学者で、どちらの言語も触れたことがない方であればPascalの方が私は楽だと思います。
ただし、DLLファイルの容量がC++でビルドした方が小さくなります。気になる方はC++が良いかもしれません。

Read More »

バグを減らすためにユニットテストを考える

ユニットテスト基礎

前提として

  • 「バグがある」ことを証明できるが、「バグがない」ことは証明できない
  • バグを限りなくゼロに減らすために有限時間内でチェックを行っている
  • ステートが増える毎にテストケースとテスト時間は指数関数的に増加する
  • ウェブサービスでブラウザを介して行うものは完全なブラックボックステストであるし、仮に誤った出力となるケースを発見しても、そのリクエスト内のどの段階(メソッド)でバグが起きているのか特定することはできない

基礎知識

テストは最低限の品質保証です。

テストを行っていなかったプロジェクトにテストを導入する場合、「この関数の結果は最低限、保証されていなければならない」とする関数を最優先のテスト対象とします。
ただし、テストを実施するためには、テストを行いやすい設計が必要不可欠であるため、既存のコードのままテストを実施しようとは考えない方が良いでしょう。

また、ユニットテストは、リグレッションテスト(デグレードテスト)を行うための最適な方法です。リグレッション(デグレード)というのは、新たに機能を追加したり、既存のコードのバグを修正した際に、新たなバグを生みだしてしまうことです。ユニットテストを正しく行っていれば、常に要求を満たすテストケースによって過去の修正内容も検証され続けることになるためです。

またテストコードを書く習慣のない人が書いたコードは総じてテストしにくいコードを書く傾向にあり、テスト導入を決めたプロジェクトでテストコードに関する知識の無い人にコードを書かせ続けるのはとても非効率です。…それでも、テストコードを書く人が指摘しないといつまでも書けるようにはなりません。

テストコードは誰でも書けるのか

正しいテストコードを書くにはプログラミングの知識だけでなく、テスト工程におけるテストスキルと経験も必須です。

機械的に行うユニットテストなどのソフトウェアテストは、ブラウザを介した出力を人間が目視で行うブラックボックステストと根本的に異なります。たとえば今回取り上げているのはユニットテストですが、その具体的なテストケースには同値分析や境界線分析など多くの手法があり、また適切なテストケースを書くことができないのであれば、テストコードを書かないも同然です。

なにより、実施しようとしているテストの基礎知識がなければ、どの程度テストコード、テストケース、カバレッジを維持すれば十分という判断をすることができないし、そもそもプログラミングの知識がなければテストコードを書くことも出来なければ、テスト対象のコードを読んで適切なテストケースを作ることも不可能です。

ゆえに、テストコードを書くにはテスト対象のコード(つまりビジネスロジック)を書く以上のスキルと経験が必要と言えます。

テストコードを書かないのは悪ではない

ユニットテストはソフトウェアテスト手法の一つですが、これは通常の開発手法(例えばウォーターフォールやアジャイル、スクラム等々)と同様に、適用して効果的なプロジェクトもあれば、むしろ適用した結果マイナスに作用してしまうプロジェクトもあり、すべてのプロジェクトに導入を勧められるものではないことを理解してください。

そのため、事前にユニットテストを導入するのが本当に効果的なのかどうかを検討・判断する必要があります。

ユニットテストが効果的なプロジェクトの条件を次に挙げます。

頻繁にリリースが行われる

例えばリリースが年に数回のように、頻繁にリリースをしない場合、手動テストのコストが相対的に小さくなり、ユニットテストを導入するコストの方が大きくなります。逆にアジャイルで毎日デプロイを繰り返すようなプロジェクトの場合、手動テストだけでは太刀打ちできなくなることでしょう。

長い期間保守される

リリース頻度と同じ考え方ですが、短時間で保守されなくなるプロジェクトでは、トータル的に自動テストが実行される回数が少なくなるため導入コストの方が大きくなります。例えばサービス案を練って試作してみる時のプロトタイプなどに導入するのは不向きということになります。

多くの人数が開発に関わる

例えば1人で開発を継続できる規模のプロジェクトでは、当人がすべてのコード・仕様を把握しているケースが多く、テストコードを導入したとしても成果物の品質に影響を与えないことが多いです。逆に数十人規模の開発チームの場合、一人がすべてのコードを把握するのは不可能でしょうし、初めて触れるコンポーネントの改修を安心して行うことができるようになります。

ただし、頻繁に参加しているメンバーが変動するプロジェクトの場合、テストコードのメンテナンスコストが高まり、テスト自体が破綻することがあるので注意が必要です。

また、ある程度コードの規模が大きくなってきたプロジェクトにおいては、トータルで見たとき「自動テストを導入した後の開発速度」の方が導入前と比べて早いことも多いのですが、その段階以前の小規模なプロジェクトでは、自動テストを導入しない方が開発速度は速くなります。実際のビジネスの世界では品質よりスピードを重視することも多々あるので、開発ステージに応じた選択が必要になります。

「テスト駆動開発」のススメ

テスト駆動開発とは

一般的な開発工程では、機能実装者=その機能のテストコード実装者になります。

ユニットテストは学校のテストに例えると、

  • テストコード=問題(先生が出題する)
  • ビジネスロジック(機能)=解答(生徒が解く)

なので、

  • 「先に答え(機能)を書いてから、問題を出題(テストコードを実装)する」

より、

  • 「先に問題(テストコード)を書いてから、その問題に答える(機能を実装する)」

方が考え方としてはより適切であり、成果物の品質向上を期待できます。

このように、先にテストコードを書いてからビジネスロジックを実装する開発手法をテスト駆動開発(テストファースト)と言います。

テスト駆動開発には、テスト対象のコードを書く前の時点でその全体像を頭の中で設計する必要があり、プログラム初学者が習得するのは困難です。

テスト駆動開発 は開発が遅くなる?

テスト駆動開発を実施すると生産性が下がると主張する人も多いのですが、実際は正しくテストが行えていればトータルで見た生産性は上がります。

何故かというと、実際にコードを書くエンジニアでないと分からない感覚かもしれませんが、エンジニアが「実際にコードを書く時間」より、「処理を頭の中で考えて設計する時間」と、「書いた後の動作チェックの時間」の方が長くなりがちです(そうでないケースを私は知りません)。

特に新人の頃は設計も未熟であり、十分に頭の中でシュミレーションできず、いきなり手を動かしてコードを書く作業に入るために無駄なコードが増えがちです。
しかしその繰り返しによって知見が十分に溜まることにより、手を動かす前に今から書こうとするプログラムの全体像を自然とイメージできるようになります。
経験を積み重ねた熟練者はコードの実行結果を頭の中でシュミレーションできるので、無駄なプログラミングを初めからしなくなります。

従って、テスト駆動開発の導入によりテストコードを先に書くことによって、開発工程で一番時間のかかる「脳内設計工程」と「動作チェック工程」が一体化し生産性が向上します。

結論

何が言いたいのか分からなくなってきました。ここまで書くのに疲れました。また考えておきます。

所感

ここまで語れるほどユニットテストの経験が長いわけではない…はずが、いつの間にか書けるくらいの知識量になっていました。初学者だった頃は「テスト難しそう…書くと遅くなるし要らないや」なんてよく思っていました。懐かしいです。

MySQLでプロセスリストを見る権限の話

サービスのパフォーマンス低下原因を探るとき、MySQL側はスロークエリを調査したりしますが今回はプロセスリストの話。

知ってる人も多いと思いますが、mysqlにログインしてSHOW PROCESSLISTで実行中のプロセスリストを表示できます。

これを元に詰まっているSQLを見つけたり、サービスインしているサーバーで実際の処理状態をモニタしたりする訳ですが、MySQLで閲覧用のユーザを切って使っている場合など、その結果が本当にすべてのプロセスではないことがあるので気をつけましょう、という話です。

 

MySQLのコマンドについての説明は大抵公式のリファレンスマニュアルにあるので、該当箇所を引用します。

13.7.5.29 SHOW PROCESSLIST Syntax

If you have the PROCESS privilege, you can see all threads.
Otherwise, you can see only your own threads (that is, threads associated with the MySQL account that you are using).

つまり「(SHOW PROCESSLISTを実行したユーザーが)PROCESS権限を持ってたら全部のスレッドを見れるけど、持ってないならそのユーザーのスレッドしか表示しないよ」ということになります。

 

普通の運用では、rootユーザーをそのまま使い回している人は論外として、別のユーザーを作り [GRANT ALL PRIVILEGES ON service_a.*] (または ALL PRIVILEGES の代わりにSELECTなどの閲覧のみ)のような権限を設定しているところが多いと思いますが、前述した PROCESS権限はMySQL全体にグローバルなものであるため、特定のデータベースへの全権限を付与したユーザーであってもこの権限は持っていません。

つまり、このGRANTを施しただけのユーザーからは他ユーザーが実行したプロセスは閲覧できないことになります。たまにPROCESS権限のないユーザーから SHOW PROCESSLIST を実行して、「待機中や実行に時間のかかっているプロセスはありませんでした!」と言ってくる人がいるのですが、本当に調べるためにはPROCESS権限を持っていないと意味がないということです。

 

特定のユーザーがPROCESS権限を持っているかどうかは、mysql.userテーブルの Process_priv を確認します。

Process_privはENUM(‘Y’,’N’)ですので、Yが返されればそのユーザーはPROCESS権限を持っています。もし指定したユーザーでNが返され、そのユーザーに権限を付与したい場合は次の通り。

 

殴り書きだけども 備忘録として。

デプロイ用ユーザーの在り方を考える

たいそうなタイトルだけど実際そんなことない。思ったより長くなってしまったのでお時間のあるときにどうぞ。

 

今までWordPressのデプロイにはrsyncを使って同期させていたんですが、WordPress専用のRuby製デプロイツール、WordMoveを使ってみようと思い立ちこちらの記事を参考にしながら準備しました。

WordMoveはSSHやFTPでログインしてファイルを置き換えるために、ログインユーザーがドキュメントルート以下への書き込み権限を持っていないとデプロイできません。

前述の参考記事ではドキュメントルート以下の所有者と、ウェブサーバーの実行ユーザーをec2-userに変更する荒技で解決しています。ここが自分の中でめちゃくちゃ引っかかったので、セキュリティ的により良いと考える権限管理ついて書いてみます。

(後から調べたことですが、Red Hatが共有ディレクトリのベストプラクティスとして提案していたようです。)

 

今回のゴール

  • デプロイ用の専用ユーザーを作り、WordMoveはデプロイ用のユーザーからデプロイを実施する
  • ウェブサーバーの実行ユーザーは変更しない(apacheまたはnginx)
  • 上記のままうまく回るようにユーザーとディレクトリのパーミッションを変更する

 

デプロイ元の環境で鍵ペアを作る

今回はVCCWを使ったVagrant内のWordMoveを使います。特にWordMoveはrootになって使う必要もないので、今回はvagrantユーザーで鍵を作ります。

秘密鍵のパスフレーズは必要に応じて設定してください。

ssh-keygenコマンドで鍵ペアが生成されますが、触れていいのは ~/.ssh/id_rsa.pub のように最後にpubが付いたものだけです。これがWordMoveの公開鍵になるので控えておきます。なお、当然ですが ~/.ssh/id_rsa は秘密鍵です。これを漏らしてしまうとデプロイ対象のドキュメントルート以下を丸々書き換えることができてしまうので、十分に気をつけてください。

 

デプロイ用のユーザーを準備する

ここでは deployer という名前で作成します。

 

デプロイユーザーが対象のディレクトリに書き込めるようにする

今回のデプロイ対象はウェブサーバーの実行ユーザーが所有しているドキュメントルートです。

今回はnginxを使っており、所有権はnginx:nginxです。戦略としては、nginxのグループにdeployerユーザーを追加し、ドキュメントルート以下のディレクトリに対してグループ内からの書き込み権限を付与します。

 

これで終わり…なら簡単で、記事にすることもないんですが、2つ問題があります。

deployerでファイルの編集をしてみます。問題なくできます。

 

次はデプロイ先にないファイルをデプロイしてファイルを作成することを想定してtouchしてみます。

次にパーミッションをチェックします。

1つめの問題です。このように、新規でファイルを作成してしまうと所有権は deployer:deployer になってしまいます。deployerグループにnginxを追加してしまう方法もありますが、一貫性が無くなってしまう上に、何かグループに対して権限を付与する際にも複数のグループを気にすることとなり運用コストが高まります。

これを解決する方法として特殊なパーミッションビット、setgidを使います。

 

setgidを理解する

setgidというのは、setuid, setgid, sticky bit と並んで紹介されることの多いLinux系ファイルシステムにおける特殊なパーミッションビットのことです。今回はsetuidとsticky bitは使わないので省略します。

setgidはset group idの略で、このパーミッションを有効にしたディレクトリ内でファイルやサブディレクトリを作成すると、setgidを付与したディレクトリと同じグループが所有グループとなります。グループを継承することができるということです。

setgidはchmodコマンドで g+s を指定することで設定できます。

チェックしてみます。

デフォルトでグループがnginxに割り当てられています。

今度こそ終わり… と思ったら、新しく作られたファイルのグループはnginxになっていますが、よく見るとグループへの書き込み権限がありません。2つめの問題です。

 

デフォルトパーミッションを変更する

ここまでで、ファイルやディレクトリを作成したときに所有グループを継承できるようになりました。最後は、デフォルトのパーミッションでグループに書き込み権限を付与することです。これにはumaskを使います。

umaskは許可*しない*ビットを指定する方法なのでかなり柔軟に設定できます。デフォルトではumask 022(=新規ファイルは644、自分だけ書き込み可)になっていますので、今回はumask 002(=664、自分とグループの人が書き込み可)に変更したいわけです。

今回はdeployerユーザーにumask 002を付与したいので、deployerユーザーの .bash_profile を利用します。

テストしてみます。ただし、sudo -u deployerを使うとrootのログインシェルに入ってしまいumask 022が適用されてしまいますので、su – を使います。

新規ファイルも664のパーミッションで、グループを継承できました!念のためにサブディレクトリを作って、その中でファイルを作っても同様の結果になることを確認しておきましょう。テストが済んだらテスト用ファイルはすべて消しておきます。

 

WordMoveでデプロイしてみる

今回はWordMoveを使っていますがWordMoveの紹介ではないので簡単に。実際にdeployerユーザーを使ってデプロイしてみます。

Pulling Databaseで、サーバー側でmysqldumpが効かなくて一度コケましたがmysqlをyumで入れて解決しました。

ちゃんとプッシュできていることを確認して終わりです。お疲れ様でした。

 

雑感

ここまで書いておいて何ですが、本当はこのように役割ごとにユーザーを切り分けるべきだと信じています。ただめちゃくちゃ面倒くさくて、最後デプロイツールでも一工夫必要なことを考えると、同一ユーザーでやってしまいたくなるのもとても分かります。難しいですね。

nginxでHTTP/2ことはじめ

このエントリを書いているうちにクリスマスイブになりましたね。いよいよ年末ムードですが、今年は年の瀬ギリギリまでお仕事です。クリスマスなんて無かった

前回のエントリの最後でHTTP/2, SPDYやりたいって書いたので有言実行ということで。この記事は既にstable(1.8)なnginxでSSLサイトを構築している環境が前提になります。

 

一昔前にGoogleが開発した次世代WebプロトコルのSPDYが流行っていましたが、SPDYを受け継いだHTTP/2の出現から、新たにSPDYを導入することはほとんどないようです。

Google自身もHTTP/2へ移行したようですので、今回はSPDYではなくHTTP/2を使ってみようと思います。cssやjs、画像などを多くロードしているページでは、表示速度がかなり向上するようですよ。

nginxでhttp/2を導入する場合は、–with-http_v2_module というパラメータをつけてビルドしないといけません。ただ、nginx公式のリポジトリから落とせるバイナリはこのパラメータ付きでビルドされているようですので、今回はこれを使う方針で進めます。(ちなみにSPDYは古いnginxで利用できていましたが、HTTP/2に載せ替えられる形で使えなくなりました。)

 

古いnginxの削除

まずは今インストールされているバージョンを確認します。

執筆時点のAmazon Linuxで標準のリポジトリからyumでインストールすると、上の通りstableな1.8がインストールされます。nginxは今年の9月末にリリースされたv1.9.5でHTTP/2をサポートするようになったので、1.8.0のnginxは削除します。

 

メインラインnginxをインストール

前述の通り標準のリポジトリからインストールすると1.8が落ちてきてしまいます。メインラインのnginxをインストールするには、公式のドキュメントを参考にnginxのリポジトリを参照するように変更します。

正しくメインラインのnginxが取得できるか確認し、問題なければインストールします。今回はnginx.repoにpriority=1を追記したので、Amazon標準リポジトリよりnginxリポジトリが優先して参照されます。このほかyumのコマンドに –disablerepo=amzn-main を記述することでもインストール可能ですが、yum updateなどで問題になることがあるので特に理由がなければ優先度を変更しましょう。

すんなりインストールできました。念のために自動起動の設定を確認しておきましょう。

 

http2の設定

次は1.9.9のnginxでhttp2を使えるようにします。

今回は1.8系のnginxからの乗り換えなので、古いnginxをremoveした時に残っている設定ファイルをベースに書き換えていきます。

SSLは前回設定していますので、書き換えるのはここだけですね。本当に簡単です。

なお、http2はSSLなしでも利用できる仕様ですが、事実上SSL対応しないと使えませんので、SSLに対応していない場合は過去のエントリ「Let’s Encryptをnginxで使ってみる」などをご参考ください。

 

動作確認する

ちゃんとHTTP/2で通信してくれているかどうかは、Chromeの場合デバッグ機能のnet-internalsを開くことで確認できます。新しいタブで、

chrome://net-internals/#http2

を開いてみてください。

HTTP/2 sessionsのテーブルに、今回対応したドメインが表示されていればうまく動いています。

スクリーンショット 2015-12-24 2.55.28

 

また、Chrome Extensionの「HTTP/2 and SPDY indicator」もオススメです。これをインストールしておくと、ブラウズしているページがHTTP/2またはSPDYに対応しているかどうかをURLバー右側の雷アイコンで視覚的に表示してくれます。

表示されている雷アイコンが青色であればHTTP/2、緑色であればSPDY、灰色であればこれらのプロトコルに対応していないことを表します。正常に動いているようですね。

 

雑感

数年前にSPDYで賑わったことは比較的記憶に新しいのですが、暫くその動向を追っていない間にHTTP/2が策定され移行が進んでいるようです。Web技術の変革スピードの早さを再認識しました。時代に取り残されないよう、新しい技術も積極的にキャッチアップしていきたいですね。