読者です 読者をやめる 読者になる 読者になる

Ruby (on Rails)入門 ~現在、勉強中(2015年6月開始)~

Ruby、Ruby on Railsを勉強中。参考書を読んだり、ネット情報を読むだけでは忘れてしまうのでメモする。

Ruby勉強中のメモ

Ruby Ruby (on Rails)プログラミング入門 Rubyの基本文法 入門

配列

  • 配列には複数の要素を格納することができる
  • 配列にはどのようなオブジェクトも要素として格納できる。(同じ配列に数値と文字列の混在などできる)

配列の使い方

配列の作成

person = ["田中", "山田", "佐藤"]

※空の配列の作成

person = []

配列内の要素の操作

要素の参照

person[0] # 田中
person[2] # 佐藤

要素の変更

person[0] = "渡辺"

要素の追加

person[3] = "吉田"

※間を飛ばして追加。飛ばされた部分はnilとなる。

person[10] = "吉村"

要素の数

person.size # 10

ハッシュ

  • ハッシュには複数の要素を格納できる
  • 要素に名前(キー)を付けて操作する

ハッシュの使い方

ハッシュの作成

シンボルを名前(キー)に使う場合

sato = {:name => "佐藤", :tel => "000011113333", :age => 23}

※シンボルとは
要素にアクセスする際に使うラベルのようなもの。
名前の前に「:」をつけるとシンボルとなる。

文字列を名前(キー)に使う場合

tanaka = {"name" => "田中", "tel" => "000011114444", "age" => 33}

ハッシュの操作

要素の参照

シンボルを名前(キー)に使う場合

sato[:name]  # 佐藤

文字列を名前(キー)に使う場合

tanaka["name"]

要素の変更

シンボルを名前(キー)に使う場合

sato[:name] = "さとう"

文字列を名前(キー)に使う場合

tanaka["name"] = "たなか"

要素の追加

シンボルを名前(キー)に使う場合

sato[:hobby] = "読書"

文字列を名前(キー)に使う場合

tanaka["hobby"] = "映画鑑賞"

オブジェクト、クラス

  • オブジェクトはデータを表現する単位
  • 数値オブジェクト、文字列オブジェクト、配列オブジェクトなど他にもある
  • クラスはオブジェクトの種類

クラスの例

Numeric, String, Arrayなど

変数

変数の決まり

どの種類の変数かは変数名で決まる。

ローカル変数とグローバル変数の違い

グローバル変数はプログラムのどこからでも変更できる(変更できてしまう)。
グローバル変数を使う場合はよく考えて使うこと。

  • プログラムの修正などでグローバル変数を変更した場合、他のプログラムで不具合が出る可能性がある。
  • プログラムの様々な部分でグローバル変数を参照・変更してしまい、変更した場合の影響範囲がわからなくなる。変更できないプログラムが出来上がっていく。

定数

変数と違い、一度代入した後、再度代入しようとすると警告される。
※警告であって、エラーでないので、代入自体はできてしまう。

条件判断

条件判断には主に下記3つの構文が使われる。 - if文 - unless文 - case文

Rubyの真偽値

  • false → falseとnil
  • true → 上記以外

論理演算子

条件1 && 条件2

条件1と条件2の両方がtrueのときにtrue

条件1 || 条件2

条件1か条件2のどちらかでもtrueであればtrue

!条件1

条件1がfalseのときにtrue

if文

単純な条件分岐

x = 10
if x >= 0 then
   print "0以上"
end

条件分岐を複数

条件を満たすものが見つかったときにその処理を実行する。
以降の条件は確認しない。

x = 10
if x >= 0 then
  print "0以上"
elsif x >= 10 then
  print "10以上"
else
  print "0未満"
end

unless文

条件がfalseのときに処理を実行

x = -1
unless x >= 0 then
  print "0未満です"
end 

case文

特定の変数をもとに処理を場合分けしたい場合に使う

x = 2
case x
when 0 then
  print "0です"
when 1 then
  print "1です"
when 2 then
  print "2です"
end

メソッドの作成

def say_hello
  print "Hello, World!\n"
end

say_hello()  # Hello, World!

別ファイルの取り込み

submodule.rb

def goodbye
  print "Good bye, World!\n"
end

playground.rb

# 別ファイルの読み込み
require "./submodule"

# 別ファイルにあるメソッドの実行
goodbye()

繰り返し

  • times
  • for
  • while
  • until
  • each
  • loop

timesメソッド

指定した回数だけ同じ処理をする

10.times do
  print "おはよう\n"
end
5.times do |i|
  print "さようなら(#{i})\n"
end

for文

iを1から100に変化させて、処理を行う

total = 0
for i in 1..100
  total += i
end
puts total

配列の要素を使って、繰り返し処理を行う

persons = ["田中", "山田", "佐藤"]
for person in persons
  puts person
end

while文

条件を満たしている間繰り返し処理を行う

total = 0
while total < 100 do
  total += 1
end
puts total

until文

条件を満たしていない間繰り返し処理を行う

total = 100
until total <= 0 do
  total -= 1
end
puts total

eachメソッド

配列や範囲から要素を取り出し、繰り返し処理を行う

persons = ["田中", "山田", "佐藤"]
persons.each do |person|
  puts person
end
total = 0
(1..100).each do |i|
  total += i
end
puts total

loopメソッド

繰り返し処理を行う。
繰り返し処理の中に終了条件を書き、繰り返しを抜けられるようにしておく

repeat_count = 0
loop do
  puts "よろしく"

  repeat_count += 1
  break if repeat_count > 5
end

break

繰り返し処理を終了する

persons = ["田中", "山田", "佐藤"]
persons.each do |person|
  puts person
  break if person == "山田"
end

next

次の繰り返し処理にスキップする

persons = ["田中", "山田", "佐藤"]
persons.each do |person|
  next if person == "山田"
  puts person
end

redo

繰り返し処理をやり直す

count = 0
persons = ["田中", "山田", "佐藤"]
persons.each do |person|
  count += 1
  puts person

  redo if count == 2
end

メソッド

メソッドの分類

インスタンスメソッド

インスタンスをレシーバとするメソッド

クラスメソッド

クラスをレシーバとするメソッド

関数

レシーバが省略できるメソッド

メソッドの定義

  • メソッド名にはアルファベット、数字、「_」を使うことができる。
  • メソッド名の先頭に数字を使うことはできない

クラスの中などに書かなければ、関数として定義される

def sayHello(name)
  puts "Hello, #{name}さん!"
end
sayHello("山田")

引数にデフォルト値を設定する

def hello(name = "World")
  puts "Hello, #{name}さん!"
end
hello()

メソッドの戻り値

メソッドの中でreturn文を使う

指定した数値を半分にして返す

def half(num = 0)
  return num / 2
end

puts half(100)

return文を省力できる。最後に得られた値が戻り値となる

def one_third(num = 0)
  num /3
end
puts one_third(99)

複数のパラメータをもつメソッド

def my_profile(name = "", hobby = "")
  puts "私の名前は#{name}です。\n趣味は#{hobby}です。"
end

my_profile("佐藤", "旅行")

ブロック付きメソッドの定義

ブロックで処理をするところでyieldを呼び出す

def repeat
  5.times do
    yield
  end
end

repeat do
  puts "さようなら"
end

引数の数が決まっていないメソッド

def hello(*names)
  names.each do |name|
    puts "#{name}さん、こんにちは"
  end
end

hello("田中", "佐藤", "山田")

キーワード引数

def my_profile(name:"", hobby:"", age: 0)
  puts "私の名前は#{name}です。\n趣味は#{hobby}で、#{age}歳です。"
end

my_profile(name: "渡辺", hobby:"旅行", age: 23)

定義に存在しないキーワード引数を指定してもエラーにしないようにする

def my_profile(name: "", hobby:"", age:0, **others)
  puts "私の名前は#{name}です。\n趣味は#{hobby}で、#{age}歳です。"
end

my_profile(name: "渡辺", hobby:"旅行", age: 23, sex:"male")

【Ruby (on Rails)プログラミング入門メモ#103】メールアドレスとパスワードを使ったログイン機能を作るサンプル ~①ユーザー登録~

Ruby Ruby (on Rails)プログラミング入門 Ruby on Rails サンプル プログラミング 入門

この記事を読んでわかること

  • メールアドレスとパスワードを使ったログイン機能の作成方法の一部(ユーザー登録)

試す前に

railsでアプリを作っておくこと

1. bcryptインストール

gemでbcryptをインストールします。

Gemfileを開きます。
bcryptに関する行はコメントアウトされているので、 コメントアウトを削除します。

bcryptに関する行がなければ、下記追記します。

# Use ActiveModel has_secure_password
gem 'bcrypt', '~> 3.1.7'

2. Userモデル作成

①モデル作成
rails g scaffold User email:string password_digest:string
マイグレーション
rake db:migrate
③バリデーションを追加&認証用の設定

user.rbを開き、下記のとおりに編集します。

class User < ActiveRecord::Base
  validates :email, presence: true, uniqueness: true # バリデーション
  has_secure_password # 認証用の設定
end

3. Viewの修正

新規作成、更新時のフォームを修正します。

修正で下記のことをしています。 - パスワード入力欄の修正 - パスワード(確認)入力欄の追加

<%= form_for(@user) do |f| %>
  <% if @user.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@user.errors.count, "error") %> prohibited this user from being saved:</h2>

      <ul>
      <% @user.errors.full_messages.each do |message| %>
        <li><%= message %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= f.label :email %><br>
    <%= f.text_field :email %>
  </div>
  <div class="field">
    <%= f.label :password, 'パスワード' %><br>
    <%= f.password_field :password %>
  </div>
  <div class="field">
    <%= f.label :password_confirmation, 'パスワード(確認)' %><br>
    <%= f.password_field :password_confirmation %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

4. Controllerの修正

新規登録、更新時にcreateアクション及びupdateアクションに
送られてくるパラメータで、許可するパラメータを変更します。

users_controller.rbを開き、 デフォルトで作成されているuser_paramsメソッドを下記のとおりに修正します。

def user_params
  params.require(:user).permit(:email, :password)
end

5. 確認

アプリを起動し、新規ユーザー登録をしてみます。 f:id:fjswkun:20160420143258p:plain

f:id:fjswkun:20160420143309p:plain

終わりに

次はログイン画面を作る

勉強で使用中書籍

・他のプログラミング言語を使える人向け。[現在使用中] プログラミング初心者には向かない。

・たのしいRubyを読み終えたら勉強するつもり

初めてのRuby

初めてのRuby

Railsを勉強するなら、まずはこれがいいらしい

RailsによるアジャイルWebアプリケーション開発 第4版

RailsによるアジャイルWebアプリケーション開発 第4版

【Ruby (on Rails)プログラミング入門メモ#102】confirmオプションでアラートが表示されない

Ruby Ruby (on Rails)プログラミング入門 Ruby on Rails サンプル 入門 プログラミング Rubyの基本文法

問題

↓の書籍で勉強していた。

RailsによるアジャイルWebアプリケーション開発 第4版

ボタンを押した時にアラートを表示したいが、
書籍に記載のソースでは表示されない。

<%= button_to 'カートを空にしますか?', @cart, method: :delete, confirm: '本当に良いですか?' %>

調べたところ、Rails 4.1からconfirmオプションが廃止されたようだ。

解決方法

では、どうやってアラートを表示するか?
dataオプションに入れてあげると表示される。

<%= button_to 'カートを空にしますか?', @cart, method: :delete, data:{confirm: '本当に良いですか?'} %>

f:id:fjswkun:20160409134912p:plain

勉強で使用中書籍

・他のプログラミング言語を使える人向け。[現在使用中] プログラミング初心者には向かない。

・たのしいRubyを読み終えたら勉強するつもり

初めてのRuby

初めてのRuby

Railsを勉強するなら、まずはこれがいいらしい

RailsによるアジャイルWebアプリケーション開発 第4版

RailsによるアジャイルWebアプリケーション開発 第4版

【Ruby (on Rails)プログラミング入門メモ#101】form_forメソッドの中で複数のモデルを扱う方法

Ruby Ruby (on Rails)プログラミング入門 Ruby on Rails サンプル 入門

この記事を読んでわかること

方法

fields_forメソッドを使う。

下記、boardモデルとcommentモデルがある場合のサンプル。
boardモデルとcommentモデルは1対多の関係。

<%= form_for(@board) do |f| %>
  <div class="field">
    <%= f.label :theme, 'テーマ' %><br>
    <%= f.text_field :theme, placeholder: "テーマを入力してください" %>
  </div>
  <div class="field">
    <%= fields_for(@comment) do |c| %>
      <%= c.label :message, '本文'  %>
      <%= c.text_field :message, placeholder: "本文を入力してください" %>
    <% end %>
  </div>
<% end %>

勉強で使用中書籍

・他のプログラミング言語を使える人向け。[現在使用中] プログラミング初心者には向かない。

・たのしいRubyを読み終えたら勉強するつもり

初めてのRuby

初めてのRuby

Railsを勉強するなら、まずはこれがいいらしい

RailsによるアジャイルWebアプリケーション開発 第4版

RailsによるアジャイルWebアプリケーション開発 第4版

【Ruby (on Rails)プログラミング入門メモ#100】railsの基本的なルート設定

Ruby Ruby (on Rails)プログラミング入門 Ruby on Rails プログラミング サンプル 入門

この記事を読んでわかること

  • 基本的なルート設定方法

railsはroutes.rbファイルにルート設定を書く。

resourcesメソッド

下記アクションが生成される。

  • index
  • show
  • new
  • create
  • edit
  • update
  • destroy
resources :categories

resourceメソッド

indexアクションが生成されない。
また、show、edit、deleteでidパラメータが必要ない。

resource :categories

ルート定義の確認

Webサーバーを起動し、下記URLにアクセスする。

http://localhost:3000/rails/info/routes

f:id:fjswkun:20160321151814p:plain

デフォルトで生成されるアクションの無効化

destroyアクション以外を生成する

resources :categories, except: [:destroy]

f:id:fjswkun:20160321154557p:plain

指定したアクションのみ生成する

indexアクションのみ生成する

resources :categories, only: [:index]

f:id:fjswkun:20160321154510p:plain

掲示板アプリ作成

【Ruby (on Rails)プログラミング入門メモ】掲示板アプリ作成(001 アプリケーション作成) - Ruby (on Rails)入門 ~現在、勉強中(2015年6月開始)~

勉強で使用中書籍

・他のプログラミング言語を使える人向け。[現在使用中] プログラミング初心者には向かない。

・たのしいRubyを読み終えたら勉強するつもり

初めてのRuby

初めてのRuby

Railsを勉強するなら、まずはこれがいいらしい

RailsによるアジャイルWebアプリケーション開発 第4版

RailsによるアジャイルWebアプリケーション開発 第4版

【Ruby (on Rails)プログラミング入門メモ】掲示板アプリ作成(002 アプリケーション作成)

Ruby Ruby (on Rails)プログラミング入門 Ruby on Rails サンプル 入門 掲示板

この記事を読んでわかること

  • scaffoldを使用して、モデルとその管理機能を作成する方法

今後作ろうと思う機能

  • 新規スレッド作成する
  • スレッドにコメントする
  • スレッドを一覧を表示する
  • スレッドの詳細を表示する
  • カテゴリを管理する

カテゴリ

スレッドをカテゴリ分けできるようにしたい。
管理者がカテゴリの作成、更新、削除ができるカテゴリ管理機能を作成します。
これはrailsのScaffoldを使うことで簡単に作成できます。

カテゴリの作成手順

1. 作成

カテゴリはデータに「id」「名前」「作成日時」「更新日時」を持つようにします。
「名前」以外はrailsで自動的に追加してくれますので、
カテゴリ作成時に「名前」の追加だけを指定してあげればいい。

下記コマンドをターミナルで実行します。
その前に、もし、Webサーバーが起動中であれば、「Ctrl + C」を押して停止します。

rails generate scaffold category name:string

f:id:fjswkun:20160321121126p:plain

2. DB作成

下記コマンドをターミナルで実行します。

rake db:migrate

f:id:fjswkun:20160321121618p:plain

3. 確認

上記の手順1と手順2でカテゴリの
「一覧」「新規作成」「更新」「詳細」「削除」機能を作成できます。

ここではその確認をします。

まずはWebサーバーを起動しておきます。

①「一覧」の確認

ブラウザで下記URLにアクセスします。 http://localhost:3000/categories

f:id:fjswkun:20160321121908p:plain

②「新規作成」の確認

一覧画面にある「New Category」のリンクをクリックします。
f:id:fjswkun:20160321122021p:plain

カテゴリ名に「ゲーム」と入力し、Create Categoryボタンをクリックします。
f:id:fjswkun:20160321122224p:plain

③「更新」の確認

「Edit」のリンクをクリックします。
f:id:fjswkun:20160321122338p:plain

カテゴリ名に「アニメ」と入力し、Update Categoryボタンをクリックします。 f:id:fjswkun:20160321122523p:plain

④「詳細」の確認

「Back」のリンクをクリックすると一覧に戻ります。
「Show」のリンクをクリックします。
f:id:fjswkun:20160321122659p:plain

⑤「削除」の確認

「Back」のリンクをクリックすると一覧に戻ります。
「Destroy」のリンクをクリックします。

f:id:fjswkun:20160321122750p:plain

OKボタンをクリックすると削除が実行されます。
f:id:fjswkun:20160321122814p:plain

おわりに

次は新規スレッドを作成しよう。

掲示板アプリ作成

【Ruby (on Rails)プログラミング入門メモ】掲示板アプリ作成(001 アプリケーション作成) - Ruby (on Rails)入門 ~現在、勉強中(2015年6月開始)~

勉強で使用中書籍

・他のプログラミング言語を使える人向け。[現在使用中] プログラミング初心者には向かない。

・たのしいRubyを読み終えたら勉強するつもり

初めてのRuby

初めてのRuby

Railsを勉強するなら、まずはこれがいいらしい

RailsによるアジャイルWebアプリケーション開発 第4版

RailsによるアジャイルWebアプリケーション開発 第4版

【Ruby (on Rails)プログラミング入門メモ】掲示板アプリ作成(001 アプリケーション作成)

Ruby Ruby (on Rails)プログラミング入門 入門 掲示板 サンプル

この記事を読んでわかること

勉強したことをもとに簡単な掲示板アプリケーションを作ります。
まだ勉強が少ないので、アプリケーションを作りつつ、
いろんなテーマに行ったり来たりすると思います。

アプリ作成

1. アプリケーション作成

ターミナルでアプリケーションを保存するフォルダに移動し、
下記コマンドを実行します。

rails new bulletinboard

少し時間が掛かります。
処理が流れるのが止まったら終わりです。 f:id:fjswkun:20160320134953p:plain

2. アプリケーション作成確認

①作成したアプリケーションのフォルダに移動する

cd bulletinboard

②webサーバーを起動する

rails server

③ブラウザを起動し下記URLにアクセスする http://localhost:3000

下記の画面が表示されれば、アプリケーションの作成成功です。
f:id:fjswkun:20160320135449p:plain

おわりに

次回に続く。

勉強で使用中書籍

・他のプログラミング言語を使える人向け。[現在使用中] プログラミング初心者には向かない。

・たのしいRubyを読み終えたら勉強するつもり

初めてのRuby

初めてのRuby

Railsを勉強するなら、まずはこれがいいらしい

RailsによるアジャイルWebアプリケーション開発 第4版

RailsによるアジャイルWebアプリケーション開発 第4版