« 2014年6月 | メイン | 2014年8月 »

2014年7月

2014年7月29日 (火)

Auth0で簡単ソーシャルログイン

先日からぼちぼちと作っているHerokuサンプルですが、新たにソーシャルログインのサンプルを追加しました。(ちなみにPDF出力のサンプルも追加されています。)

http://flect-heroku-sample.herokuapp.com/auth

このサンプル。Auth0というAddonを使っているんですが機能的にはかなりの優れモノです。。

どういうシロモノであるかはサンプルページを見ていただければわかるはず!(^^;
というか、全くわからないようなら説明の書き直しも考えなければならないのですが。。。詳しく説明しようとするならOAuthの説明からする羽目になりそうでなかなかバランスが難しいです。(--
知ってる人からすればそんな説明冗長でしかないわけですし。

OAuthはまだしも、JWT(Json Web Token)については知らない人の方が多そうですがこれも必要最小限の説明にとどめています。(実際のところ小西の理解もこの程度です。)

ご意見ご感想等あれば適当にTweetしてくれれば誰か(?)が拾います。(^^;


★ Auth0の良いところ

さて、ここではサンプルサイトでは書かなかったAuth0の評価について少し書いておきたいと思います。

Auth0の扱っている課題はソーシャルログインとシングルサインオンな訳ですがその課題に対するソリューションのセンスはとても良いです。

ざっと良いと思う点をあげると

  • ユーザーのログイン履歴をダッシュボードで確認できるところ
  • メールアドレス+パスワードでのログインをAuth0側の管理DBでサポートしており、なおかつサインアップ時のメール確認フローまで備えているところ
  • 対応ソーシャルアプリ30個以上
  • テスト環境ではソーシャルアプリ側にOAuthアプリの登録不要
  • 周辺機能(Loginダイアログ、LDAP Connector等)の多くがオープンソース


等があります。(実際に列挙してみると思ってたよりたくさんありました。)


コンシューマアプリではFacebookやTwitterでのログインはもはや当たり前になった感がありますが、これまで個別に実装・管理しなければならなかったソーシャル連携を一元化できるのは大きなメリットです。

ソーシャルのみならずAD/LDAP、Windows Azure AD、SAMLなどもサポートしており、認証関連の処理は全部まかせとけ!的な気概が感じられるところも良いです。(^^;

あと、地味に嬉しかったのはソーシャルアプリ側のOAuthアプリ登録について、こことここだけ設定すればOKという最低限の設定方法のヘルプがスナップショット付きで説明されているのがメチャメチャ助かりました。
FacebookやGoogleのOAuthアプリ設定、たまにしかやらないから見る度に画面変わっててとまどうんですよね。。。(^^;(ググっても古い画面の情報が引っ掛かることが多いし)


★ Auth0の課題

一方でこれどうなんよ?と思う点もいくつかあります。

設定系のドキュメントが充実している一方で参照系のダッシュボードの説明がほとんどないというのがまず一点ですが、一番どうかと思うのはユーザの詳細画面で見られるユーザ情報が詳しすぎるという点です。

ユーザ画面では一切説明なく色々な情報が列挙されているんですが、Salesforceアカウントでログインしたユーザ情報を眺めていた時に


あれ?これSalesforceのSessionIDじゃね?



という項目があったので、試しにそれをSessionIdとしてSalesforceのAPIにアクセスしてみたらできてしまったという。。。。(--

これはアカンだろ!!!

もちろん、これをするためにはSalesforce側のOAuthアプリの設定でAPIアクセスを許可しておく必要がありますが、逆に言えばAuth0を使う場合絶対にソーシャルアプリ側から提供する権限を最低限(ユーザ情報の参照のみ)にしておく必要があります。

特定のソーシャル連携を密に行うアプリの場合は複数ソーシャルをサポートする必要はないわけで、Auth0の目的からしたらこれでも問題ないのかもしれませんが、こんなSensitiveな情報は隠しておいて欲しい。。。(--

また、ユーザ画面に「Sign in as User」というボタンがあるのもかなり衝撃的です。

え、このユーザとしてログインする。ってことが一撃でできるってこと???



と思って、これまたアリえねーと思いつつ試してみたところ、


An error ocurred. "impersonator_id is a required parameter."



というエラーになりました。(そして、これに対する説明はどこを探してもありません。)
エラーメッセージから推測するに代理ログインする人(impersonator。他者になり済ます人の意)のIDを明示する必要があって誰が代理ログインしたかはわかるようにはなっているのかな?

であればギリギリ。。。
ん~、便利かもしれないけどやっぱりちょっとデンジャラスな気が。。。(--


□□□□
つらつらと書いてきましたが、まぁこんな感じです。(^^;

個人的な評価としては永続的なサービスではあんまり使いたくないけど、短期のキャンペーンサイトなどではむしろ積極的に使いたいと思いました。

ログインはそこがこけると全機能が停止するクリティカルポイントなので信頼性(事業の継続性や障害時の対応)の心配もあって永続的なサービスで使うのはちょっと怖い気がするんですよね。。。


★ 次回予告

今回はAuth0のソーシャルログイン機能を中心にお話ししましたが、LDAP連携についても試しているのでそのお話をしようかと。
(ローカルにLDAPまたはActive Directoryが必要になるのでサンプルサイトには載りません。)

2014年7月22日 (火)

Herokuのサンプル集始めました。

なんかいつの間にかブログタイトル変わってるなぁ。。。
まぁ8割くらいはHeroku関連のこと書いてる良いんだけど。(^^;

さて、先週金曜日は昼間はAWS Summit、夜はHerokuのBiz Meetup #2となかなか忙しい一日でした。

AWS Summitはなぁ。。。
個人的にどストライクゾーンのテンションが上がるような発表がなかったのはしょうがないとして。
とりあえず人多すぎ。。。(--

どこの花火大会かと思ったよ。。。

登録者数も1万人を越えてたらしいし次回はもっと大きな箱でやって欲しいものです。

★ Heroku Biz Meetup

もう一方のHeroku Biz Meetup。

これはHeroku関連のイベントとはいえビジネスよりの集会ということで当初は行く気なかったんですが、弊社村田が登壇するということで賑やかしのために参加することにしました。

その発表資料がこちら

http://www.slideshare.net/muritaiga3/heroku-37234972

ほほぅ。。。
なんと、8月1日からHeroku基礎というセミナーが始まるらしいですよ!
さらに、プライペートの一社研修もあるらしいですよ!
要するに、Heroku触ったことない人でもこれを受ければなんとなくその日からHerokuでアプリを公開できるらしいですよ!

ということでこれからHerokuを始める人は受けてみると良いんじゃないかと思います。(^^;

★ Heroku サンプル集

ところでこの資料、最後の方にさらっととても重要なことが書かれています

それはこのURLです。

http://flect-heroku-sample.herokuapp.com/

なんと、Herokuで各種処理を行うためのサンプルコード集だったり。
(現時点ではソース未公開です。ちなみに言語はJava。)

とりあえず10個ということで適当にネタを選んで集中開発しましたが、ネタは他にもあるのでおいおい追加されるはずです。直近では先に紹介したHyPDFのサンプルが待機中。(^^;

開発方針としては

  • Heroku初心者向け
  • Addonの使い方の紹介
  • Heroku特有の処理の紹介


というような感じで考えてますが、場合によってはHerokuとほとんど関係ないようなサンプルも含めても良いかと思ってはいます。(FacebookやTwitterのOAuth連携とか。環境変数にAPIKeyを設定する以外は一般的な話でしかないんですが、そこで躓くような層がターゲットということでもあります。)

追加のトリガとしてはこのブログ連動でのネタやセミナーでの質問が大きな駆動力になると思いますが、こういうサンプルが欲しいと言う要望があれば、@flect_jpにメンションいただければそれもスタックしますよ。(^^;;;

あ、AddonベンダーさんからのうちのAddonを追加してくれ!というお話もWelcomeです。FLECTまで使い方の説明をしに来ていただけるなら、かなり高い確率で実装できるのではないかと。(^^;;;


□□□□
ちなみにソースコード。
まだ開発途中であるということと社内にソースコードはセミナーの特典にしてはどうかという意見のあることが現在非公開の理由です。

わかる人はソースなくても説明だけ見ればわかると思うのでそれでも良いかと思ったりもしますが。。。。

まぁ最終的にどうなるかは未定です。(^^;;;

2014年7月15日 (火)

Herokuで帳票(PDF)

ふと思い立ってPDF出力のAddonの調査していたら予想外に大変な便利Addonにぶちあたりました(^^;
多分これは今年一番のお役立ちエントリです。一度でもPDF出力に悩まされたことのある人なら読まないと後悔するレベル(かも)


★HerokuのPDF Addon

Addonを探すとDocRaptorHyPDFという二つのAddonが見つかります。
どちらもHTMLを渡せばそれをPDFに変換してくれるというサービスのようです。

多分、DocRaptorの方が有名なので、最初こちらから試そうと思ったんですが。。。
料金プランを見てビックリ

  • Starter(Free) - 月に5件まで
  • Basic($19) - 月に125件まで
  • Professional($37) - 月に325件まで
  • Premium($95) - 月に1250件まで
  • Max($189) - 月に5000件まで


無料プランがあるのは良いんだけど、月に5件ってなんだよ。。。(--
そんなのテストしてたら一瞬で消費するっちゅーの。

一番上のプランでも月に5000件、一日換算だと166件しか出せないって。。。
なんでこんな料金プランにしてるんだろ。。。

一方のHyPDFの料金プランは以下

  • Nano(Free) - 日に5件まで
  • Milli($15) - 日に15件まで
  • Kilo($30) - 日に45件まで
  • Mega($60) - 日に135件まで
  • Giga($120) - 無制限


安っ!
制限のリセットも1日単位なので、ちょっと試すだけでもこちらの方が扱いやすそうです。
何より$120で使い放題というのは太っ腹。(^^;

ていうか、あんまり商売っ気がないのかも。
ブラウザで「www.hypdf.com」にアクセスすると、いきなりHeroku AddonsのページにリダイレクトされるのでどうもHyPDF単体ではサービス提供しておらず、Heroku Addonとしてしか提供されてないみたいなんですよね。
そういうのもアリなのか。。。(^^;

そんなこんなでまずはHyPDFから試してみることにしました。

(後から気がつきましたがDocRaptorにもHyPDFにもテストモードがあって、その場合は制限回数は更新されません。と言ってもDocRaptorの方はもはや試していませんが。。。)


★HyPDFの使い方

https://devcenter.heroku.com/articles/hypdf#api-reference

基本的な使い方としてはJSONで出力対象のHTMLと各種オプションを渡すだけです。
そうするとレスポンスのHTTPボディでPDFのバイナリが返ってきます。
HTMLの渡し方には文字列でHTMLを丸ごと渡す方法と、URLで外部サイトへの参照を渡す方法の両方がサポートされています。

オプションとしては

  • ヘッダ、フッタ
  • 上下左右の余白
  • グレイスケール
  • コールバックURL(指定した場合PDF生成が非同期となり生成完了時にこのURLがキックされる)
  • 生成したPDFをS3にアップロードするためのオプション情報


などが指定できます。
何回か試したところ、PDF生成には最大10秒くらいかかることがあったのでHerokuから使う場合は非同期にした方が良いかも。

使い方は難しくないですけど唯一の注意点はHyPDFの使っている証明書がStartCom(StartSSL)の証明書だという点です。
知らなかったんですがこの証明書、デフォルトではOracle JDKのキーストアには入ってないんですね。なので、接続するためには自分で証明書をインストールするかHostNameの検証をスキップするかする必要があります。
(この辺を調べてる過程でさらに憂鬱な衝撃の事実を知ったんだけど、それはまた別に書きます。)

一応JavaのAPIラッパーも作ったのでサクッと試したい場合は使ってみてください。

https://github.com/shunjikonishi/hypdf4j

ちなみにHeroku上ではOpenJDKだからなのか、キーストアをHerokuが独自で用意しているからかわかりませんが証明書のインストールは不要です。

ちなみにちなみにPDF生成以外にも

  • PDFのプロパティ情報取得(pdfinfo)
  • PDFのテキスト取得(pdftotext)
  • PDFの連結(pdfunite)
  • 複数ページのPDFから指定ページの抜き出し(pdfextract)


といったことが(APIラッパーでも)できますが、多分そんなに使うことはないです。(^^;


★PDFの日本語出力は必ずはまることになっている

そして、とりあえず試しに作ってみたPDFがこんな。

Hypdf1


。。。
あー、うん。。。。この豆腐見慣れてるなぁ。。。(--


思い出したけど、自力でPDF生成を試みた時も日本語フォントで挫折したんだった。。。。
PDFを生成するホストに日本語フォントをインストールすれば出力することはできるんだけど、ライセンス関係がどうなっているのかがイマイチ確信が持てなくて結局棚上げにしたような気が。

これはアカンかもなぁ。。。と思いつつ、一応サポートに日本語出ないんだけどと投げてみました。
で、その間にDocRaptorの方も試してみるかとドキュメントを読んでたらなんと20分後には返事が来ました。

早っ!!


You can use any custom font by including it with @font-face in your styles:

@font-face {
    font-family: MyFont;
    src: url(www.somecdn.com/my_font.ttf);
}

body {
    font-family: MyFont;
}

 

な・る・ほ・ど!!!
ここでWebフォントなのか!!!!

Webフォントって図形文字や凝ったデザインの文字を使う場合に使用するものというイメージでしたが、探してみるとIPAフォントとか標準的なものもあるんですね。

IPAフォントを組み込んで出力してみると日本語も正しく出力されるようになりました。素晴らしい!(^^v

PDFのフォント問題って世界中の開発者が頭を抱えてる問題のような気がしますけど、これはかなり見事な解決方法だと思います。
心の底から感心しました。


★excel2canvasと組み合わせてみる

ところで僕はexcel2canvasというHTMLのCanvasを使ってExcelをブラウザ上で表示するというライブラリを作ってたりするんですが、それとHyPDFを組み合わせた場合どうなるかということが気になってちょっと試してみました。

Canvasへの描画はちょっと厳しいんじゃないかと事前には思ってたんですが、試してみると結果はこんな感じ

Hypdf2




凄っ!!!
思った以上にイケてるやんけ!

何パターンか試してみたところ、HyPDFはHTMLの横幅に合わせてスケールを調整するらしく、幅がExcelの標準レイアウトで1ページに収まらないようなものはレイアウトが崩れますが、印刷前提でレイアウトが調整されているようなExcelファイルはだいたい良い感じに出力されました。(^^v

今時のExcelはファイルをHTML形式で保存できたりもしますが、Webフォントへの変更とかそれなりに手間だったりもするので、これはこれでアリなソリューションだと思います。

勢い余ってデモサイトも作ってみたのでご興味ある方はお試しあれ。

http://hypdf-excel.herokuapp.com/

ていうか、これこのままHerokuアドオン化しても需要ありそうじゃね?(^^;

2014年7月 8日 (火)

HerokuのWebSocketがGA

になったようです。

https://blog.heroku.com/archives/2014/7/7/websockets_now_ga

めでたい。(^^v

今後は「heroku labs:enable websockets」としなくても標準でWebSocketが使えます。

Router自体が新しいものに置き換わるようで、上記のアナウンスブログからリンクされているImproved Routerのドキュメントはなかなか読みごたえあります。

Routingや接続過多の場合のキューイング方法などについても詳しく説明されており、高負荷なアプリケーションを開発している人には必読のドキュメントだと思います。

要約しようかと思ったけど、100 Continueのあたりがよくわからなかったので止めた。(^^;

ほとんどは前にもどこかで書いたことのある話だったし。

一個だけ、へぇ、と思ったのはRoutingのところにあったこの一文。

Inbound requests are received by a load balancer that offers HTTP and SSL termination. From here they are passed directly to a set of routers.

SSL terminationをするLoad Balancerと各Dynoにリクエストを割り振るRouterは別モノだって。少なくともssl:endpointを有効にした場合はそうなっているっぽいと思ってたけど、ちゃんと文書で読んだのは初めてかも。

2014年7月 4日 (金)

FlyDataのセミナーに行ってきた

昨日は午後から半日FlyDataのセミナに行ってきました。
体調も微妙だったので正直半日セミナは辛いなぁと思ってたんですが、なかなかどうしてかなりアタリのセミナでした。
RedshiftもFlyDataも2、3の飛ばし記事を斜め読みしただけのエンジニアがそれらをなんとなくわかった気になるには十分な内容でした。


★ Redshiftとは

Amazonが提供するビッグデータのエンジンです。
ローンチは2013年2月。既に60以上の新機能追加が行われており現在Amazonがもっとも気合を入れて作りこんでいるプロダクトと言っても良いと思います。
その特徴としては以下があげられます。

  • 速い
  • 安い
  • SQL互換


ビッグデータの分野ではHadoopが有名ですが、後発なだけあってそれよりも速度、価格の両面で大きな優位があります。
また、検索インターフェースがPostgreSQL互換なので使いなれたSQLがそのまま使えることも魅力です。
PostgreSQL互換なので既存のBIツールの多くがそのままRedshiftでも使うことができます。

技術的にはカラムナデータベース(列指向DB)の上に超並列処理(MPP)アーキテクチャと呼ばれる技術が採用されており、ノードを追加すると線形にパフォーマンスが向上するという特徴があります。

アーキテクチャはビッグデータに特化しており、数十GB程度までのデータであればRedshiftよりも高速に捌くプロダクトはたくさんあります。
ですが、それらのプロダクトではデータ量がテラバイト、ペタバイト単位になった場合にパフォーマンスが指数関数的に劣化し、それに対する解決策がほとんどないのに対しRedshiftはノードを追加するだけで必要なパフォーマンスを得ることができます。

検索性能のトレードオフとして更新性能(特に1行単位のデータ更新)は極めて遅いです。


★ FlyDataとは

Redshiftの現状の機能と新機能追加の力配分は大きく検索系の処理に傾けられています。言い換えればデータ投入の部分はあんまり使いやすくないにも関わらず、それほど大きな改修は行われていません。

そこを補完するのがFlyDataです。
FlyDataはRedshiftへのデータ投入のインターフェースとして以下の二つを提供します。

  • JSONログ
  • RDB(MySQL)とのレプリケーション


JSONについては最近Redshift本体にも取り込み機能が追加されたようですが、使い勝手の面ではまだまだFlyDataに優位があるようです。

また、Redshiftはメンテナンスのために定期的に更新処理が停止されるらしいんですが、その間の更新データのバッファリングもFlyDataがよしなにやってくれます。

□□□□
というのが、現状の小西の理解(THE にわか知識)ですが、多分そんなに大きくは外してないと思います。(^^;;;


★ 特別講演: モバイル&クラウドでビッグデータをイノベーション基盤に


今回のセミナでは最後に特別講演としてNTTドコモ 栄藤氏によるビッグデータ活用に関する講演が行われました。

Redshift、FlyDataに関する講演が知りたいと思っていたことを知れたという意味で満足度が高かったのに対し、この講演は今まで考えもしなかったような視点に気がつかされたという意味で大変有意義でした。

この日の公演は7月17日のAWS Summitで栄藤氏が行う話の予告編的な位置づけだったようで、スライド等は公開されていないようですが非常にエキサイティングな内容でした。
本講演を聞きに行けないのが無念です。(^^;

その要旨を一言でまとめると

ビッグデータの解析は莫大なデータの中から平均的なトレンドを発見するために行うものではない。

というものです。
そういうことがやりたいのであれば、全データを解析する必要はなくサンプリング調査で十分なんだそうです。実際、精度もほとんど変わりません。

そうではなくて、ビッグデータの意義は

莫大なデータの中から異常なトレンドをすくい上げることにある。

というお話が深く心に刻まれました。

例えば、Twitterの膨大なツィートの中である特定の1時間だけ「docomo」「携帯」「スマホ」みたいな単語を含むツィートが極端に多かったとします。

そのデータからdocomoのサーバで障害が発生していた時間がほぼ特定できるそうです。(^^;;;(もちろんauやsoftbankでも同じです。)

これに位置情報も加われば、地理的時間的な異常を検出できるので確かに今までとは違う世界が開けるかもしれません。

かえすがえすAWS Summitに申し込んでなかったのは不覚です。。。。(--

採用情報

株式会社フレクトでは、事業拡大のため、
Salesforce/Force.comのアプリケーション
開発
HerokuやAWSなどのクラウドプラッ
トフォーム上でのWebアプリケーション開発

エンジニア、マネージャーを募集中です。

未経験でも、これからクラウドをやってみた
い方、是非ご応募下さい。

フレクト採用ページへ

会社紹介

株式会社フレクトは、
認定コンサルタント
認定上級デベロッパー
認定デベロッパー
が在籍している、
セールスフォースパートナーです。
heroku partnersにも登録されています。
herokuパートナー
株式会社フレクトのSalesforce/Force.com
導入支援サービス
弊社の認定プロフェッショナルが支援致します。
・Visualforce/Apexによるアプリ開発
・Salesforceと連携するWebアプリ開発
も承っております。
セールスフォースご検討の際は、
お気軽にお問合せください。
Powered by Six Apart