ボクココ

熱海で開発するブログ

SPIKE API にアクセスする gem を作りました

最近出たSPIKE APIRubyでアクセスするgemを作りました。SPIKE で決済APIの機能を提供してくれたお礼とでも言いましょうか。

Github にソースを上げたので、ご自由にお使いください。今後 SPIKE API に機能追加されていった際のプルリクエスト等大歓迎です。あ、ちなみに Metaps 非公式のgemですのでご注意を。

この gem はコネクシィで利用されています。以下の機能を利用できます。

  • 課金の実行
  • 課金の払い戻し
  • 課金情報の取得
  • 全ての課金情報の取得

ちなみに課金実行の際に必要なカードトークンはSPIKE Checkout で取ってきたものとなります。

Heroku サーバでタイムアウト発生時に自動で再起動する仕組みを作った

Heroku でそれなりのアクセスが来るサービスを運用していると、以下のようにタイムアウトが発生してユーザがアクセスできないような時間帯が出てきてしまうことがある。

Sep 20 17:57:12 heroku/router:  at=error code=H12 desc="Request timeout" method=GET path="/" host=herokuapp.com request_id=502759a1-afde-4f03-9266-5b3256a8c536 fwd="182.249.246.34" dyno=web.1 connect=3ms service=30000ms status=503 bytes=0 

何かしらアクセスが詰まっているようなので、これを受けた時は自動で heroku restart を実行したい。

ログ監視サービス

Heroku のアドオンで、 Papertrail というものがある。これは、HerokuのログをS3に置いたり、リアルタイムで監視して問題のあるログが出てきたときにアラートを出したりすることのできる超便利アドオンだ。本番環境で運用するHerokuアプリには是非入れておくべき。

さて、これを利用すれば、timeout発生時に所定の所へメールを送ることができる。そのメールを受け取ったタイミングで heroku restart を実行できれば完璧だ・・!

Papertrail でアラート管理

HerokuダッシュボードのResouces の下部にある追加したPapertrail をクリックし、Papertrailのダッシュボードへ遷移する。Papertrail のダッシュボードから timeoutのログが出てきたときに所定のgmailアカウントへメールを送るような設定をしておこう。

Mac のメールアプリ

Mac にはデフォルトでメールアプリがある。これを先ほどPapertrailで登録したGmail アカウントと紐付けて、そこからAppleScript を実行させればいけそうだ。AppleScriptMicrosoft でいうVB みたいなもんで、Mac用のプログラミング言語だ。もちろんこんな言語を習得する必要は全くない。ただこのAppleScriptからシェルスクリプトを呼び出せればそれで良いのだ。

AppleScriptの作成

Marverics での場合。他はどうだか不明

~/Library/Application\ Scripts/com.apple.mail/apple.scpt って名前のファイルを作る。 このファイルの中身は

do shell script "/bin/sh /path/to/sh/restart_heroku.sh"

そして restart_heroku の中身は

export PATH=$HOME/.rbenv/shims:$PATH
heroku restart --app nofap-revolution

まぁherokuコマンドを使えれば他にどんなスクリプトでもよい。

メールにルールを追加

そしたらそのスクリプトを登録するだけだ。

メール -> 環境設定 -> ルール -> ルールを追加

これで出来上がり!

試しにPapertrail と timeout の文字列のある件名を指定Gmailアドレスに送って、Papertrailでログを眺めていると、Heroku restart が実行されているのが確認できた。これの欠点は、自分のMacのメールアプリを常時起動しておかないといけないという点w

あ、やべ。。これメール立ち上げてなくて、立ち上げた瞬間にそのメールがあったらScript実行しちゃうじゃんw まぁそのくらいの頻度でのrestart走ってもいいか。。

決済Webサービスの Webpay と SPIKE の比較

最近は決済機能を持つWebサービスを作ることが多いかと思う。従来はPaypalしか選択肢がなかったが、近年APIで簡単に決済機能を導入できるサービスが出てきた。これらを利用することにより、とても簡単にWebサービスに決済機能を盛り込むことができる。

今回の決済サービスでの条件は、「APIで決済ができる」支払いサービス。そうするとWebpayY! FastpaySPIKE って事になるかと思う。

色々あって、今回はWebpay と SPIKE のどちらもデベロッパーとして登録し、開発した。この経験から、両者のできること、できないことを詳しくまとめたい。前に書いた記事と被っている部分もあるけど、比較ってことでご了承ください。

今回の記事は、2014年9月時点での情報だ。この分野の競争は激しくどんどん変わっていくと思われるので注意されたし。

Webpay

料金体系

スタータープラン プロプラン
初期費用 0円 0円
月額費用 0円 9,800円
Visa Mastercard 3.25% 2.69%
Jcb American_express Diners_club 3.40% 3.40%

それぞれの決済毎に数%の手数料を取る形だ。

ちなみに、Jcb American_express, Diners_club は C2C サービスでは使えないので注意。SPIKEはそもそもその3つを提供していないが、C2Cサービスを扱うならどちらも使えるカードの種類は同じってことだ。

機能

Webpay はかなり柔軟に開発できる。カード情報をWebpayにリクエストとし、カード情報の代わりとなるカードトークン(カスタマーID)を受け取る。そのカードトークンを自分のサーバに保存しておく。以降、このトークンをwebpayに投げるだけで課金機能を実現できる。ちなみにカード情報フォームを作るなら Checkout Helper というのがある。現在はWebとiPhoneに対応しているみたいだ。自分の場合はandoridだったので自作した。

また、capture (仮決済)の機能も提供しているので、オーソリも簡単に実現できる。これでできる限り支払いを送らせて返金を少なくさせることが可能だ。また、決済時になってカード支払いに失敗するってリスクも減る。

もちろん、返金も簡単に実装できる。保存したChargeIDを元に返金リクエストを投げるだけだ。

webpay API とのやりとりを簡単にするためのライブラリを豊富に取り扱っている。これを使ってちゃんとwebpayのドキュメントを読めば簡単に実装できることがわかるだろう。初めて触った時は感動を覚える程だ。

その他良い所

  • Webpayの最新情報は適宜 Twitter などで教えてくれるので安心できる。
  • サポートがちゃんと返ってくる。
  • テストカードが豊富に用意してくれてるのでテストが楽

デメリット

商用申請の審査が厳しい。それで取扱いサービスの質を上げようとしているという点で会社にとっては安心だろうけど、使う側からしたらそれを知らずに普通に実装して申請したら落ちるてことがあることをちゃんと知らせてほしい。

審査にかなり時間がかかる。これを使うって決めたら、その時点で商用申請した方がいい。10日以上は見積もっておいた方が良いだろう。

まぁ、しっかり見定めてくれるってことで逆を言えばメリットなのかもしれない。

SPIKE

SPIKE はできたてなので、どうしても色々整備できていない感が高い。

機能

基本的にはWeb上での決済を想定した作りになっている。商品をSPIKEコンソールで作成し、その商品に対してのリンクを作る。そのリンクに行けばクレジットカード情報を入力して決済が実現できる。 Webpay は料金しか関心が無いので、どんな商品を作っても良いし、料金設定はそのときに決めれば良かったが、SPIKEは事前に商品を登録しないと決済ができない。まぁ最近できたAPIを使えばなんとかやれなくもない。

SPIKEではカードの登録をAPIでできない。 SPIKE Checkout という JavaScript を読み込んで、そのJavaScript が サイト内に iframe を作成し、そこでカードを登録する。SPIKEにログインしていればカード情報の入力をしなくても済むようになっている。していなければ毎回カード情報を入力する必要がある(ゲスト決済)。webpay にあった、カスタマーIDの概念が存在しない。

また、仮決済機能も現時点では提供していない。即時決済のみになるので支払い方法は限定される。

提供ライブラリ

SPIKE API とやりとりするライブラリは現時点ではPHPのみ提供しているようだ。自分は Ruby で自作した。

メリット

ここまで書くとどう考えてもwebpayの方がいいじゃん、ってことになる。たしかに機能的にはwebpayの方が断然色々できる。

SPIKEの最大のメリットはコストだ。なんと、決済手数料は無料だ! ただ今回はAPIを使うので、ビジネスプレミアムっていうプランに入る必要があって、月額3000円かかるが、それでも月約10万円決済すればwebpayより元が取れる計算になる。

あと、Webのみを想定したECサイトとかはリンク貼るだけだからかなり楽だと思う。Webpayではたぶんこういう機能はなかった。まぁそのリンク先に飛んだ後ににカード情報入力するか、SPIKE登録するかどっちかしなきゃいけないけど。これが無料の秘訣なのかもな。SPIKEに登録するユーザ増やして決済のシェアを取ろうって感じかな

審査が早かった!大変有り難い。

デメリット

  • 機能が限定されている。 特にAPI
  • Twitter などで最新情報を提供してくれない
  • サポートが遅い
  • ドキュメント不足
  • API を扱うと商品の概念がいらないと感じる

おわりに(免責)

あくまで自分が扱った範囲内での所感ですので、詳細は各ページを参照してください。

Android の NumberPicker を任意のSTEPでセットするときの対応

NumberPickerを使うたびに詰まってる気がするのでメモ。

NumberPickerで例えばminが500, max が 5000, step が500としたい場合、これがなかなかわかりにくい。メソッドを呼ぶだけで問題が起きないようにリファクタリングした。今後はNumberPickerを使い際はこのメソッドを使う。

    private void setNumberPicker(NumberPicker picker, int min, int max, int step, int format) {
        picker.setMinValue(min / step - 1);
        picker.setMaxValue((max / step) - 1);
        String[] valueSet = new String[max / min];
        for (int i = min; i <= max; i += step) {
            valueSet[(i / step) - 1] = getString(format, i);
        }
        picker.setDisplayedValues(valueSet);
    }

最後の引数 format は, 例えば strings.xml%d円とかしておいて、formatにR.id.format_yen みたいにして指定すると、NumberPickerの各値に反映できる。

ここで注意したいのが、これでpicker.getValue() を呼ぶと、0からの連番の数字になるので、+1してSTEPをかけあわせないといけないことに注意。

仏教を学んでみたら思ったより面白かった件

最近はテクノロジーやビジネスに関わらず、幅広い学習を心がけている。今回はその第一弾。

色んな日本のしきたりとかでそれぞれの理由が知りたく、実は前から一度は学んでみたいなーと思ってたので今回は良い機会だった。以下ちょっとしたまとめ

仏教を学ぶということ

仏になることを目指す。

仏とは、悟りを開いた状態。

悟りとは「全ての真理を知ること。」

悟りに至るための道筋をまとめた苦集滅道の4つの真理がある。

苦諦(くたい)

この世の一切は苦である。

四苦

八苦

集諦(じったい)

苦の原因についての真理。

この世のすべてが苦だとする。そしてそれらには必ず原因がある、ということ。

滅諦(めったい)

苦しみの原因である執着や欲望を断つこと。

道諦(どうたい)

苦しみを断つための方法。「八正道」、「中道」。

八正道

苦しみを断つ方法8つ。

正見

ただしくものを見る。

  • 因果観: 物事の因果関係を認める
  • 縁起観: 生きていることがどんなに多くの人々の働きや自然からの恩恵によるものかを知る

正思観

正しい考え方。

極端な思想に走らず、全てに適切である状態。

  • 欲望の無い考え方
  • 怒りの無い考え方
  • 愚痴の無い考え方。(一般的なグチではなく、愚痴とは真理に対して無知であること)

正語

正しい言葉。

ダメなこと

  • 妄語: うそをつく
  • 悪口: 悪口を言う
  • 両舌: 2人に対してそれぞれ違うことを言う
  • 待語: 意味の無いおしゃべり

正業

正しい振る舞い

生き物を愛護し、財物や教法などを施し与え、正しい夫婦関係を保つこと

正命

正しい生き方。規則正しい生活

正精進

正しい努力。善を生むための努力。

正念

邪念を離れ,真理に至ろうという心を保つ

正定

正しい座禅・瞑想

六波羅

さて、真理を知れば悟りを開くことができるが、どうやってその真理を知ることができるのだろうか? 修行によって得られるが、その方法についてまとめたものが六波羅蜜。

  • 布施波羅蜜 (与えること)
  • 持戒波羅蜜 (戒律を守ること)
  • 忍辱波羅蜜 (苦しみに耐え忍ぶこと)
  • 精進波羅蜜 (努力すること)
  • 禅定波羅蜜 (精神を統一すること)
  • 智慧波羅蜜 (正しい智慧を得ること)

智慧: 物事の道理を知り、善悪をわきまえる心のはたらき。

つまり、六波羅蜜をちゃんと続けて、悟りの境地を開き、仏になろう!ってのが仏教の基本的な考え方。

それを妨げるもの: 煩悩

煩悩

人間の体や心を煩わせ、悩ませ、汚すところの悪い心のはたらき。人間は煩悩によって苦しみの報いをこの世で受けている。108個というのが煩悩の数を表す代表的な数字。

この煩悩を消し去り、純粋な心を持ち続けることが必要!

仏教 TIPS

除夜の鐘

108回ならすのは、この煩悩の数だけ鳴らすため。その年の煩悩を懺悔し、新しい気持ちで新年を迎えるために行なう。

数珠

108個の数珠が有る。これは、その人の煩悩を数珠が引き受けてくれる役目を果たす。

彼岸

煩悩に苦しむ現実のこの世を意味する「此岸」似たいし、六波羅蜜によって迷いを脱し、此岸を渡りきった悟りの境地のこと。本来なら、六波羅蜜を常日頃習慣化すべきだが、このことを忘れぬよう、彼岸では六波羅蜜を戒め修行をするべき期間として設けられている。

南無妙法蓮華経

お葬式とかでよく唱える言葉。「お釈迦様の真理、真実が説かれているお経に命がけで進行し、仏に慣れるよう精進します」という意味。

仏になることを目指すという仏教の基本的な考えの宣誓みたいなものか。

お葬式のお経

故人が仏様の弟子になって悟りを開いてもらうようにする。

エンジニアによるファイナンス訓練 (資本市場編)

前回(下)の続き。

エンジニアによるファイナンス訓練 (企業の最適資本構成編) - ボクココ

期魚の資金調達方法である債券と株式発行の仕組みと、その価値の評価方法について。

債券

定期的に一定の利子を支払い、所定の満期日に額面金額が償還することを発行体が約束している証券

利率・・ 債券の額面に対して何%の利息がつくかの割合。
利回り・・投資元本に対して1年当たり何%の収益が得られるかの割合。利回りは価格変動によって変化する。

直接利回り(直利)

直利 = (年利率)  /  (購入価格)  *  100  ・・・1

100円当たりのインカムゲイン = 年利率 * 100 
1円辺りのインカムゲイン = 年利率・・・2

2を1に代入すると、
直利 = (1年当たりのインカムゲイン) / (購入価格)  * 100

例) 債券の発行時に100円で買える。年間5%の利率

  • これを100円で購入すれば、利回りは 5 / 100 * 100 = 5(%)
  • これを90円で購入すれば、利回りは 5/ 90 * 100 = 5.56 (%)
  • これを110円で購入すれば、利回りは 5 / 110 * 100 = 4.55(%)

単利最終利回り

1年当たりのインカムゲインキャピタルゲインを合わせた利回り

単利最終利回り = (1年当たり のインカムゲイン + 1年当たりのキャピタルゲイン) / 購入価格 * 100
            = (        受け取り利息       +  (額面 - 購入価格 ) / 残存期間 )  / 購入価格 * 100

年複利利回り

(残存期間)√ ((額面金額 / 購入価格) - 1)   * 100

この式は、例えば 90円 -> 100円 を5年かけて達成したときの年利

90 * (1 + x)^5 = 100

のxを解いた計算式。

債券価格の決め方

= それぞれのキャッシュフローの現在価値の合計

例) 3年満期の債券(額面100円) クーポンレート5%, 金利3%
これの現在価値

50 / 1.03 + 50 / 1.03^2 + 1050 / 1.03^3 = 1056.37 円

将来1150円手に入るのの現在価値が1056円程。

金利を6% にすると、これの現在価値が973円に減少。

つまり、

金利が上がると債券価格は下がり、金利が下がると債券価格は上がる

複利最終利回り

上記の債券が950 円で売買されている場合、金利rとすれば、

50 / (1+r) + 50 / (1 + r) ^2 + 1050 / (1 + r)^3 = 950
となるrを求める。

これは実は内部収益率を求める方法と全く同じ!

本当の債券価格の決定

通常rは年を通じて変化するもの。(各年の金利をスポットレートという。) それぞれの年の金利を使ってキャッシュフローの現在価値を求める。

その債券各区から複利最終利回りを求める。

株式

株価はどう決まる?2つの考え方

  • 企業の業績や将来性とは無関係に市場参加者の心理の相互作用として形成される
  • 基本的には株価は企業の将来性や収益力を反映する

つまるところ・・

将来(永久)の配当を株主資本コストの割引率で求めた現在価値の合計

企業価値を求める

類似企業比較法(マルチプル法)

DCF法より現場ではすぐ計算できるためよく使われる。

上場企業をベンチマークとして、その企業の財務指標などから評価倍率を求め、企業価値を推定する方法

  1. 評価対象企業に類似した企業を選ぶ
  2. それぞれの比較対象企業の企業価値を算出し、その企業価値がEBITDA などの指標の何倍になっているか(マルチプル)を計算
  3. 評価対象企業のEBITDAなどの指標に、2で求めたマルチプルを掛ける
  4. 評価対象企業の企業価値が求められる

EBITDA(Earnings Before Interests, tax, Depreciation & Amortization)・・営業利益 + 減価償却

粗利に対し支払い利息、税金に加えて、減価償却費を差し引く前の利益

マルチプル法ではよくEBITDAが使われる。

  • 合計基準が異なる海外の会社と日本の会社を比較できるため
  • 類似企業でも設備の耐用年数の違い等で減価償却費が異なる会社を比較することができる

エンジニアによるファイナンス訓練 (企業の最適資本構成編)

前回(下)の続き。

エンジニアによるファイナンス訓練 (企業価値評価編) - ボクココ

企業の最適資本構成

企業における、負債と株式の割合はどのように配分するのがベストなのだろう?

ROAROE

ROA (Asset)

利益を総資産で割ったもの。透過した資本に対して、どれだけの利益を上げたか。

ROE (Equity)

利益を株主資本で割ったもの。株主が透過した資本に対して、どれだけの利益を上げたか。

これはトリックを使える。利益が変わらなくても、株主資本を減らせば(負債を増やせば)ROEは高くなる。そのため、負債と株主資本の割合はROEに大きく関わる。この比率を「財務レバレッジ」という。

ROEボラティリティ(分散、ばらつき)

  • 負債無しで株式のみで資金調達・・ROEのばらつき、リスク低。
  • 負債 & 株式で資金調達・・ROEのばらつき、リスク高。

最適資本構成を求めることにトライ

MM理論

「税金やコスト等がない完全資本市場では、負債、株主資本の資本構成は、企業価値に影響を与えない」

だが、 法人税を考慮すると、この原則が乱れる

負債には節税効果があり、利益が亜一定であれば負債による節税分だけ負債を持つ企業の方が企業価値が高まる。

-> だが実際には有利子負債が少ない企業が業績が良かったりする。なぜか。

財務破綻コスト

負債には返済義務があり、返せないと財務破綻に陥る。こうなるリスクがあるため負債ばかり抱えるとそのリスク(財務破綻コスト)が高まる。つまり、財務破綻コストと負債による節税効果のバランス。この考え方を「資本構成のトレードオフ理論」という。

結局の所

財務破綻コストを定量化することは困難なため、最適資本構成を求めることはできない。現実的な点をふまえて資本構成を決める。

ただ、そもそもどこから資金調達すべきかの優先度によって資本構成が自然に決まる方法がある。

ベッキング・オーダー理論

「企業が資金を必要とする時は、まず内部資金を利用し、外部資金調達が必要な場合は、最も安全な証券から発行すべき」

つまり、内部留保 -> 銀行借り入れ -> 普通社債 -> 転換社債 -> 普通株式。この優先度の高い順で資金を調達し、資本構成を作るという考え方。

ただし、事業リスクが大きい事業は仮に負債が無くても倒産危機に陥りやすいため、負債比率が低くなる傾向がある。-> ベンチャーエクイティファイナンス

配当政策

株主に対してどのような配当政策をするのがベストなのだろう?

配当政策・・利益を株主に還元するか、あるいは企業の内部に留保し、優良な投資機会に再投資するかを決めること。詰まる所、

配当政策がどうであれ、企業の生み出すキャッシュフローは一定、つまり株主価値は変わらない

配当で1万円配って株価はその分下落でも構わない。株主にとっては1万円を企業に預けるか自分の手元に置くかの違いだけ。

ただ株主への安定的な配当の支払いがあることを内外に知らせることで評価を得る作戦などが考えられる。

株主に資金を還元する方法

  • 配当
  • 自社株取得・・負債で調達した資金を使い、自社株の取得を行なうこと

株主の株を企業が買い取る。事実上、特定の株主の株がなくなって現金として返ってくるだけ。

自社株取得の目的
  • WACC の低下 -> 企業価値の高まり -> 株価の上昇が狙える。

ただこれは、資本構成を変えるという行動が株価を変動させただけに過ぎない。

  • 経営陣が現在の株価は割安であると判断した。そういう風に他の投資家は思う (シグナリング効果)。割安だと買収される恐れが出てくる。

  • ストックオプション・・企業が役員や従業員に対して一定の価格で自社株を購入できるオプションのこと。ストックオプションを用意するために予め自社株を取得して手当てする必要がある。ストックオプションが行使されたときに速やかに対応できるようにするために。

次回

債券価格や株価はどのようにして決まるのだろう?そしてより現実的な企業価値評価についての実践。

次回、資本市場理論編。