有料のWebサービスをリリースするまでに取り組んだこと・知見をまとめました【個人開発】

# 1. 作ったサービス
![twikeshi-ogp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117180/dbadeb45-61fc-48d6-3a8c-d7908b6270d8.png)

**ツイ消し職人 | ツイ消しツールの決定版！**
**[https://twikeshi.net/](https://twikeshi.net/)**

> ツイ消しツールの決定版！
ツイ消し職人は 今までのツイートを全消しできる「ツイート一括削除ツール」 です。
3200件を超える大量のツイートを全て削除できます。
無料のツールなどでうまく削除できなかった方は是非ご利用ください。
既存のフォロワーをそのままに、Twitterをやり直すことができます。

# 2. 自己紹介
こんにちは、ひろと申します。
現在はフリーランスエンジニアとして活動しています。

# 3. なぜ作ったのか
私は2020年4月にフリーランスとして独立しました。
それに伴い、学生時代から使っていたTwitterアカウントの運用を変えようと思い、今までのツイートを削除してやり直すことにしました。
アカウントを作り直す選択肢もあったのですが、フォロワーを減らしたくなかったため、ツイ消しの道を選びました。
調べてみるとツイートの一括削除ツールがいくつか見つかったため、それを使ってツイ消しをすることにしました。

しかし、**既存のツールではツイートの削除ができませんでした。**
私の今までのツイート数は**19万件**で、Twitterアーカイブをダウンロードしたところzipファイルのサイズは**31GB**。
私が**ツイ廃**だったのが全ての原因です。

普通のツイ消しサービスは、API制限の関係で3,200ツイートが削除の上限となってしまいます。私の19万ツイートに対してはあまりに無力すぎました。

もちろん、API制限を回避するためにTwitterアーカイブをアップロードして削除を行うサービスもあります。
しかし、31GBのzipファイルを送りつけると必ず500エラーが返ってきてしまい、私の試した範囲では、まともに動くものはありませんでした。海外の有料サービスでさえダメでした。(具体的なサービス名は出しませんが、日本円で1,600円払いました。手痛い出費です)

そこで私は、「ツイ廃でもツイートを削除できるサービス」が必要だと思い、ツイ消し職人の開発を始めました。

# 4. リリースするまでに取り組んだこと
取り組んだ全てのことを記載しています。

## 一. サービスの命名
最初は「ツイートクリーナー」という名前にしていました。
開発中盤に「ツイ消し職人」という名前を思いつき、変更しました。
ランサーズなどで名前を募集するのも良いと思います。

## 二. ドメインの取得
ムームードメインでtwikeshi.netを取得しました。
欲しいドメインが埋まっている場合は、twikeshi-app.netのように工夫するのもオススメです。

## 三. 商標登録
登録しました。
今は[Toreru](https://toreru.jp/)などの便利なサービスがあり、ものすごく簡単に出願できます。
48,000円で5年間有効になります。
商標権の取る取らないを選択するのは自由ですが、後から商標を第三者に取得されて商標権の侵害警告を受けた場合、サービス名やドメインを変えなければならないリスクがあることは認識しておく必要があります。

## 四. プライシング
海外の同じようなサービスを参考に値付けを行いました。
現在は700円(税込)で提供しています。

その後、プライシングに関する本を3冊読んで([この本](https://www.amazon.co.jp/gp/product/B07KWRPBP9/)と[この本](https://www.amazon.co.jp/gp/product/B013JEK6YS/)と[この本](https://www.amazon.co.jp/gp/product/B077S7BDD9/))考え方が変わったので、そのうち値上げするかもしれません。

**間違っても、本来ターゲットでない人を取り込むために値下げするのはやめてください**。
例えば、私は友人達に「ツイ消し職人の適正価格はいくらだと思う？」と質問をすると、2人が「100円」と答えました。
しかし、断言しますが彼らは**100円でも絶対に利用しません**。何故ならば、彼らはこのツールの価値を理解していないからです。ツイ消しをしようと思ったことがない人に相場感を聞いても意味がありません。
逆に、本っっ当にツイ消しをしたくて困っている人からすれば、このツールが例え1万円でも喜んでお金を払うはずです。

## 五. 技術選定
### 1. バックエンド
バックエンドはLaravelで開発しました。
Laravelはコードもドキュメントも読みやすいため、使っていて楽しいですね。

| 役割       |       技術 |
|:-----------------|:------------------|
| PHPフレームワーク             |              Laravel |
|データベース           |           MySQL |
| Twitterログイン             |              Laravel Socialite |
| Twitter APIライブラリ             |             TwitterOAuth |
| メール送信             |             SendGrid |

### 2. フロントエンド
CSSフレームワークにはMaterializeを採用しました。初めて使ったのですが、ドキュメントが分かりやすく情報量も多いのでオススメです。
今回はフロントで処理をする必要が無かったので、基本的にJavaScriptは使っていません。ファイルアップロードの画面は、アニメーションを付けるためにVue.jsを使いました。Vue.jsは以前から使っていたので、特に困ることはありませんでした。
次はNuxt.jsに挑戦するために勉強中です。

| 役割       |       技術 |
|:-----------------|:------------------|
| CSSフレームワーク             |              Materialize |
|JavaScriptフレームワーク           |          Vue.js |
|決済           |         Stripe Checkout |

### 3. インフラ
サーバーにはレンタルサーバーを採用しています。

| 役割       |       技術 |
|:-----------------|:------------------|
| レンタルサーバー             |              エックスサーバー |

Heroku / VPS / AWS EC2 / GCP App Engineなどの選択肢もありましたが、主にコストと運用の観点から除外しました。個人開発は自分でインフラを選べるのが良いですね。
今後もどんどんサービスを作っていく予定なので、サーバー費がかさむのはイヤだし、サービスを作る度に環境を構築するのも避けたかったのです。

もちろん要件によってはレンタルサーバーが使えない場合もあります(ミドルウェアの設定変更や追加インストールが必要な場合など)。

例えば、FFmpegを使って動画のエンコード等を行う場合です。
まずrootが使えないのでインストールができません。自前でmakeして無理やり手動インストールすることも不可能ではなさそうですが、なるべく避けたいところです。また、動画のエンコード処理はCPUを食うので、運営に利用を停止される可能性があります。

このようにrootユーザーが使えないと困る場合は、状況に応じて各サービスを比較検討しましょう。
サーバーはHerokuだけどストレージにはS3を使って、DBにはCloud SQLを使うといったトリッキーなこともできます。柔軟な発想で最適な構成を作りましょう。

参考に、私の考える主なインフラサービスのメリット・デメリットをまとめておきます。
※App Engineは詳しくないので簡易的な記載になってます

| インフラサービス       |       メリット |    デメリット    |
|:-----------------|:------------------|:------------------|
| VPS(IaaS)             |              ・安い<br>・root使える |        ・借りる度にお金がかさむ<br>・環境構築や設定が必要        |
| EC2(IaaS)             |              ・root使える<br>・マイクロサービス沢山ある |        ・高い<br>・借りる度にお金がかさむ<br>・環境構築や設定が必要        |
| App Engine(PaaS)           |            ・環境構築不要 |      ・高い<br>・借りる度にお金がかさむ       |
| Heroku(PaaS)             |              ・安い<br>・環境構築不要 |        ・借りる度にお金がかさむ<br>・30秒タイムアウト辛い        |
| レンタルサーバー(ほぼPaaS)               |                ・安い<br>・1台でアプリ沢山動かせる<br>・環境構築ほぼ不要 |         ・root使えない         |

## 六. 設計
小規模なサービスなので、ここにはほぼ時間をかけていません。
ワイヤーフレームなどは作らず、実際に画面をコーディングしてレイアウトを決めました。
DB設計もパパッと考えて終わり。
開発の中で必要になったときに都度、テーブルやカラム・画面を増やしていきました。
サービスによっては色々な機能を思いつくと思いますが、まずはスモールスタートでリリースすることをゴールにしましょう。

## 七. 開発
一番時間をかけたのはこの工程です。
他の仕事が並行していたため正確ではありませんが、全体で2〜3週間はかかったと思います。
伝えたい情報がある場合はコメントを書いています。
有料サービスのみ必要になる項目には「☆」を付けています。

### 1. サービスの機能開発

#### 一. Twitterログイン
ツイ消し職人では、決済完了時とツイート削除完了時に確認メールを送信しています。
そのため、Twitter AppのAdditional permissionsとして、Request email addressにチェックを入れています。

#### 二. ☆決済
Stripe Checkoutは神。
JavaScriptをちょろっと書くだけで決済を提供できます。返金もボタンポチるだけです。
週次で売上を銀行口座に入金してくれるところも良いですね。至れり尽くせり。
ツイ消し職人はクレジットカード、Google Pay、Apple Payに対応しています。

#### 三. アーカイブアップロード
Twitterが生成したデータを読み取らないといけないので、アーカイブのどのファイルに何の情報があるのかを全て自分で調べました。
そして、ツイートの削除に本当に必要なファイルだけをアップロードさせることで、ファイルサイズを31GB→200MBまで減らすことができました。

アーカイブからはツイートの削除に必要な情報を正規表現で抽出する必要があります。
最初は、JavaScriptを使いフロント側で情報を抽出し、サーバーには最低限のデータだけ送るようにする予定だったのですが、少し時間がかかりそうだったので諦めました。

FileReader.readAsText()に100MBのファイルを食わせるとクラッシュしてしまうことが判明し、ファイルをチャンクして処理する必要が出てきたためです。
コンソールにエラーは出力されず、サイレントでクラッシュするので問題の特定に時間がかかりました。
サーバ側で抽出処理をやっても特に問題はないので、サーバ側で処理するようにしました。

#### 四. ツイート削除
ノーコメント

#### 五. 非同期処理
アップロードされてそのままツイートの削除を行うと、画面がタイムアウトしてしまいます。
そのため削除処理はLaravelのキューを使って非同期にしています。
失敗時の再実行もできるようになるので便利ですね。

#### 六. メール送信
必ずユーザーに到達するように[SendGrid](https://sendgrid.kke.co.jp/)を使っています。
返信や問い合わせを受けるためにはメールサーバーの設定が必要なので注意してください。
サーバーが用意できない場合は、G Suiteなどのホスティングサービスを利用しましょう。

#### 七. ログ出力 + Slack通知
本番での例外発生時にはSlackにスタックトレースを飛ばすようにしています。
他にも、ツイート削除処理成功時など、正常系でも重要なものはSlackに通知を飛ばしてます。

ログは、出せる項目をなるべく出すようにしています。
Laravelのログ出力について記事書いてるので興味あったら読んでください↓
[【Laravel】ログのフォーマットを変更してIPアドレスやユーザー名などを出力する](https://qiita.com/_hiro_dev/items/cea556897a36fcec31bf)

### 2. リリース準備
#### 一. LP(トップページ)作成
ユーザーに効果的に訴求できる文言を考える必要があります。
デザイナーの人は腕の見せどころだと思います。
文字や画像・アニメーションを使っていい感じのレイアウトにしましょう。

[ペライチ](https://peraichi.com/)などのツールを使っても良いと思います。
コンバージョンに直結するので、一番力を入れるべき部分です。外注も考えましょう。

ツイ消し職人のようなツール系のサービスの場合は、そんなに凝らなくても結構コンバージョンします。

#### 二. 利用規約・プライバシーポリシーの制定
[この本](https://www.amazon.co.jp/gp/product/B07Q721691)が大変参考になりました。コピペできるひな形データも付いてくるのでオススメです。

#### 三. ☆特定商取引法に基づく表示の作成
同上。
有料サービスの場合は必須です。
本名や住所、電話番号を晒さないといけないので、ここが一番の難関ではないでしょうか。
私の場合、IP電話アプリ(SMARTalk)を使い050から始まる電話番号を載せています。

#### 四. Googleアナリティクス・Search Console設定
ノーコメント

#### 五. meta description設定
Googleの検索結果でタイトルとともに出るやつです。
meta keywordは不要です。

#### 六. ファビコン設定
GIMPで作りました。
サービスのロゴがある場合はファビコンにも活かせます。

#### 七. OGP設定
GIMPで作りました。
OGP画像を動的に生成するサービスでは、トップページ用の画像を同じ方法で作るのも良いかも。
CTRに直結するので、ここも外注を検討しましょう。

#### 八. サイトマップ設定
Search Consoleで送信します。
[sitemap.xml Editor](http://www.sitemapxml.jp/)を使うと簡単に作成できます。
サイトが新しく、外部からのリンクが少ない場合はあったほうが良いみたいです。

#### 九. SNSシェアボタンの設置
↓こういうのです。
![ツイ消し職人 - twikeshi.net.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117180/71ddf9f6-9556-80d9-1554-2d0fb875a11e.png)
ユーザーに拡散してもらえる仕組みを作っておくことは重要です。

#### 十. お問い合わせフォームの設置
自分で作るのがめんどくさい場合は、[Googleフォーム](https://www.google.com/intl/ja_jp/forms/about/)や[formrun](https://form.run/ja)などを活用しましょう。
お問い合わせフォームの代わりに、チャットサポートツールを入れるのもオススメです。

### 3. リリース
#### 一. デプロイ
Laravel + レンタルサーバーの場合はgit pullすればほぼ終わりです。
あとは.env書いてマイグレーションしてキャッシュ系のコマンドを叩くだけです。
もちろん、GitHub ActionsなどのCIを設定するのも良いと思います。

私の場合は、以下のようなデプロイスクリプトを用意しています。

```shell:deploy.sh
#!/bin/sh

git pull

composer install --optimize-autoloader --no-dev

php artisan config:cache

php artisan view:cache

php artisan route:cache
```

#### 二. テスト
本番環境で全ての機能がうまく動くことを確認しました。
中規模〜大規模サービスの場合は、検証環境の用意とテスト自動化がされていないと運用がしんどくなります。

## 八. リリース後

### 1. 知り合い・友人への拡散
LINE, Twitter, Facebookなどで拡散して使ってもらいましょう。

### 2. プレスリリースを出す
お金があれば[PR TIMES](https://prtimes.jp/)などの有名サイトに出すのがオススメです。
(もしくは、法人なら[スタートアップチャレンジ](https://prtimes.jp/startup_free/)の条件を満たすと無料になります)

私はお金がなかったので、[valuepress](https://www.value-press.com/)のフリープランで配信しました。
配信は無料ですが、プレスリリースの内容を修正する場合はお金がかかるので気を付けましょう。
[3,200件を超えるツイートを一括削除できるツイ消しサービス「ツイ消し職人」を提供開始](https://www.value-press.com/pressrelease/241519)

### 3. アプリ紹介サイトに登録
私の場合、[AnyMake](https://anymake.app/)や[makepost](https://www.makepost.net/)、[Eggineer](https://www.eggineer.com/)、[Applishow](https://applishow.com/)を活用しています。

### 4. 新聞の広告枠に出稿する
リリース直後にスポーツ新聞の方から電話があり、新聞とサイトに広告を載せないかと打診がありました。
条件が合わなかったためお断りしましたが、人によっては選択肢になり得ると思います。

### 5. アフィリエイト広告に出稿する
検討しましたが、結局使いませんでした。
お金がある場合は、[A8.net](https://www.a8.net/)などの大手ASPを使うのが良いと思います。
[マネートラック](https://www.monetrack.com/)ならば初期費用0円・月額費用0円で始められるようです。

### 6. SNS広告に出稿する
以前利用していました。
私の場合はTwitterユーザーをターゲットにしたサービスなので、Twitter広告と相性が良いです。
月予算は安めでもかなりコンバージョンに繋がったので、広告費は普通に回収できています。

### 7. リスティング広告に出稿する
以前利用していました。
Twitter広告よりも予算が必要で効果が薄かったため、すぐにやめました。

### 8. 保守開発
本番環境でのエラーを監視し、新しく発現したバグがあれば修正しましょう。
手元で再現しないエラーは...ユーザー問い合わせを待つしか無い。。

もちろん、機能追加などサービス改善のための開発は怠らないようにしましょう。
大幅リニューアルや作り直しなどの選択肢もあります。

### 9. ブログなどでの発信
この記事のことですね。
Qiita, Crieit, Zenn, Note, ブログなどの選択肢があります。
サービスを知ってもらうだけでなく、転職活動などでも役に立ちます。

Noteに記事を投稿しているのでこちらも参考にしてください。
[たった2週間で作ったWebサービスで月11万円の売上を達成した話](https://note.com/_hiro_dev/n/n3332c056a65a)