#はじめに
StackLiveというエンジニア向けライブ配信サービスを作りました。技術記事の解説や、作業風景の配信をしながらエンジニア同士でコミュニケーションがとれるサービスです。
投げ銭機能で対価を得ることも可能となります!
##使用用途
★QiitaやZenn、自社メディアに投稿した技術記事の解説
・質問コーナー
・作業配信
#作ったきっかけ
結論から言うと、AtCoderという競技プログラミングのYouTubeライブを見たのがきっかけです。そこではエンジニア同士がコミュニケーションを取り合い、スパチャが飛び交っていました。
それを見た時に、有益な技術情報をライブ配信してコミュニケーションが取れるプラットフォームがあれば使いたい!と思ったのがきっかけです。
AtCoderのYoutubeを知らない方はこちら→(https://www.youtube.com/channel/UCtG3StnbhxHxXfE6Q4cPZwQ)
#アーキテクチャ
より詳しい技術やサービス構成につきましてはZennで解説してます。興味ある方はこちらもご覧ください!
簡単に説明すると、StackLiveはAmplifyを使いサーバーレスで構成されています。なので基本的にはインフラはAWS,フロントエンドはReactを使って作りました。
#大変だった事、苦労したこと
###1.個人開発だった
このサービスは基本的に僕一人で作りました。2020年11月ごろに思いつき、約5ヶ月でリリースしました。僕は社会人なので、平日仕事終わり18時〜3時ごろまでの作業と土日には丸一日の作業時間でした。当時は新卒で仕事を覚えるのと並行して作っていたので、大変だったなぁと思います。
今後は信頼できる仲間を探して、組織としてサービスを運営していきたいなと思っております!
###2.なにを基準にトレンド配信にするか
StackLiveにはトレンドでソートするページがあるのですが、これをなにを基準にしてソートにするか少し悩みました。
結論としては、リアルタイムの視聴者数が多いものからソートするような実装にしています。
具体的にはLambdaの定期実行機能を使って、1分間に1回AgoraのAPIを叩き、特定のチャンネルの視聴者数を取得し、DBを更新するような実装にしています。
※以下が配信周りの構成図です。
※今後は急上昇で視聴者数が伸びている配信なども合わせてトレンドのアルゴリズムを考えていければと思ってます。
###3.DynamoDBには複数のユニークな値を設定する事ができない。
これはDynamoDBの仕様上の問題らしいのですが、同一カラム内で一意の値を複数作る場合は工夫しなくてはいけないらしいです。
要するに、ユーザーテーブルでIDの他にメールアドレスの重複チェックなどができません。
解決策としては、少し複雑になりますがプライマリキーにはUNIQUE制約があることと、DynamoDBのトランザクション処理を組み合わせてデータの作成、更新、削除を対応しました。
具体的に以下のようなデータを作成するとします。
このままだと次の新規作成時、id
はユニークな値なので重複するとエラーを吐くのですが、user_idなどは重複していても作成する事ができてしまいます。
そこで、新しいユーザーを作成する時に他にも2つの値を作成します。他の2つの値には
属性名#値とする事で一意の値を実現させてます。
こうする事で重複があるとエラーを吐き、トランザクション処理が失敗になり、ユーザーが作成する事ができなくする事が可能になりました。
###Amplifyを初めて触った。
このサービスでAmplifyを初めて触りました。基本的にはamplify init
amplify add api
などのコマンドを打ち込めばインフラが勝手に出来上がります。
便利が故に知らない間にロールが出来てたり、使用上のバグなどに直面したりしてインフラを1から作り直すみたいな事を何度もしました。
またAmplify自体がサービスとして日が浅いので、情報が少ないのも大変な点でした。
これからのアップデート情報を静観していこうと思います。
#まとめ
エンジニア向けのライブ配信サービスをリリースしてみて、個人開発で大変な事もありましたが、Twitter上でお褒めの言葉もいただきとても嬉しかったです。
もし気になった方はぜひ一度、配信をしていただけると嬉しいです。