はじめに
タイトルの通りですが、Webアプリ開発初心者がRuby on Rails(以下Rails)を使ってVTuber支援サイトを作ってみました。
URL:https://www.haishincolabokun.com/
なぜVTuber支援サイトなのか
単純にVTuberが好きなので、VTuberの支援サイトを作りながらRailsを覚えたかっただけです。
事前学習(Progate)
Railsの登竜門として、Ruby on Rails チュートリアルがありますが、
そのチュートリアルの中で、事前学習としてProgateを推奨していたのでまずは以下のコースを受講しました。
・Progate
- HTML&CSS初級編~中級編
- Ruby Ⅰ~Ruby Ⅴ
- Git Ⅰ
- Command Line 基礎編
-
※Progate:月額980円のオンラインプログラミング学習サービス
URL:https://prog-8.com/dashboard
事前学習(Ruby on Rails チュートリアル)
Progateでの学習が終わったので、Railsチュートリアルで、
第1章~第10章、第13章を受講しました。
なぜ、11章~12章を飛ばしたかというと、
今回想定しているアプリは、ソーシャルログインを実装しようとしていたため、思い切って
ユーザー管理が主である11章~12章を飛ばしました。
あとは、10章の終わりで挫折しかけたのも理由です。
8章あたりから頭がパンクしていまい、10章まで流し読みするだけになってしまったので、
思い切って1章から始めることにしましたが、
そのおかげで結果的に全部理解することができました。
※チュートリアルと言いつつ自分の頭では結構難しく感じた。
Webアプリ開発に挑戦
ProgateとRailsチュートリアルで学んだ知識を活かしていざWebアプリ開発!
と言いたいところですが、思った以上に頭に定着していなかったので、結局調べながら作りました。
ですが、以下の基本的な知識があれば簡単に作ることができます。
・アプリ構成
Railsではアプリ構成が予め決まっているため、どんな構成にするか悩む必要がありません。
・MVC
モデル/ビュー/コントローラの頭文字を取ってMVC
- モデル(データを扱う)
- ビュー(ユーザに表示する部分)
- コントローラ(ユーザーからのリクエスト処理、モデルとビューの連携)
・ルーティング
ユーザーからのリクエスト(http://example.com/top等のアクセス)をルーティングによって、
適切なコントローラーに渡すことができる。
苦戦したところ
一人のユーザが複数の部屋に参加できるという仕様だったので、データベースは多対多で作る必要がありました。
Railsではアソシエーションを使って簡単に多対多のテーブルを作ることができますが、ユーザが部屋に参加したり、退出するときの処理がうまくかけず、なんとなくで動いたもので実装してしまいました。
この部分については今でも理解していないので、しっかり学習していきたいと思っています。
完全に失敗したところ
今回のアプリでは、テストを記述しませんでした。
理由としては
・とりあえず早く完成させたい。
・どうせ一人だからテストなんて必要ないだろう
・正直書くの面倒くさい・・・
などの理由がありましたが、今でも後悔しています。
開発が進むと自分でも思ってる以上に大規模なアプリになってしまい、自分だけでは管理しきれなくなっていました。
そんな状態で実装しても、簡単な実装でバグが発生したり、今まで動いてたところが動かなくなったりと、後戻りがかなり発生しました。
テストをしっかり書くことにより、バグが発生してもすぐに特定できたり、そのテストがドキュメントになったりと、開発規模が大きくなるほど
大事になってくるので、次に作るコンテンツやバージョンアップするときはしっかりテストを書こうと思いました。
※バグによる後戻りの解決よりも、テストを書くほうが絶対速い!
もう一つは、最初に機能を詰め込みすぎたところです。
レイヤーフレーム設計時に欲しい機能をどんどん詰め込んだまま実装を始めました。
その結果、今の技量では実装が難しいところが複数出てきて、
いくつかの機能を泣く泣く削除しました。
あとから調べると、最近のコンシューマー向けのWebアプリ開発では、最初に最小限の機能だけ実装してリリースし、
ユーザの意見を聞きながらアップデートする方式が多いとのことだったので、次回からそうしようと思っています。
とりあえず作り終えて
思ったよりも簡単だったと思います。
でもRailsじゃなければもっと時間が掛かったと思います。
Railsでは高速開発のための機能がたくさんあるので、Webアプリ初心者にはピッタリなフレームワークだと思います。
初心者の自分としては、Railsの基本理念の一つである「設定より規約を重視」のおかげでアプリの構成を考える必要がないので、開発に時間を多めに割くことができました。
今後やりたいこと
まずはテストを書けるようになること、
そしてデータベースの設計を覚えることです。
テストに関してはすでに書いていますが、データベースについても完全に素人だったため、今回のようなシンプルなテーブル構成ならなんとかなりますが、
規模が大きくなってくると破綻する未来しか見えません。
RailsではSQLを知らなくてもテーブル操作ができる「Active Record」というものがありますが、やはり基本的なSQL操作、テーブル設計思想は覚えたほうがいいと思いました。Amazonで人気の書籍があれば買ってみようと思います。
最後に
Webアプリの開発言語として、Railsを最初に選んだことは本当に良かったと思います。
最近人気のあるGo言語や、Node.jsと迷いましたが、高速開発ができるという謳い文句だけでRails選んでよかったです。
※Rails以外だときっと2週間以上掛かってました
最初はなんとなくで始めたWebアプリ開発ですが、簡単に全世界へ公開できることは開発のモチベーションアップに繋がると思います。
アクセス数が伸びないからSEO対策しよう!デザインをもっと良くしよう!など作って終わりじゃない感じがとても楽しいです。
そのうち今回のアプリで設計したサイトマップや、ワイヤーフレーム、テーブル設計書を公開しようと思います。
今回の設計がいかに酷かったかを、将来笑いのネタにできるようにしたいです。
以上、ここまで読んでいただきありがとうございました。
やったことを大雑把に書いてしまいましたが、誰かのお役に立てればいいなと思います。