fc2ブログ

ruby の while 文

ruby の while 文

#27 while文による繰り返し処理
http://dotinstall.com/lessons/basic_ruby/4727

を参考に
ruby での while 文を学習
自己代入も学習

ruby の while 文の構文は

while 繰り返しの条件 do
行う処理
end

となる

while i <10 do
puts i
i = i+1
end


とすると
1~9まで表示される
これは i<10 なのが理由で
i<=10 なら1~10までになる

自己代入演算子とは
i = i+1
というのを
i +=1
というように書くやり方のこと

似たようなもので
+=
-=
*=
/=
というのもある
スポンサーサイト



テーマ : プログラミング
ジャンル : コンピュータ

ruby でハッシュオブジェクトと繰り返し処理

ruby でハッシュオブジェクトと繰り返し処理

#26 ハッシュオブジェクトと繰り返し処理
http://dotinstall.com/lessons/basic_ruby/4726
を参考に、each メソッドをつかって
ハッシュオブジェクトを使った繰り返し処を理学習

eachメソッドを使うことで
ハッシュに対して繰り返し処理を行うことができる

scores ={"tom"=>200,"sam"=>300,"jobs"=>500}

というように、値とキーのペアがハッシュ

eachメソッドを使うことで、この
キーと値の両方を繰り返し処理で取得する

ハッシュ.each do |キーを格納する変数, 値を格納する変数|
行う処理
end

という書き方になる
| は shift + \ で入力|

今回なら
ハッシュが scores なので

scores.each do |name, score|

printf("%s 's score is %d\n", name, score)
end

これで
jobs 's score is 500
sam 's score is 300
tom 's score is 200
となる

printf() の
%s は文字列
%d は整数
になる

テーマ : プログラミング
ジャンル : コンピュータ

ruby の for / each による繰り返し

ruby の for / each による繰り返し

今回は for ループと each メソッドで繰り返し処理

これは、オブジェクトの中身の要素分だけ繰り返す

PHPの foreach() とおなじような処理になる

まず、for ループ

for 変数 in 配列 do
行う処理
end

となる

users =["tom","sam","jobs"]
と3人の名前を用意

これを配列分表示するなら
for user in users do
puts user
end

とする

これで、配列 users の中身が user という変数に格納され
それを puts user で表示している
このループは配列の中身の分だけループするので
tom
sam
jobs
となる

同じようなメソッドとして
each メソッドがある
これもループするメソッドで

構文は
配列.each do |変数|
行う処理
end
となる

users =["tom","sam","jobs"]

users.each do |user|
puts user
end

とすると、 for のときと同じ結果が得られる

for は単純ループでも使われる

構文はいまいち理解できていないけど
for i in 1..10 do
puts i
end

とすることで
1~10まで表示される

テーマ : プログラミング
ジャンル : コンピュータ

ruby で times メソッドによる繰り返し処理

ruby で times メソッドによる繰り返し処理

ruby の繰り返し処理でいちばん基本になるのが
times メソッド

構文は

繰り返す回数.times do
行う処理
end

となる

10.times do
puts "Hi !"
end
とすると

Hi!
Hi!
Hi!
Hi!
Hi!
Hi!
Hi!
Hi!
Hi!
Hi!

と10回繰り替えされる

ループ回数を出すには

10.times do |i|
puts "#{i} Hi!"
end
とする

| は shift +\ で入力

i の値は0からになる
1からじゃないので注意

これでループ回数が表示される

テーマ : プログラミング
ジャンル : コンピュータ

ruby の case 文について

ruby の case 文について

ruby の case 文は

case 条件
when ケース1:
 ケース1のときの処理
when ケース2:
 ケース2のときの処理
else
 それ以外のときの処理
end

という構文になる

PHPの switch 文に近い処理になる
switch の場合だと
switch(条件){
case ケース1:
 ケース1の処理;
 break;
case ケース2:
 ケース2の処理
 break;
default:
 それ以外のときの処理
 break;
}
というかんじになる

つまり
switch が case
case が when
default が else end

と置き換えるとわかりやすい

when には、複数条件の指定が可能

今回、ドットインストールのをみ てやってみた

gnal ="yellow"

case signal
when "red":
puts "stop"
when "green","blue"
puts "go"
when "yellow":
puts "caution"
else
puts "signal is broken"
end
とすることで
when "green":
に該当するため
実行すると
caution が表示される

テーマ : プログラミング
ジャンル : コンピュータ

ruby の比較演算子について

ruby の比較演算子について

#22 比較演算子について
http://dotinstall.com/lessons/basic_ruby/4722
を参考に学習

ruby で使える比較演算子は
> < >= <= == !=
というように、他の言語でもおなじみのものが使える

変わっているのとしては
=~ という正規表現とのマッチングを調べるのがある

正規表現は Linux のシェルとかPHPなどで多く使われる

puts "match" if /taguchi/ =~ "my name is taguchi"
という場合
// の間の文字の taguchi が
比較する文の中にあるので
puts で match と表示される


また、条件をつなげるには
PHPなどでお馴染みの 
&&
||
というものも使える

正規表現を試すツールも存在しており
http://rubular.com/
というものもある

テーマ : プログラミング
ジャンル : コンピュータ

ruby のif の別の書き方

ruby のif の別の書き方

#21 if文の別の書き方を理解しよう
http://dotinstall.com/lessons/basic_ruby/4721
を参考に
ruby での if の別の書き方を学習

if score >= 80 then
puts "great"
end

という単純な if の場合には
もっと簡単に

puts "great" if score >=80
という書き方もできる
これを使えば、簡単な判定で表示を変えるようなことができる

また条件演算子というものがあり
これは、 if else の別の書き方

書き方は、
条件 ? 値1 : 値2
という書き方

これはPHPなどで使う三項演算子と同じ

a =50
b = 20
で大きいほうの値をかえすようにするなら
max = a > b +? a : b
p max

これで、50が表示される

ruby の場合、他の言語とことなり
あまり() を使わないけど、基本的部分はおなじなので
他の言語を取得しているなら
わかりやすい

テーマ : プログラミング
ジャンル : コンピュータ

ruby の if 文について

ruby の if 文について

rubyの if 文の注意点として
ruby の場合 false と nil だけが偽として扱われる

このため数値の0とか、空文字に関しては
他の言語とは異なり、真として扱われるので注意

scoreが85点以上のときに処理する if 文を書くには

score = 85

if score >= 85 then
puts "great!"
end

というようになる

ruby の if の構文は

if 条件式 then
行う処理
end

というように、シェルスクリプトに近い書き方になる
PHP java のように、条件を()で囲まない

if else にするには

if 条件式 then
真の時の処理
else
偽の時の処理
end

というようになる

else if の処理もするなら

if 条件式 then
真の時の処理
elsif 条件式2
条件式2にあてはまったときの処理
else
どちらでもなかったときの処理
end

というようにする

else if ではなく elsif なので注意

テーマ : プログラミング
ジャンル : コンピュータ

ruby の printf メソッドについて

ruby の printf メソッドについて

ruby の printf は
p / put の高機能版になる

これは、フォーマット指定して表示できる

これは、C言語の printf() と同じ機能

java とかで 変数に代入した値と + で合わせて表示するときと同じことができる

x ="hebereke"
y=22

printf("%s's year is %d\n",x,y);
とすることで
hebereke's year is 22
と表示される

%s は文字列
%d は整数

桁数の指定も可能で
%10d とすれば、10桁表示になる
22のように10桁ない場合には
空欄で 22 というように左側に空欄ができる
左寄せにしたいのなら
%-10d というように - をつける

空白ではなく、0で埋めたいのなら
%-010d とすれば
hebereke's year is 0000000022
というように
0で空白が埋められる

もっと便利な関数が
sprintf()
これ、よくPHPで見かけるメソッドで
この sprintf() は
表示ではなく、値を返す

これを使うと、sprintf() の値を変数に格納できるので
コードを書くときに便利になる

z = sprintf("%s's year is %-010d\n",x,y)
p z
とすると
"hebereke's year is 0000000022\n"
と表示される

テーマ : プログラミング
ジャンル : コンピュータ

ruby の日付、時間に関するクラスとメソッド

ruby の日付、時間に関するクラスとメソッド

ruby で日付を扱うには
Time オブジェクトを使う

現在時刻を取得するには
.now を使う

t = Time.now
p t
とすると、
Wed Aug 28 20:54:00 +0900 2013
と表示される
オブジェクトを作成後、
年だけ取り出すなら
.year を使う
p t.year
とすると
2013
となる

月だけなら
.month を使う
p t.month
なら


現在時刻なら .now でできるけど
指定した年月日のように、特定の日付や時間にするなら
.mktime()
を使う
2011年2月24日9時とするなら
t = Time.mktime(2011,2,24,9,0,0)
p t
とする
これで
Thu Feb 24 09:00:00 +0900 2011
と表示される

作成されたオブジェクトに関しては
足したり引いたりということも可能
p t +10
とすると
Thu Feb 24 09:00:10 +0900 2011
というように10秒追加される
使い道は、制限時間とか、有効期限の設定など

表示される時刻の形式は変更可能で
変更するには
.strtime() を使う
2011/2/24
というような表示にしたいのなら
p t.strftime("%Y/%m/%d")
とすることで
"2011/02/24"
となる

.strftime() の 変換フォーマットに関しては
リファレンスを参照
http://www.ruby-doc.org/core-1.9.3/Time.html#method-i-strftime

テーマ : プログラミング
ジャンル : コンピュータ

ruby のハッシュオブジェクトメソッド

ruby のハッシュオブジェクトメソッド

よくつかうメソッドとしては
.size
これで、格納している要素の数を表示できる

p sales.size
とすると
3になる

これは
{"taro"=>100, "jiro"=>150, "sabu"=>300}
というように、3つキーと値の組み合わせがあるから

そして
.empty?
これは、中身が空かどうかを調べる
空でないのなら false が返る

今回なら、中身があるので
p sales.empty?
だと
false
となる

キーがあるか調べるメソッドがあり、それが
.has_key?()
存在しているなら true 存在しないキーなら false になる
例えば、存在しない tanaka にすると
p sales.has_key?("tanaka")
の結果は false となる

似たようなメソッドとして、値の検証をする
.has_value?() もある
これも結果が true/false 判定になる
存在しない値である2222 で調べると
p sales.has_value?(2222)
の結果 false になる

ハッシュ関連の関数に関しては、リファレンスを参考にする
http://www.ruby-doc.org/core-1.9.3/Hash.html

また。リファレンスの中にはいくつか破壊的メソッドも存在する

テーマ : プログラミング
ジャンル : コンピュータ

ruby のハッシュオブジェクトについて

ruby のハッシュオブジェクトについて

ruby のハッシュオブジェクトは
他の言語だと、連想配列と呼ばれているものになる

ハッシュの場合、それぞれの値に対してキーをつける

通常の配列の場合だと
sales =[100,150,300]

0が100というようになるが、これが個人のスコアとかで
紐付けする場合、とても面倒

なので、ハッシュで値とキーの関係をつくる

値とキーは => で結ぶ
個人別にスコアをひもづけるには
sales ={"taro"=>100,"jiro"=>150,"sabu"=>300}
というようにする
p sales
で表示すると
{"taro"=>100, "jiro"=>150, "sabu"=>300}
となる

個別の値を取り出すには、キーを指定すればOK

p sales["taro"]
とすれば、
100
となる

配列のときのように、いれた順番の数値を覚えておくのではなく
キーを覚えておけばいいので、管理が楽になる

このハッシュは
PHP
java script などでも使うので、覚えておくと応用できる

テーマ : プログラミング
ジャンル : コンピュータ

ruby の配列オブジェクトについて

ruby の配列オブジェクトについて

#12 配列オブジェクトを理解する
http://dotinstall.com/lessons/basic_ruby/4712
を参考に
ruby の配列オブジェクトについて学習

ruby でも配列の使い方は
java PHP とほぼ変わらない

配列名 = []
で作成して
配列は0から数える

name =["hebeeke","fc2","hogehoge"]
として
p name[1]
とすれば fc2 と表示される

ruby ですこし変わった方法としては
範囲指定で表示

1から2まで表示するには
p name[1..2]
とする

これで、
["fc2", "hogehoge"]

というように指定した範囲が出力される
.. というように . が2つなら範囲指定

... というように . を3つにすると
最後の部分は含まないという指定になる

p name[0...2]
だと
0から1という意味になる
コードを書くときに間違えそうなので注意

ちなみに、値をマイナスにすると、後ろから数える
p name[-1]
だと
一番後ろを表示する

テーマ : プログラミング
ジャンル : コンピュータ

ruby の破壊的メソッドについて

ruby の破壊的メソッドについて

#11 破壊的メソッドとは?
http://dotinstall.com/lessons/basic_ruby/4711
を参考に、
!のついた破壊的メソッドについて学習

破壊的メソッドとは

s ="hello"
s1 = s.upcase
p s
p s1とすると
s1 では .upcaseにより
すべて大文字 変換される

この
s1 = s.upcase!
というように、! をつけると
破壊的メソッドになる

これは
普通、
変数 = 値の場合、代入になるだけだけど
破壊的メソッドをつかうと、元の値まで上書きする

s = "hello"
s1 =s.upcase
p s
p s1

の場合だと
"hello"
"HELLO"

というように、見慣れた結果になるけど

s = "hello"
s1 =s.upcase!
p s
p s1

だと
"HELLO"
"HELLO"
というように、代入前の値も変更されるようになる

関数のリファレンスの
http://www.ruby-doc.org/core-1.9.3/String.html
の中にもいくつか、!がついているのがあり
これらは破壊的メソッドを意味している

テーマ : プログラミング
ジャンル : コンピュータ

ruby の文字列オブジェクトのメソッド

ruby の文字列オブジェクトのメソッド

#10 文字列オブジェクトのメソッド
http://dotinstall.com/lessons/basic_ruby/4710
を参考に
ruby の文字列オブジェクトのメソッドについて学習

.length
は文字列の長さを返す

.upcase
は、すべて大文字変換する関数
p "hello" .upcase
とすると
"HELLO"
となる

文字を逆にして表示するなら
.reverse を使う
p "hello".reverse だと
"olleh" となる

また、探している文字が何文字目にあるかを知らせる
index() というものがある
p "hello".index("o")
とすると、oという文字が何番目にあるか表示される
ただ、この数字は配列なので、0から数えるため
実際に5番目のものは4として表示される

文字が含まれているか、判定するには
.include?()
を使う
wという文字が含まれているかを調べるなら
p "hello".include?("w")
とする
結果は true / false で表示される

これらの関数のリファレンスは
http://www.ruby-doc.org/core-1.9.3/String.html
を調べるようにする

テーマ : プログラミング
ジャンル : コンピュータ

ruby の文字列オブジェクトについて

ruby の文字列オブジェクトについて

#09 文字列オブジェクトを理解する
http://dotinstall.com/lessons/basic_ruby/4709
を参考に
ruby の文字列オブジェクトについて学習

文字列オブジェクト作成のときに
"" でかこむのと '' でかこむのでは意味が異なる

"" は変数や特殊文字を展開する
'' は展開しない

これは、Linux の echo コマンドなどで行うとわかりやすい

ちなみに、特殊文字は
\n 改行
\t タブなどがある

たとえば hello world を出す時
puts "hello\nworld"
だと
hello
world
と改行されるけど

puts 'hello\nworld'
にすると
hello\nworld
とそのままでてくる

ubuntu の vim エディタの場合
"" と '' では途中で色が変わるので、見分けやすい

文字列の展開はちょっと変わっていて
#{変数}
とする

例えば
name ="hebereke"
puts " my name is #{name}"
というようにすると
my name is hebereke
と表示される

java script とかだと
"my name is "+ name
というようにわけて書くけど
rubyの場合、一緒に書く

ちなみに、ruby の場合、
日本語を取り扱う場合には設定が必要

これがないと
invalid multibyte char (US-ASCII)
というエラーがでてくる

HTML5が最初に
<!DOCTYPE html>
と書いたり
PHPで 、PHPのコードの部分のところに
<?php
と書いたり
シェルスクリプトで
#!/bin/bash
と書くように

ruby で日本語対応するには
# encoding: utf-8
と1行目に書いておく

これで、無事に日本語が表示されるようになる

ruby の数値的オブジェクトのメソッド

ruby の数値的オブジェクトのメソッド

#08 数値的オブジェクトのメソッド
http://dotinstall.com/lessons/basic_ruby/4708
を参考に
数値的オブジェクトで使えるメソッドについて学習

型変換メソッドは
10.5 を整数にするなら

p 10.5.to_i
とする

.to_i は整数にする関数
ruby の場合、
javaとかPHP , C++ とかと違って関数に() がついていないので、最初のうちはわかりにくいかも

.to_ とつくのは、ほとんど型変換の関数

よくあるのが、文字列から整数への変換

あと、分数にする関数があり、それが .to_r
rは Rational の意味

p 10.5 .to_r
とすると
10.5 が分数になり
(21/2)
となる

四捨五入するメソッドもあり、それが .roud
p 10.5 .round
とすると、四捨五入されて11になる

p 10.5 .ceil なら繰り上げ
p 10.5 .floor なら切り捨て

乱数の発生なら rand()
これは、関数らしく()がついている
引数に乱数の発生させる幅を指定

p rand(100)
なら100までの乱数となる

数学的なものを使うには、java script などでおなじみ
Math 関連をつかう

平方根を扱うなら .sqrt() を使う
例えば、2の平方根なら
p Math.sqrt(2)
とする
結果は
1.4142135623730951

テーマ : プログラミング
ジャンル : コンピュータ

ruby で数値オブジェクトの演算

ruby で数値オブジェクトの演算

#07 数値的オブジェクトの演算
http://dotinstall.com/lessons/basic_ruby/4707
を参考に
数値的オブジェクトの学習

ruby では分数を
Rational() で表す

2/3 を表すなら
x = Rational(2,3)

puts x
とすると
2/3 となるはずが

undefined method `Rational' for main:Object (NoMethodError)
となってしまう

原因は ruby のバージョンの違いで
私の場合 ubuntu ソフトウェアセンターでインストールしたため
ruby -v で確認すると
1.8.7
だった

おそらく、バージョン違いによる関数の取り扱い変更が
原因と思われるので
ruby ubuntu 1.9.3
で検索し

http://www.sssg.org/blogs/naoya/archives/2489

を参考に
sudo apt-get install -y ruby1.9.3
でインストール
これで、もう一度バージョンチェックすると
ruby -v
ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-linux]
で更新を確認

再度実行すると
2/3 と表示された

どうやら、バージョンの違いだったようだ

これと同様でよくあるのが Android

こっちはもっとバージョンによりAPIが変わるため
古い ver 2.2 などのアプリ作成本を参考に行うと
エラー連発になったりする
ちなみに、最新は4.2 あたりで
Nexus 7 に搭載されている

以前、Linux サーバー構築講座を受けたときに
バージョンを講座のものと同じにすることで
余計な手間がかからないし再現性ができると
あったので、これが生かせる状況になった

話がそれてきたので、rubyの演算子について

これも、ほかの言語とあまりかわらない
+ - * / % はおなじ意味
**で、べき乗となる

もし、5の2乗とするなら

x = 5 ** 2
puts x
とすると、
25 になる

ちなみに、ruby では分数の計算もできる

Rational() で分数が扱えるので
x = Rational(2,3) + Rational(5,6)
puts x
とすると
3/2
となる

テーマ : プログラミング
ジャンル : コンピュータ

DisplayMetricsクラスの代表的フィールド

DisplayMetricsクラスの代表的フィールド

float density
画面の論理的密度
 
int densityDpi
インチおたりのドット数で表した画面密度

int heightPixels
ピクセル値で表した画面の絶対的高さ

int widthPixels
ピクセル値で表した画面の絶対的幅

float xdpi
x軸の1インチあたりの物理的なピクセル数

float ydpi
y軸の1インチあたりの物理的なピクセル数



--
から送られてきた高速メモ帳

DisplayMetricsクラスの代表的フィールド

DisplayMetricsクラスの代表的フィールド

float density
画面の論理的密度
 
int densityDpi
インチおたりのドット数で表した画面密度

int heightPixels
ピクセル値で表した画面の絶対的高さ

int widthPixels
ピクセル値で表した画面の絶対的幅

float xdpi
x軸の1インチあたりの物理的なピクセル数

float ydpi
y軸の1インチあたりの物理的なピクセル数

画面情報の取得

画面情報の取得

onScroll()の強距離の単位がピクセルであるように
ScaleGestureDetectorで取得する2点間の距離もピクセルで返ってくる

これをミリメートルへ変換するには

ピクセル / 解像度 * 25.4

の計算式を使う

解像度は、インチあたりのピクセル数

これに25.4をかけることで
ミリメートル換算できる

解像度は、Android端末ごとに異なるため
画面の大きさ
解像度
を知るには
DisplayMetricsクラスを使う

onFling() onScroll()の引数

onFling() onScroll()の引数

まず、onFling()
構文は
boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)

引数の解説
e1
ダウン時のタッチイベント

e2
フリック時のタッチイベント

velocityX
x軸の速度
単位は、ピクセル/秒

velocityY
y軸の速度
単位は、ピクセル/秒


次に、onScroll()
構文は
boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY)

引数の解説
e1
ダウン時のタッチイベント

e2
スクロール時のタッチイベント

distanceX
x軸のスクロール時の距離
単位はピクセル

distanceY
y軸のスクロール時の距離
単位はピクセル

ruby のクラスとインスタンス

ruby のクラスとインスタンス

#06 クラスとインスタンスを理解しよう
http://dotinstall.com/lessons/basic_ruby/4706
を参考にする

今回はクラスとインスタンス

p "hello".lengthにしたら、結果は5
これは5文字だから

クラス=設計図
インスタンス=実体化したデータ

例えば
p "hello"
なら
String クラスで
hello がインスタンス
となる

公式サイトは
http://www.ruby-lang.org/ja
だけど
英語英語なら
http://www.ruby-lang.org/en/

使え関数については英語版の
http://www.ruby-doc.org/core-2.0/
が最新だけど
core- の番号を使っているバージョンにすれば
そのリファレンスもみれる

私の場合
ruby -v だと
ruby 1.8.7 (2011-06-30 patchlevel 352) [x86_64-linux]
なので
http://www.ruby-doc.org/core-1.8.7/
で調べた

Classes の横の検索欄で調べれば
クラスから調べることができる

テーマ : プログラミング
ジャンル : コンピュータ

ruby のオブジェクトを表示するメソッド

ruby のオブジェクトを表示するメソッド

print でメッセージを表示したけど、これに似たのが
puts

p

それぞれ動作が異なる

print は普通に表示する
PHPの echo とかとおなじかんじ
, で区切って表示することもできる
print "hello"," world"

putsは、改行つきで表示してくれる
なので、 \n とかつけなくても改行されるので楽

p は
””も一緒表示する
p は、オブジェクト型がわかるように表示する

テーマ : プログラミング
ジャンル : コンピュータ

ruby で hello world

ruby で hello world

Rubyのコーディング規則は
https://github.com/styleguide/ruby

rubyは、拡張子が .rb になる
ちなみに、PHP だと .php

ruby の学習するので、
mkdir ruby でディレクトリをつくり
ここで作成していく

vim hello.rb
でファイルを作成

内容は
print "hello world"

とする

実行するには
java みたいに
ruby hello.rb
として
ruby プログラム名
になる

なお、ruby の文の区切りは改行で行える
PHP java C++ のように ; で区切れるけど
大抵の場合は改行でも OK

また、1行コメントの場合
シェルスクリプトのように
#をつける

# コメント
というようになる

また
java とかで、複数のコメントがあるけど
/*

コメント
*/
というのが java の場合で

ruby の場合だと

=begin
コメント
=end

というように、複数行になる場合は
=begin と =end の間に書く

テーマ : プログラミング
ジャンル : コンピュータ

ruby の変数と定数

ruby の変数と定数

rubyの場合、変数は
x=10
st = "hello"

というように
変数名 = 値
と書く

java みたいに型を指定したり
PHPみたいに変数に $をつけたりしない
また、javascript のように var で宣言もしないので
楽かもしれない

rubyの場合、変数は
英小文字か _で始まることが条件

あと、どの言語でも同じだけど、予約後は使えない

次に定数について
c/C++,PHPだと define() を使って定義する
ruby の場合だと
全部大文字で書く
ちなみにjava だと static final をつかう
java の static final に関しては
http://www.tohoho-web.com/java/variable.htm
を参考に

URLとかメールアドレスなど、値が変更しないものを定義のに使う

MY_EMAIL = ""
というようにしたり
URLを
SITE_URL = "http://localhost/"
にするなど

テーマ : プログラミング
ジャンル : コンピュータ

Sandboxモードを使える sahara プラグイン

Sandboxモードを使える sahara プラグイン

#13 saharaを使ってみよう
http://dotinstall.com/lessons/basic_vagrant/24113
を参考に
Sandboxモードを使うことができる
saharaプラグインについて学習

sandbox モードは
仮想マシンに
ソフトのインストールや設定の変更などを加えたが
失敗などにより、その変更を破棄するときに使う

まず、仮想マシンのディレクトリに移動
cd /media/bdec1869-7820-4557-a76e-a8b130293019/myBox/

次に、sandbox を有効化

vagrant sandbox on

vagrant sandbox status
で状態を調べることができる

[default] Sandbox mode is on
となっていれば sandbox が on になっているのが確認できる

まず、仮想マシンを起動してログインし変更を加える
vagrant up
で仮想マシン起動

vagrant ssh
でログイン

とりあえず、単純に touch コマンドで空ファイル作成
touch test

これで、一度
ログアウト

この状態から戻すには
vagrant sandbox rollback
で戻すことができる

確認のため、一度
vagrant ssh
でログインしてみると
先ほど作成した test というファイルがないのが確認できる

ちなみに、このままだと最初の状態に戻るだけなので
変更を保存する

vagrant sandbox commit
で保存できるけど
仮想マシン起動状態だと遅いため
一度
vagrant suspend
などで一時停止しておくとよい

commit すると、仮想マシンの状態が上書きされる
これを利用して
サーバー構築の練習をすると効率的にできる
最初のうちは、かなりの確率で
設定ファイルを消してしまったり
設定を間違えてやりなおしになるので
この機能は重宝する

なお、sandbox の終了は
vagrat sandbox off
だけど
これも仮想マシンを停止してから行わないと
遅くなる

sandbox 終了後
vagrant sandbox status
で状態確認して
[default] Sandbox mode is off
となっていれば停止している

テーマ : プログラミング
ジャンル : コンピュータ

debパッケージのvagrant のplugin 導入

debパッケージのvagrant のplugin 導入

#12 pluginを使ってみよう
http://dotinstall.com/lessons/basic_vagrant/24112
を参考に
vagrant にplugin を導入

vagrant plugin install プラグイン名
でインストールできる

今回は
sahara というプラグインをインストール

プラグイン関係のコマンドについては
vagrant plugin -h
で調べることができる

現在インストールしているプラグインの確認は
vagrant plugin list
で確認できる

プラグインのアンインストールは
vagrant plugin uninstall プラグイン名
となる

sahara をアンインストールするなら
vagrant plugin uninstall sahara
とすればOK

ということ
しかし、私の場合
Ubuntuソフトウェアセンターからいれたためバージョンが古く

vagrant -v
Vagrant version 1.0.1
ということで、

vagrant plugin ではインストールできない

http://girigiribauer.com/archives/1003
によれば
vagrant 1.0 までは gemサブコマンドで入れれたということなので
新しいバージョンの vagrant をインストールする

http://downloads.vagrantup.com/tags/v1.2.7
から
64bit ubuntu のパッケージの
vagrant_1.2.7_x86_64.deb
をダウンロード

ちなみに、
x86_64 は 64bit という意味
.deb はdebパッケージで
主に debian 系で使われる

.rpm だと rpmパッケージで
fedora とか centos でつかう

ダウンロードできたら
cd ダウンロード/
sudo dpkg -i vagrant_1.2.7_x86_64.deb
でインストール

vagrant -v
で確認すると
Vagrant version 1.2.7
となっている

これで、動画どおり、
vagrant plugin
が使えるようになった

dpkg コマンドに関しては
http://itpro.nikkeibp.co.jp/article/COLUMN/20060228/231209/
が参考になる

テーマ : Linux
ジャンル : コンピュータ

vagrant の box 作成

vagrant の box 作成

#11 自分でBoxを作ってみよう
http://dotinstall.com/lessons/basic_vagrant/24111
を参考に
現在の仮想マシンの状態からBoxを作成
さらに
そのbox を元に、新しい仮想マシンを作成してみる

まず、現在稼働している仮想マシンの状態を
そのままbox にする場合

これは
vagrant package
を実行することで行える

このとき、対象の仮想マシンはshutdown されるので注意

処理が完了すると
package.box
ができている

作成した box をリストに追加するには
vagrant box add を実行する

vagrant box add my_box package.box
でリストに追加される

vagrant box add 追加するファイル名 対象のbox
となる

追加されたbox は
~/.vagrant.d/boxes/
にあるので
ls ~/.vagrant.d/boxes/
で確認できる

この httpd をインストールした box で
新しく仮想マシンを立ち上げるには
今までやってきたように
仮想マシンディレクトリを作成して
そこで
Vagrantfile を作成
そして仮想マシンを立ち上げる

cd /media/bdec1869-7820-4557-a76e-a8b130293019/
mkdir myBox
でディレクトリ作成して

cd myBox/
で作成したディレクトリに移動

vagrant init my_box
で vagrantfile 作成

vagrant up
で仮想マシンの立ち上げ

起動したら、
vagrant ssh
でログイン

sudo service httpd status
で確認すると

httpd (pid 4476) is running...
となり、httpd が稼働中であることがわかる

このように、以前作成した状態からの復元が容易になるので
日経Linux をみて新しい機能を追加したり

自宅サーバー構築サイトを元に
サーバー構築するときに活用できる

http://centossrv.com/
とか
http://www.server-world.info/
をみるとサーバー構築の参考になる

テーマ : プログラミング
ジャンル : コンピュータ

vagrant で仮想マシンが立ち上がったときに実行する処理の指定

vagrant で仮想マシンが立ち上がったときに実行する処理の指定

#09 Provisioningを使ってみよう (1)
http://dotinstall.com/lessons/basic_vagrant/24109
を参考に
仮想マシンが立ち上がったあとに実行される処理を
Provisioningで指定

Provisioning は
vagrant up が実行されたときに実行される一連の
処理のこと

前回は、サーバーを構築するときに
最小構成イメージマシンを作って
そこにログインしてコマンドを入力することで
作成していった

今回は、あらかじめ最初に自動でおこなう設定にする

わかりやすいように
新しく仮想マシンを作成する

cd /media/bdec1869-7820-4557-a76e-a8b130293019/
mkdir myCentOSVM2
でディレクトリ作成

ここに vagrantfile を作成する

cd myCentOSVM2/
vagrant init centos64

これで Vagrantfile ができるので編集していく
vim Vagrantfile

provisioningにはツールがあるけど
今回はシェルで設定する

config.vm.provision :shell,
として
命令をそのまま書くには
:inline =>
の後に実行するコードを書く

今回の場合、
config.vm.provision :shell, :inline => "echo hello world"

10行目の
config.vm.box = "centos64"
の下あたりに書き込む

vim で
:set number を実行すると行数がでる

保存したら
vagrant up で仮想マシン立ち上げ

いままでと違うのは
[default] Matching MAC address for NAT networking...
[default] Clearing any previously set forwarded ports...
[default] Forwarding ports...
[default] -- 22 => 2222 (adapter 1)
[default] Creating shared folders metadata...
[default] Clearing any previously set network interfaces...
[default] Booting VM...
[default] Waiting for VM to boot. This can take a few minutes.
[default] VM booted and ready for use!
[default] Mounting shared folders...
[default] -- v-root: /vagrant
[default] Running provisioner: Vagrant::Provisioners::Shell...
hello world

というように、最後に
echo hello world
が実行されているということ

これを使うことで、インストールや設定などを
自動的に仮想マシン作成のときに行えるようになる

テーマ : プログラミング
ジャンル : コンピュータ

最新記事
検索フォーム
GREEハコニワ攻略サイト
リンク
カテゴリ
月別アーカイブ
フリーエリア
最新記事
FXプライムレート
最新コメント
最新トラックバック