Ruby On Railsでアプリを作成〜開発環境を整える

アプリ作成から始めます。

環境

$sw_vers

ProductName: Mac OS X

ProductVersion: 10.13.5

BuildVersion: 17F77

$ruby -v

ruby 2.3.3p222 (2016-11-21 revision 56859) [universal.x86_64-darwin17]

$rails -v

Rails 5.1.6

$gem -v

2.5.2

$mysql –version

mysql  Ver 14.14 Distrib 5.7.21, for osx10.13 (x86_64) using  EditLine wrapper

$git –version

git version 2.15.2 (Apple Git-101.1)

rails newでアプリ作成

今回から自分一人で社内の開発をしなければならなくなったため、アプリ名はself-supportにします。

$ mkdir rails-application

$ cd rails-application

$ rails new self-support -d mysql

デフォルトだとsqlite3がデータベース管理システムとしてつかわれるようになるので、-d mysql を後ろにつけてmysqlに変えます。

$ cd self-support

$ bundle exec rails s

これでlocalhost:3000にアクセスすれば

お決まりのやつが表示されます。

このアプリで試すこと

本記事では最初の設定のみをやっていきますが、この後の記事で

  1. git(バージョン管理システム)
  2. sidekiq(メールを裏で送ったりしてくれる)
  3. capistrano(staging環境や本番環境にあげる時につかう)

をためしていきます。この3つをきっちり使えるようになればなんとか社内のシステムを回せると思うので。

MySQLとRailsアプリを連携させる

次にこのアプリ内のデータベースのusernameとpasswordを正しく設定してあげる必要があります。

$ sudo mysql.server start

mysql -u root

mysql> CREATE USER seiya@localhost IDENTIFIED BY ‘your-password’;

これでパスワードがyour-passwordのホストがlocalhostのユーザー名がseiyaのユーザーを作成できました。localhostっていうのはネットワークにつながっているコンピュータのうち、自分のつかっている方、という意味です。対義語としてはリモートホストがあり、これは通信相手のコンピュータという意味です。

確認のために次のコマンドを入力します。

mysql> select User,Host from mysql.user;

+—————+———–+

| User          | Host      |

+—————+———–+

| mysql.session | localhost |

| mysql.sys     | localhost |

| root          | localhost |

| seiya         | localhost |

+—————+———–+

4 rows in set (0.00 sec)¥

一番下にユーザーのseiyaができてますね。

次のコマンドで全ての権限を付与します。

mysql > grant all on *.* to ‘seiya’@’localhost’

rails のアプリself-supportに戻って、config/database.ymlを開いてみましょう。

default: &default
adapter: mysql2
encoding: utf8
pool: <%= ENV.fetch(“RAILS_MAX_THREADS”) { 5 } %>
username: seiya
password: your-password
host: localhostdevelopment:
<<: *default
database: self-support_developmenttest:
<<: *default
database: self-support_testproduction:
<<: *default
database: self-support_production
username: seiya
password: your-password

このようになってまして、一番上のdefaultと一番下のproductionのusernameとpasswordを先ほどmysqlで設定したusernameとpasswordにしてあげればOKです。セキュリティのことをかんがえれば、あとふたつMySQLでユーザーを作ってあげて、test(staging環境)とproduction(本番環境)に別々のものを設定したほうが良いでしょう。

これで

$ bundle exec rake db:create

しますと、

Created database ‘self-support_development’

Created database ‘self-support_test’

開発環境とstaging環境のデータベースができたっぽい。productionも反映させるためには、

$ bundle exec rake db:create:all

とすれば、

Created database ‘self-support_development’

Created database ‘self-support_test’

Created database ‘self-support_production’

このように3つとも反映されます。

一応mysqlで反映されているかどうかをしらべるために、$ sudo mysqlでMySQLに入って、

mysql> SHOW DATABASES;

とコマンドを打つと、

+————————–+

| Database                 |

+————————–+

| information_schema       |

| mysql                    |

| performance_schema       |

| self-support_development |

| self-support_production  |

| self-support_test        |

| sys                      |

+————————–+

7 rows in set (0.01 sec)

できてますね。railsアプリ上でコマンドを打ってあげるだけで、MySQLに反映されるというわけです。

データベースにテーブルを作成

じゃあデータベースにテーブルを作ってあげましょう。

$ bundle exec rails g model

できたマイグレーションファイルを開いて、

class CreateUsers < ActiveRecord::Migration[5.1]
def change
create_table :users do |t|
t.string :name
t.integer :age
t.string :email
t.string :tel
t.string :post_address
t.string :addresst.timestamps
end
end
end

このように編集して、$ bundle exec rake db:migrateすればデータベースに反映されるはずです。

db/schema.rbをみて見ると、

create_table “users”, force: :cascade, options: “ENGINE=InnoDB DEFAULT CHARSET=utf8” do |t|
t.string “name”
t.integer “age”
t.string “email”
t.string “tel”
t.string “post_address”
t.string “address”
t.datetime “created_at”, null: false
t.datetime “updated_at”, null: false
end

この部分が追加されているのでOKです。

コンソールをpryに変更

つぎに、pryを使う設定です。なぜデフォルトのコンソールじゃないかといえば答えは簡単、pryがすごく使いやすいからです。

コンソールでpryを使うためにGemfileを開いて、group :development, :test do内に

gem ‘pry-rails’
gem ‘pry-doc’
gem ‘pry-byebug’
gem ‘pry-stack_explorer’

の四行を追加して、$ bundle installします。できたら、$ bundle exec rails cをして

pry(main)> User.create(name: ohmachi)

   (0.5ms)  SET NAMES utf8,  @@SESSION.sql_mode = CONCAT(CONCAT(@@sql_mode, ‘,STRICT_ALL_TABLES’), ‘,NO_AUTO_VALUE_ON_ZERO’),  @@SESSION.sql_auto_is_null = 0, @@SESSION.wait_timeout = 2147483

   (0.2ms)  BEGIN

  SQL (0.3ms)  INSERT INTO `users` (`name`, `created_at`, `updated_at`) VALUES (‘ohmachi’, ‘2018-07-04 12:00:08’, ‘2018-07-04 12:00:08’)

   (1.5ms)  COMMIT

=> #<User:0x007fa19f4b7d30

id: 1,

name: ohmachi,

age: nil,

email: nil,

tel: nil,

post_address: nil,

address: nil,

created_at: Wed, 04 Jul 2018 12:00:08 UTC +00:00,

updated_at: Wed, 04 Jul 2018 12:00:08 UTC +00:00>

一応MySQLでも確認してみます。

mysql> SHOW DATABASES;

+————————–+

| Database                 |

+————————–+

| information_schema       |

| mysql                    |

| performance_schema       |

| self-support_development |

| self-support_production  |

| self-support_test        |

| sys                      |

+————————–+

7 rows in set (0.01 sec)

mysql> Use self-support_development

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A

Database changed

mysql> SHOW;

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ” at line 1

mysql> SHOW TABLES;

+————————————+

| Tables_in_self-support_development |

+————————————+

| ar_internal_metadata               |

| schema_migrations                  |

| users                              |

+————————————+

3 rows in set (0.00 sec)

mysql> SHOW OPEN TABLES;

+————————–+——————————————————+——–+————-+

| Database                 | Table                                                | In_use | Name_locked |

+————————–+——————————————————+——–+————-+

| self-support_development | users                                                |      0 |           0 |

mysql> select * from users;

+—-+——-+——+——-+——+————–+———+———————+———————+

| id | name  | age  | email | tel  | post_address | address | created_at          | updated_at          |

+—-+——-+——+——-+——+————–+———+———————+———————+

|  1 | seiya | NULL | NULL  | NULL | NULL         | NULL    | 2018-07-04 12:31:39 | 2018-07-04 12:31:39 |

+—-+——-+——+——-+——+————–+———+———————+———————+

1 row in set (0.00 sec)

MySQLでもusersテーブルが作成できてます。とりあえずうまくいっていますが、created_atとupdated_atが日本時間を表示していません。日本時間にするために、config/application.rbを開いて、

class Application < Rails::Application内に

config.time_zone = ‘Asia/Tokyo’

config.active_record.default_timezone = :local

の2行を追加します。そして一回コンソールを落として起動し直し、User.createをしてあげると、ちゃんと日本時間になってます。

ここでこの記事を終わります。次回はコントローラやビューをつくっていきます。