dskst's diary

Life and Tech Blog

『Yahoo! JAPAN MEET UP』に参加してきた

f:id:dskst9:20170219011321j:plain

Yahoo! JAPAN 紀尾井町オフィスにて『Yahoo! JAPAN MEET UP』に参加してきた。
ダイナミックな技術というよりも、サービスの向上の為にリファクタリングや開発環境の改善に、たくさんの労力をかけていたというのが印象的。

yj-meetup.connpass.com ※資料は後日 connpass で公開されると思われる。

  • Yahoo!ショッピングの技術のお話
    • ドキュメンタリー「eコマース革命」と「いい買い物の日」
      • eコマース革命
    • いい買い物の日
      • いい買い物の日とは?
      • 2015年
      • 2016年
    • 技術の方針決定
      • 大事なこと
      • 利用技術
    • これからの技術チャレンジ
    • 最後に
  • ゼロからわかるヤフオク
  • 進化を求めるヤフオク!アプリ開発
    • 最新情報のキャッチ方法
    • Rollout.io
    • アプリで起きていた課題
    • ヤフオクiOSチームが実践する新しい開発手法について
  • ショッピングのデータプラットフォームとデータ利用活用
    • 旧データフロー
    • 新データフロー
    • データ分析
    • 今後

Yahoo!ショッピングの技術のお話

ドキュメンタリー「eコマース革命」と「いい買い物の日」

eコマース革命

eコマース革命前のヤフーショッピングはひどかったとのこと。
2012年ににかけて前年割れをしてサービス存続の危機を迎えていたらしい。

そこで! eコマース革命

  • 毎月の出店料:無料
  • 売上ロイヤリティ:無料

その結果、

  • 商品数が3倍、店舗数16倍、140%成長
  • サーバも7000−8000台
  • エンジニアが倍以上
続きを読む

認定スクラムマスター(CSM)研修を振り返る

認定スクラムマスター研修

認定スクラムマスター研修を受けてきた。
研修を受けて、心構え、世界観が大きく変わった。
講師の ebacky さん ありがとうございます。とても刺激的で楽しかったです。

今後スクラムマスターとして活躍できるかは自分次第なので、
自身の復習のために学んだことをまとめていこうと思う。

続きを読む

格安SIMを使ってみた評価(mineo)

格安SIMを半年使ってみた、

結論、まだ大手キャリアを使っている人は今すぐ格安SIMに変えたほうがいい。

f:id:dskst9:20161125235106p:plain

格安SIMをすすめる理由

何よりも安い。
そして、通信は安定しているし、全く不満がない。
正直、大手キャリアを使う理由が全く見つからない。

2年縛りがある?そんなもの2ヶ月で元が取れる。
端末代金分割割引が残ってる?そんなもの10ヶ月で元が取れる。

繰り返しだが、大手キャリアと使っている人は今すぐ変えた方がいい。
私の場合、月額5,000円くらいの節約になった。

大手キャリア:6,500 ~ 7,000円/月
格安SIM:1,625円/月(電話番号を捨てれば980円とかになる)

大手キャリアはポイントを還元とか言っているが、月額5,000円の現金還元には到底勝てない。

格安SIMの選定

色々調べたが、私は mineo に落ち着いた。
正直、大手キャリアから脱却できればどこに変えてもいいと思っているが、選定するなら下記に重点を置くのがいいと思った。

  • 最新OSへの対応スピード
    格安SIMでは最新OSが出ても動作担保がすぐに取られない。
    アップデートして使えなくなったということは殆どないと思うが、動作確認は早いほうがいい。
  • 実測での通信速度と安定さ
    ググれば色々な情報がでてくる。嘘か本当かわからない情報もあるのでここでは深く言及しないが、色んな口コミを見てみたほうがいい。
  • すぐに辞めても違約金取られない
  • 挑戦をしている
    競争の激しい格安SIM業界で生き残るために、本当に価値あるサービスを、チャレンジをしている会社がいいだろう。
    フットワークが軽いほうが競争に追従していくので。

mineo に決めた理由

  • ユーザー掲示板で最新OSでの動作確認結果がすぐに投稿される
    この掲示板非常に便利で、ちょっと困ったことは検索すると大抵のことは解決する。
  • au回線、docomo回線が選択できる
  • (当初)050 の電話番号が無料で使えた
    2017年から月額とられるが、無料050を使えたのはでかい。050がいらなければお金はかからない。
  • フリータンクという無料パケットが便利すぎる
    フリータンクという場所に余ったパケットを入れることができ、引き出すことができる。
    それを全mineoユーザーで共有しているので、実質1GBが毎月無料で使うことも可能。ちょっと今月足りないってときは重宝する。
  • なんか色々やっている&やろうとしている
    前述のフリータンクなどチャレンジをしている、その姿勢が素敵!

私は au系 iPhone 6S、妻が auiPhone 5S で使っているが、問題なく使用可能。
妻は変更した当初、なぜか圏外なることがあったが、掲示板に載っていたおまじないをしたら治った。
iPhone 5S はどの格安SIMでも不安定らしいが、おまじないの後は約半年問題なく使えている。

mineo を使いたい人は、下記で申し込むとAmazonギフト券1000円がもらえるのでどうぞ。私ももらえる(・∀・)
mineo.jp

さいごに

格安SIMは全く問題なく、安く使えてますよ!というのを伝えたかったので、急に格安SIMの記事を書いてみた。
まだ大手キャリアを使っている人がいっぱいいるので、そんな人が格安SIMに乗り換えるきっかけになればいいなと。

Google Play/iTunes Connect で有料アプリ販売のための口座登録方法(2016年10月版)

f:id:dskst9:20161123213044j:plain

Google Play と App Store で有料アプリ(アプリ内課金を含む)を販売するまで、何をしたらいいのか。というのをまとめておく。

Google Play

Googleはそんなに障壁はなく設定が可能。

  1. Google Play Developer Console にて販売アカウントのセットアップをする
  2. Google Payment Center (Payment Merchant Center?) でお支払い方法に口座情報を登録する
  3. 即座に有料アプリ販売は可能になる(以下、収益受取のために対応必要)
  4. 3営業日ほどで Google から登録した口座にデポジットが入金される(1$未満)
  5. Google Payment Center にて入金されたデポジットの金額を入力する
  6. 支払口座が有効になる

デポジットはどうするの?

6のデポジットで返却するの?どうしたらいいの?というのをGoogleに問い合わせたら、以下回答が。返却は不要とのこと。

Googleからのテストデポジットは、お客様の売上が確実にお客様の銀行口座に振り込まれるよう、お客様がMerchant Centerにご入力された銀行口座情報にお間違いがないかを確認するために実施しております。テストデポジットの金額はGoogleへ払い戻す必要はございません。

参考記事

https://support.google.com/payments/merchant/checklist/6012413?hl=ja https://support.google.com/googleplay/android-developer/#topic=3452890 https://support.google.com/googleplay/android-developer/answer/140504?hl=ja https://support.google.com/googleplay/android-developer/answer/3092739?hl=ja https://support.google.com/payments/merchant/answer/1619772?hl=ja

スポンサーリンク

iTunes Connect (App Store)

Tax Infomation がわかりずらい。2週間あれば有料アプリ販売はできるだろう。

  1. iTunes Connect より Paid Applications Agreement に同意する
  2. Contact Information を登録する
  3. 会社住所を英語で登録
  4. Bank Info を登録する
    口座番号、口座名義、口座種類を入力する
  5. Tax Information を登録する
  6. Part 1: Identification of Beneficial owner
    • 3.Chapter 3 Status(entity type): Corporationなと適宜選択
    • 7.Mailing address: チェック
    • 8.U.S. taxpayer identification number (TIN), if required: 何も記載しない(後述の注意参照)
    • 9b.Forelgn TIN: 空欄
    • 10.Reference Number(s): 空欄
  7. Part 3
    • 14.I certify that: a をチェック
    • 15.Special rates and Conditions: チェックしない

EINって入力不要なの?

Tax Infomation はEINに"000000000"を入れるという情報もあるが、空欄でよい。 日本で事業をしているが"000000000"を入れる必要があるのか問い合わせると、以下回答がきた。

Thank you for your email. Kindly refer to “Tips for Completing W-8” and the IRS instructions within iTunes Connect prior to completing the form. Since every company’s situation is unique, it is advised that you speak with your tax professional for assistance.

Under our current model, application sales by non-U.S. developers on the App Store are not subject to U.S. tax withholding or reporting. Therefore, completion of Part III - Claim of Tax Treaty Benefits, is not required in order to certify your foreign status. In addition, you are not required to provide a U.S. taxpayer identification number (TIN) in Part I (line 8) when when certifying foreign status. Please note our system does require you to the specify the type of income your are receiving through the App Store on line 10 (W-8BEN) or line 15 (W-8BEN-E).

参考記事

http://d.hatena.ne.jp/shunsuk/20090522/1242997423 http://crunchtimer.jp/blog/technology/administration/1439/ https://origin-discussions-jp.apple.com/thread/10173991?start=0&tstart=0 http://blog.syuhari.jp/archives/1228 http://kentaro-shimizu.com/lecture/iphone/step4.html http://blog.kishikawakatsumi.com/entry/20090511/1242010376

その他

決済方法と支払先

少し経理的なお話も。
それぞれの手数料だけならいいのだが、 リバースチャージ課税なるものが存在する。
Apple は国内企業間の取引になるので、対象にはならないが Google はこの対象になるので注意が必要だ。

決済方法 決済手数料 手数料支払先 リバースチャージ課税対象
Google Play 販売価格(税込) * 30% Google Asia Pacific Limited(海外)
App Store 販売価格(税込) * 30% iTunes株式会社(国内) ×

リバースチャージ課税の適用条件は、ややこしいが下記にあるようにあまり対象になることはないようだ。

一般課税による申告で課税売上割合が95%未満である場合にのみ適用される

リバースチャージ方式とは?消費税法改正で課税方式が変わった!|MFクラウド 公式ブログ

入金サイクル

さいごに

有料アプリの販売設定は面倒なことが多く感じる。
1ヶ月くらい時間に余裕を持って設定を進めていくようにしないと、意外なところでハマったりするので、対応予定の方は早めにやってしまうのをおすすめする。

AWS/Kinesis + API Gateway + Lambda + DynamoDB を使ってみた

はじめに

サーバレスアーキテクチャだ!と興奮しながら Kinesis, API Gateway, Lamda,DynamoDB を使ったシステムを作ったお話。
細かい設定方法は要点毎にググった方が早いと思うので、Tipsを中心に。

本構成がだれかの役に立てば幸いです。

どんなシステムか

ざっくりと、下記のような感じ。

  1. デバイスからデータを登録したい
  2. 並列でデータを登録したい(将来的に1000req/sec くらい)
  3. 登録したデータをWEBAPIで取得したい
  4. サーバ費用はお安く

要するに、

大量のデータを同時に登録できて、ついでに取得できるAPIも作ってよ。
もひとつついでに、サーバを新しく立てたくないし、保守もしたくないよ。

ってこと。

こんな要件を依頼された方はこの記事が参考になるかもしれない。

どんな構成か

f:id:dskst9:20160716214228p:plain

データ登録は

Kinesis -> Lambda -> DynaoDB

  1. Kinesis Stream にデータ登録
  2. Lambda で Kinesis からデータ取得
  3. 取得データを Lambda から DyanamoDB へ登録

データ取得は

API Gateway <-> Lambda <-> DynamoDB

  1. API Gateway から Lambada を呼び出す
  2. Lambda から DynamoDB にアクセスしてデータ取得
  3. API Gateway でデータを返却

どうやってつくったか

Kinesis -> Lambda -> DynaoDB

デバイスからデータを投げるのであればやり方は色々ある。
私が候補に挙げたのは AWS IoT と Kinesis Stream だ。

AWS IoT ではなくKinesis を選択した。
理由はKinesis の方が安く、デバイスのシャドウとか使う要件がなかったので、IoTだと高機能すぎたから。

Kinesis へのデータ登録は Cognito を使用した方が本当はいい。
今回はクローズドデバイスだったので、 AWS SDK で Kinesis 直通にした。

  1. IAMロールをつくる
    Lamda が Kinesis にアクセスするために、 AWSLambdaKinesisExecutionRole のポリシーをアタッチしたIAMロールを作成する。
  2. データ登録用の Kinesis Stream をつくる
  3. DynamoDB をつくる
  4. Lambda をつくる
    1で作ったロールを割り当てる
    DynamoDB への処理行うファンクションを作成
  5. Kinesis と Lambda を連携する

Kinesis が大量のデータを一次請けしてくれるので、同時接続は安心して任せることができる。
Kinesis に溜まったデータを Lambda でコツコツと取得して DynamoDBへ放り込む。

Kinesis にデータが溜まり過ぎ、 Lambada に一気にデータが流れ込むと、 DynamoDB の書き込みキャパシティを食ってしまうので注意。
Lambda でデータ処理が追いつかない時などに発生する(エラーとかでずっとリトライするとか)

API Gateway <-> Lambda <-> DynamoDB

Lambda で関数作って API Gateway に登録するだけでAPIができてしまう。
しかも、APIのレスポンスやリクエストも事細かに設定ができるので、Lambda は取得の関数だけに集中できる。これは楽だなと思った。

  1. Lambda でDBからデータ取得する関数作成
  2. API Gateway でアクセスポイントを作成
  3. API Gateway から Lambda 関数を呼び出すように設定

API Gateway はかなりクセがある。
正直未だに全貌がわかっておらず、何がどこまでできるのわからない。
REST API を作る程度であれば瞬殺でいける。

スポンサーリンク

つくってみて

一度やり方がわかれば爆速で開発ができそうだ。
何よりインフラのことを気にしないで、開発に集中できるのが素晴らしい。

実際に稼働させてみても大きな問題も発生せず安定おり、何かあっても即座にリソースコントロールできるのも安心だ。
ぜひみんなも使ってみてほしい。

Tips

以下、実装時に書いたQiitaの記事。

qiita.com

qiita.com

qiita.com

qiita.com

qiita.com

Tips for Kinesis Stream

  • シャードという単位で同時書き込み数が決まる
  • 1シャードと 1000req/sec で書き込みが可能
    書き込みする容量にもよるので注意
  • 最大25000req/secまで耐えれる
  • 書き込んだデータは24時間 Kinesis に保存される
    別途申請することで24時間以上も可能

Tips for Lambda

  • とにかく関数を登録すると動作する
  • バージョニング機能がある
  • バージョニングをエイリアスと紐付けれる
  • メモリ、CPUを変更できる

Tips for DynamoDB

  • 書き込みキャパシティ、読み込みキャパシティユニットは同時書き込み、読み込みと解釈する
  • Cloud watch 上は分間表示なのでキャパシティ計算の際は注意
  • 登録データの自動パージ機能はない、今後できるようになることを切実に願う

Tips for API Gateway

  • リクエスト、レスポンスなど柔軟にカスタマイズ可能
  • ステージを分けてデプロイが可能で、ステージごとに紐づくLambdaのエイリアスを設定できる
  • CORSを有効にするには設定が必要