日本初の開発者とのミートアップを開催しました

SquareではこれまでWeb APIを提供してこなかったのですが、5月にEコマースや従業員APIなどを提供開始したのに合わせて日本でも開発者とのつながりを強化しようとしています。

その一つが今回のミートアップ、[Square Developer's meetup](https://square.connpass.com/event/62488/)になります。今回、USのエヴァンジェリストであるトリスタン氏が来日するのに合わせて 21cafe にて開催されました。

## セッションは3つ

今回は3つのセッションを用意しました。まず一つ目はSquare全般について松本さんが発表しました。

[![](https://speakerd.s3.amazonaws.com/presentations/fce7a23ffa614ba5871a85d5aaae27c4/slide_2.jpg)](https://speakerdeck.com/squarebizdev/square-meetup-deck-2017-dot-08-dot-03)

主にSquareの成り立ちや、今後開発者とどういう思いで繋がっていきたいかという話でした。Squareの創設者（ジム・マッケルビー氏）がガラス職人であり、作った作品が現金を持っていない人に対して売れずに機会損失してしまった経験がベースになっているとのことです。単に決済を提供するだけでなく、新しいビジネスチャンスを提供するところにSquareはフォーカスしています。

決済を皮切りとして、現在は従業員APIや商品API、タイムカードAPIなど事業を回す機能についても拡充させています。さらに融資サービスも提供し、ビジネスを加速化させる部分についても踏み込んでいます。

## Square APIについて

ここからトリスタン氏が前半後半に分けてSquareの開発者向け情報を提供しました。

[![](https://speakerd.s3.amazonaws.com/presentations/01930924120546128f55d9d508cf554a/slide_17.jpg)](https://speakerdeck.com/squarebizdev/square-meetup-deck-2017-dot-08-dot-03)


Squareでは主に決済用APIとして、EコマースAPIとPOS APIがあります。EコマースAPIはWebサイト向けの機能で、POS APIはSquareの提供するPOSレジアプリと連携するスマートフォンアプリ向けのAPIです。

EコマースAPIはJavaScriptタグを埋め込むことでクレジットカード番号をSquareのサーバに飛ばし、一時的なトークン（nonce）に変換します。Webサイト側ではそのnonceと決済情報を送信し、決済処理を行います。

決済についてはCARD ON FILEという仕組みにより、定期購読にも対応できます。数日後の決済と言った形もできます。

さらにWeb決済を楽にできるものとしてSquare Checkoutという仕組みもあります。これはWebサイト側にはリンクだけ用意し、実際の決済や住所入力をすべてSquare側のサイトで行うものです。PayPalなどで提供されているものに近いです。

POS APIはiOS/Android SDKはもちろん、WebブラウザからでもPOSレジアプリが呼び出せるようになっています。後は決済完了後にコールバックされる仕組みです。キオスクアプリなど、UIを自分でカスタマイズして決済だけSquareで行うと言った使い方ができます。

当たり前ですが、Squareではセキュリティを十分に考慮しています。機械学習を用いた不正利用検出であったり、不正利用された側の店舗を損害保証するチャージバックプロテクションという仕組みも用意されています。セキュリティとしては世界標準となっているPCI互換となっています。

## Square SDKについて

Squareでは多数の言語に対してSDKを提供しています。これらは手でコーディングしているのではなく、自動生成によって作られています。後半のスライドではその運用フローについて紹介しています。

[![thumbnail](//image.slidesharecdn.com/sdksthegoodthebadtheuglycopy-japan-170821204831/95/slide-1-1024.jpg)](https://www.slideshare.net/tristansokol/sdks-the-good-the-bad-the-ugly-japan)



SDKを提供するのはWeb APIを使ってもらう上で大事な施策になります。開発者はREST APIを直接コールするのではなく、外部のパッケージマネージャからSDKをダウンロードして使いたがります。また、各プログラミング言語で同じ機能、使い勝手が提供されている必要があります。

やり方の一つとしてコミュニティに開発してもらうという方法があります。これは機能がすべて実装されていなかったり（作った人が欲しい機能だけを実装するため）、品質が統一されないという問題があります。開発に飽きてしまうとAPIの更新に追従してくれなくなるでしょう。

もう一つは専属の人を雇う方法があります。これは各言語毎に人を雇う必要があり、とても大変です。ドキュメントも整備しなければならず、現実的ではありません。そこでSquare社が選択したのは自動生成という道です。

フォーマットとしてはOpen API Specification（通称Swagger）が使われています。このSwaggerファイル自身、社内のAPI同士で使われているプロトコルのProtocol Bufferの定義ファイルをベースとして自動生成しています。つまりProtocol Bufferを編集するとSwagger.jsonが更新され、それを使って各種SDKが更新される仕組みです。なお、Protocol Bufferを使っていますが、外部公開用にはAPI Gatewayを使ってJSONで使えるようにしています。

この時使っているのがコミュニティが開発している[Swagger Codegen](https://swagger.io/swagger-codegen/)になります。Swagger.jsonをベースにテンプレートファイルを使ってSDKやライブラリを自動生成してくれるソフトウェアになります。これとTravis CIを組み合わせることによって、GitHubへのSwagger.jsonの編集プッシュからSDKの生成と更新が自動的に行われるようになっています。

なお、この話はミートアップだけでなく DevRelCon Tokyo 2017 の中でも発表しています。その時の様子は下記の動画でご覧ください。

[![](http://img.youtube.com/vi/3THQ8FFU0y0/0.jpg)](http://www.youtube.com/watch?v=3THQ8FFU0y0)

----

セッションの後は懇親会、そして二次会が行われました。多数の方に残っていただき、決済に対する様々な要望やSquareにかける思いを聞くことができました。

なお、次回はSquareの決済系APIを3つ体験するハンズオンを開催します。ご興味があれば[ぜひご参加ください](https://square.connpass.com/event/65737/)！

今後もミートアップを定期的に行っていきますので、ぜひ興味のあるテーマがありましたらご参加ください！

[Square - connpass](https://square.connpass.com/)