1. アプリのディレクトリを作成する
-
アプリケーション名でディレクトリを作成
$ mkdir hoge
-
Gemfileを作る
$ bundle init
アプリディレクトリの中で作る
-
Gemfileの中身、「デフォルトで書いてあるコード」のコメントアウトを外す
$ vi Gemfile
でコメントアウトを外して$ cat
で確認 -
Gemfileに記述された
gem "rails"
を hoge/vendor/bundle にインストールする。
$ bundle install --path vendor/bundle
この
$ bundle install
は、「rubyのバージョンごと」にインストールされている「数少ない基本的な必要最小限のgem」の中の1つである "bundler" を利用しているのである。--path vendor/bundle
で 現在存在していないvendorディレクトリとbundleディレクトリを作りつつ、そこにbundle install されるように指定している。
- rails new する
$ bundle exec rails new . -d mysql
"rails" のgemはrubyのバージョンごと、つまりグローバルには入っていないので
bundle exec
をつけてローカルのgemを参照しないとrails new
できない。.
でカレントディレクトリを選択し、-d mysql
でデータベースの形式をmysqlにする
※ rails newする時に、「後でrspecにするから標準のテストは要らない!」という場合は、”-T” オプションを付けるとテスト作成をスキップしてくれます (20170613:追記)
-
Gemfile がコンフリクトを起こす
f
と表示されるので、yes
またはy
と入力してenterキーをおす。 -
.gitignoreを修正
-
gitignore.io上の検索窓に"rails"と入力し、出てきたコードを .gitignore に上書き保存する
-
/vendorを.gitignoreに追加
-
mailerとか、不要であれば、そのファイルはそもそも消す。共有する必要のないものはgitに載せないのが基本
2. git のリポジトリを作る
- git のリポジトリを作る
$ git init
".git" というディレクトリがこのアプリのディレクトリ内に作られ、そこにgitのローカルリポジトリが入る。
- initial commit をする
$ git add .
$ git commit -m "initial commit"
$ git add .
でカレントディレクトリの変更点を全てadd して、$ commit -m "initial commit"
でadd された変更点をローカルリポジトリにコミット、最初なのでコミットメッセージは"initial commit"
-----githubを利用する場合-----
-
github上で、アプリ名のリモートリポジトリを作成する。
-
リモートリポジトリを登録する
$ git remote add origin <リモートレポジトリのurl>
あらかじめgithubのサイトで作成しておいたリモートリポジトリのurlを、
origin
という短縮名(なんでも良いが、普通はoriginにする)で登録しておく。
- リモートリポジトリにpushする
$ git push origin master
省略せずに書くと、
git push git@github.com:DQNEO/sample.git master:master
リモートリポジトリのurlへ、master:master(ローカルのmasterをリモートのmasterに反映させる)
------github終わり------
- develop ブランチを切る
$ git branch develop
gitflowの手順に従った管理をする場合、最初に勝手に作られるmasterブランチは完成品のみを乗せていくブランチなので、すぐにdevelopブランチを切る。
- develop ブランチに乗りかえる(チェックアウトする)
$ git checkout develop
※〇〇ブランチにチェックアウトする。とは、〇〇ブランチに乗り換えること。
※commitした状態からでないとチェックアウトはできない。
$ git checkout -d <branchname>
でブランチ作成とチェックアウトが同時に行える。つまり、上記2つの作業を1つに省略できる
-
git commit --allow-empty -m "first commit"
git push origin ブランチ名
ブランチを切ったらfirst commit してリモートにもpushする
-
Githubのサイト上でdefaultのブランチをdevelopにする
-
feature/hoge_function ブランチを切る
$ git branch feature/hoge_function
gitflowの手順に従った管理をする場合、deelopブランチからfeature/<作りたい機能>ブランチを切って各featureブランチ上で作業を行っていくため、featureブランチを切る。
- feature/hoge_function ブランチに乗り換える
$ git checkout feature/hoge_function
3. READMEにデータベース設計を書く
- chatspaceなどを参照に、アソシエーションやindexなども細かく記載。
3. Gemを入れる
Gemfile.lockにバージョンが記述されるとはいえ、Gemは__絶対にバージョン指定しておくこと!__
理由↓
ただし、ローカル環境がWindows、リモート環境がLinux、というようなシチュエーションでは、バイナリありのgemだと入れるバージョンが異なってきうること、さらには片方だけ入れるgemが発生することもあって、Gemfile.lockを共有することができず、それぞれ別個に生成せざるを得なくなってしまっています。
さらに悪いことに、リモートサーバをAWSのElastic Beanstalkで生成していたため、サーバの変動ごとにGemfile.lockが生成されることとなり、Gemfileで指定しない場合、gemは常に最新版が呼ばれることとなってしまいました。
Gemfile.lockは動作環境が異なる場合は適用されないので、必ずGemfileにバージョンを指定しよう
一度指定せずに入れて、gemfile.lock に書かれたインストールされた最新バージョンの数字をそのままGemfileに書けばいいかも
基本は、後方互換のある修正はすべて受け入れればよいので数字を2つだけ書いて指定する。
数字は、x.x.x = 大幅な改変ごと.後方互換のある変更ごと.バグ修正ごと
gem "hoge", "~> 2.1" # 2.1.0以上3.0.0未満の最新のものを使用
例えばdeviseなどの大き目のgemだったり、なんだかんだでバグ修正以外の機能追加が入ると動かなくなりそうというようなものは数字3つで指定しておく。
gem "hoge", "~> 2.1.8" # 2.1.8以上2.2.0未満の最新のものを使用
4. hamlを導入する
- Gemfileに以下を追加(全ての環境で使用するので一番下に書く)
#to convert erb file to haml file
gem 'haml-rails'
gem 'erb2haml'
-
bundle installする
-
ターミナルで以下を実行
bundle exec rake haml:replace_erbs
- gitでaddしてcommitする
4. scssを導入する
- stylesheets/application.css → application.scssに変える。中身を全て消して、以下を追加
@import "./reset";
stylesheetsフォルダ内の_reset.scss(後ほど作成)を利用することで、cssを打ち消してくれる
- _reset.scssファイルを作成する
この中にリセットファイルをコピペする。YUI 3など。
ブラウザ規定のcssをリセットする(下記のコードを貼り付ける)
HTML5 Reset Stylesheet | HTML5 Doctor
__
- _variableファイルを作成する
この中に変数を定義して、他のファイルで
@import "./variable";
として利用する__
5. データベースを作成する
- データベースを作成する
$ bundle exec rake db:create
rake gem はグローバルではなくこのアプリのディレクトリ内(ローカル)にインストールされてるので、ローカルのgemを参照という意味の
bundle exec
をつける必要がある。bundler というgem はグローバルにインストールされている。
アプリケーション名_test と アプリケーション名_develop という名のデータベースがpcのデータベース保管場所に作成される。rails アプリケーション場の変化はない。
- db/seed.rbを編集して初期のデータを決めることができる
6. モデルを作成する
- モデルのクラスが記入されたファイルを、rails gem を使って作成する
$ bundle exec rails g model モデル名(小文字単数) text:string
モデルのクラスが記入された「モデル名.rb」というファイルと、テーブルの設計図であるマイグレーションファイルが作成される。
また、小技として、モデル名の後に
$ bundle exec rails g model モデル名(小文字単数) カラム名:データのタイプ カラム名:データのタイプ カラム名:データのタイプ
と入力することで、作成されるマイグレーションファイルにあらかじめカラムの設計図を自動で入力しておいてくれるので少し便利。
- マイグレーションファイルをもとに、データのテーブルを作成する
$ bundle exec rake db:migrate
マイグレーションファイルが読み込まれ、「モデル名s」という名のテーブルがpc内のデータ保管場所にある「アプリ名_develop」データベース上に作成される。「アプリ名_test」データベースには作成されない→__よくわからない__
カラムの値が空にならないようにする場合
validates_presence_of :カラム名
をモデル名.rbに記入するか、マイグレーションファイルにnull:false
を記入してDBにnullの存在を禁止するか→リンク
7. rails g の設定をする(やらなくても良い)
- config/initializers/ に、generators.rbを作成し、以下のように記入する(例)
Rails.application.config.generators do |g|
g.stylesheets false
g.javascripts false
g.helper false
g.template_engine :haml
# g.test_framework :rspec, view_specs: false, helper_specs: false, fixture: true #よくわからない
# g.fixture_replacement :factory_girl, dir: "spec/support/factories" #よくわからない
end
rails g controller
をすると、勝手に色々なファイル(coffeとか)が作成されてしまうので、デフォルトで何を生成するか設定する。template_engineには、hamlを入れておこう。
7. コントローラーを作成する
- コントローラのクラスが記入されたファイルを、rails gem を使って作成する
$ bundle exec rails g controller コントローラ名(小文字s)
このコントローラーのファイル「コントローラー名_controller.rb」が作成される。また、js(coffee)とcssファイルも作成される。helperが作成される(使うとコードが綺麗になる)
小技として、
$ bundle exec rails g controller コントローラ名(小文字s) アクション名 アクション名 アクション名
と入力することで、「コントローラー名_controller.rb」ファイル上にアクションをあらかじめ記入してくれるし、各アクションのview(html.erbファイル)も自動で作成してくれるし、「routes.rb」ファイルに各アクションへのルートを自動で入力してくれる。
rails g controller しても関連ファイルが作成されない問題が起きた。調べたところ、全く同じ症状の人がいて、"spring"というgemを削除すると問題が解決するという回答があり、試したら解決した。→リンク__ spring がよくわからない__
8. herokuにアップする
- ターミナル上でアプリケーションのファイルに移動し、herokuにログインする
$ heroku login
herokuに登録してアカウント取得、さらにheroku toolbelt をインストールしておかないと、herokuコマンドが使えない。コマンド入力後、メアド、パスワード、2factor認証などを行う。2factor認証はgoogleのiphoneアプリで登録しておいた。
- rails-2factor gemをアプリに入れる
Gemfile
group :production do
gem 'rails_12factor'
end
-
バンドルインストールでgemfileを読み込む
$ bundle install --path vendor/bundle
-
よくわからないけどなければ付け足す
config/environments/production.rb
config.assets.compile = true
- heroku上にアプリを作成する
$ heroku create アプリ名
載せたいアプリのファイル上に移動してからコマンドを実行
名前を変更したい場合は、$ heroku rename 新アプリ名
-
データベースをmysqlに変更する
$ heroku addons:add cleardb
-
config/environments/production.rb 32行目あたりの記述をtrueに変更する
config.assets.compile = true
通常本番環境ではアセットパイプラインを通る処理が自動実行されないので、それをtrueにしておく。これをやらないとcss,javascript,imageが崩れる
- mysqlのバージョンをrailsアプリのmysql gemと合わせる
- 現在のherokuのmysqlのバージョンを確かめる
$ heroku config | grep CLEARDB_DATABASE_URL
mysql:~~~~の部分
-
既存DATABASE_URLの設定を解除する
$ heroku addons:detach DATABASE -a herokuアプリのurl
-
データベース情報を再設定
$ heroku config:add DATABASE_URL='mysql2:~~ ※先程表示されたデータベース情報をmysql2:に変更して入力'
-
Heroku への Web アプリケーションのデプロイ
$ git push heroku master
-
herokuのデータベースにマイグレート
$ heroku run rake db:migrate
日本語化したい場合
gem 'rails-i18n'
をインストールするだけ!
config/locals に、ja.ymlを作成、以下の様に記述
ja:
activerecord:
models:
post: 投稿 #モデル
user: ユーザー #モデル
attributes:
post: #postモデルの
title: タイトル #カラム
content: 内容 #カラム
user: #userモデルの
name: 名前
email: Eメール
githubに書いてある