0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

SinatraでTodoアプリ作ってみた

Last updated at Posted at 2020-03-20

概要

環境構築〜MVCの動きが一通り表現できるまでの道のりを解説します。
ruby on Railsを用いて、Webアプリを作成した経験があったので、MVCの動きをどのように表現できるのかを確認する練習として作成しました。
ruby on Railsでアプリケーションを作成したことがある人向けへの説明になります。

##環境構築編
ruby,rails,mysqlがインストールされている前提での説明になります。
mysqlでのテーブル作成に関しての説明は他の記事に譲ります。
今回はDB名:sinatra_practice、テーブル名:commentとしています。

###sinatraのインストール
Sinatraとは、軽量なWebアプリケーションフレームワークです。
gemとして用意されているので、下記のコマンドでインストールします。

sinatra.command
gem install sinatra

###sinatra_contribのインストール
sinatra_contribとは、コードを変更した際、Webサーバーを再起動せずに変更点を反映してくれるgemです。
このgemは必須ではないですが、開発がとても効率的になるので、インストールすることをおすすめします。

gem install sinatra-contrib

実装編

まずフォルダ構造、完成コードを掲載します。

フォルダ構造.
.
├── myapp.rb 
├── views
│   ├── index.erb

myapp.rb
require 'sinatra'
require 'sinatra/reloader'
require 'active_record'

ActiveRecord::Base.establish_connection(
  adapter:  "mysql2",
  host:     "localhost",
  username: "root",
  password: "",
  database: "sinatra_practice",
  socket: "/tmp/mysql.sock"
)

class Comment < ActiveRecord::Base
end
 
get "/" do 
  @comments = Comment.all
  erb :index
end

post "/new" do 
  Comment.create({body: params[:body]})
  redirect '/'
end

post "/delete" do
  puts params
  Comment.find(params[:id]).destroy
  redirect '/'
end
index.erb
<!DOCTYPE html>
<html lang="ja">
<head>
    <mata charset="utf-8">
    <title>ToDo</title>
</head>
<body>
    <h1>ToDoリスト</h1>
    <ul>
        <% @comments.each do |comment| %>
        <li data-id= "<%= comment.id %>">
            <%= comment.body %>
            <form method="post" action="/delete">
              <input type="hidden"  name="id" value="<%= comment.id %>">
              <input type="submit" value="done!">
            </form>
        </li>
        <% end %>
    </ul>
    <form method="post" action="/new">
        <input type= "text" name="body">
        <input type= "submit" value="追加">
    </form>
</body>
</html>

myapp.rbに関して

ruby on Railsを触ったことがある人向けへの解説ですが、普段あまり意識しないことも記載しておきます。

  • require
    • ライブラリの読み込み
      • sinatra/reloaderは環境構築でインストールしたinatra-contribの変更を自動反映してくれる
      • active_recordはDBのデータをRubyオブジェクトとして扱えるようにするもの
        • railsのインストールが必要
  • ActiveRecord::Base.establish_connection
    • DBへの接続情報を指定

##まとめ
SinatraはMVCを意識せずミニアプリを作成するにはもってこいだと感じました。
コードが動かない、記載について詳しく解説してほしい等あったらご連絡ください

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?