習慣は第二の天性なり

2020-02-23

Tweet

Webアプリ作った話

Webアプリを作って公開するまで。アプリ自体は過去記事参照

構想

アイデア自体は随分昔からあった。そもそもNegitaku.orgがあったし、新しいことじゃない。数年前から作る機会があれば作りたいなとは思ってたし、サービス名(Looking for GG)もその時すでに考えていた。具体的な要件だったり、技術選定はいざ作ろうとなってから考えた。

技術選定

思い返してみると最初にそんなに考えてなかった。

  • 開発用OS:MacOS
    Windowsは頭に入ってなかった。ゲーム用OSだと思っている節があるし、ゲームの環境を汚したくないので。最近は仮想環境の面もあるし、元のOSはそこまで気にしなくてもよくなってるとは思う。開発するものによってはWindowsが選ばれることも多いし。Win+VirtualBox(Ubuntu)はなんかよく落ちるからなしにした。そのまんまUbuntuでもよかったけど「Mac使ってる俺カッケー」が体験したかったのでMacにした。でもこのMacbook pro、2011年モデルで対応はHigh Sierraまで。死んでいる。

  • 言語(フレームワーク):Python/Django
    普通にPython/DjangoかRuby/Railsだと思ってた。で、触ったことがあるPythonにした。PythonWebフレームワークは他にもあるけど、Djangoなのは記事が一番多そうなので。Vue.jsとかReactとかフロントサイドらしき技術は何も考えてなかった。どこまで出来るのかとかも知らない。もともとUIとかデザイン的なところはあんまり考えるつもりがなかった。Django、開発は3.0でやってたけど、サポートの期間短いらしいので本番は2.2にしてる。

  • サーバー:さくらのVPS(Ubuntu)
    最初はHerokuかVPSかで考えてた。せっかくだからVPSにしてWebサーバーとかその辺りも勉強できるようにしようと思った。さくらのVPSは使ったことがあったからConohaにしようと思ってたら、既にさくらのVPSが契約中だった。解約したもんだと思ってた。 OSは皆CentOSを使っているのでUbuntuにしました。

  • Webサーバー:Nginx
    Apacheとどっちでもいいなら、これから先よく使われるだろうと思う方にした。

  • WSGI:Gunicorn
    最初はuWSGIにしようと思ってたけど参考書(あとで書く)がGunicornだったので。

  • DB:PostgreSQL
    MySQLとPostgreSQLでなんとなくPosgre。理由はない。

要件

対人で楽をしたかった。責任を負いたくなかった。

  • シンプルに
    小難しいこととか、機能いろいろつけたりとかで面倒になって投げ出さないようにしたかった。あとは、デザイン面で頑張るつもりがなかったので、機能もシンプルに行くのが良いと思った。

  • 個人情報をもらわない
    本当はユーザー登録すらさせたくなかったけど、投稿したものの管理とかを考えるとユーザー機能を実装した方がスッキリ済むと思った。実はユーザー機能なしで実装してて詰まってしまって、それでユーザー機能を実装した。ただ、もらう情報はメールアドレスぐらいにとどめた。

  • デザインは考えない
    考えないは嘘だけど、なにも考えずBootstrapベースのBootstrapっぽさも消すこともしなかった。オタクゲーマーが使うサイトだし色は黒ベースにしようかな〜(キリト並感)、とか考えてヘッダーを黒(Bootstrapテンプレート)にしたらもうベースはこれでいいや感が出た。テンプレート名、Darkやぞ。イカしてる。

  • 機能
    投稿/編集/削除、リスト形式で投稿を一覧化/ゲームタイトルごとに絞れる

  • 投稿できること
    名前、ゲームタイトル、内容文、Twitterリンク、HPリンク

中身については作りながら考えてるものが多い、チームの募集は、最近はいろいろ部門を抱えてるゲーミングチームが多いので、個人が複数チーム募集できるようにした。スカウト登録は1件のみ。

開発

基本ネットの情報鵜呑みベースだけど、何か基準になるものがあると良いと思って本を購入した。[現場で使える Django の教科書《基礎編》](https://www.amazon.co.jp/%E7%8F%BE%E5%A0%B4%E3%81%A7%E4%BD%BF%E3%81%88%E3%82%8B-Django-%E3%81%AE%E6%95%99%E7%A7%91%E6%9B%B8%E3%80%8A%E5%9F%BA%E7%A4%8E%E7%B7%A8%E3%80%8B-%E6%A8%AA%E7%80%AC-%E6%98%8E%E4%BB%81-ebook/dp/B07GK7BWB7/ref=sr_1_5?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=django&qid=1582079032&sr=8-5。実際の開発に役立つようなTips的な情報が載ってて良かった。ネットを検索すれば実装方法とかはいくらでも出てくるけど、Tips的な情報は探せばあるんだろうけど、簡単に見つからなかったりする。それがまとまってるのが楽だった。デプロイの時もこれの実践編を買ったけど超助かった。

そもそも特別な機能を盛り込んでないからほとんどDjangoに用意された機能で実現できるし、調べれば大抵のことは出てくるので、そこまで苦労した感がない。ただ、Djangoそもそもの動きをあまり理解せずに実装していったので、ちょっと道がそれるだけでわからなくなる。まあそれも調べれば大抵出てくるんだけど。あまりこだわりすぎなければ大抵は簡単に実装できそうだと思う。

若干こだわった部分とかもあって、ユーザーページのURLを同じにしたいとか。苦労した覚えもあるんだけど、コードをみると大したことじゃなさそうな感を今感じている。ユーザー機能(メールアドレス認証とかログインの機能とか)は調べて出てきた情報でいけたし、どこで躓いたっけな。。。苦労した感がないって書いたけど苦労はしてて、でも大抵は調べることに苦労してただけ。知恵を振り絞って解決した覚えがあまりないので、そういう点で苦労した感はない。

  • デザイン
    Bootstarpに丸投げ。とりあえず自分で見た感じで違和感ないようにしてたぐらい。もともとの構想からデザイン面は苦労せず作ろうと思ってたのでこれでヨシ! サイト内で使ってるアイコンはいらすとやから。ツイッターとかfaviconのアイコンは自作です。サイト内はまあええかーと思ってるけど、SNS系のアイコンとかは何とかしたいなーと思ってる。ロゴの発注ってそれなりにお値段がすることを初めて知った。安くて2万ぐらいからだけど、5万ぐらいは出したいなーと思ってる。お値段がかかることなので考え中。 あとは最近はWeb=スマートフォンなぐらいだと思ってるから、一応スマホでちゃんと見れるかぐらいはチェックしながら作ったつもり。

  • テスト
    やろう、やるぞ。とは思ってたけど結局あまりやってない。というかうまくやれていない。フォームの部分だったり、リストの部分だったり、ページネーションの部分だったりは動作確認をそれなりにしたけど、ユニットテストを含め再帰性のあるテストコードを書いていない。カバレッジすら取ってない。そのうちやるかーと思ってるけど、さっさとやらないとずっとやらないことになると思う。機能実装したらその都度テストを書くぐらいのアレじゃないと、どんどんめんどくさポイントが貯まって手がつけられなくなると実感した。

本番環境

実はVPSに環境を整える前に自前でUbuntu Server機をこしらえて、テストがてらデプロイ環境を構築しようと思ってやってたけど、なんか上手くできなくてやめた。その時はuWSGIを使ってた。Ubuntuのブートから既に苦労してたので、そう思うと自家製サーバー運用は大変そうだ。

上の経験があって、デプロイ環境構築に苦労しろうだなーと思ったので、[現場で使える Django の教科書《実践編》](https://www.amazon.co.jp/%E7%8F%BE%E5%A0%B4%E3%81%A7%E4%BD%BF%E3%81%88%E3%82%8B-Django-%E3%81%AE%E6%95%99%E7%A7%91%E6%9B%B8%E3%80%8A%E5%AE%9F%E8%B7%B5%E7%B7%A8%E3%80%8B-%E6%A8%AA%E7%80%AC-%E6%98%8E%E4%BB%81-ebook/dp/B07L3DRGBT/ref=pd_aw_sbs_351_1/357-8812140-6871958?_encoding=UTF8&pd_rd_i=B07L3DRGBT&pd_rd_r=a12f5631-f077-400f-8621-fa52697bd1f7&pd_rd_w=YRcgy&pd_rd_wg=LIJ95&pf_rd_p=1893a417-ba87-4709-ab4f-0dece788c310&pf_rd_r=C34BRTX4TP3E8RASBDC9&psc=1&refRID=C34BRTX4TP3E8RASBDC9を購入した。VPSの環境構築に関してはこの本でほぼ網羅できた。

本番環境はそれなりに課題が残ってる。ログ管理とかもそうだし、GunicornとNginxも無知なので勉強しときたいと思う。あとはデプロイ方法について。今はgithubを介してデプロイしてるんだけど、これでいいのか感が否めないので調べたい。

サービス開始から

サービス開始の告知ツイートをする時は結構ドキドキした。ドキドキしながら画面の前に座ってるのが嫌だったから、ツイートだけして風呂に行った。風呂でもドキドキしてた。リラックスできない風呂はよくないと思った。内心バズるかなーと思ってたけど、全然そんなこともなく収束した。そんなに流行らなくても良いと思ってたけど、まったく使われないのもアレだよなーと思った。

チームも個人も少ないが登録してもらって、せっかく登録してくれたからもうちょっと宣伝していこうかと思った。そもそも見られることがなかったら、登録してくれたのにあまり意味がないことになってしまう。

Negitaku.orgの管理者に頼んで記事を掲載してもらった。超ありがたい。ほかに頼むところが思いつかないのでここからどうするかって感じ。地道に宣伝していくしかないのかな。

感想

構想からリリースまで終始楽しかった。ひと段落終えて、今はなにもする気がなくなっている。この現象って何か名前ついてない? 触れたことのない技術に触れたし、いろいろ勉強もできてよかった。あとはとりあえずリリースできて良かった。 とりあえずやってみるのは大事だと思う。考えすぎると何もできない。

Django、完璧に理解したぞ!

よく参考にしてたサイト