こんにちは、よーすけと申します。
プログラミングスクールを卒業したばかりの私ですが、
カリキュラムを終えて1人でイチからアプリを作るにあたり、
調べながら自身で実行した手順をメモとして残します。
初学者の方のポートフォリオ作成の際の助けになれば幸いです。
0. 対象者
- 独学またはスクール等でrailsアプリを作ったことのある方
(環境構築までは解説していませんのでご了承ください)
1. アプリを作るディレクトリを作成しよう!
(例)「ユーザー名/projects」に作る場合
$ cd
$ mkdir projects
$ cd projects
projectsディレクトリを作成し、移動してきました。
2. rails new で新規作成を宣言!
$ rails バージョン new アプリケーション名 オプション
(例)railsバージョン5.2.2.1、アプリ名「sampleapp」、DBはmysqlで作成
$ rails _5.2.2.1_ new sampleapp -d mysql
あくまで初心者向けの記事ですので、このような注意書きをしておきますが、railsのバージョンはご自身が扱ったことのある物をおすすめします。
独学時代は4を使っていたけど、ポートフォリオ作成にあたり新しい5を使おうとすると、バージョンアップで使えるもの、使えないものが混在してしまいご自身の知識外のエラーが起きてつまづきやすいです。
データベースも同様ですが、SQLを学んだことのある方はMySQLが無難でしょう。
3. 必要なGemをGemfileに追記しよう!
〜(省略)〜
(例)
gem 'devise' ユーザーがログインしてアプリを使えるようにしたい
gem 'pry-rails' デバッグの王様binding.pry
gem 'compass-rails' css書くにあたって便利
gem 'sprockets' stylesheetやjsをまとめてくれるやつ
gem 'haml-rails' html.erbではなくhtml.hamlで書く人用
gem 'carrierwave' 画像アップロードしたい人はこちらもどうぞ
これらはあくまで一例です。説明もざっくりしたものなので、ご自身が作りたいアプリに必要な機能かどうか置き換えてくださいね。
4. Gemを追記したらbundle installでしょ!
$ bundle install
gemfileに書いたgemたちをインストールしてきます。
####deviseの使い方の参考記事
https://qiita.com/aplifyjp/items/ea0d9236d89fa24a7a1c
5.データベースを作ろう!
$ rake db:create
Created database 'sampleapp_development'
Created database 'sampleapp_test'
データベース作ったらモデルを作らなきゃ
6. モデルを作成しよう!
$ rails g model モデル名(頭文字大文字単数形)
(例)
$ rails g model Customer
Running via Spring preloader in process 85033
invoke active_record
create db/migrate/20190611145950_create_customers.rb
create app/models/customer.rb
invoke test_unit
create test/models/customer_test.rb
create test/fixtures/customers.yml
頭文字大文字単数形で入れましょう。
モデルとマイグレーションファイルができました。
7. migrationファイルにテーブル設定を書こう!
class CreateCustomers < ActiveRecord::Migration[5.2]
def change
create_table :customers do |t|
t.string :name, null: false
t.string :kana, null: false
t.integer :sex, null: false
t.references :prefecture, foreign_key: true
〜(省略)〜
end
end
end
書き終わりましたらbundle exec rake db:migrate
でマイグレーションファイルの中身をテーブルに反映させます。
※気をつけていただきたいのが、references型という外部キー参照をする場合、
外部キーとして関連づけるテーブルが先にないと
「参照するテーブルがそもそもねえよ!」と怒られてしまいます。
$ bundle exec rake db:migrate
== 20190611145813 CreateTransactions: migrating ===============================
-- create_table(:transactions)
rake aborted!
StandardError: An error has occurred, all later migrations canceled:
Mysql2::Error: Table 'sampleapp_development.prefectures' doesn't exist: SHOW FULL FIELDS FROM `customers`
なのでテーブル作成をする際に、他と関わりの少ないテーブルから作る方がいいです。
あとからカラムを追加したり変更することもありますので、そこまで神経質にならぬよう。
ただデータベース設計は大事ですので、頭の中だけでやるよりも
ER図などの形にすると具体化した方が作りやすいでしょう!
####テーブル作成についての参考記事
・マイグレーションを使ったテーブル作成
https://www.javadrive.jp/rails/model/index6.html
・Rails テーブルのデータ型について
https://qiita.com/s_tatsuki/items/900d662a905c7e36b3d4
・ER図をいい感じに作れそうなモデリングツールを探してみた
http://bashalog.c-brains.jp/18/02/14-144444.php
8. modelにアソシエーションを書こう!
class Customer < ApplicationRecord
has_many :transactions # お客さんはたくさんの取引を持っている
belongs_to :prefecture # お客さんは1つの都道府県に属している
end
class Prefecture < ApplicationRecord
has_many :customers # 各都道府県はたくさんのお客さんを持っている
has_many :institutions # 各都道府県はたくさんの施設を持っている
end
など
私が開発しているアプリに乗っ取ってるので、少々お堅いテーブルばかりですみません。
このようにテーブルごとの主従関係を記述していきましょう。
ちなみに1対多の組み合わせはhas_many
とbelongs_to
ですが、
多対多というものもあります。
わかりやすい例ではLINEを思い浮かべていただいて、
ユーザーは複数のグループに入っている
グループには複数のユーザーが参加している
などです。各自調べてみてくださいね。
####アソシエーションについての参考記事
https://railsguides.jp/association_basics.html
9. ルーティングを設定しよう!
Rails.application.routes.draw do
devise_for :users
root 'users#index'
resources 'transactions'
resources 'customers'
end
脱初心者の象徴resources
でルーティングを書きましょう!
慣れない方、ページ数がそもそも少ないアプリを考えている方は直接買いてもOK
Rails.application.routes.draw do
devise_for :users
root 'users#index'
get 'tansactions/new' => 'transactions#new'
post 'transaction' => 'transactions#create'
〜(省略)〜
end
10. コントローラーを作成しよう!
$ rails g controller コントローラー名
(例)
$ rails g controller Transactions
Running via Spring preloader in process 57249
create app/controllers/transactions_controller.rb
invoke assets
invoke coffee
invoke scss
11. ビューファイルを作成しよう!
最後に
app/views
ディレクトリにhtmlファイル
app/assets/stylesheets
ディレクトリにcssファイルを作成します。
gemsprockets
を入れていればcssファイルは基本作成しただけで全て読み込んでくれます。
(仕組みを知りたい方は「アセットパイプライン」で検索してみてね)
12. いざ、サーバー起動!
$ rails s
googlechromeなどでhttp://localhost:3000
と打てばルートパスにアクセスできます。
ざっくり解説でページを見れるまでやってきましたがいかがだったでしょうか?
とりあえず最初どうするんだっけな?というときにまた見てください!
また、間違っている箇所がありましたら適宜修正を行いますのでコメントでご指摘ください