Ruby勉強会@札幌 "Rubyist入門講座"

Post on 19-May-2015

8.560 views 0 download

Transcript of Ruby勉強会@札幌 "Rubyist入門講座"

Ruby勉強会@札幌

Rubyist入門講座日本Rubyの会島田浩二

snoozer.05@gmail.com

OSC 2007 Hokkaido2007-06-30(土)

ポジションペーパー“立場表明書”

I LOVE RUBY

私はRubyが大好きだ

24

引用:Dave Thomas “The Island Of Ruby”

本日お伝えしたいことtheme of this seminar

http://www.ruby-lang.org/ja/

http://www.ruby-lang.org/ja/

http://www.ruby-lang.org/ja/

ここ

本日大変緊張しておりますので

どうぞお手柔らかにお願いします

Agenda✓ 自己紹介✓ Ruby Hot Topics✓ Rubyist 入門講座✓ 日本Rubyの会について✓ Ruby札幌について

自己紹介Self-Introduction

自己紹介•島田 浩二(しまだ こうじ)•フリーのソフトウェア技術者•お仕事は組み込みメイン

•使ってる言語はCだったり•日本Rubyの会• Ruby札幌•るびま、るりま等

• http://iddy.jp/profile/snoozer05/

さいきんのRubyRuby Hot Topics

Ruby Hot Topics✓ RubyKaigi2007 - Key is Love

✓ YARV - “Not” Yet Another Ruby VM

✓ Rails - Ruby’s Killer App

✓ JRuby - From Java to Ruby

✓ RSpec - Behavior Driven Develop

Ruby Hot Topics✓ RubyKaigi2007 - Key is Love

✓ YARV - “Not” Yet Another Ruby VM

✓ Rails - Ruby’s Killer App

✓ JRuby - From Java to Ruby

✓ RSpec - Behavior Driven Develop

http://jp.rubyist.net/RubyKaigi2007/

次回の勉強会でやる

Ruby Hot Topics✓ RubyKaigi2007 - Key is Love

✓ YARV - “Not” Yet Another Ruby VM

✓ Rails - Ruby’s Killer App

✓ JRuby - From Java to Ruby

✓ RSpec - Behavior Driven Develop

Ruby Hot Topics✓ RubyKaigi2007 - Key is Love

✓ YARV - “Not” Yet Another Ruby VM

✓ Rails - Ruby’s Killer App

✓ JRuby - From Java to Ruby

✓ RSpec - Behavior Driven Develop

Ruby Hot Topics✓ RubyKaigi2007 - Key is Love

✓ YARV - “Not” Yet Another Ruby VM

✓ Rails - Ruby’s Killer App

✓ JRuby - From Java to Ruby

✓ RSpec - Behavior Driven Develop

RubyOnRailsの面白い話題は

masuidriveさんのセッションで

Ruby Hot Topics✓ RubyKaigi2007 - Key is Love

✓ YARV - “Not” Yet Another Ruby VM

✓ Rails - Ruby’s Killer App

✓ JRuby - From Java to Ruby

✓ RSpec - Behavior Driven Develop

Ruby Hot Topics✓ RubyKaigi2007 - Key is Love

✓ YARV - “Not” Yet Another Ruby VM

✓ Rails - Ruby’s Killer App

✓ JRuby - From Java to Ruby

✓ RSpec - Behavior Driven Develop

Ruby Hot Topics✓ RubyKaigi2007 - Key is Love

✓ YARV - “Not” Yet Another Ruby VM

✓ Rails - Ruby’s Killer App

✓ JRuby - From Java to Ruby

✓ RSpec - Behavior Driven Develop

Rubyist入門講座Rubyist Guide

Lesson (1)Rubyの価値

Values of Ruby

Values Of Ruby✓ Be nice to developers✓ Be clear and readable✓ Be flexible and agile✓ Be open

Values Of Ruby✓ Be nice to developers✓ Be clear and readable✓ Be flexible and agile✓ Be open

開発者に優しいNice to developers

開発者にやさしい✓ 開発しやすい環境を提供• irb, RubyGems, Test::Unit

✓ 手になじんだ環境で開発を• emacs, vim, eclipse, visual studio

✓ 困ったときには• メーリングリスト

開発者にやさしい✓ 開発しやすい環境を提供• irb, RubyGems, Test::Unit

✓ 手になじんだ環境で開発を• emacs, vim, eclipse, visual studio

✓ 困ったときには• メーリングリスト

開発者にやさしい✓ 開発しやすい環境を提供• irb, RubyGems, Test::Unit

✓ 手になじんだ環境で開発を• emacs, vim, eclipse, visual studio

✓ 困ったときには• メーリングリスト

開発者にやさしい✓ 開発しやすい環境を提供• irb, RubyGems, Test::Unit

✓ 手になじんだ環境で開発を• emacs, vim, eclipse, visual studio

✓ 困ったときには• メーリングリスト

メーリングリスト

メーリングリスト

メーリングリスト

つくった人が日本語で答えてくれる :-)

開発者にやさしい✓ 開発しやすい環境を提供• irb, RubyGems, Test::Unit

✓ 手になじんだ環境で開発を• emacs, vim, eclipse, visual studio

✓ 困ったときには• メーリングリスト

開発者に優しいNice to developers

Values Of Ruby✓ Be nice to developers✓ Be clear and readable✓ Be flexible and agile✓ Be open

Values Of Ruby✓ Be nice to developers✓ Be clear and readable✓ Be flexible and agile✓ Be open

簡潔であることClear and readable

ポール・グラハム

良いデザイン

Say what you mean and say it briefly

- Paul Graham言いたいことは簡潔に言え。

- ポール・グラハム『ハッカーと画家』

ためしに言ってみる

言いたいこと

文字列クラスのメソッド一覧のうち末尾が”f”で終わるものをアスキー順にソートして改行で区切って出力したい

Javaで言ってみる

import java.lang.reflect.Method;import java.util.regex.*;

public class sample { public static void main(String arg[]) { try { Method[] methods = “”.getClass().getMethods(); Array.sort(methods); Pattern pat = Pattern.compile(“.*f$”); for(Method m : methods){ Matcher mat = pat matcher(m.getName()); if (mat.matches()) { System.out.println(m.getName()); } } } catch(Exception e) { System.out.println(e); } }}

import java.lang.reflect.Method;import java.util.regex.*;

public class sample { public static void main(String arg[]) { try { Method[] methods = “”.getClass().getMethods(); Array.sort(methods); Pattern pat = Pattern.compile(“.*f$”); for(Method m : methods){ Matcher mat = pat matcher(m.getName()); if (mat.matches()) { System.out.println(m.getName()); } } } catch(Exception e) { System.out.println(e); } }}

文字列クラスの

import java.lang.reflect.Method;import java.util.regex.*;

public class sample { public static void main(String arg[]) { try { Method[] methods = “”.getClass().getMethods(); Array.sort(methods); Pattern pat = Pattern.compile(“.*f$”); for(Method m : methods){ Matcher mat = pat matcher(m.getName()); if (mat.matches()) { System.out.println(m.getName()); } } } catch(Exception e) { System.out.println(e); } }}

文字列クラスの

import java.lang.reflect.Method;import java.util.regex.*;

public class sample { public static void main(String arg[]) { try { Method[] methods = “”.getClass().getMethods(); Array.sort(methods); Pattern pat = Pattern.compile(“.*f$”); for(Method m : methods){ Matcher mat = pat matcher(m.getName()); if (mat.matches()) { System.out.println(m.getName()); } } } catch(Exception e) { System.out.println(e); } }}

メソッド一覧の

import java.lang.reflect.Method;import java.util.regex.*;

public class sample { public static void main(String arg[]) { try { Method[] methods = “”.getClass().getMethods(); Array.sort(methods); Pattern pat = Pattern.compile(“.*f$”); for(Method m : methods){ Matcher mat = pat matcher(m.getName()); if (mat.matches()) { System.out.println(m.getName()); } } } catch(Exception e) { System.out.println(e); } }}

メソッド一覧の

import java.lang.reflect.Method;import java.util.regex.*;

public class sample { public static void main(String arg[]) { try { Method[] methods = “”.getClass().getMethods(); Array.sort(methods); Pattern pat = Pattern.compile(“.*f$”); for(Method m : methods){ Matcher mat = pat matcher(m.getName()); if (mat.matches()) { System.out.println(m.getName()); } } } catch(Exception e) { System.out.println(e); } }}

末尾が”f”で終わるものを

import java.lang.reflect.Method;import java.util.regex.*;

public class sample { public static void main(String arg[]) { try { Method[] methods = “”.getClass().getMethods(); Array.sort(methods); Pattern pat = Pattern.compile(“.*f$”); for(Method m : methods){ Matcher mat = pat matcher(m.getName()); if (mat.matches()) { System.out.println(m.getName()); } } } catch(Exception e) { System.out.println(e); } }}

末尾が”f”で終わるものを

import java.lang.reflect.Method;import java.util.regex.*;

public class sample { public static void main(String arg[]) { try { Method[] methods = “”.getClass().getMethods(); Array.sort(methods); Pattern pat = Pattern.compile(“.*f$”); for(Method m : methods){ Matcher mat = pat matcher(m.getName()); if (mat.matches()) { System.out.println(m.getName()); } } } catch(Exception e) { System.out.println(e); } }}

アスキー順にソートして

import java.lang.reflect.Method;import java.util.regex.*;

public class sample { public static void main(String arg[]) { try { Method[] methods = “”.getClass().getMethods(); Array.sort(methods); Pattern pat = Pattern.compile(“.*f$”); for(Method m : methods){ Matcher mat = pat matcher(m.getName()); if (mat.matches()) { System.out.println(m.getName()); } } } catch(Exception e) { System.out.println(e); } }}

アスキー順にソートして

import java.lang.reflect.Method;import java.util.regex.*;

public class sample { public static void main(String arg[]) { try { Method[] methods = “”.getClass().getMethods(); Array.sort(methods); Pattern pat = Pattern.compile(“.*f$”); for(Method m : methods){ Matcher mat = pat matcher(m.getName()); if (mat.matches()) { System.out.println(m.getName()); } } } catch(Exception e) { System.out.println(e); } }}

改行で区切って出力したい

import java.lang.reflect.Method;import java.util.regex.*;

public class sample { public static void main(String arg[]) { try { Method[] methods = “”.getClass().getMethods(); Array.sort(methods); Pattern pat = Pattern.compile(“.*f$”); for(Method m : methods){ Matcher mat = pat matcher(m.getName()); if (mat.matches()) { System.out.println(m.getName()); } } } catch(Exception e) { System.out.println(e); } }}

改行で区切って出力したい

import java.lang.reflect.Method;import java.util.regex.*;

public class sample { public static void main(String arg[]) { try { Method[] methods = “”.getClass().getMethods(); Array.sort(methods); Pattern pat = Pattern.compile(“.*f$”); for(Method m : methods){ Matcher mat = pat matcher(m.getName()); if (mat.matches()) { System.out.println(m.getName()); } } } catch(Exception e) { System.out.println(e); } }}

Rubyで言ってみる

文字列クラスの

文字列クラスの“”.

メソッド一覧の“”.

“”.methods.

メソッド一覧の

末尾が”f”で終わるものを“”.

methods.

末尾が”f”で終わるものを“”.

methods.grep(/f$/).

アスキー順にソートして“”.

methods.grep(/f$/).

アスキー順にソートして“”.

methods.grep(/f$/).sort.

改行で区切って“”.methods.grep(/f$/).sort.

“”.methods.grep(/f$/).sort.join(“¥n”).

改行で区切って

“”.methods.grep(/f$/).sort.join(“¥n”).

出力したい

“”.methods.grep(/f$/).sort.join(“¥n”).display

出力したい

“”.methods.grep(/f$/).sort.join(“¥n”).display

“”.methods.grep(/f$/).sort.join(“¥n”).display

確認

Javaで言うと

import java.lang.reflect.Method;import java.util.regex.*;

public class sample { public static void main(String arg[]) { try { Method[] methods = “”.getClass().getMethods(); Array.sort(methods); Pattern pat = Pattern.compile(“.*f$”); for(Method m : methods){ Matcher mat = pat matcher(m.getName()); if (mat.matches()) { System.out.println(m.getName()); } } } catch(Exception e) { System.out.println(e); } }}

Rubyだと

“”.methods.grep(/f$/).sort.join(“¥n”).display

Say what you mean and say it briefly

- Paul Graham言いたいことは簡潔に言え。

- ポール・グラハム『ハッカーと画家』

ポイント

目にやさしい

読みやすさ

無駄がない

本質を捉えている

簡潔であること✓ 処理の本質だけを捉える✓ 読みやすさ

簡潔であること✓ 処理の本質だけを捉える✓ 読みやすさ

開発が楽しくなる

簡潔であること✓ 処理の本質だけを捉える✓ 読みやすさ

開発が楽しくなる開発効率も段違い

簡潔であることClear and readable

Values Of Ruby✓ Be nice to developers✓ Be clear and readable✓ Be flexible and agile✓ Be open

Values Of Ruby✓ Be nice to developers✓ Be clear and readable✓ Be flexible and agile✓ Be open

柔軟であることFlexible and agile

Part1

Expressiveness

表現力

This works! Such finding make me happy.

- Dave Thomasこれも動くんだ!こんな発見が僕をハッピーにしてくれる。

- 達人プログラマ

デモ

表現力

いろいろな表現が可能

複数のプログラミングパラダイムを許容

✓ オブジェクト指向✓ 手続き型✓ 関数型✓ 単なるスクリプト✓ etc

マルチパラダイム

マルチパラダイム✓ 問題解決にあたって最良のパラダイムを✓ プログラマは表現者➡ 表現に自由を!✓ 新しいパラダイムへの入り口として

✓ 問題解決にあたって最良のパラダイムを✓ プログラマは表現者➡ 表現に自由を!✓ 新しいパラダイムへの入り口として

表現力

柔軟であることBe flexible and agile

Part2

Dynamic

動的

動的✓ インタプリタ✓ 動的型✓ オープンクラス

インタプリタ

インタプリタ✓コンパイル不要

• 実行までにかかる時間が短い✓ぎりぎりまで自分自身を書き換えることが可能• 実行中にプログラムを変更➡ アジャイル開発に最適

インタプリタ

動的型

動的型✓ 型宣言不要

• コードをシンプルに保つことが可能➡変更に強く!本質に注力!

✓ 振る舞いにより型を判断• 大事なのはそのオブジェクトが何を出来る(どのような振る舞いを持つ)のか ➡Duck Typing!

動的型

オープンクラス

あらゆるクラスを改変可能

デモ

オープンクラス✓ あらゆるクラスを改変することが可能• Rubyはオープンな言語➡プログラマを信頼!

オープンクラス

動的✓ インタプリタ✓ 動的型✓ オープンクラス

✓ アジャイルな開発を低コストで実現✓ 変更に強く! 本質に注力!✓ すべてはプログラマ次第➡Rubyは信頼してくれている

動的

柔軟であることFlexible and agile

✓ 問題解決にあたって最良のパラダイムを✓ プログラマは表現者➡ 表現に自由を!✓ 新しいパラダイムへの入り口として

表現力

✓ アジャイルな開発を低コストで実現✓ 変更に強く! 本質に注力!✓ 決めるのはプログラマ➡Rubyが信頼してくれている

動的

柔軟であることFlexible and agile

Values Of Ruby✓ Be nice to developers✓ Be clear and readable✓ Be flexible and agile✓ Be open

Values Of Ruby✓ Be nice to developers✓ Be clear and readable✓ Be flexible and agile✓ Be open

開かれていることOpen

開かれていること✓ オープンソース

• 誰でもRubyを好きなように利用できる

✓ 意思決定のプロセス• 誰でも意思決定のプロセスに参加できる✓ コミュニティ

• 大切なのはコミュニティ、そして人

開かれていること✓ オープンソース

• 誰でもRubyを好きなように利用できる

✓ 意思決定のプロセス• 誰でも意思決定のプロセスに参加できる✓ コミュニティ

• 大切なのはコミュニティ、そして人

開かれていること✓ オープンソース

• 誰でもRubyを好きなように利用できる

✓ 意思決定のプロセス• 誰でも意思決定のプロセスに参加できる✓ コミュニティ

• 大切なのはコミュニティ、そして人

開かれていること✓ オープンソース

• 誰でもRubyを好きなように利用できる

✓ 意思決定のプロセス• 誰でも意思決定のプロセスに参加できる✓ コミュニティ

• 大切なのはコミュニティ、そして人

Ruby = コミュニティ、人

開かれていること✓ オープンソース

• 誰でもRubyを好きなように利用できる

✓ 意思決定のプロセス• 誰でも意思決定のプロセスに参加できる✓ コミュニティ

• 大切なのはコミュニティ、そして人

開かれていること✓ オープンソース

• 誰でもRubyを好きなように利用できる

✓ 意思決定のプロセス• 誰でも意思決定のプロセスに参加できる✓ コミュニティ

• 大切なのはコミュニティ、そして人

開かれていることOpen

Values Of Ruby✓ Be nice to developers✓ Be clear and readable✓ Be flexible and agile✓ Be open

Values Of Ruby✓ Be nice to developers✓ Be clear and readable✓ Be flexible and agile✓ Be open

Lesson (1)Rubyの価値

Values of Ruby

Lesson (2)

Lesson (2)続きは勉強会で

To be continued

ご案内

日本Rubyの会

日本Rubyの会

✓開発者の支援✓利用者の支援

http://jp.rubyist.net/magazine/

http://doc/loveruby.net/wiki/

メーリングリスト

http://jp.rubyist.net/

Ruby札幌

Ruby札幌

✓Ruby勉強会@札幌

✓Ruby Sapporo Night

Ruby勉強会@札幌

Ruby勉強会@札幌✓1.5ヶ月に一回くらい✓平均すると20人くらい✓Ruby初心者歓迎✓手伝ってくれる方歓迎

Ruby勉強会@札幌✓ピッケル本読み合わせ✓るびま読み合わせ✓他言語探訪✓Rails導入事例など

✓次回は 7月21日(土)✓RubyKaigi2007報告会✓http://jp.rubyist.net/

Ruby勉強会@札幌

Ruby Sapporo Night

RubySapporoNight

✓7月から開始✓デモ中心??✓アップルストアでw✓初回は7月25日(水)

Ruby札幌

✓Ruby勉強会@札幌

✓Ruby Sapporo Night

Ruby札幌

詳しくは日本Rubyの会をご参照ください

以上

謝辞:• 前田さん、設楽さん• 千葉さん、菅野さん• いつも勉強会にご参加くださっているみなさん

• OSC-Do運営スタッフのみなさん• 日本Rubyの会のみなさん• Ruby開発チームのみなさん• and Special Thanks to Dave Thomas

ご清聴ありがとうございました