tag:crieit.net,2005:https://crieit.net/users/Kendai/feed Kendaiの投稿 - Crieit CrieitでユーザーKendaiによる最近の投稿 2021-07-13T02:44:33+09:00 https://crieit.net/users/Kendai/feed tag:crieit.net,2005:PublicArticle/17503 2021-07-13T02:44:33+09:00 2021-07-13T02:44:33+09:00 https://crieit.net/posts/8dbd7e242deb435cd79ca8fdedbdfb4e 100万円失いながらハッキングを乗り越え誰でも1分で切り抜きを作れるサービスを公開するまでの失敗と学び <p>先日、<strong>誰でも最短1分でYouTubeの切り抜きを作れる</strong>ウェブサービスを公開しました。</p> <p>私はプログラミングの勉強を始めて1年半の初学者ですが、個人開発でサービスを公開するまでに、数多くの失敗と苦労をしてきました(そして今もしてます笑)。後ほど詳しく書きますが、以下のような経験をしました。</p> <ol> <li>ハッキングを受けデータを盗まれる</li> <li>α版をリリースするも作り直しを決意する</li> <li>巻き返しのため海外フリーランサーを雇うも無駄金となる</li> <li>公開前に本家が同じ機能を発表し諦めかける</li> <li>β版をリリースするも使われない</li> </ol> <p>同じようにプログラミングの勉強をし始めたばかりの方や、個人開発でいつかはサービスを公開したいと考えている方の「転ばぬ先の杖」として、私の経験が役に立てばと思っております。</p> <h1 id="開発したサービス"><a href="#%E9%96%8B%E7%99%BA%E3%81%97%E3%81%9F%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9">開発したサービス</a></h1> <p>YouTubeの公式APIを利用してウェブ上で切り抜きを作成・紹介できるウェブサービス「<strong>YouClip</strong>」を開発しました。</p> <div class="iframe-wrapper"><iframe width="560" height="315" src="https://www.youtube.com/embed/N801yLTnhbo" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></div> <p>ここから実際に触れます→https://youclip.app</p> <p>私自身が所属するスポーツチームの動画をYouTubeにアップすることが多くあり、試合やプレーの振り返りをするのにあったら便利だなと思ったのが着想のきっかけです。考えてみると、これはスポーツのプレー分析以外にも色々と用途があるのではないかと思い、プログラミングの学習も兼ねて一般向けのサービスとして開発を始めました。</p> <h1 id="今までの失敗と学び"><a href="#%E4%BB%8A%E3%81%BE%E3%81%A7%E3%81%AE%E5%A4%B1%E6%95%97%E3%81%A8%E5%AD%A6%E3%81%B3">今までの失敗と学び</a></h1> <h3 id="1.ハッキングを受けデータを盗まれる"><a href="#%EF%BC%91%EF%BC%8E%E3%83%8F%E3%83%83%E3%82%AD%E3%83%B3%E3%82%B0%E3%82%92%E5%8F%97%E3%81%91%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E7%9B%97%E3%81%BE%E3%82%8C%E3%82%8B">1.ハッキングを受けデータを盗まれる</a></h3> <p>開発を始めて間もないある日、いつものように本番サイトを開こうとするとエラーでページが表示されません。おかしいなと思いサーバ上のDBを確認すると、あったはずのテーブルが全て消えており、見慣れない<strong>WARNING</strong>と言う名のテーブルが1つだけありました。そこにはデータが1つだけ入っており、「データを復元して欲しければビットコインを振込め」との脅迫文が書かれていました。<br /> <img width="100%" alt="YouClip demo" title="YouClip demo" src="https://youclip-storage.s3.ap-northeast-1.amazonaws.com/thumbs/warning.png"><br /> (テーブルに入っていた全文)</p> <pre><code>To recover your lost databases and avoid leaking it: visit xxxx and enter your unique token xxxx and pay the required amount of Bitcoin to get it back. Databases that we have: xxxx, xxxx. Your databases are downloaded and backed up on our servers. If we dont receive your payment in the next 9 Days, we will sell your database to the highest bidder or use them otherwise. </code></pre> <blockquote> <p>(日本語訳)<br /> 失ったデータを復元し漏洩したくなければ、xxxxのサイトを訪れ、記載のトークンを入力した上で指定された金額のビットコインを支払え。お前のデータベースはダウンロードし、我々のサーバにバックアップしてある。9日以内に支払いがなければ、誰か高く買ってくれる人に売るか、別の方法で利用するだろう。</p> </blockquote> <p>そこではじめて何者かが<strong>DBをハッキングし、データを人質にビットコインを身代金として要求している</strong>のだと分かりました。幸いまだ開発初期で、ユーザーは身内と知り合い数人しかいなく、個人情報もメールアドレスくらいだったので、彼らにはお詫びをしてデータは諦めることにしました。まさかサーバに上げてすぐにハッキングされるとは思ってもおらず、衝撃でした。</p> <p>原因は、あまり深く考えずサーバにphpMyAdminを入れていたのですが、<strong>アカウント名やパスワードが単純</strong>だったため<strong>ブルートフォースアタック</strong>(総当り攻撃)でハッキングされたのだと思います(アホすぎるorz)。セキュリティに無知だった自分が悪いのですが、これが正式なリリース後だったら・・とゾッとしました。リリースする際には十二分にセキュリティ対策をしようと、苦い教訓となりました。(当然現在はphpMyAdminも入れてません)</p> <h3 id="2.α版をリリースするも作り直しを決意する"><a href="#%EF%BC%92%EF%BC%8E%CE%B1%E7%89%88%E3%82%92%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%B9%E3%81%99%E3%82%8B%E3%82%82%E4%BD%9C%E3%82%8A%E7%9B%B4%E3%81%97%E3%82%92%E6%B1%BA%E6%84%8F%E3%81%99%E3%82%8B">2.α版をリリースするも作り直しを決意する</a></h3> <p>当初作ろうと思っていた機能とデザインを一通り実装し終えたので、α版として身近な友人や親戚に使ってもらうことにしました。Adobe XDでUI案を作った段階で友人などからフィードバックはもらっていたし、自分でも使いやすく作ったつもりだったので、それほど大きな問題はないだろうと思ってました。しかし、いざ使ってもらうと<strong>肝心の切り抜き機能が使いづらい</strong>と感じる人が多いことが分かりました。そのため、<strong>切り抜き機能のフローやUIを抜本的に見直す</strong>ことを決意し、その影響はサービス全体にも及んで結果として大改修をする羽目になりました。</p> <p>Adobe XDでUI案を作った段階で友人からフィードバックをもらっていたのですが、それでも今回の問題に気付けなかったのは、2つ陥りがちな罠にはまっていたと思います。</p> <ul> <li>画面デザインを見せて意見を聞くだけで、<strong>ユーザーが操作しているところを観察しなかった</strong></li> <li>元からサービスの内容を知っている友人に意見を聞くだけで、<strong>完全に初見の人からフィードバックをもらわなかった</strong></li> </ul> <p>やはり実際に<strong>操作するのを見て初めて気が付く</strong>ことが多くあり、XDの画面デザインを見せるだけでなく、<strong>プロトタイプ機能</strong>を使って模擬的に操作してもらうべきでした。また、サービスの前提知識がある人やITリテラシーが高い人だと、多少分かりにくくても使いこなせてしまいます。実際にこれから使うターゲットユーザーに合わせ、<strong>初見でITリテラシーもそこまで高くない人</strong>からもフィードバックをもらうべきでした</p> <h3 id="3.巻き返しのため海外フリーランサーを雇うも無駄金となる"><a href="#%EF%BC%93%EF%BC%8E%E5%B7%BB%E3%81%8D%E8%BF%94%E3%81%97%E3%81%AE%E3%81%9F%E3%82%81%E6%B5%B7%E5%A4%96%E3%83%95%E3%83%AA%E3%83%BC%E3%83%A9%E3%83%B3%E3%82%B5%E3%83%BC%E3%82%92%E9%9B%87%E3%81%86%E3%82%82%E7%84%A1%E9%A7%84%E9%87%91%E3%81%A8%E3%81%AA%E3%82%8B">3.巻き返しのため海外フリーランサーを雇うも無駄金となる</a></h3> <h4 id="3−1.Crowdworks経由で中国人のエンジニアと働く"><a href="#%EF%BC%93%E2%88%92%EF%BC%91%EF%BC%8ECrowdworks%E7%B5%8C%E7%94%B1%E3%81%A7%E4%B8%AD%E5%9B%BD%E4%BA%BA%E3%81%AE%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%81%A8%E5%83%8D%E3%81%8F">3−1.Crowdworks経由で中国人のエンジニアと働く</a></h4> <p>大改修により、当初の予定よりだいぶリリース時期が遅れることが見込まれたため、巻き返しに<strong>スポットで外部のエンジニアを雇えないか</strong>考えました。知り合いをはじめ、Twitterや、<a target="_blank" rel="nofollow noopener" href="https://crowdworks.jp/">クラウドワークス</a>、<a target="_blank" rel="nofollow noopener" href="https://www.lancers.jp/">ランサーズ</a>などのクラウドソーシングサイトを利用して、フリーランスエンジニアの方々に連絡してみましたが、いいなと思う人はやはり時給にすると5,000円以上といった感じでした。<strong>自腹を切る上に、どれぐらい開発に時間がかかるかも読み切れない</strong>中で、言い方は悪いですが少しでもコストパフォーマンスの良さそうな人を必死に探しました。</p> <p>そんな中、<a target="_blank" rel="nofollow noopener" href="https://crowdworks.jp/">クラウドワークス</a>に登録していたエンジニアの1人が、技術スタックや経験、公開しているポートフォリオの観点からも良さそうで、かつ時給3,000円程度のオファーだったので、その人にお願いしてみることにしました。やりとりしている段階で気が付きましたが、登録してある情報は日本語でしたが実際には彼は<strong>中国人</strong>で、英語と中国語しか使えないようでした。私自身は留学経験もあり、英語でやりとりするのに抵抗はなかったのでそのまま彼と契約することにしました。</p> <p>彼とは作業時間に応じて支払いをする形(プロジェクト形式)で、途中休暇を挟みながらも足掛け2ヶ月程度リモートで一緒に働いたのですが、<strong>完成前に契約を打ち切りました</strong>。今も使っている有用なライブラリを紹介してくれたり、技術力はある程度期待通りだったのですが、次第に<strong>胡散臭いところや、面倒な交渉が多く発生するようになった</strong>のが原因です。</p> <p>例えば、タスク量はそれほど変わっていないはずなのに、<strong>後半になるにつれ作業時間がなぜか右肩上がり</strong>で増えていました。また、兄弟がコロナにかかって重症で大変なので<strong>ボーナスをくれないか</strong>と交渉されたり、契約の終わりの方には次のクライアントを見つけるのに海外のフリーランスサイトに登録したいが出来ないので、<strong>アカウントを貸してくれないか</strong>とお願いされたりしました。このようなことが積み重なって、次第に信用できなくなっていきました。</p> <h4 id="3−2.海外のクラウドソーシングサイトでインド人・ウクライナ人・スペイン人と働く"><a href="#%EF%BC%93%E2%88%92%EF%BC%92%EF%BC%8E%E6%B5%B7%E5%A4%96%E3%81%AE%E3%82%AF%E3%83%A9%E3%82%A6%E3%83%89%E3%82%BD%E3%83%BC%E3%82%B7%E3%83%B3%E3%82%B0%E3%82%B5%E3%82%A4%E3%83%88%E3%81%A7%E3%82%A4%E3%83%B3%E3%83%89%E4%BA%BA%E3%83%BB%E3%82%A6%E3%82%AF%E3%83%A9%E3%82%A4%E3%83%8A%E4%BA%BA%E3%83%BB%E3%82%B9%E3%83%9A%E3%82%A4%E3%83%B3%E4%BA%BA%E3%81%A8%E5%83%8D%E3%81%8F">3−2.海外のクラウドソーシングサイトでインド人・ウクライナ人・スペイン人と働く</a></h4> <p>ただ、<strong>作業自体はある程度スピードアップ</strong>したのは確かだったので、もう少し試してみようと、今度は直接海外のクラウドソーシングサイトを利用してみることにしました。前回の反省を活かして、数時間で出来る小さいタスクに対するコンペ方式で支払いを抑えつつ、何人か試してみていい人がいたら継続しようと考えました。</p> <p>海外のクラウドソーシングサイトで有名な<a target="_blank" rel="nofollow noopener" href="https://www.freelancer.com/">Freelancer.com</a>や<a target="_blank" rel="nofollow noopener" href="https://www.upwork.com/">Upwork</a>を使って、<strong>インド人、ウクライナ人、スペイン人</strong>と働いてみることにしました。確かに金額的には日本よりだいぶ低く抑えられましたが、<strong>お願いした仕様と全く違うもの</strong>を作ってきたり、その多くが自分でやり直さなければいけないことになりました。</p> <p>結局<strong>トータル100万円</strong>近く掛けましたが、果たしてその価値があったかと聞かれると「はい」とは素直に言えない感じになりました。日本のフリーランスの方と働いたことがないため一概には言えないものの、<strong>(中国・インド等の)海外エンジニアだからコスパ的に良いといったことはない</strong>というのが今回の感想です。</p> <h3 id="4.公開前に本家が同じ機能を発表し諦めかける"><a href="#%EF%BC%94%EF%BC%8E%E5%85%AC%E9%96%8B%E5%89%8D%E3%81%AB%E6%9C%AC%E5%AE%B6%E3%81%8C%E5%90%8C%E3%81%98%E6%A9%9F%E8%83%BD%E3%82%92%E7%99%BA%E8%A1%A8%E3%81%97%E8%AB%A6%E3%82%81%E3%81%8B%E3%81%91%E3%82%8B">4.公開前に本家が同じ機能を発表し諦めかける</a></h3> <p>改修も終えそろそろリリースできそうだなと考えていたある日、<strong>YouTube本家</strong>が動画の一部を切り取ってSNSでシェアできる<strong>クリップ</strong>と言う機能を実験的に米国で開始したと言う<a target="_blank" rel="nofollow noopener" href="https://japan.cnet.com/article/35165756/">ニュース</a>が流れてきました。</p> <p>本家が、名前もほぼそのまま、同等の機能を出してくるとは思ってもおらず、リリースしても本家に勝てるはずがないと諦めかけました。しかし少し冷静になって考えてみると、まだ実験的な位置付けで本当に追加されるかもわからないことに加え、そもそも<strong>本家は1つの場面しか切り抜けないが、YouClipは複数の場面を切り抜いて繋げられる</strong>ことなど、機能面でも違いがありました。</p> <p>そこで、この機能面の違いに目を向ければ、特定のユースケースでYouClipにも需要がまだあるのではないかと考え直し、そのユースケースに集中しようと考え直しました。具体的には、複数の場面を切り抜いて繋げる必要があるような、<strong>長時間のライブ配信</strong>がメインの<strong>VTuber動画</strong>や、<strong>ゲーム実況配信</strong>にサービスの主眼を置くことにしました。</p> <h3 id="5.β版をリリースするも使われない"><a href="#%EF%BC%95%EF%BC%8E%CE%B2%E7%89%88%E3%82%92%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%B9%E3%81%99%E3%82%8B%E3%82%82%E4%BD%BF%E3%82%8F%E3%82%8C%E3%81%AA%E3%81%84">5.β版をリリースするも使われない</a></h3> <p>そうやって何とかβ版のリリースに漕ぎ着け、知り合いやTwitter経由でユーザーを集め始めたのですが、一度はサイトに訪問してくれるものの、そのまま何もせずに帰ってしまう人がほとんどでした。Google Analyticsで見てみると、ホーム画面や再生画面の<strong>直帰率が70%近く</strong>あり、全く以て<strong>穴の開いたバケツ</strong>のような状態であることがわかりました。</p> <p>そこからは直接ユーザーに意見を聞いたり、Analyticsで取れる各種KPIや<a target="_blank" rel="nofollow noopener" href="https://clarity.microsoft.com/">Microsoft Clarity(※)</a>の画面レコーディングデータを見つつ、仮説を立てて離脱率が下がるよう改善を繰り返しました。</p> <p>例えば、再生画面の画面レコーディングを見ると、ミュート解除ボタンに気づかず、そのままミュート状態で見続けているユーザーが多くいることに気づきました。ミュート状態だと面白さは半減するため、<strong>ミュート解除ボタンをより目立つ位置と見た目に変える</strong>ことで、再生画面の離脱率を10pt%近く下げることができました。<br /> <img width="90%" alt="ミュート解除の改善" title="ミュート解除の改善" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23090/e846cb3a-c2b6-011e-3540-1b60dd190bd0.png"></p> <p>まだまだ十分とは全く言えない状態ですが、このような小さな改善を繰り返すことで、バケツの穴を少しずつ塞いでいっています。</p> <blockquote> <p>(※)Microsoftの無料ヒートマップツール「Clarity」について<br /> Clarityは、ユーザーの行動を無料で把握できる分析ツールで、匿名化されたユーザーの画面操作記録を見ることが出来ます。</p> </blockquote> <div class="iframe-wrapper"><iframe width="560" height="315" src="https://www.youtube.com/embed/KAibwlJnx9Y" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></div> <blockquote> <p>詳しくは以下のサイトなどを見てもらうと良いと思いますが、実際にユーザーがどんな風にサービスを使っているのかを知るのにとても役立ちます!<br /> https://sogyotecho.jp/clarity/</p> </blockquote> <h1 id="最後に"><a href="#%E6%9C%80%E5%BE%8C%E3%81%AB">最後に</a></h1> <p>このようにたくさん失敗をし、正直こんなことやって意味あるのか自問自答することもありましたが、長年やってみたいと思っていた個人開発でサービスを作れた事は楽しかったし良い経験となりました。</p> <p>こんなこと出来ないかと空想することから始まり、そこからどうやったら実現出来るか1つずつ考え・調べて・学びながら実装していく作業はとても楽しかったです。そうやって苦労して作ったサービスが誰かに使われているのを見るのはとても嬉しく、新しく投稿があると思わず全部いいねしてしまいます笑</p> <p>また、当然サービスをリリースしても知ってもらわなければ意味がないので、苦手なSNSの運用やマーケティングについても現在進行系で試行錯誤しながら学んでいます。(こちらも現在進行系で失敗?!しているので、いつか振り返りたい)</p> <p>以上が個人開発でサービスを公開するまでの私の失敗と学びです。<br /> 何かしら個人開発をしている人、これからしたい人の参考になれば嬉しいです!</p> Kendai