学生向けプログラミング入門

学生向けにプログラミングを解説。Java、C++、Ruby、PHP、データベース、Ruby on Rails

Ruby on Rails 6.0によるWebアプリケーション開発10 アプリケーションの作成

<<前  [TOP]  次>>


MySQLデータベースを使用して商品管理アプリケーション「shop」を作ります。
まずはコマンドプロンプトで「work」フォルダに移動して「rails new shop -d mysql」と入力します。

アプリケーションの作成
アプリケーションの作成


「Webpacker successfully installed」とメッセージが出たら作成成功です。
作成成功
作成成功


次にWebアプリケーション用のデータベースを作成します。
作成するデータベースは3つ必要となります。
一つめは「開発用データベース」、二つめは「テスト用データベース」、三つ目は「本番用データベース」です。


  • 開発用データベース: shop_development
  • テスト用データベース: shop_test
  • 本番用データベース: shop_production


    このように「アプリケーション名_development」「アプリケーション名_test」「アプリケーション名_production」がデフォルトの名前になります。


    コマンドプロンプトで「shop」フォルダに入って「mysql -u root -p」と入力します。
    MySQLのインストール時に入力したルート(root)パスワードを聞いてきますので入力して下さい。
    これでMySQLにログイン出来ます。
    MySQLログイン
    MySQLログイン


    3つのデータベースを作成します。
    データベースの作成には「create database」を使用します。
    例えば「create database shop_development;」とすると「shop_development」データベースがMySQLに作成されます。
    最後のセミコロン(;)を忘れないようにして下さい。
    さらに「default character set utf8」として日本語文字コードの指定を行います。
    このようにデータベース作成時に文字コードを指定しないと文字化けが起こります。


    以下のコマンドでデータベースを3つ作成します。
    create database shop_development default character set utf8;
    create database shop_test default character set utf8;
    create database shop_production default character set utf8;
    データベースの作成
    データベースの作成


    ユーザを作成します。
    ユーザの作成には「create user」コマンドを使います。


    例:「create user rails@'localhost' identified by 'rails';」
    ここで「localhost」の部分を「%」にすると、別のネットワークPCからのデータベースアクセスが可能になります。
    「identified by」ではパスワードを設定できます。
    例えば「create user rails@'localhost' identified by 'administrator';」とするとユーザ名が「rails」、パスワードが「administrator」で「localhost」からのアクセス権限を与えています。


    では「create user shop@'localhost' identified by 'rails';」と入力して「shop」ユーザーを作成してみます。
    ユーザ名が「shop」、パスワードは「rails」となります。
    「shop」ユーザーの作成
    「shop」ユーザーの作成


    データベースにユーザ権限を与えます。
    権限を与えるには「grant all」を使用します。
    例えば「grant all on shop_development.* to 'shop'@'localhost';」としたら、ユーザ名がshop、ホストがlocalhostでアクセスしてきたものにすべての権限を与えるという意味になります。
    ここでlocalhostの部分を「%」にすると、別のネットワークPCからのデータベースアクセスが可能になります。
    今回は1台のPCのみで開発することを想定して「localhost」とします。


    以下の3つのコマンドを実行します。
    grant all on shop_development.* to 'shop'@'localhost';
    grant all on shop_test.* to 'shop'@'localhost';
    grant all on shop_production.* to 'shop'@'localhost';
    アクセス権限の設定
    アクセス権限の設定


    「exit;」と入力してMySQLを抜けます。
    MySQLの終了
    MySQLの終了


    Railsとデータベースを接続するためには、データベースの権限を設定した情報をRailsに知らせる必要があります。
    データベースの接続情報は「shop」フォルダの「config」フォルダにある「database.yml」に記述します。


    デフォルトの「database.yml」ファイルは以下のようになっています(コメント以外を抜粋)。
    【shop/config/database.yml】

    default: &default
      adapter: mysql2
      encoding: utf8mb4
      pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
      username: root
      password:
      host: localhost
    
    development:
      <<: *default
      database: shop_development
    
    test:
      <<: *default
      database: shop_test
    
    production:
      <<: *default
      database: shop_production
      username: shop
      password: <%= ENV['SHOP_DATABASE_PASSWORD'] %>



    大きく「開発」「テスト」「本番」の3つに分かれています。
    それぞれの項目について説明します。
    adapter: 使用しているデータベースドライバ名。今回はmysql2。
    encoding: 使用する文字コード。今回は「utf8」
    pool: 同時接続数(デフォルトは5)
    database: 使用するデータベース名。
    username: 接続するユーザ名。
    password: 接続するために必要なパスワード。
    host: データベースのホスト。


    これを以下のように書き換えます。
    「default」の「username」を「shop」、「 password」は「rails」にしています。

    default: &default
      adapter: mysql2
      encoding: utf8mb4
      pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
      username: shop
      password: rails
      host: localhost
    
    development:
      <<: *default
      database: shop_development
    
    test:
      <<: *default
      database: shop_test
    
    production:
      <<: *default
      database: shop_production
      username: shop
      password: <%= ENV['SHOP_DATABASE_PASSWORD'] %>



    ではWebサーバ「Puma」を起動します。
    Pumaを起動するにはコマンドプロンプトで「bin」フォルダに移動し、「rails server」と入力します。

    「Puma」の起動
    「Puma」の起動


    ブラウザのアドレスバーに「http://localhost:3000/」と入力してください。
    下のような画像が表示されれば成功です。
    Puma起動成功
    Puma起動成功


    <<前  [TOP]  次>>