setohimaNote

感情でネタを思いつき、論理で記事を書き上げる、暇なせとのノートブック。セトヒマノート。 https://note.com/setohima から記事を移行しました。

人生で初めてWebアプリを公開した際にやらかした3つのこと

 初めましての方は初めまして。とある企業でソフトウェアを作っているエンジニアの端くれです。
 この度、あるゲームの攻略情報を見つけやすくするために、ブラウザで見ることができるWebアプリを作って公開しました。
 作成に要した期間は2019年12月11日〜2019年12月24日、だいたい2週間ぐらい。時間は平日3〜5時間程度、休日10時間程度。合計80時間ぐらい。
 こういったものを作ったことはあれど、世の中の誰にでも使ってもらえるように公開するのは初めてでした。
 自身のTwitterを通じて他の人に伝え広めてみたところ、ありがたいことに公開から1週間で5万PVぐらいのアクセスを頂き、その後も継続的に多くの方にご利用頂いています。

 で、作ったのはいいのですが、その過程には色々と失敗してしまったことがありました。
 自身の反省を整理するついでに、これからWebアプリを作ろうと考えている方に同じような過ちを冒さないでもらうべく、3点の失敗点について書き出していきます。

前提:どうやって作ったのか

 Webアプリを作るために、 "最終的には" 以下のものを使いました。
 ・Pythonプログラミング言語
 ・Visual Studio Code(ファイル編集)
 ・Docker
 (Pythonを仮想環境上で動かす)
 ・Django
 (PythonでWebアプリを作るために必要)
 ・PythonAnywhere
 (サーバー借りてWebアプリを動かす)
 ・MySQL
 (Webアプリで表示するデータを管理)
 ・お名前.com
 (Webアプリに行くためのURLを用意)

 Webアプリを実際に作る際にはDjangoが開発の中心になっていましたが、それを使うのは初めてでした。そのため、Djangogirls(日本語版)というサイトを参考にしながら開発を行いました。

やらかし1:データを用意するのが苦行だった

 冒頭でも軽く触れましたが、今回作成したWebアプリを作った理由は『某ゲームの攻略情報やデータを見やすく加工して表示したら需要あるかな』といったものでした。これを実現するためには、当然ですが加工するための攻略情報やデータを自前で用意する必要があります。
 それを用意するために私が取った行動は……手入力によるゴリ押しです。

 今の時代、それこそ今回の開発で用いたPythonを用いると、既存のWebサイト上の攻略情報を片っ端から引っこ抜いてきてMySQLというツールに自動で保管するぐらいは簡単にできてしまいます。
 ただ、『著作権』やら『○○のパクリ』といった指摘をされてしまうリスクを考えると、そういった方法でデータを用意することはできませんでした。加工して表示するとはいえ、他サイトの攻略情報を引っこ抜いてくるのは『丸パクリ』『コピペ』と変わらないですからね。

 なので自分でデータを集め、それらの情報同士を結びつけてより価値のある情報を生み出せるようにする作業を手入力ゴリ押しで行ったのですが……冗談抜きに40時間かかりました。
 幸い今回の私は謎の活力に溢れていたため乗り越えることができましたが、データの準備に時間をかけ過ぎた結果やる気が途切れてしまいWebアプリ開発を断念する、というのはとても勿体ないです。

 もしも皆さんが初めて個人でWebアプリを作って公開しようと思うようなことがあれば、できる限り『日記』や『カレンダー』などのように『自分で予めデータを用意する必要がない』ようなツールを作ることを目的に据えることをおすすめします。
 万が一作る必要があるなら、せめて少しでも手入力を避ける方法がないか検討すべきです。今回の私は利用しませんでしたが、Pentaho Data Integration 等のデータ加工ツールを使うと捗ると思います。

やらかし2:データベースで追加料金を取られた

 ここでいう『データベース』とは、先述の "MySQL" や、これから触れる "PostgreSQL" のようにデータを管理するためのツールの総称です。

 私は開発したWebアプリをPythonAnywhereというサービスでサーバーを借りて公開しようと考えていました。そして、Webアプリで表示するデータ(やらかし1で準備したもの)を保管するためのデータベースも、そのPythonAnywhere上で利用させてもらおうとしていました。

 下調べでは、PythonAnywhereで使えるデータベースの種類は "MySQL" と "PostgreSQL" の2つ。最低限のサーバーを借りる料金さえ支払えば、どちらも無料で利用できるという情報も入手していました。
 私は普段から前者を使用していましたが、後者はあまり利用したことがありませんでした。しかし、後学のために、と考え"PostgreSQL" を利用することを選択しました。これが悲劇の始まりでした。

 やらかし1で用意したようなデータをPostgreSQL準備し終えるとともにWebアプリの開発を順調に進め、いざPythonAnywhereを利用してWebアプリを公開するのと同時に必要なデータベースの利用申請を行おうとした時でした。

PythonAnywhere公式
 『PostgreSQLを使うなら追加で 500円/月 払って』

 あれれ〜?おっかしいぞ〜?
 ……先述の "最低限のサーバーを借りる料金" として既に500円/月を支払い始めていた私にとっては思いがけない言葉でした。今回開発したWebアプリケーション自体は "PostgreSQL" を使わないといけない理由が無かったため、"PostgreSQL" を使用するのを諦め、無料で使える "MySQL" に乗り換えることにしました。

 ところで、MySQLPostgreSQLは本質的にはどちらも同じ『データベース』としての機能を持っているのですが、いざ移行するとなると細かな部分の差異があり、データを手動で加工しないともう片方に突っ込むことができません。
 この対応作業により、Webアプリがほぼ完成していたにも関わらず追加で10時間ぐらいの作業を余儀なくされました。

 即ち、これを読んでいる皆さんにお伝えしたいのは、もしPythonAnywhereのような外部サービスを利用してWebアプリケーションを公開するのなら、きちんと自分が使いたいツールが使えるかどうか、それは無料で使えるのか、といった部分を調べたうえで使用するツール等を検討したほうが良いということです。
 目の前に餌をぶら下げられながらもお預けを食らった動物のような虚無感を抱きながら10時間作業を続けるよりも、面倒だなぁと思いながら外部サービスの説明書きを数時間調べるほうが圧倒的にマシなはずです。

やらかし3:ぽっと出のWebアプリに広告付けて稼がせてもらえるほどGoogleは甘くない

 2つのやらかしを乗り越え、なんとか一般の方にも利用してもらえるようなWebアプリを作成した私。知り合いに使い心地を確かめてもらいながらも、「がんばって作ったんだからページ上に広告載せて不労所得を貰いたいよな」などという不埒なことを考え始めます。

 そこで目を付けたのは、Google AdSense。サイト上に載っている広告に "Ads By Google" というような文字が書かれているようなものを配信しているサービスで、ざっくり言えば "審査に通ればページを閲覧している人に合わせて中身が変化する広告を配信させてくれる" というものです。

 物は試し、と早速審査に挑戦してみることに。
 そして審査の結果は……なんと……

価値の低い広告枠: コンテンツが存在しない
AdSense のプログラム ポリシーに記載されているとおり、ユーザーにとって価値がほとんどないページやアプリ、または広告の比率が高すぎるページやアプリには、修正が行われるまで Google 広告が表示されません。これには、広告配信専用のページや、コンテンツが存在しないページやアプリが含まれます。

 『コンテンツが存在しない』と一刀両断されてしまいました。
 これに関して調べてみたのですが、どうもGoogle AdSenseにおける『コンテンツ』というのは『ブログの1記事』のような単位を指すものらしいのです。
 それに対して、私が今回作ったWebアプリは表面上は『検索条件(ゲーム内要素)を指定してボタンを押すと検索結果(おすすめの組み合わせ)が出力される』程度のものです。
 確証はありませんが、『コンテンツが存在しない』と捉えられても無理はないですね……。

 といったように、広告を載せるための審査に通るためには『各種広告サービスごとの専門知識』を要求されます。
 今回の私はさっぱりと諦めてしまいましたが、『広告を載せさせてもらえるようなWebアプリを作るコツ』が世の中のどこかには存在しているのかもしれません(実際、私が作ったWebアプリと同じゲームに関するWebアプリで広告を載せることができているものが存在するので……)。

まとめ

 長々とやらかした事について書き連ねていましたが、これからWebアプリを作ろうと考えている皆さんは『失敗してもいいからとりあえず動いてみる』ことから始めてみてはいかがでしょうか。

 ここまでお読みいただいた方なら薄々お察し頂いていると思いますが、Webアプリを作る時に "やらかし" をしたくないなら、下調べがとても大事です。
 ただ、やらかし1の部分でも触れたように『準備に時間をかけ過ぎた結果、やる気が皆無になってしまう』というのも勿体ない話です。まずはチュートリアル等で紹介されているものを写経するのでも構わないので1つ作り動くようにすることで、Webアプリ作りの一連の流れを理解することから始めるのも悪くないでしょう。
 人間誰しも、小さくとも成功経験を積み重ねてこそやる気が維持できる生物だと思います。

 とはいえ、失敗してしまうことがあるのもまた人間です。サガです。そこはもう諦めてください。むしろ、自分ひとりで開発しているのだから失敗してもまあ大丈夫、ぐらいの気持ちでいたほうが伸びやすいと思います。

 なんだか矛盾しているような事を書いてるように思えてきましたが、要するに『失敗できるうちに失敗しておきつつコツコツ成功経験を積む』ということができると効率良く身についていくのかな、などと若輩者なりに感じています。

 ……ということで、お互い気長に学んでいきましょう。
 ここまでお読み頂きありがとうございました。