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

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

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】メールアドレスとパスワードを使ったログイン機能を作るサンプル ~①ユーザー登録~

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

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

試す前に

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オプションでアラートが表示されない

問題

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

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メソッドの中で複数のモデルを扱う方法

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

方法

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の基本的なルート設定

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

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

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 アプリケーション作成)

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

  • 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 アプリケーション作成)

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

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

アプリ作成

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版