iPhone7はApple Payでゲーム系ICカードとしても使えるか?

先日発売されたiPhone7をはじめiPhone6以降の機種で、日本でもようやく、Apple Payが使えるようになりました。
iPhone7は長年ユーザーが待ち望んできた防水対応もさることながら、日本向けiPhone7/7 Plusでは、NFCだけでなくFeliCaを搭載し、Apple PayではJR東日本のモバイルSuicaやEdyが使える、というのが今回の注目にもなりました。
Apple Payが始まることで、こちらも日本のユーザーが待ち望んでいたモバイルSuicaをはじめとする、国内の様々な場所で使われている非接触IC系サービスの恩恵を受けられるようになります。


Pay

ということは、非接触系ICカードを利用している場所の一つである、ゲームセンター。ここにある数々のゲーム筐体、最近では非接触ICカードリーダーが備え付けられていて、独自の電子マネー機能を持ち合わせたり、カード情報を読み取ってプレイヤーのプレイデータを読み込むのに使用されたりしています。これらは果たしてiPhone7でも使えるのか…。

検証


まず、現在国内で主流の非接触IC系ゲームプレイカード(以下、プレイカード)は下記の種類があります。

※これ以外にもあるかもしれませんが、自分が主に音ゲーを好んでやるため、音ゲー機種が出ているサービスのみを対象にしています。

これらのサービスに対応する機種でiPhone7のApple Payが使えるか検証してみます。

意外と知られていない?1つのGmailアカウントで複数メールアドレスを使用する方法

Gmailはもう皆さんご存じの通り、フリーでありがなら高性能に使えるフリーメールですが、ひとつのアカウントで複数のメールアドレスのパターンが使えるのはあまり知られていないかも知れません。

他のウェブサービスを利用する際に、複数アカウント作りたい!だけどメールアドレスを増やすのは管理が面倒…。という人には向いているかもしれません。

そこで、そんなGmailの変わった使い方、下記の三点を紹介します。
  1. +記号に任意の文字列を付けたアドレス
  2. .(ピリオド)記号を付け加える
  3. @gmail.com を @googlemail.com に変える

iPhoneの通信をパケットキャプチャで傍受する

既に同様の話題は他のブログで既出ですがメモとして。

パケットキャプチャは定番のWireSharkを使います。
また、クライアントはMacを想定しています。Windowsの場合は別途代替方法が必要になります。

まず、iPhoneをUSB LightningケーブルでPCと接続します。

次に、iPhoneのUUIDを調べます。
Xcodeを使用する場合

Xcodeを起動 → Window → Devices でDevicesウィンドウを表示。左側のリストから接続されているiPhoneデバイスを選択します。
Device Information内のIdentifierの値をクリックして選択でコピー。



Xcodeを使用しない場合
iTunesでも同様の情報を表示できます。
iTunesを起動 → 接続デバイス画面で端末を選択し、概要画面を表示します。
ここで、「シリアル番号」と記載されている部分をクリックすると表示が変わり、UUIDが表示されます。
この状態で右クリックすると、コンテキストメニューで「コピー」と表示されるのでそれをクリックすると、値がクリップボードにコピーされます。


で、UUIDをコピーしたら適当なターミナルを起動して、下記のコマンドを実行します。

rvictl -s <UUID>

<UUID>の部分にはさっきコピーしたUUIDを貼り付けます。

実行して「Starting device xxxxxxxxxxx [SUCCEEDED]」と表示されればOKです。


続いて、WireSharkを起動します。



メニューの Capture から、 Interfaces を選択します。または、ショートカットでControl+Iでも良いです。


続いて表示されるダイアログから、「rvi0」というインターフェースを選び、チェックを付け、Startボタンをクリックするとキャプチャが開始されます。



あとはキャプチャ中はiPhoneを操作しながらキャプチャ結果を確認していきます。
HTTP通信について見たい場合は、Filterに「http」と入力し、「Apply」ボタンを押すことでより見やすくなります。

ほどほどにキャプチャ出来たら、赤い四角の停止ボタンを押してキャプチャを終了します。

最後に、下記のコマンドを実行して、先ほど作ったiPhoneとの接続インタフェースを停止します。

rvictl -X <UUI>

<UUID>の部分には先ほどのUUIDを貼り付けます。

実行して「Stopping device xxxxxxxxxxx [SUCCEEDED] with interface rvi0」と表示されれば切断完了です。



このような簡単な手順で、iPhoneの通信内容の傍受は簡単に行えます。
なので、iPhoneアプリを作る際は、設計の際に通信内容は傍受されても困らない形で設計する必要があります。

サイトをHTTP/2に対応させました

もっと早い段階で進めたかったのですが、前段階のSSLの設定とnginxのコンパイルをミスり続けていてなかなか実現出来ていませんでした。

nginxがHTTP2対応し出したため、早速対応させつつ、昨今のSSL関連セキュリティ事情の設定を見直し、SSLv3の対応を切ったり、暗号化スイートの設定を最適化させたりといったことを行っていたところ、なかなかどうして上手く動いてくれない状態が続いてしまっていました。

で、ようやく動いたこともあってメモ代わりにと。


現在、このブログをはじめ、anoncom.netドメインやその他いくつかの開発・管理サイトは1台の同一VPS環境上で稼働させており、全てnginxで稼働しています。

そのため、全てのドメイン上でそれぞれSSL関連の記述を書くと、それぞれでまた長くなるため、共通化出来るものについては1つにまとめ、includeで読み込むようにしています。
必要があればその時はincludeせずそれぞれのサイトで個別に記述すればいいし。

そんなわけで、各サイトは基本的に下記の様に設定しています。設定は全てnginx用です。


また、SSLで共通化出来る部分については ssl_common.conf という感じのファイルに記述し、これを各サイトの server{~}内で includeさせています。


ここまでの設定の通り、HTTP2対応するにも、SSL(というかTLS)が必要で、そうなると必然的にSSL証明書の準備をしなければなりません。
メインドメインの anoncom.net については先日キャンペーンを行っていたさくらのSSLでRapidSSLを購入して設定しました。
その他のドメインについては、無料で1年間使えるで有名なStartSSLや、以前に最大3年間、100ドメイン分無料で取得出来ると紹介されていた WoSign Free SSLを使ったりをしていました。
またつい最近ではLet's Encryptもようやくはじまり、一部(というか上記で取得しなかった残り分)はそちらを使ったりとして、何だかんだほとんどのページをHTTP2に対応させました。

それぞれの作成方法や設定方法などは既に他のブログなどで紹介されてるのでここでは割愛。

とまぁそんな感じでようやくにしてサイトをHTTP2に対応させることが出来ました。

Google Appsドメインでメール設定を自動化する

どうも、自分でも自分のブログの存在を忘れていたようなブログです。

最近のメーラーはメールアドレス(≒アカウント名)とパスワードを入れるだけで、メールサーバの設定は内部で自動で行ってくれたりするようになったりもしてるのですが、あれの設定どうやるんだろうって去年くらいに調べてました。

もっとも、Google Appsなんかの場合は最近の製品の場合、アカウント設定時にGmailアカウントとして選択することでそのまま設定出来たりするので必要なかったりもするのですが……。
もちろんこれはGoogle Appsなどの製品以外でもこれは応用出来るので、自前のサーバーで他者にアカウント提供する場合でも便利になります。


さて本題ですが、これを実現するには Autodiscover というMicrosoftがMicrosoft Exchangeで実現するために作った規格を使うみたいです。
https://technet.microsoft.com/ja-jp/library/bb124251(v=exchg.150).aspx


設定についてはとても簡単で、HTTPS接続出来る場所に、XMLで記述された設定ファイルを特定のパスに配置するだけです。

設置する設定ファイルは下記のように記述します。

Google Appsを使っている場合はこれをコピーして autodiscover.xml という名前で保存すればOKです。

このファイルを、メールで利用するドメイン名を利用したURLに設置する必要があります。
例えば、 your-name@mail.example.net というアカウントのメールを発行するのであれば、 https://mail.example.net/autodiscover/autodiscover.xml というURLでアクセス出来るようにする必要があります。
もしくは、 https://autodiscover.mail.example.net/autodiscover/autodiscover.xml というように、autodiscover. というサブドメインを設定し、その下に配置すると言うことも可能です。

後者については、例えば your-name@example.com というメールアドレスを利用していて、 https://example.com はサービス用URLであり、ドキュメントルート以降のパスは全てサービスURLとして自由に生成可能な状態としていた場合、 https://example.com/autodiscover というネーム空間を汚染してしまうため、そのような状態を回避することができるようになります。


既に例に挙げているとおり、これらの設定には基本的にはhttpsでアクセス出来るようにする必要がありますので、各自でメールドメイン毎にSSL証明書を用意する必要があります。
(SSL環境をどうしても用意出来ない場合は http://autodiscover.<メールドメイン>/autodiscover/autodiscover.xml のURLでも可能なようです)

StartSSLで1年間無償で使えるSSL証明書を取得するのもいいですし、DNSにCloud Flareを使っている場合、HTTPリクエスト時にCloud Flareを通過する設定にしていればSSL機能を無償で提供してくれますので、それで代替も出来ます。

また、最近はLet's EncryptプロジェクトでSSL証明書を無償で発行することも可能ですので、それらを利用してみるのもいいでしょう。


今回はGoogle Appsの設定をするものとして記述しましたが、冒頭でも触れていたとおり、autodiscoverは自前のサーバ設定にも有効です。 autodiscover.xml の<Protocol>内の各項目をそれぞれの環境に添った設定にしておけば
それが反映されます。


また、DNSのSRVレコードを設定出来る環境の場合、ゾーンファイルに下記の様にSRVレコードを設定することで、その設定を検出させることも可能なようです。

_imap._tcp 300 IN SRV 0   1 993 imap.gmail.com.
_pop._tcp 300 IN SRV 0   1 995 pop.gmail.com.
_smtp._tcp 300 IN SRV 0   1 465 smtp.gmail.com.
;;_autodiscover._tcp 300 IN SRV 0   0 443 autodiscover.example.com.

正規表現メモ

以前に設置していたPukiWikiサイト(labs.anoncom.net)を復旧できなくなったまま放置していたので、Wikiに書いていた内容を今さらながら一部移行してみたりしています。

GitLabをらくらくアップデートする

バージョン管理ツールとしてGitが流行初め、GitHubがスタートしてしばらくしてから、クローズドで自前で設置できるGitHubクローン、GitLabプロジェクトが始まりました。
そんなGitLabにはバージョン3.1くらいの時に個人的に導入してみてからお世話になっています。
ブラウザ上からリポジトリ内のファイル一覧からのコードの閲覧、差分比較などが簡単に行え、プロジェクトやユーザ管理も全てブラウザ上から行えるので大変重宝しています。
GitLabは開発状況も活発で、masterブランチでは毎日のように修正やpull requestによる機能追加などが行われていて、masterのアップデートもなかなか楽しみになってきます。

GitLabはRoR(Ruby on Rails)環境で動作し、インストールについては、基本的に公式マニュアルに書かれているとおりに実行すれば動作するまでには行えます。
とはいうものの、各環境毎にRubyのインストール状況などが異なっていたり、Ruby環境構築に慣れていないとまだまだ若干敷居があり、コマンド一発でインストール!などというにはまだまだ遠い状態です。

そのあたりについては各所でGitLabの紹介、インストール記事などがググればすぐに出てくる程度にはなっているので、そのあたりにお任せしましょう。
いまでは日本語でもだいぶ出てきているので、以前ほど戸惑うこともあまりないと思います。

で、今回ここではアップデートについて。
……と、いうほどアップデート自体にはインストールほどの難しい事はまずないです。


公式マニュアル通りにインストールしていれば、
cd /home/git/gitlab
sudo -u git -H git checkout db/schema.rb
sudo -u git -H git pull
sudo -u git -H bundle install --without development test postgres
sudo -u git -H bundle exec rake db:migrate RAILS_ENV=production
sudo /etc/init.d/gitlab restart


正直、これだけです。

が、現在使っている環境では、GitLab実行ユーザでrbenvを用いてユーザ単位でRuby実行環境を整えています。
そのため、sudoで実行環境のrubyを引き継いでくれません。この状態で上記を実行すると、OS側にインストールされているRubyを用いて実行されるため、利用するモジュールなどにバージョンba-jon差分などが発生し、途中でrakeが止まってしまったりします。

そこで、この自分の環境に簡単にアップデート出来るコマンドを作ってみました。



上記はRedHat系OS(CentOS)で単体で実行可能なスクリプトとして作成しています。
なお、インストール環境は公式マニュアルに準拠するものとしています。
Gitユーザで上記スクリプトを実行を実行した場合、そのままアップデートを実行します。
sudoでgitユーザになって実行した場合、環境変数を一部gitユーザ用のものに書き換えて実行します。
また、GitLab 5.0異常ではGitLab-Shellという独自のGitShellを採用しており、最新版ではそれらのバージョンと連動することとなっているので、なるべくGitLab-Shellも同時にmasterのものに更新するようにしています。
引数としてブランチ名を与えれば、そのブランチ(例えば、5-2-stableなど)を引っ張ってきてアップデートさせることが出来ます。特に引数がなければ常にmasterを参照するようになります。

あとは別途
sudo /etc/init.d/gitlab restart

で再起動すればOK。


で、これを毎回更新の度にコマンドラインでターミナルからスクリプトを叩けばいいのですが、折角なので同プロジェクトで別途公開されているGitLab CIを使って、ブラウザの画面上からボタン一発で更新できる様にしてみようと思います。


GitLab CIのインストールはここでは割愛します。基本的にはGitLabのインストールとそれほど変わらないし、慣れてればそれほど難しくないです。
(実際わたしはそれまでRoR環境で開発はおろかインストールなどもそれほど経験なかったですが、これらのセットアップ作業を通して、それとなく慣れてきましたw)

インストールしたGitLab CIからGitLabプロジェクトを作成し、セットアップします。

 GitLab CI プロジェクト設定画面


GitLab CIから更新するには、リモートリポジトリの内容を一旦プロジェクトパス内に引っ張ってくる必要があるため、実行環境とは別に、別途プロジェクトディレクトリを作成しておきます。
今回はGitLab CIの実行ユーザのホームディレクトリに $HOME/projects/gitlab というディレクトリを作成し、その中にあらかじめGitLabプロジェクトをクローンしておきます。

mkdir $HOME/projects/gitlab
cd $HOME/projects/gitlab
git clone git://github.com/gitlabhq/gitlabhq.git .



このパス($HOME/projects/gitlab)をGitLab CIのプロジェクト編集画面でPathに設定します。
Follow branchesには引っ張ってきたいブランチを指定します。masterの他にstableブランチが公開されているので、必要であれば各バージョンのstableブランチをカンマ区切りで指定します。

Scriptsには下記のスクリプトを記述します。

10行目で先ほどのスクリプトのパスを指定して実行しています。
正直、それより前の部分は前述のスクリプトの内容と作業が重複するため必要ないのですが、実行環境でビルドする前にCI環境内でビルドしておくことで、万が一の時に実行環境で作業される前に確認できるのでいいかなーと思い、この二重ビルドの体勢にしています。

このプロジェクトを保存し、あとはプロジェクト内のmasterなり各バージョンのブランチタブ内のRun buildボタンを押せば、最新版のfetch、merge、ビルド、DBマイグレーション、再起動まで全てが実行されます。

ただし、これらをCI上から実行する前に、もう一つ準備があり、そちらも行っておく必要があります。

今回、GitLab CIはGitLab本体とは別ユーザで実行しています。また、サービスの再起動までをも実行するにあたり、そこに至ってはスーパーユーザー権限が必要となります。
そこで、visudoコマンドなどを用いて、sudoresにGitLab CIユーザにこれらの実行を許可する設定が必要となります。

私の環境では下記の様に設定を行っています。
## Git fetch and merge
Cmnd_Alias GIT_MERGE = /usr/bin/git checkout *, /usr/bin/git fetch *, /usr/bin/git merge *, /usr/bin/git pull *, /usr/bin/git diff, /usr/bin/git log *, /usr/bin/git rev-parse *

## Ruby build
Cmnd_Alias GIT_RUBY_BUILD = /home/git/.rbenv/shims/ruby *, /home/git/.rbenv/bundle install *, /home/git/.rbenv/bundle exec *, /home/git/.rbenv/gem *, /home/git/.rbenv/rake *



この設定をGitLab実行ユーザーに対してNOPASSWDで設定します。(さもないとbuild実行中にパスワード入力を求められることとなり、ビルドが実行エラーで停止します。
gitlab      ALL=(ALL)   NOPASSWD: GIT_MERGE,GIT_RUBY_BUILD,/home/git/bin/gitlab_update,/sbin/service gitlab restart


サービスの再起動にあたっては、serviceコマンドを利用しており、引数でgitlab restartまで指定することで、gitlabの再起動のみしか行えないように制限しています。


これでボタン一発で常に最新版を利用する事も出来るようになります。


…と、ここまで来ましたが、最後に注意点があります。
他のプロジェクトでも当てはまることではありますがGitLabこれまでもいくつか大きく改修してきた事がありました。
一つは、4.1までで、採用していたresqueからsidekiqに変更されたこと。
もう一つは5.0で、当初利用していたgitoliteを切り捨て、独自のGitLab-Shellに置き換えたこと。
最も最近では5.1で、これまで利用していたunicornからpumaに置き換えたこと。
これらは、GitLab本体の更新だけでは対応出来ず、起動スクリプトの変更や、関連プロジェクトの別途更新が必要となります。
そのため自動更新に頼り切らず、更新ログなどから関連する部分についても別途手動で更新していく必要があるので、運用時にはこれらの点にも注意してください。

<2013年6月6日追記>また、この記事はGitLabをGitLab CI 2.xでの動作を前提としています。GitLab CI 3.x以降ではこれらは使えない可能性があります。

ウェブページをリニューアルしました+近況

かなり久しぶりのブログ更新です。 タイトルの通りですが、約6年ぶりにウェブページを刷新しました。 ウェブページを更新しました 前回は2018年頃に、Zend Frameworkをベースに作っていたのをLaravelベースのサーバーに置き換え、AppEngineで動かす形にしていま...