おっさんエンジニアの忘備録

Linux系の各種作業を自分用の忘備録として残しています

【Ruby】クラス

基本的な書き方はこんな感じ

class MyClass
HOGE = 100
end

puts MyClass::HOGE                   ⇒「hoge」と表示

 

(1)クラスの初期化

initializeメゾットを利用します

class MyClass
    def initialize
        puts 'Initialize'
    end
end

obj = MyClass.new                   ⇒「Initialize」と表示

これはオブジェクト指向をかじっていればおなじみのって感じですかね

 

(2)インスタンスメゾット

class MyClass
    attr_accessor :number                  インスタンス変数を操作するために「attr_accessor」を定義

    def hoge
        puts "hoge"
    end
end

 

obj = MyClass.new
puts obj.hoge                         ⇒「hoge」と表示
obj.number = 100
puts obj.number                     ⇒「100」と表示

attr_accessorのようなものはPerlPHPにはなかった(ような気がするので)のでちょっと慣れない感じです。。。 

 

(3)クラスメゾット

class MyClass
    def self.hoge
        puts "hoge"
    end
end
MyClass.hoge            ⇒「hoge」と表示

クラスメゾットの場合は「self.[メゾット名]」になるみたいです。

素朴な疑問でこれを使うケースってどんなケースなんだろう??

インスタンスメゾットでやってしまってもいいような気も。。。。

 

こんな書き方もできるみたいです。

class MyClass
    class << self
        def hoge
            puts "hoge"
        end
    end
end
MyClass.hoge             ⇒「hoge」と表示

この書き方は特異クラスと言うみたいで、クラスメゾットをまとめて書けて、ネストすることでインスタンスメゾットとの区別がしやすいというメリットがあるらしいです。

ただ自分はまだこの書き方のメリットが理解できてません(笑)

 

 (4)クラスの継承

class Car
    def put_class
        puts 'Car'
    end
end

class WagonR < Car
end

puts WagonR.superclass            ⇒「Car」と表示
obj = WagonR.new
obj.put_class                               ⇒「Car」と表示

 「class SubClass < SuperClass」とすればよいみたいです

【Ruby】変数、定数

Ruby勉強中なのでいろいろまとめていこうと思ってます。

 

(1)ローカル変数

ローカルなスコープでのみ有効な関数です。

小文字またはアンダーバーで始める変数です。

hoge = 'saosao'

def display_saosao
    puts hoge                ⇒「undefined local variable or method」でエラー

end

puts hoge                  ⇒「saosao」と表示される

display_saosao

  

(2)インスタンス変数

インスタンスの中だけで参照できる変数をインスタンス変数と言います。「@」から始まる変数です。

class MyClass
    def setName(str)
        @name = str
    end

  def getName()
      return @name
  end
end

obj1 = MyClass.new()
obj2 = MyClass.new()
obj1.setName("Saosao1")
obj2.setName("Saosao2")
puts obj1.getName()              ⇒「saosao1」と表示される
puts obj2.getName()              ⇒「saosao2」と表示される

 

インスタンス変数を外部からアクセスできるようにするにはattr_accessorを利用します。

class MyClass
    attr_accessor :hoge
end

obj = MyClass.new()
obj.hoge = 'saosao'
puts obj.hoge                     ⇒「saosao」と表示される

 

PerlPHPオブジェクト指向のプログラムは組んでいたのですが、attr_accessorのような記述はなかったので、理解しにくい。。。。^^;

 

(3)クラス変数

同じクラスの全てのインスタンスで一意となる変数です。「@@」から始まる変数です。

class MyClass
    def setName(str)
        @@name = str
    end

    def getName()
        return @@name
    end

end

obj1 = MyClass.new()
obj2 = MyClass.new()
obj1.setName("Saosao")
puts obj1.getName()                   ⇒「Saosao」と表示
puts obj2.getName()                   ⇒「Saosao」と表示

 

 (4)グローバル変数

どこからでも参照・変更できる変数です。「$」から始まる変数です。

$hoge = 'saosao'

def display_saosao
    puts $hoge                            ⇒「saosao」と表示
end

display_saosao

 あまり使うことはないですかね。。。。

 

(5)定数

変化しない値です。大文字アルファベットで始まる必要があります。

HOGE = 'saosao'

puts HOGE                     ⇒「saosao」と表示

 

Ruby関連リンク集

(1)本家サイト

オブジェクト指向スクリプト言語 Ruby

 

(2)コーディング規約

Rubyコーディング規約

 

(3)日本Rubyの会

一般社団法人 日本Rubyの会

 

(4)Rubyアソシエーション

www.ruby.or.jp

 (5)Rubyで%技法

qiita.com

 (6)Ruby入門

www.rubylife.jp

 (7)Rubyでサーバ監視スクリプト

inokara.hateblo.jp

 (8)Rubyでメールを送る

qiita.com

(9)SNMPライブラリ

SNMP Library for Ruby

 

(10)Rubyでファイル監視

Rubyのfssmでフォルダを監視してファイルの新規作成、更新、削除をトリガとして特定の処理を実行するコード

 

(11)逆引きRuby

逆引きRuby - 逆引きRuby

 

(12)Ruby/MySQL

Ruby/MySQL

vagrant+Ruby on rails環境でブラウザからアクセスする

これすっごくハマりました^^;

 

ググっていろいろ探してみたらこちらのサイトが!!

Vagrant で Ruby on Rails 4 の環境構築 - Qiita

 

こちらを参考にやってみる。

 

(1)Vagrantfile修正

# Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the host machine. In the example below,
# accessing "localhost:8080" will access port 80 on the guest machine.
# config.vm.network "forwarded_port", guest: 80, host: 8080
config.vm.network "forwarded_port", guest: 3000, host: 3000

Railsで使用するポートをフォワードさせてあげる設定を追加 

 

(2)Vagrant再起動

> vagrant reload

 

(3)Railsを起動

# rails server -b 0.0.0.0
=> Booting WEBrick
=> Rails 4.2.6 application starting in development on http://0.0.0.0:3000
=> Run `rails server -h` for more startup options

=> Ctrl-C to shutdown server
[2016-04-17 07:10:40] INFO WEBrick 1.3.1
[2016-04-17 07:10:40] INFO ruby 2.3.0 (2015-12-25) [x86_64-linux]
[2016-04-17 07:10:40] INFO WEBrick::HTTPServer#start: pid=2436 port=3000

⇒ここがポイントです!!

どうやら Rails 4.2からデフォルトのホストが0.0.0.0からlocalhostに変更されたみたいです。

 

(4)ブラウザでhttp://localhost:3000にアクセス

f:id:saosao_0706:20160417151552p:plain


⇒うまくいきました!!!

 

マニュアルをちゃんと読めってことですね。。。。。^^;

CentOS6.7にRuby on railsをインストール

【前提条件】

◆git、rbenv、ruby-build、ruby(2.3.0)がインストールされている

 ⇒Railsのインストール方法はこちらで大丈夫でした

sqlitesqlite-develがインストールされている

 

(1)gemでsqlite3インストール

# gem install sqlite3

 

 

(2)railsインストール

# gem install rails

 

(3)バージョン確認

# rails -v

Rails 4.2.6

 

(4)とりあえず動かしてみる

# rails new app
# cd app
# rails server
=> Booting WEBrick
=> Rails 4.2.6 application starting in development on http://localhost:3000
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
[2016-04-16 16:40:04] INFO WEBrick 1.3.1
[2016-04-16 16:40:04] INFO ruby 2.3.0 (2015-12-25) [x86_64-linux]
[2016-04-16 16:40:04] INFO WEBrick::HTTPServer#start: pid=14189 port=3000

⇒立ち上がったっぽいです

(5)実際にアクセスしてみる

# curl http://localhost:3000
<!DOCTYPE html>
<html>
<head>
<title>Ruby on Rails: Welcome aboard</title>

⇒とりあえず大丈夫っぽいです

 

Vagrantの環境で画面を確認するのはどうしたらいいのだろう。。。

 

RHEL6にruby2.3.0をインストール

https://github.com/rbenv/rbenv#installation

こちらを参考にしました。

事前に以下のパッケージのインストールが必要です。

 openssl-devel readline-devel zlib-devel

 

(1)gitインストール

# yum install git

 

(2)rbenvインストール

①gitからチェックアウト

# git clone https://github.com/rbenv/rbenv.git ~/.rbenv
Initialized empty Git repository in /root/.rbenv/.git/
remote: Counting objects: 2495, done.
remote: Total 2495 (delta 0), reused 0 (delta 0), pack-reused 2495
Receiving objects: 100% (2495/2495), 455.13 KiB | 163 KiB/s, done.
Resolving deltas: 100% (1543/1543), done.

コンパイル

# cd ~/.rbenv && src/configure && make -C src
make: ディレクトリ `/root/.rbenv/src' に入ります
gcc -fPIC -c -o realpath.o realpath.c
gcc -shared -Wl,-soname,../libexec/rbenv-realpath.dylib -o ../libexec/rbenv-realpath.dylib realpath.o
make: ディレクトリ `/root/.rbenv/src' から出ます

 

③パスを通す

# echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile

 

④ログインし直し

 

⑤確認

# type rbenv
rbenv is /root/.rbenv/bin/rbenv

 

(3)ruby-buildインストール

# git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
Initialized empty Git repository in /root/.rbenv/plugins/ruby-build/.git/
remote: Counting objects: 6028, done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 6028 (delta 0), reused 0 (delta 0), pack-reused 6022
Receiving objects: 100% (6028/6028), 1.16 MiB | 479 KiB/s, done.
Resolving deltas: 100% (3418/3418), done.

 

(4)rubyインストール

①インストール

# rbenv install 2.3.0
Downloading ruby-2.3.0.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.0.tar.bz2
Installing ruby-2.3.0...
Installed ruby-2.3.0 to /root/.rbenv/versions/2.3.0

 

②環境全体でのRubyバージョンの指定

# rbenv global 2.3.0

⇒これをやらないとruby実行時にエラーになっちゃいます。。。。

 

③パスを通す

# echo 'export PATH="$HOME/.rbenv/shims/:$PATH"' >> ~/.bash_profile

 

④ログインし直し

 

⑤バージョン確認

# ruby -v
ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-linux]

 

(5)お決まりのhello,world

①hello.rb作成

puts "hello,world"

 

②実行してみる

# ruby hello.rb
hello,world