忘備録とマイルストーン

WEBエンジニアを目指す20代男性の奮闘記

プログラミング初心者がWEBサービスを作ってみる―アプリ開発編②

本格的に開発を始めることになった矢先、風邪をひいて動けなくなってしまった。先日インフルになったばかりなのに、踏んだり蹴ったりである。しかしウイルスに文句を言うわけにもいかないので、なんとか開発を進めていくことにする。

それと今回からコードハイライト表示を導入することにし、見たままモードの手軽さに安住している僕は以下のサイトをたいへん参考にさせてもらった。

www.dreamark.tokyo

また、やらかしたミスは注釈*1にし、ページ下に一覧で確認できるようにしている。

 

 

アプリの作成と初期設定もろもろ 

何よりも先に新しいenvironmentを作成しないといけない(さすがにrails-tutorial内に作るのは…)。インデント設定をruby仕様にして、久しぶりに見返したチュートリアル通りにrailsをインストール。

ここでようやくrailsのバージョンを指定(v 5.1.6)してrailsアプリを作成。
Gemfileを確認して$ bundle installをするが、さっそくエラーが出てしまった。よく読むとupdateが必要だと言っていることがわかる。(ちなみにチュートリアルにエラーが出た場合はupdateするよう明記してあった。読み飛ばしアカン、絶対。)

Running `bundle update` will rebuild your snapshot from scratch, using only

bundle installが成功したところで、gitの設定に入る。

ディレクトリ内でローカルリポジトリを、githubにリモートリポジトリを作成し連携させる。そして記念すべき初コミット!”start footballrating”と名付けておく。

 

データベース作成とジェネレーターの設定

今回はチュートリアル同様開発環境ではSQlite3を利用する。利用するデータベースの種類によってずいぶんコマンドが違うらしいが(MysqlSQliteは触ったことがあるがだいぶ違った)、直接DBを操作する事態がくるのは避けたいなあ…。そのためのフレームワークなんだし。

そして作業を始める前にジェネレーターを設定しておく。Railsガイドだけでは僕には複雑だったので、以下のサイトも参考にした。

Rails ジェネレータとテンプレート入門 - Rails ガイド

rails newしたらconfig.generatorsをまず設定しよう - Qiita

config/initializers/generators.rb

Rails.application.config.generators do |g|
  g.stylesheets false
  g.javascripts false
  g.helper      false
  g.skip_routes true
end

これで余計なcss, js, helperが生成されず、Routerを手動で入力するよう設定できた。

 

トップページを作る

まずはRouterを編集する。*2

  root to: "toppages#index"

C: toppagesを作成し、indexアクションのみ定義。V:toppages/indexが自動的にトップページとなるので、layouts/application, layouts/_navbarを編集して最低限体裁だけ整えておく。(後々気に入ったbootstrapのフリーテンプレートを導入する予定)

ついでにlayouts/applicationには、デバッグ用に

<%= debug(params) if Rails.env.development? %>を追加。

それから、後々のためにlayoutsに_errar_messages, _flash_messagesをテンプレ通り追加しておく。そして忘れていたのでGemfileにbootstrapを追加。再度$ bundle install。

 

チーム、プレーヤーを登録する

チーム名・プレーヤー名の設定はブラウザからは操作できないように設計しているので、①Teamモデル、②Playerモデルだけを作成する。

 

①Teamモデル

M: Team作成のマイグレーションファイル(改行が多いので一部)

  create_table :teams do |t|
    t.boolean :club_team, default: true
    t.string  :team_name

    t.timestamps
  end

M: Team

class Team < ApplicationRecord
  has_many :players
  has_many :teams

  validates :team_name, presence: true
end

このあたりで僕はマイグレーションファイルにコーデイングすべきことと、モデル自身でバリデーションすべきことの区別がつかなくなってきていた。整理しておこう。

migrationはDBのテーブルに対して行う⇒だからコマンドも $ rails db:migrate

validationはrails内の各モデルに対して行う

なるほど。そもそもマイグレーションはDBのテーブルを(railsを解して間接的に)いじっていることになるわけだ。DB内でデータがどのように保存されているかは意識しておく必要がありそう。

そしてそれぞれで設定できる事項も整理しておく。(ドキュメントとガイドが混在しているが気にしない)

マイグレーション(migration) - - Railsドキュメント

Active Record バリデーション - Rails ガイド

 

②Playerモデル

マイグレーションファイルとモデルはこんな感じ。

  create_table :players do |t|
    t.references :team, foreign_key: true
    t.string     :player_name
    t.integer    :position, default: 3
    t.string     :nationality

    t.timestamps
  end
class Player < ApplicationRecord
  belongs_to :team

  validates :player_name, length: {maximum: 12}, presence: true
  validates :nationality, length: {maximum: 20}
  enum       position: {Manager: 0, GK: 1, DF: 2, MF: 3, FW: 4}
end

 

そして最後に、あの忌まわしきアジアカップ決勝のチーム(日本代表とカタール代表)と、日本代表メンバー23人をrails consoleで作成してDBに保存する。これでようやく下準備が整ったかな。

 

次回予告

開発の進展に比例するように、両手首、両肩、首が悲鳴を上げ始めてきた。これは疲労によるものか、それとも風邪の関節痛か。次回、怒涛のアプリ開発編③に続く。

((歴史用語で一番格好いいのは「疾風怒濤の時代」だと思う。))

 

*1:ここにsante51のしょうもないミスが表示されるよ

*2:ミス1":"がなくてcontrolerが作成できないエラー