Railsチュートリアルの解説動画を直販する技術

![Rails解説セミナーの収録風景.jpg](https://qiita-image-store.s3.amazonaws.com/0/1857/89dffe00-38bc-46b7-509c-49aebc8b3445.jpeg)

最近はコンテンツを制作・販売するための環境が充実してきましたね! [Gumroad](http://gumroad.com/) のような決済サービス、組版するための [Re:VIEW](https://github.com/kmuto/review) ツール、それらを盛り上げる[技術書典](https://techbookfest.org/)コミュニティなど、周辺環境がどんどん面白くなってきているなぁと感じています😆

一方、電子書籍やイラストデータなどを販売・頒布する手法は普及していますが、動画コンテンツを販売・配信する手法についてはまだ十分に広まっていないかな、とも感じています🤔

そこで本記事では、動画を独自に販売・配信したい人向けに、弊社 (YassLab) がどのようにしてRailsチュートリアルの解説動画を直販しているかについてご紹介しようと思います📹

## TL;DR

- [Railsチュートリアルの解説動画](http://railstutorial.jp/seminars#record)を制作 (約34時間)
- Gumroad + Zapier + Wistia で販売・配信
- 自前のサーバーは用意せず、なるべくメンテしなくてよい仕組み

### 用語説明

- [Gumroad](http://gumroad.com/): デジタルコンテンツを販売するサービス
- [Zapier](https://zapier.com/): サービス間の Integration をしてくれるサービス
- [Wistia](http://wistia.com/): 動画の配信に特化したサービス

### 設計方針

今回の仕組みでは、次の点を意識しています。

- 動画販売プラットフォームは使わない
- YouTube、Vimeoぐらい快適に視聴したい
- 決済や配信で失敗しないように、なるべく頑張らない

背景や目的が異なれば違うやり方もあるかなと思いますが、今回は上記の点を意識した直販の仕組みになっています。


## 決済〜視聴までの流れ

本題です。弊社が制作・販売している[Railsチュートリアルの解説動画](http://railstutorial.jp/seminars#record)では、自前のサーバーを一切使わずに、決済から視聴までの流れをサービス間の連携のみで構築しています。具体的な流れは次のとおりです。

![決済〜視聴までの流れ.png](https://qiita-image-store.s3.amazonaws.com/0/1857/9be57f65-abf0-ff53-8d83-e7f3673cb1c3.png)

以下、それぞれの流れについて説明します。

### 1. 訪問者がGumroadで動画を購入する

ここは電子書籍などの販売と同じ部分です。Gumroad以外にも代替サービスはたくさんあるかと思いますが、後述する「Zapierで対応できるサービス」という条件で絞るとGumroadが一番やりやすそうだったので、本動画ではGumroadを決済サービスとして使っています。

Rails解説セミナー (ライブ収録版) - Gumroad
https://gumroad.com/l/railstutorial_seminars


### 2. GumroadからZapierにWebhookを送る

Zapierは、サービス間をmashupしてくれるサービスです。Gumroad APIを直接呼んでも良かったのですが、決済周りで失敗しないコードを書いたり、落ちないインフラを作るのはちょっと面倒そうです :sweat:

そこで弊社では、このmashupの部分をすべて Zapier にお任せするようにしています。これにより、社内でサーバーを一切持たなくて済むようになりました :smile_cat: 

Gumroad Integrations - Zapier
https://zapier.com/zapbook/gumroad/


### 3. ZapierからWistia APIを呼び出す

Zapierでは、直前のWebhookから来た情報を次のAPI呼び出しで使うことができます。これにより「Gumroadで決済が終わったユーザーのメールアドレスに対して、Wistia上の動画の視聴権限を付与する」といったアクションを定義することができます。

残念ながらZapierにはこれに該当するアクションがまだありませんが、特定のURLに対してHTTPリクエストを送る部分 (Webhook) は定義できるので、Wistia Data API のドキュメントを読みながら、今回はWebhookを自前で定義することにします。

Wistia Help: The Wistia Data API
https://wistia.com/doc/data-api


### 4. Wistia APIで購入者を招待する

最後は、Wistia APIで「あるユーザーに対して動画の視聴権限を付与する」部分です。Zapierが対応しているWistiaのアクションはまだ少ないですが、WistiaのAPI自体は非常に充実しているので、このようなアクションも手軽に定義することができます。

実際、[Project Sharings: Create](https://wistia.com/doc/data-api#project_sharings_create) というピッタシの用途のAPIがあるので、今回はこれを呼び出すだけで十分です。具体的には、次のRequestとParameterを含んだWebhookを送るように、Zapier側で定義します。

> ## Request / Parameter
> 
> POST https://api.wistia.com/v1/projects/YOUR_PROJECT_ID/sharings.json?api_password=YOUR_API_KEY
> 
> | Parameter                | Description                                                                       |
> |--------------------------|-----------------------------------------------------------------------------------|
> | `with`                   | The email address of the person with whom you want to share the project.          |
> | `sendEmailNotification ` | Set this parameter to "1" (no quotes) to send a sharing notification on creation. |

ここまでの準備がすべて整うと、購入者の決済が終わった直後に、購入者のメールアドレス宛に動画視聴用の招待メールを送れるようになります :incoming_envelope: 

下記は一般公開しているWistiaのサンプルプロジェクトですが、実際に購入すると、解説動画の完全版 (34時間分) の視聴権限が付与されるようになります :tv: :eyes: 

Rails解説セミナー (ライブ収録) サンプル版
https://yasslab.wistia.com/projects/drgha6bvfn

## まとめ

本記事では、各種サービスを組み合わせて動画を直販する技術について説明しました。

「どうやって解説動画を直販しているの?」と何度か聞かれたので、今回の記事をきっかけに、自分たちで動画を制作し、自分たちで動画を販売・配信する人たちが増えていけば幸いです :smile_cat: 

弊社 ([YassLab](http://yasslab.jp/)) 自身も、[Railsチュートリアル](https://railstutorial.jp/)や[Railsガイド](https://railsguides.jp/)、また、それらを支える[継続的翻訳システム](https://speakerdeck.com/yasulab/how-we-continuously-translate-tech-docs)を通して、コンテンツ制作・販売の流れを一緒に盛り上げていけたらなと考えています :)


[![YassLab Logo](https://yasslab.jp/img/logo_800x200.png)](https://yasslab.jp/)