Sinatraで環境構築・データベース連携


前説

お久しぶりです。色々あって休んでしまいました。心機一転!頑張っていこうと思います。

目的

  • Sinatraで環境構築
  • アプリを一つ作る
  • SQL、ActiveRecord、Gemに対する少しの理解

Railsを用いてアプリを作っていましたが、Railsはフルスタックなフレームワークなので、根本のシステム構成の理解が乏しい感じがしました。そのため、今回はSinatraを用いての開発です。

手順

  • プロジェクト作成
  • Gemfile作成
  • Sinatra、MySQL、ActiveRecord導入
  • データベース作成
  • view、main.rbを書いていく

プロジェクト作成

Gemfile

Gemfileからbundle installをしたいのですが、SinatraではGemfileを作成しないといけません。
以下のコマンドを打つと、Gemfile生成ができます。
Railsの時のようにGemfileにgemを書いてインストールしていきます。

Terminal
$ bundle init
Gemfile
#frozen_string_literal: true

source "https://rubygems.org"

git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }

gem 'sinatra'
gem 'mysql2'
gem 'activerecord'
gem 'rake'
gem 'sinatra-activerecord'
gem 'pry'
gem 'bcrypt'

色々入れました!!

Terminal
$ bundle install

MySQLとの連携、ActiveRecord導入

私はMySQLを使うことができました。SQL文でデータベースとテーブルを作成してみましょう。
gemでの名前はmysql2なのでご注意ください。
mysql2というgemを使うことによって、MySQLと連携できます!

Terminal
$ mysql -u root
mysql>

これでMySQLにrootユーザーでログイン。
Sequel Proというアプリを使うと、GUIでデータベースやテーブルを確認できます!
ここでSQL文でテーブルを作っていきます。

mysql
mysql>CREATE [DATABASE_NAME];
mysql>USE [DATABASE_NAME];

mysql>CREATE TABLE [TABLE_NAME] (
  id INT UNSIGNED NOT NULL AUTO_INCREMENT,
  email VARCHAR(255) NOT NULL,
  url VARCHAR(255) NOT NULL,
  user_id INT UNSIGNED NOT NULL,
  created_at DATETIME NOT NULL,
  updated_at DATETIME NOT NULL,
  PRIMARY KEY(id)
);

私はRSSで情報をスクレイピングするまとめサイトのようなサイトを作るので以上のようなカラム設計となります。
PRIMARY KEY(id)は忘れないでください。
[TABLE_NAME]は小文字複数形で

mysql
mysql>SHOW [TABLE_NAME];
mysql>SHOW COLUMNS FROM [TABLE_NAME];

カラムを確認できます。

しかし、このままではSinatraのコードにSQL文を書かないといけません。
ここでActive Recordが役に立つのです。

SinatraのプロジェクトフォルダのRootディレクトリにdatabase.ymlを作成
これでMySQLで作成したデータベースに接続してくれます!
今回はdevelopment環境のみ。

database.yml
development:
  adapter: mysql2
  database: [DATABASE_NAME]
  host: localhost
  username: root
  password: [私の場合は空白]
  encoding: utf8

test:

production:

main.rbです。

main.rb
  #Gemfileからrequire
  require 'bundler'
  Bundler.require
  require 'rss'

  #database.ymlを読み込んでくれえ
  ActiveRecord::Base.configurations = YAML.load_file('database.yml')
  #development設定でお願い
  ActiveRecord::Base.establish_connection(:development)

class [TABLE_NAMEを単数形にして頭文字を大文字] <ActiveRecord::Base
  #値が空でないか
   validates_presence_of :name
   validates_presence_of :url
 end

#ルーティング
get '/' do
  erb :index
end

index.erbをViewsフォルダの中にで作成すればいい!

Terminal
$ ruby main.rb

もし何か不具合あればおしらせください!

次回

user管理や踏み込んでその他諸々を書いていきます。

参考文献

Sinatra+MySQL+ActiveRecordでDatabaseの設定を行う - 珈琲駆動開発