うつ病で唐突に仕事に行けなくなっちゃった！アプリ作って儲けるしかねぇ…

# あいさつと自己紹介
初めまして！
秋月文歌というものです。
いわゆるVtuberのような存在で普段はカードゲーム関係の動画を作ったりしている人です。
始めて技術系の記事を書くのでお見苦しいかもしれませんがお付き合いいただけますと幸いです。

さて、今回なのですが表題の通りうつ病で唐突に仕事を辞めざるを得なくなりました…

# 経緯
経緯としては、

```.経緯
元々うつ病が原因で新卒入社の会社を退職
↓
1年半療養
↓
1年転職活動（本当につらかった）
↓
再就職
↓
4か月経過で謎の猛烈な頭痛とうつ病再発で糸が切れたように動けなくなる
```

という最悪ムーブで辞めざるを得なくなりました。
せっかく拾ってもらった会社には本当に申し訳ないです…

# どうしよう

今の病状としては昼間が完全に動けない状態で、頭痛のせいで丸一日動けない日もあるといった具合です。
薬のおかげで頭痛は若干改善したんですけどね…

この状態だと、仕事について何かをするというのが難しい。
とはいえ、何もしないと本当に何もない。

今の状態なら朝と夜に動ける時間がある。
その時間に何かできないかというわけで考えました。

まずは、ココナラなどのサイトを使ってフリーランスで働くことを考えました。
ただ、ろくな経験がないので無理です。

>2020年卒で社会人になったのでコロナで入社前から決まってた入る現場が消滅。
半年社内ニートして初現場は全く知らない技術畑！
といった具合で、新卒時の会社でまともに経験を積めた期間は約9か月分と燦燦たる結果に…
再就職先も含めても稼働は1年程度なので、こんなフリーランス誰が雇うのかという話ですよね。
ほんと。

なので、他の方法を模索する必要がありました。
そこで、思いついたのが自作アプリを開発してなんとかするでした。

経験としては、Javaが学生時代に2年ほど。
Android用のJavaも1年ほど学習していた期間があります。

<strong>まあほとんど忘れたんだけどね！</strong>

でも、なんとかするしかないという形で動ける時間を使いなんとか作り始めました。

# 作るものと技術
ようやく本題です。

まずは、作るものを決めないとなりません。
そこで、まずは自分の趣味の物に近いもので考えました。

趣味はゲーム、カードゲーム、つり、野球観戦etc
になりますが、一番身近なのはカードゲームでした。

そして、ヴァイスシュヴァルツというカードゲームのカードを通販で探しているときに複数サイトで同時検索したいなとひらめきました。

>![mar_s89_032.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3890730/ff46d925-63f6-09ca-14f4-44f05845c326.png)
こんなカードです。

作るものが決まれば早速環境作って作れるかまずは検証です。

今回、作るにあたっての環境は

開発環境:Android Studio
使用言語:Kotlin,js

となります。
Kotlinを選んだ理由は、Javaをベースに改良された言語で使いやすそうだったのと
技術的に勉強難易度が他のよりは低そうに見えたのが理由ですね。

kotlinでコートを書いてみるとJavaというよりPHPに近い感触でした。
割と雑に変数に投げ込んだりできたので。

検証としては
・どうやって各通販サイトの情報を持ってくるか
ここができるかどうかで開発の可否が決まるなという感じ。

これらの解決方法としてKotlinのJSorpを使ってスクレイピングすることで実現可能と判断し開発に踏み切りました。

# 開発時に苦労したこと
スクレイピングはサイトによって難易度が変わってくるということですね。
PHPなどサーバサイド言語で開発されている（と思う）ものは簡単のできたのですが
JavaScriptで動的に読み込みが行われる場合、スクレイピングできない問題がありました。
ここで、詰まってしまってかなり苦労しました。
結果的に
リクエスト→データ解析の流れを
リクエスト→データを文字列化→データ解析という流れにしました（大雑把に言うと）
ChatGPTのをほぼコピペですけどね。

``` .ビフォー
// URLからHTMLを取得
Document doc = Jsoup.connect("https://example.com").get();
```

``` .アフター
// URLからHTMLを取得
val html = client.get(url) {
    // User-Agent ヘッダーを設定
    headers {
        append(
            "User-Agent",
            "\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36\""
        )
    }
}
//ここでテキスト化
val body = html.bodyAsText()
// JsoupでHTMLを解析
val document = Jsoup.parse(body, "UTF-8")
```

あとは、各サイトごとに違う表示形式から必要なデータを抽出するだけです。
ここはまあそこまで苦労はしなかったですね。

# できたもの
こうしてできたアプリが「WSの魔導書カタログ」です。
内容は、ヴァイスシュヴァルツというカードゲームのカード名を入力すると
カード名で一度検索し、カード名を指定したらそのカード名で複数の通販サイトで比較して表示します。

>![Screenshot_20241119_184312.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3890730/bbc89ae8-f116-6ad4-d02d-4d7e1eb2a36b.png)
「アイアンマン」で検索しました。一覧画面


>![Screenshot_20241119_184219.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3890730/c6deb296-3180-3d2f-6b88-6f7f390d07a1.png)
各サイトの検索結果

各サイトの検索結果が表示されている画面で、リストをタップすればショップのカードのページへ飛べます。
リリース優先なのでできることはこれだけに絞っています。

# 完成だ！早速公開だ！

よし、できた！公開だ！
となったのですが…

なんかクローズドテスター20人が14日連続でオプトインする必要があるという条件が出てきました。

要するにテスターを20人用意してねということです。

どうしよう。そんな人…誰かお願い！

# 人集め
今回は、私がもともとプレイヤーだったのもあって募集ポストをXで行い、いろいろな方に協力していただいてテスターをしていただきました。
リポストしてくれたiPhoneユーザーの方もいて助かりました！

こうして、14日間のテストは過ぎました。

# 公開
公開審査は難なく1日ほどで終わりました。
特に語ることなし。

# 儲け
このアプリはアドセンス広告で収入をいただく形式にしています。
今は全くです！（リリース直後だから当然）
ただ、初期投資でお金は少なからずかかってるのでまずはそこを回収できるようにといった形ですね。

# 終わりにと余談
ここまで駄文にお付き合いいただきありがとうございました。
試行錯誤の末1.0.0をリリースしましたがまだまだ改善点が多いのも現実です。
その辺はこれからつぶしていきます。

また、気が付いたことがあれば書いていきます。

そして、これの遊戯王版があるのですが、こっちはテスターがまだ集まっていません。
もしよかったら参加してもらえると嬉しいです！
https://play.google.com/apps/testing/humika.yu_gi_ohmagicbook

そして、WSの魔導書カタログをよろしくお願いいたします！
https://play.google.com/store/apps/details?id=humika.wsmagicbook