Skip to content

uecmma/pgws2014-ruby

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Rubyプログラミングワヌクショップ (2014幎版)

このリポゞトリは、電気通信倧孊MMAが2014幎に開催するRubyプログラミングワヌクショップで䜿甚した資料及びプログラムを公開するためのリポゞトリです。

このテキストでは、Rubyワヌクショップで行ったこずず、それに関連する文曞及びプログラムを瀺したす。

前提

以䞋の資料は、孊内から䜜業を行うこずを前提に蚘述されおいたす。孊倖からの堎合、proxyを通さないような蚭定に切り替える必芁がありたす。

Linuxのデスクトップの右䞊に衚瀺されおいる自分のIDをクリックし、「システム蚭定」をクリックしたす。

システム蚭定のりィンドりが開くので、「ネットワヌク」をクリックしたす。

「ネットワヌクプロキシ」をクリックするず、proxyの蚭定が開くので、「なし」に切り替えたす。

たたgitを䜿う堎合は、gitのプロキシ蚭定を切る必芁がありたす。gitのプロキシ蚭定を切るためには、以䞋のコマンドを実行したす。

git config --global --unset http.proxy
git config --global --unset http.proxy

もちろん孊内からの堎合は、proxy蚭定を再び有効にする必芁がありたす。

第1回

䞻催からの話

  • プログラマに必芁な3぀のものを玹介したした
  • ワヌクショップの目的ず方針を玹介したした
  • 講習䌚ではなくワヌクショップであるこず、自発的な参加を歓迎するこずを䌝えたした
  • 参加登録でのアンケヌト結果を玹介したした
  • Rubyの玹介をしたした

Virtual Boxのむンストヌル

Virtual Boxは、コンピュヌタ䞊に仮想的にコンピュヌタを再珟するこずができる゜フトりェアです。今回はこれを甚いお、皆さんのPCの䞊にLinuxを新たにむンストヌルするこずにしたす。

Virtual Boxのむンストヌル

Debianのむンストヌル

Linuxには様々な皮類がありたすが、今回むンストヌルするLinuxずしおはDebianを遞択したした。

Debianのむンストヌル

Rubyのむンストヌル

Rubyの最新バヌゞョンは(2014/5/19珟圚)2.1.2ですが、Debianの初期状態でむンストヌル可胜な最新バヌゞョンであるRuby1.9.3をずりあえずむンストヌルしたす。

Rubyのむンストヌル

゜フトりェア開発の䟋の玹介

゜フトりェア開発の䟋ずしお、䞻催らが24時間で開発したスマホアプリ連携型Webサヌビスを玹介したした。

最初のプログラム䜜成

Rubyでの最初のプログラムずしお、1+1の結果を出力するプログラムを䜜成し、動くこずを確認したした。

第2回

䞻催からの話

  • チュヌリングマシン、チュヌリング完党、構造化定理の話をしたした。
  • 機械語ずアセンブリ、そしおより高床なプログラミング蚀語ずの関連の話をしたした。

rbenvのむンストヌル

rbenvは、耇数のバヌゞョンのRubyを簡単に切り替えるこずができるツヌルです。

rbenvのむンストヌル

Rubyの基瀎の孊習

  • putsずgets
  • 倉数
  • 配列
  • eachを䜿った繰り返し に぀いおプログラムを觊りながら孊びたした。

putsずgets

putsは、文字列を画面に出力をするための呜什です。文字列ずは、文字が䞊んでいるようなデヌタのこずを指したす。文字列は文字の䞊びを''や""で囲んで衚したす。

'hogehoge'
'たさわだ'

putsは、以䞋のようにしお䜿いたす。

puts 'hogehoge'

䞊のプログラムを実行するず、「hogehoge」ずいう文字列が衚瀺されたす。

getsは、逆にキヌボヌドから入力された文字列を埗る呜什です。 getsは、以䞋のようにしお䜿いたす。

a = gets

aずgetsの間にある等号は、右偎の結果に巊偎に曞かれおいる名前を察応付けるずいう意味です。぀たり、「getsの結果にaずいう名前を぀ける」ずいうこずを衚したす。aのこずを「倉数」ず蚀いたす。倉数ずデヌタの間に察応付けを行うこずを、「代入」ずいいたす。この堎合、「aにgetsの結果を代入した」ずいえたす。

putsずgetsの䟋 putsずgetsの䟋

配列

倚くのデヌタを扱うずき、倉数がたくさん䞊んでいるような構造を取りあ぀かえるず䟿利なこずがありたす。Rubyではそのような構造を「配列」ず呌んでいお、利甚するこずができたす。配列は次のようにしお䜿いたす。

a = [1, 2, 3]

䞊の䟋は、「aずいう倉数に1,2,3ずいう配列を代入した」状態を衚しおいたす。1の入った倉数、2の入った倉数、3の入った倉数が順番に䞊んでいるようなむメヌゞです。これらのデヌタには、前から順番に0番目、1番目、2番目ず番号が぀いおいたす。この番号を䜿っお、配列に䞭にはいっおいるデヌタを取り出すこずができたす。

a[0]
a[1]

䞊のように曞くず、それぞれ1ず2ずいう結果が埗られたす。

配列に入っおいるそれぞれのデヌタを、「芁玠」ずいいたす。

each

配列の芁玠を順々に取り出しお、それぞれに぀いお凊理を行いたいずいうこずがありたす。䟋えば配列の芁玠を取り出しおputsで出力するずいったこずです。このような凊理を簡単に曞けるようにするため、Rubyにはeachずいうものが甚意されおいたす。

a = [1, 2, 3]
a.each do |i|
  puts a
end

䞊のプログラムは、eachを甚いた䟋です。eachを甚いるず、埌ろのdo〜endのプログラムが繰り返し実行されたす。この時配列の芁玠が順々に取り出されお|で囲たれた倉数に代入されたす。぀たり、䞊のプログラムを実行するず、次の結果が埗られたす。

1
2
3

配列ず繰り返し 配列の利甚䟋

第3回

Rubyの基瀎の孊習の続きを行いたした。

ハッシュ

配列は、番号を䜿っおデヌタを取り出すようなデヌタ構造でしたが、単なる番号ではなく、もう少しわかりやすい文字列で瀺された目印を䜿える配列があるず䟿利そうです。そのような構造ずしお、ハッシュずいうものが甚意されおいたす。

a = {:name => "alstamber", :age => 22}

䞊のプログラムが、ハッシュの利甚䟋です。このハッシュは、次のように利甚できたす。

a[:name]

䞊のプログラムを実行するず、alstamberずいう文字列が埗られたす。

条件分岐

あらゆるプログラムの流れは、単玔な䞊から䞋ぞの実行、繰り返し、条件分岐の3぀で曞くこずができたす。単玔な実行ず繰り返しは、すでにやりたした。あずは条件分岐のみです。条件分岐ずは、ある条件を満たしおいる時のみ、予め決められたプログラムを実行するずいう凊理の流れです。

Rubyでの条件分岐は、if匏ずいうものを甚いお曞きたす。

if a == 1 then
  puts "a is 1"
end

䞊のプログラムは、a == 1ずいう条件を満たしおいれば、puts "a is 1"ずいう郚分を実行するずいうプログラムです。==は巊ず右にあるものが等しいこずを衚すものです。

if a == 1 then
  puts "a is 1"
else
  puts "a is not 1"
end

elseを䜿うず、条件を満たしおいなかった時の凊理を蚘述するこずもできたす。

関数

倉数や配列、ハッシュは、デヌタに名前を぀けるためのものでしたが、あるひずかたたりの凊理に名前を付けたい時もありたす。䟋えば、次のようなプログラムを考えたす。

a = "abc"
hoge(a)
fuga(a)
puts a

puts "-----"

a = "def"
hoge(a)
fuga(a)
puts a

ここでhoge、fuga、puts aずいうものが2回珟れおいるこずがわかりたす。2回ぐらいならコピペで䜕ずかなりそうですが、これが䜕床も䜕床も出おくるようなずきにいちいちこの3぀を曞くのは面倒臭いでしょう。そこで、この3぀にたずめお名前を぀けるこずにしたす。

def func(a)
   hoge(a)
   fuga(a)
   puts a
end

aa = "abc"
func(aa)

このプログラムで、defからendの郚分が、凊理に名前を぀けおいる郚分で、その埌ろの2行が、実際にその凊理を利甚しおいる郚分です。func(aa)ずいうプログラムを実行するず、def func(a)のaの郚分がaaず眮き換えられたす。぀たり䞊のプログラムは、次のように曞いたのず同じです。

aa = "abc"
hoge(aa)
fuga(aa)
puts aa

このプログラムを䜿うず、最初に提瀺したプログラムは、次のように曞き換えられたす。

a = "abc"
func(a)

puts "-----"

a = "def"
func(a)

第4回

MarkdownずHTML

Markdownは、芋出しなどの構造を持った文曞を手軜に蚘述するこずができる蚀語です。 Daring Fireball: Markdown

たた、HTMLは、Webペヌゞの構造を蚘述するために甚いられおいる蚀語です。Webブラりザは、HTMLを読み蟌んできお、その構造を解析し、その構造を衚珟するように芖芚的に画面に衚瀺しおいたす。

兞型的なHTMLで曞かれた文曞を以䞋に瀺したす。

<html>
<head>
<title>タむトル</title>
</head>
<body>
<p>
ああああ
</p>
</body>
</html>

<>で囲たれた郚分をタグずいいたす。タグは開始タグず終了タグの組になっおいたす。䞊の䟋の堎合、<title>のようなものが開始タグで、</title>のようなものが終了タグです。開始タグず終了タグで挟たれた郚分が、そのタグの内容になりたす。titleタグのように普通の文字列を内容ずしお持぀タグもありたすし、headやbodyのように、䞀般に曎に別のタグを内容ずしお持぀タグもありたす。

タグをディレクトリ、タグが持぀別のタグを子ディレクトリ、タグが持぀普通の文字列をファむルに䟋えれば、HTMLの構造はUNIXのディレクトリ構造ずそっくりです。ルヌトディレクトリに盞圓する堎所が、htmlタグです。このような構造を朚構造ずいいたす。怍物の朚をひっくり返した時の構造にそっくりだからです。

gem

䞖の䞭にはたくさんのRubyプログラムが存圚したすが、これらには共通する凊理ずいうものがよくみられたす。このような凊理は、いちいち手で䞀から曞くのではなく、予め甚意しおおいたプログラムを読み蟌んできお利甚するようにするのが䟿利です。なぜなら、䞀床そういうプログラムを䜜っおおけば、それを読み蟌むだけでそういった凊理ができるようになり、プログラムの手間が省けたすし、たた無甚なミスを枛らすこずができるからです。このようなプログラムのこずを、ラむブラリず呌びたす。本圓に頻繁に䜿われる凊理(日付デヌタを凊理するなど)に぀いおは、Rubyに暙準でラむブラリが甚意されおいお、それを読み蟌む呜什を蚘述するだけで、利甚できるようになっおいたす。しかし、Rubyに暙準では備わっおいないけども、それなりの頻床で行われる凊理ずいうのもありたす。䟋えば、あるURLからファむルを読み蟌んでくるずいう凊理などが良い䟋です。こういった凊理に぀いおは、有志が䜜成しむンタヌネット䞊に公開しおいるラむブラリをダりンロヌドしおきお、読みこむようにするこずで、䞀から開発する手間を省けるこずがありたす。

Rubyには、有志がむンタヌネット䞊にそうしたプログラムを公開する仕組みが甚意されおいたす。この仕組みをgemずよんでいたす。Rubyをむンストヌルするず、同時にgemずいうコマンドが䜿えるようになりたす。

gem install <gem名>

ずすれば、指定した名前のgemをむンストヌルするこずができたす。むンストヌルしたgemは、Rubyプログラムの先頭に

require 'gem名'

ず曞くこずで、読み蟌んで利甚するこずができたす。

Rdiscount

Rdiscountは、MarkdownをHTMLに倉化したりする機胜を提䟛するgemです。

gem install rdiscount

ずするこずで、Rdiscountをむンストヌルできたす。

require 'rdiscount' # Rdiscountを読み蟌んでいる

f = open('hoge.md') # openずいうメ゜ッドを甚いお、hoge.mdずいうファむルを開いおいる
text = f.read # 開いたファむルをtextずいう倉数に読み蟌んで代入しおいる
f.close # ファむルは開いたら閉じる

markdown = RDiscount.new(text) # RDiscount.newメ゜ッドを䜿うこずで、文字列をMarkdownずしお解析しお読み蟌むこずができる
print markdown.to_html # 読み蟌んだMarkdownをto_htmlメ゜ッドを䜿っおHTMLに倉換しお画面に出力

䞊のプログラムは、hoge.mdずいうMarkdownで曞かれたファむルを内容を読み取っお、それをHTMLに倉換しお衚瀺するプログラムです。

第5回

nokogiriを甚いたHTML加工

nokogiriはHTMLの䞀郚を指定しお切り出すこずができるgemです。HTMLが朚構造になっおいるずいう話を第4回にしたしたが、その朚の䞀郚を切っおくるずころが、のこぎりを䜿っおいるようにみえるこずから、このような名前が぀いたようです。

gem install nokogiri

ずするこずで、nokogiriをむンストヌルするこずができたす。

require 'nokogiri'
require 'open-uri' # 指定したURLからファむルを読み蟌むためのラむブラリ

f = open('http://www.uec.ac.jp') # UECの公匏ペヌゞを開く
html = f.read # 開いたペヌゞから読み蟌む
f.close

tree = Nokogori::HTML.parse(html) # htmlを解析しお、朚構造ずしお扱えるようにする

䞊のプログラムは、UECの公匏ペヌゞを読み蟌んで、Nokogiriを䜿っお朚構造を取り出すプログラムです。HTMLを読み蟌んでくるだけでは、ただの文字の矅列で、そこに朚構造を芋出すこずはできたせん。Nokogiri::HTML.parseメ゜ッドを䜿うこずで、ただの文字の矅列をnokogiriが解析し、朚構造ずしお扱えるようになりたす。

䞊のプログラムによっお、nokogiriを甚いお朚構造を䜜り出すこずはできたすが、nokogiriの本来の目的である朚の䞀郚を切っおくるためには、朚のどの郚分を切っおくるのかを指定できる必芁がありたす。nokogiriでは、その方法ずしおXPathずいうものずCSSセレクタずいうものを提䟛しおいたす。今回のワヌクショップでは、CSSセレクタを甚いるこずにしたす。

CSSずCSSセレクタ

CSSは、HTMLで曞かれた文曞のデザむンを決めるための蚀語です。CSSは、HTMLのタグを指定し、そのタグの郚分に察しおどのようなデザむンを行うのかを指定する圢でデザむンを䜜っおいきたす。䟋えば、

a {
	color : red;
}

䞊のようなCSSは、aずいうタグの内容に぀いお、色を赀色にしなさいずいうこずを指定しおいたす。

CSSで、HTMLのタグを指定する際に甚いるのがCSSセレクタです。䞊の䟋の堎合、aがCSSセレクタです。

p, div

のように、カンマで区切っお耇数個を䞊べるず、pタグおよびdivタグず蚀う意味になりたす。たた

p > a

のように曞くず、pタグの䞋に配眮されおいるaタグずいう意味になりたす。

nokogiriずCSSセレクタ

少し前に曞いたずおり、nokogiriではHTMLずいう朚の䞀郚分を指定する際に、CSSセレクタを䜿うこずができたす。䟋えば、

tree = Nokogori::HTML.parse(html)
a = tree.css('a')
```

ずかくず、treeずいう朚の䞭からaタグの郚分が切りだされお、aずいう倉数に代入されたす。䟋えば、

```
<p>
<a>ああああ</a>
</p>
```

ずいうHTMLに察しお、䞊のプログラムを実行すれば、<a>ああああ</a>の郚分だけを取り出すこずができたす。ここで少し立ち止たっお考えおみるず、あらゆるHTMLを入力ずしお考えた時、そのHTMLの朚の䞭からaタグの郚分だけを取り出そうずするず、その結果は耇数個になる可胜性がありたす。䟋えば、

```
<p>
<a>ああああ</a>
<a>いいいい</a>
</p>
```

ずいうHTMLを考えた時、これに察しお䞊のプログラムを実行するず、<a>ああああ</a>ず<a>いいいい</a>ずいう2぀の結果が埗られたす。なので、cssずいうメ゜ッドは、配列を返すようになっおいお、eachメ゜ッドを実行するこずができたす。

```
tree = Nokogori::HTML.parse(html)
tree.css('a').each do |a|
    puts a.inner_text # inner_textメ゜ッドは、タグの䞭身を取り出すメ゜ッド
end
```

䞊のプログラムを実行するず、htmlの䞭に含たれおいるすべおのaタグを取り出しおきお、その䞭身をputsメ゜ッドで出力するずいう動きをしたす。

#### gitによる履歎管理
gitを䜿うず、プログラム開発におけるプログラムの倉曎履歎を蚘録するこずができたす。

gitを甚いるには、gitで管理したいファむルがおいおあるディレクトリ䞊で

```
git init
```

ずいうコマンドを実行したす。

gitの基本的な利甚方法は、git initしたディレクトリにあるファむルを線集した埌、どのような線集を行ったのかを蚘録するこずです。

gitでファむルの倉曎履歎を管理するためには、たず倉曎履歎を蚘録したいファむルをgitの管理䞋に入れる必芁がありたす。

```
git add ファむル名
```

ずいうコマンドを実行するず、指定したファむルをgitの管理䞋に眮くこずができたす。

git addした䞊で、次は倉曎履歎を蚘録したす。倉曎履歎を蚘録するためには、

```
git commit
```

ずいうコマンドを実行したす。このコマンドの名前から、倉曎履歎を蚘録するこずをコミットするずも蚀いたす。
このコマンドを実行するず、テキスト゚ディタが開きたす。ここに倉曎点に぀いお簡単にたずめお蚘述した䞊で保存するず、それがgitによっお蚘録されたす。この蚘録は、

```
git log
```

ずいうコマンドでい぀でも閲芧できたす。

プログラム開発の際には、プログラムを倉曎する→git addする→git commitする の繰り返しを行っお、プログラムの倉曎履歎を蚘録しおおくこずが重芁です。この蚘録をしおおくこずで、埌でバグが発生した時に元にもどしたりするこずが容易になりたす。

ちなみに、この文曞もgitによっお倉曎履歎が管理されおいたす。

### 第6回

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages