【Firebase】2週間で動画サイトをリリースしたお話【個人開発】

野山のよそおいも日に日に秋めいて、夏も終わりを告げようとしております。

さみしげに鳴くヒグラシに、夏の終わりを深く感じますが、皆様におかれましては、お元気にお過ごしのことと存じます。

さて、この度は今夏の思い出ということで、私事で誠に恐縮ですが、
しがないマーケターがFirebaseを使って動画サイトをリリースしたお話をさせて頂ければと思います。

「夏休みの課題の発表」ぐらいな簡単な気持ちでどうぞお聞きくださいませ。

#まず始めに簡単な自己紹介
以下が私の簡単な略歴となります。

防衛省・海上自衛隊（09幹候）→Klab（株）→クックビズ（株）
を経て、今年の4月に独立し、現在はフリーランス（個人）でWebマーケティングのコンサルティングを人材系企業を中心に請け負っております。

#今夏リリースしたサイト
[採用動画プラットフォーム「ENLIST（エンリスト）」](https://enlist.jp)

簡単に説明しますと、企業や自治体、官公庁等が採用マーケティングを行う際に、求職者を対象にした動画を制作してYoutubeやVimeoにアップロードしているのですが、そういったアーカイブされた**「採用動画」**を検索・閲覧できるような動画サイトになります。

サイトの名称に関しては「採用」ということで、「縁」を想起させます。
「縁」となるよう動画が「リスト」として並んでいるので「ENLIST（エンリスト）」と思われる方もいらっしゃるかも知れません。
ですがこれは違います。

**「ENLIST」**は、日本語で**「募兵」**を意味します。これが正しいサイト名の由来になります。

##TOPページ
![FireShot Capture 017 - ENLIST（エンリスト）｜採用動画・採用ムービーサイト - enlist.jp.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/67591/bafeefd6-896b-4bca-cf31-7c6d1dba5582.jpeg)

##動画詳細ページ
![FireShot Capture 027 - 人力車のえびす屋　採用ムービー｜ENLIST（エンリスト） - enlist.jp.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/67591/e0f195e0-8845-0c23-dcdd-fefc0f0888ee.jpeg)

##サイト構造について
サイトの構造としては、いたってシンプルです。

- ページ分割されたTOPページ
    - 新着順の動画リスト
- 動画詳細ページ
- カテゴリ別の動画アーカイブリスト
- タグ別のアーカイブリスト
- 企業・組織別のアーカイブリスト
- カテゴリ一覧ページ（実装中）
- タグ一覧ページ（実装中）
- 企業・組織一覧ページ（実装中）

###SEO上の問題
情報提供が主体となる「メディアサイトにおける最低限必要なSEO」としての要件は満たしていると思いますが、
ただ如何せん動画コンテンツに関しては、Youtube・Vimeo等の外部サイトからクロールしているため、**オリジナル性が低い**という問題があります。

もちろんオリジナル性を向上させる為に、ログイン機能と動画プレイヤーを作って、**企業側で動画を投稿できるように改修を行っていく予定**ではあります。

それ以外にも動画詳細ページに更にオリジナルテキストを付与する等の対策は考えていますが、現時点では動画詳細ページへの直接的な検索流入を期待するというよりは、各項目別のアーカイブページへの検索エンジンからのランディングを重要視しています。

###著作権的にはどうなの？
動画コンテンツは全て埋め込みの為、著作権的には問題無いと考えています。
ただYotubeの利用規約の中で、
>*“大量の YouTube 動画を埋め込んだだけで、意図的に広告収入を得ようとするだけのウェブサイトは、利用規約に違反しているものと見なします。”*

引用元：[YouTubeヘルプ「YouTube ウェブサイトの商用利用が禁止されるケースと許可されるケース」](https://support.google.com/youtube/answer/71011?hl=ja-JP)

とあるので、ビジネスとして収益をあげる為には、やはり前述した通り、オリジナル動画の獲得にシフトしなければなりません。

#サイト構築の上で使用した技術について
タイトルの通りFirebaseを使ってサーバーレスアーキテクチャを実現しています。
アーキテクチャのベース部分は約2年前に書いた以下の記事である程度は形としてできていたので、それを基にしてひたすら作業を進めていきました。

[【Firebase】Cloud Functions + Express + EJSで動的コンテンツを配信する](https://qiita.com/kingpanda/items/aa9bdef2706857720058)

##環境
- Firestore
- Cloud Functions or Firebase
- Firebase Hosting

##サーバーサイド
- Node.js
- Express
- EJS

##その他
- moment

##作業日数
他に仕事もあったので、これだけにずっと時間を割けた訳では無いのですが、お盆入る前ぐらいから始めて、お盆明けぐらいには、ある程度見せれるぐらいの形になったという感じです。
そこまでで、ざっと**約2週間**ぐらいでしょうか。

ただ、**まずは区切りがつくとこまでやりきってリリースする**ことを目指していたので、まだまだ機能的にも不十分で、出来ていない部分も多く未完成ではあります。

##なぜFirebaseを使用したのか？

それは色々と事情がある訳なんですが、言える範囲でざっとまとめると以下になります。

- お金が無い
- 時間が無い
- お金が無い
- 時間が無い
- お金が無い
- 時間が無い

とにかくお金と時間がありませんでした。
また、**夏が終わる前に必ずリリースする**と決めていたので、余計なこと（お金がかかりそうなこと・時間がかかりそうなこと）は一切削ぎ落としました。

時間に関して言えば、元々ある程度FirebaseやGCPの知見があったからで、
もし何も知見が無ければ、どうしても知らないことを調査する為の時間に追われるので、Firebaseを選択していなかったかもしれません。

お金に関して言えば、Firebaseは無料で始めれるのが大きな魅力。
掛かったコストはドメイン代（[enlist.jp](http://enlist.jp)）と寝不足・不規則な生活・ストレスで肌が荒れないようにする為のビタミン剤ぐらいです。

最初はテストマーケティング的なリリースなので、まずは無料のsparkで良いかなと。
もしsparkで収まらなくなったり、本格的に投資していく段階になれば、FlameプランかBlazeプランに切り替えます。

余談ですが、ドメインに関しては趣味としてサービスを立ち上げる分には、安いドメインでも問題無いと思いますが、
ビジネスとしてやっていく考えがあるのであれば、信用の面から国内向けサービスであれば多少高くても「.jp」を買うことをおすすめします。

###Firebaseを使うメリット
当然ながらWebなのかアプリなのか、サービス内容・開発規模等にもよって違いますが、
全てに共通して言えるとすれば、mBaaSという利点から、バックエンドのことを考える必要が無いので、その分やはり**開発速度が早い**ということです。

特に個人開発となるとたった一人でアレもやって、これもやってとなるので、正直めんどくさくなって途中で投げ出したくなるので（自身の経験上）、そういった意味では一定のレベルまで作りきれたのでFirebaseを選んで良かったと思っています。

NoSQLであるFirestoreのデータベース設計に関しては、私自身はRDBもMongoDBの経験も両方あったので、取っ付きにくくさは特に感じず、今回は結構ノリな感じで作りました。

Firestoreの場合、最初の設計がミソとなるのですが、別に**駄目だったらスクラップアンドビルドすれば良い**という、そんな気持ちにさせてくれる魅力がFirestoreというプロダクトにはありました。（あくまで個人開発での話）

また**「Firestore + Cloud Functions + Firebase Hosting + Express + EJS」**という組み合わせは非常にシンプルです。

Function側でModelとViewを制御して、日付であったりテキストであったりの細かい処理はEJS側で行いました。

###Firebaseを使うデメリット
文句と言えばアレですが、とにかく言いたいことは多々あります。

一つはFirestoreの**クエリ機能がとにかく貧弱**なことです。それでもRealtime Databaseと比べればだいぶ進化しているのですが、LIKE検索の部分一致が出来ず、今回の開発では、まだフリーワード検索の機能が実現できていません。

全文検索をする為に、AlgoliaやElasticsearchなどのサードパーティの検索サービスを使用するかどうかは、まだ検討中です。

他に問題として挙げたいのは、無料プランの場合、Cloud Functionのメモリが256MB固定で割り当てられているので、**Functionの実行速度が遅く**感じます。
ログをまだちゃんと見れてないですが、リージョンが「us-central1」だからかどうか、深夜が特に遅く、日中はそうでもありません。

Functionの実行速度で言えば、私のindex.jsのプログラムに問題があるのもそうだと思います。
とにかく急ぎで実装を進めた為、関数の分割もできておらず、グローバル変数化も微妙で、ルーティングを全て1ファイルにぶっこんでいるので、かなり冗長化して見通しが悪いコードであるのは確かです。

#なぜ「採用動画サイト」を作ろうと思ったのか？

新卒・既卒含めて、買い手市場の昔と売り手市場である現在とでは、採用における状況が大きく変わり、求職者が企業を選ぶ上での決定的な要素が、給与や勤務時間、福利厚生等の条件が良いのは当たり前の時代となっています。

そんな中で、求職者をどのような点を就職の上で重視するのかと言いますと、例えば企業の雰囲気であったり、自己実現が可能なのかといった、これまでのテキストベースの求人票では可視化しにくい要素がポイントになってきています。

そこで、求めれられてくるのが「採用動画」です。

ただ現在、採用動画を制作する企業は増えてきていますが、アップロード先はYouTubeに限定されています。

現状では「採用動画」に特化したプラットフォームが無いので、求職者を対象にした採用動画を活用したマーケティングが行いにくいという状況があるので、無いのであれば作ってしまおうと至った訳です。

恐らく、しばらくの間は水面ギリギリの低空飛行が続くと思いますが、地道に機能を拡張し、また認知度をあげていければと思います。

##今後、拡張予定の機能

今後はざっとですが、可能性を考えると以下のような機能を作っていこうと考えています。
ゆくゆくは動画を軸にした企業と求職者のマッチングサービスにできればと思います。

- ビュー数カウント
- いいね・BAD機能
- 動画投稿機能
- 動画レコメンド機能
- 企業側ログイン機能
- エンドユーザーログイン機能
- 採用説明会用のLIVE配信機能

ぜひ温かい目で見守っていただけると幸いです。

#さいごに
最後までお読みいただき、ありがとうございました。

夏が終わりますね。夏の終わりから、秋にかけての季節が最も人間が創作意欲を掻き立てられる時期と言われているので他にも何かサービスを企画してみようと思います。皆様もいかがでしょうか？

もしご意見・ご質問等がございましたら、TwitterのDMなりでお気軽にご連絡ください。