Monthly Archives: 12月 2015

2015-12-25

Facebookの公式apiを使って、ユーザーのメールアドレスを取得する方法

はじめまして。GMOモバイルのD.Nです。
今回は、facebookでユーザーのメールアドレスを公式apiを使い取得する方法をご紹介します。

今回は、facebook公式apiをphp(cakephp)で使う前提で説明させていただきます。

1.facebook apiプラグインのインストール

a.Composerを利用しない場合

・cakephp-opauth https://github.com/uzyn/cakephp-opauth
⇒ ダウンロード後、フォルダを「Opauth」というファイル名に変更して 「app/Plugin/」に設置

・Facebook Stratefy https://github.com/opauth/facebook
⇒ ダウンロード後、フォルダを「Facebook」というファイル名に変更して、「Opauth」の中にある「Strategy」というフォルダに設置

・opauth本体 http://opauth.org/
⇒ ダウンロード後、解凍したファイルを「Opauth」変更して、「app/Plugin/Opauth/Vendor」に設置

(ブログ掲載のプログラムのインストールは、自己責任で御願いします。インストール等の結果にかかるハードウェアの不稼働等は、 当ブログでは一切サポートしておりませんので、予め御了承下さい。)

ということでしたが、先輩からComposerで管理すべきとご指摘をいただきましたので、
Composerでの導入方法についても説明させていただきます。

b.Composerを使用する場合

(1)Composerインストール手順

まずは本体をダウンロードします。

参考:http://crunchtimer.jp/blog/technology/php/4993/

(2)パッケージインストール

composer.jsonは以下のようになります。

(3)composerでインストール

以上でインストール完了です。

ちなみに、Composerで管理する理由としましては、

– ライブラリのインストールが簡単
– ライブラリのバージョン、依存関係の管理が簡単
– 自分のGitに含めなくてすむ

が上げられます。

以上の2つのいずれかの方法でインストールしてください。
その後は、共通で↓となります。

2.cake phpでfacebook apiを利用するための設定

2.1.bootstrap.phpの変更

keyとsecretには、facebookアプリで設定したものを使用してください。
※facebookアプリ登録方法 http://dev.classmethod.jp/etc/retrieve-json-from-facebook-api/

2.2.routes.phpの変更

・opauthComplete.php へ処理を追記

以上で、http://localhost/プロジェクト名/auth/facebookでユーザー情報が収得できます。
こちらにデータが送られてきますので、取得したメールアドレスをdbに保存するなどの処理を記載します。

※引用元: Cakephp2.Opauthプラグインを使ってTwitterログイン http://orekaihatsulog.hateblo.jp/entry/2014/03/20/232733

3.まとめ

今は、禁止されてしまいましたが、「続きを読みたい方は、いいねを押して下さい」と誘導をして、メールアドレスを取得する方法もありました。
しかし、今でも「いいね」したユーザーにメールアドレスの登録を促す誘導をfacebook側でかけたりもできるので、まだまだ利用価値はあると思います。

なお、facebookは利用規約がこまめに変わるので利用シーンについては、利用規約で確認をしてください。
利用規約 https://developers.facebook.com/policy/Japanese/

Category: PHP

2015-12-22

マイクロサービス化

JWordのT.Oです。

去年あたりから話題になっているマイクロサービスですが、個人的にとても共感できる内容だったので今JWordで使っているサービスをマイクロサービス化するとどのような構成になるか構成図を書いてみました。

マイクロサービスとは、一つの大きなサービスを小さなサービスに分けて分割統治しましょうというやり方です。
自分がこのやり方に共感できたのは障害ポイントの切り分けや、あの機能どこそこでも使いたいんだけど、といった要望に応えやすいと思ったからです。
詳しくはこちらのサイトが参考になりました。

今回取り上げるのはJWord内でもものすごく似ているサービスでスマホ検索サービスPC検索サービスを取り上げたいと思います。
なんでそのサービスが分かれてるのーと言いたいと思いますが、これには深い歴史があり語ると長くなるのでやめます。

さて、現在JWordのスマホ検索サービスは
jpg1
のような内容で構成されています。
PC検索サービスの方は
jpg2
こんな感じです。

もうこれだけ見ても丸かぶりで、マイクロサービス化を考えるのもわかると思います。
しかし同じ検索連動広告でも
jpg3
と実はA社以外はかぶってなかったりします。

何も考えずにRestful APIでマイクロサービス化してみると
jpg4
検索連動広告のところがマイクロサービスにしては大きすぎるような気もしますが、以外と何も考えなく分割しても良い感じに分かれてくれました。

落とし穴

プログラムを見てみると検索連動広告がもっと複雑な構成だということがわかりました。
いくつか理由はあるのですが大きな部分としては
1.サーバサイドのAPIしか提供されていないものもある
2.ブラウザからのJavascriptでのAPIしか提供されていないものもある
3.HTMLをこちらでいじれない
などです。
特に2に関しては、サーバサイドだけでマイクロサービスを考えていたので完全に盲点でした。

jpg5
あまり良い構成では無いですね。

最終的にはJavascript用のライブラリを入れて
jpg6
のような形になりました。

Javascript用のライブラリを考えていたら、RestfulAPIを使うのであれば、フロントはReactとかを使った方が綺麗にマイクロサービス化できるのではないかと思いました。
jpg7
良いですね!

思いつきでJWordのサービスをマイクロサービス化したら、どんな構成になるだろうと思ってやってみましたがフロントをReactとかに変えて行うとだいぶきれいにまとまることがわかりました。
マイクロサービス化とReactなどのフロント側MVCもだいぶ相性がよさそうでした。

2015-12-22

12/3(木)、PHP7.0.0(正式版)がリリースされました!

はじめまして。JWord holyです。

今回は、PHP7.0.0について話したいと思います。
12/3(木)、PHPはバージョン7.0.0をリリースしました。

PHP7.0.0のリリース内容を一部抜粋すると、

・「PHP 5.6」と比較して2倍以上のパフォーマンス向上

・メモリ使用量の劇的な削減

・64ビットのサポートを実現

などが対応しているそうです。

なので本当に向上しているのか、検証してみようと思います。

検証について

検証については、下記の内容を参考にし、5系の最新バージョン5.6.16と7.0.0の比較を行います。

ループのメモリ使用量と処理速度を比較

実験方法

まず 10 万件の配列を生成します。

これをループで回して、変数に代入します。

この処理を 100 回行い、「最大メモリ使用量との差分値」と「処理時間」をそれぞれ計測します。

 

以下が、サンプルプログラムです。

1. foreach

1.1. 通常パターン

PHP では一番よく使うループ文なので、この計測がベースになります。

1.2. メモリ節約パターン

1.3. 通常パターン(参照渡し)

1.4. メモリ節約パターン(参照渡し)

2. while

2.1. 通常パターン

2.2. メモリ節約パターン

3. for

3.1. 通常パターン

3.2. メモリ節約パターン

検証サーバについて

上記の実験内容を、vmのLinuxサーバを使って、検証を行いました。

OS CentOS release 6.5 (Final)
 model name[プロセッサ名]  Intel(R) Core(TM) i5-4210U CPU @ 1.70GHz
 cpu MHz[プロセッサの動作周波数]  2391.142
 MemTotal[メモリ搭載量]  603576 kB

結果

5.6.16 7.0.0
 No.  ループ文  パターン  メモリ[MB] 処理時間[s] メモリ[MB]  処理時間[s]
 0.0  NOP  13.972  1.9  4.004  0.13
 1.1  foreach  通常  27.961  4.2 8.008  0.67
 1.2  foreach  節約  28.198  5.36  12.012  1.12
 1.3  foreach  通常-参照渡し  27.945  4.77  10.297  0.86
 1.4  foreach  節約-参照渡し  27.946  5.96  10.297  0.84
 2.1  while  通常  28.2  11.32  8.008  2.66
2.2  while  節約  28.052  6.7  8.008  3.2
 3.1  for  通常  27.961  4.4  8.008  0.79
 3.2  for  節約  28.065  3.35  8.008  0.97

 

検証の結果、PHP5.6.16に比べて、格段にパフォーマンスが上がっていることがわかりました。

弊社の業務システムもPHP5系からPHP7にアップデートしたいです。。

 

PHP5系からPHP7にアップデートする際の懸念点。

下記のページはPHP7をリリースで削除したモジュールが書いています。

http://php.net/manual/ja/migration70.removed-exts-sapis.php

・ereg

・mssql

・mysql

・sybase_ct

上記でモジュールを使った関数は無効になっているので、関数の変更をする必要があります。

例として、ereg_replace関数をみると、

http://php.net/manual/ja/function.ereg-replace.php

ereg_replace() は PHP 5.3.0 以降で非推奨になりました。この関数のかわりに preg_replace() を使うことを推奨します。

と記載しています。

なので、ereg_replaceからpreg_replaceに変更して、PHP7.0.0をアップデートする形になります。

アップデートするときは、一部関数の変更を行う必要がありますが、これを対応すれば、処理速度等の向上が期待できるので、遅いなと思っている方は是非やってみてください!!

 

2015-12-17

Photoshopを使って秒速でバナーに枠を付ける方法

こんにちは。GMO MOBILEデザイナーのH.Sです。

日々大量の画像を捌きつつ、センスを養うために常に情報のインプットも必要なデザイナーにとって最も大切なのは、いかに手数を少なく効率的に画像を作るかということだと思います。
私も効率化に効率化を重ね、仕事は短時間で終わらせて、余った時間でこっそり漫画を読んだりゲームをしたりして最新流行のインプットに努めています。嘘です。

そんなわけで今回は今すぐ使えるPhotoshopの小技をご紹介しようと思います。

選択範囲から枠線をつける方法

img1
↑このバナーに秒速で外枠をつけます。
予めツールを選択ツール(M)にしておいて、
1.新規レイヤー作成
2.全選択(Ctrl+A)(⌘+A)
3.右クリック→「境界線を描く」を選択

img2
するとこのようなダイアログが出てくるので、
線の太さと色を好きなように設定します。

すると・・・

img3

このように簡単に外枠を作れます!
所要時間3秒ぐらいでしょうか。

しかしこれでは後で線の太さを調節したいときに少し不便です。
なので私はいつもレイヤースタイルを使って枠線を描いています。

レイヤースタイルで枠線をつける方法

1.新規レイヤー作成
2.バケツツールで色を流しこむ
(透明レイヤーだとスタイルが反映されないため)
img4
3.塗りを0%にする

img5
4.あとはレイヤースタイル(境界線)を好きなように設定します

img6
完成です!

所要時間5秒ぐらいでしょうか。
選択範囲から作る方法に比べると若干時間はかかるものの、
後から修正したり、気に入ったスタイルを使い回すことが可能なため、
長い目で見るとこちらの方法が効率的かと思います。

このブログを見ている数少ないデザイナーの皆さん、ぜひお試しください。