LoginSignup
11
15

More than 3 years have passed since last update.

何も知らない私が独学で3日間ruby on rails勉強しながらTODOを作ってみた

Last updated at Posted at 2021-01-08

はじめに

どうやって私がruby on railsを勉強したのかについて詳しく説明します!

なぜrubyを勉強したのか?

日本でrubyを使うことがあると聞きました。
いつかrubyプロジェクトに出会いそうで勉強を始めました。

rubyを勉強した方法

上リンクにある例をすべて確認しました。
重要なポイントだけ実行しながら勉強しました!
わからないことが出てきたら後で参考にすることにしました。

# variable and operate
num1 = 10
num2 = 20
result = num1 + num2

# print string
puts "result is #{result}"

# if else condition
if result > 10
    puts "result > 10"
else
    puts "else condition"
end

# loop
# start <= n <= end
for n in 1..5
    puts "#{n}"
end

# array (list)
arr = [1, 2, 3]
for n in arr
    puts "#{n}"
end

# hash (dict)
hash = Hash[
    "a" => 100, 
    "b" => 200
]
puts "#{hash['a']}"
puts "#{hash['b']}"

# block
def helloworld
    puts "hello world"
end
helloworld()

def add(num1, num2)
    puts "sum is #{num1 + num2}"
end
add(5,8)

railsを勉強した方法

上リンクにある例を部分的に参考にしました。

railsをインストールする

gem install rails

railsがよくインストールできたのか確認する

rails --version
Rails 6.1.0

プロジェクトを作る

rails new todo

optionを見る

rails s --help

サーバーを実行する 

rails s

mysqlを作る

docker-compose.yml

version: '3'

services:
  db:
    image: mysql:8.0
    container_name: mysql
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: todo
      MYSQL_USER: docker
      MYSQL_PASSWORD: docker
      TZ: 'Asia/Tokyo'
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    ports:
    - 3306:3306

docker-compose up -d

dockerを利用して簡単にmysqlを作りました:)

勉強しながら出会った最悪の問題

上記のリンクからrubyをダウンロードしました。

ruby --version
ruby 3.0.0p0 (2020-12-25 revision 95aff21468) [x64-mingw32]

gem --version
3.2.3

最初は全然わからなかったです。
windows10でrubyを使うのはダメだったこと…

mysqlと繋ぐとき問題に出会いました。

問題1

Puma caught this error: Error loading the 'mysql2' Active Record adapter. Missing a gem it depends on? mysql2 is not part of the bundle. Add it to your Gemfile. (LoadError)

問題1解決

Gemfileにしたのコードを追加

gem 'mysql2'
bundle install

問題2

Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
...
Cannot find include dir(s)
C:\Users\dev\mysql-connector-c-noinstall-6.0.2-win32/include/include

問題2解決

bundle config --local build.mysql2 "--with-mysql-dir=C:\Users\dev\mysql-connector-c-noinstall-6.0.2-win32"
bundle install

問題3

client.c:1350:38: error: 'MYSQL_DEFAULT_AUTH' undeclared (first use in this
function); did you mean 'MYSQL_SECURE_AUTH'?
 1350 |   return _mysql_client_options(self, MYSQL_DEFAULT_AUTH, value);
      |                                      ^~~~~~~~~~~~~~~~~~
      |                                      MYSQL_SECURE_AUTH

問題3解決

Gemfileにしたのコードに修正

gem 'mysql2', '~> 0.4.10'

問題4

C:/Ruby30-x64/lib/ruby/gems/3.0.0/gems/bootsnap-1.5.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `require': cannot load such file -- Win32API (LoadError)
Did you mean?  win32/sspi

ここで諦めました…
たくさん調べて分かりましたが
皆WSLを使う事実を分かりました。
ここからはWSLでプログラミングしました

WSLとは?

WSLに関する詳細は上記リンクを参照してください

WSLを利用してruby on railsとmysqlを繋ぎました。

dependencyをインストール

sudo apt-get update
sudo apt-get install autoconf bison build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm6 libgdbm-dev libdb-dev

rbenvをインストール

git clone https://github.com/rbenv/rbenv.git ~/.rbenv
git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build

rbenvをセッティング

vi ~/.bashrc
export PATH=$PATH:$HOME/.rbenv/bin 
eval "$(rbenv init -)"
source ~/.bashrc

rubyをセッティング

rbenv --version
rbenv install --list
rbenv install 3.0.0
rbenv versions
rbenv global 3.0.0
rbenv versions

db dependencyをインストール

sudo apt-get install libsqlite3-dev
sudo apt install libmysqlclient-dev

Gemfileに下のコードを追加

gem 'mysql2'

bundleをインストール

bundle install

これでmysqlと繋ぐことができました。

一つずつゆっくりプログラミング

htmlをレンダリングするために最初にしなければならないことはcontrollerを作ることでした。

rails generate controller Todo index --skip-routes

htmlレンダリングを確認した後、コードを一生懸命作成しました。  

その後、モデルを簡単に作ってmysqlでカラムを修正しました。 

rails generate model Todo content:string
rails generate model User username:string
rails db:migrate

contents table

contents.png

users table

users.png

rails session が保存できない問題

GET METHODでsessionを保存してGET METHODでsessionを呼び込んだら作動する。

GET METHODでsessionを保存してPOST METHODでsessionを呼び込んだら作動しない。

sessionがPOST METHODを使うとき保存できない問題の原因

https://stackoverflow.com/questions/18422182/rails-sessions-not-saving

csrf tokenが一致しなければsessionが初期化されることが分かりました。

csrf token問題解決方法

https://qiita.com/naberina/items/d3b14521e78e0daccdcd

csrf tokenを正常に送る方法が胃リンクで分かりました。

結果

色んな問題を乗り越えて3日たって完成することができました!!

version1.png

最初はデザインもダサいです。

機能を作ることに集中しました。

version2.gif

その後bootstrapのbreak pointとspaceを利用して反応型ウェブを作りました。

デザインも修正してtoastrライブラリーも追加しました。

version3_new.gif

最後にログインを勉強するためにsessionを利用した機能を作りました。

ユーザーを変更するuiはslick.jsを使いました。

github

まとめ

ウェブ勉強の場合TODOを作ると素早くcreate, read, update, deleteを実現することができ効果的です。
私の場合、このような方法で色んな言語やフレームワークを速く経験することができました!

11
15
1

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
11
15