SlideShare a Scribd company logo
Ruby勉強会@札幌
Rubyist入門講座
日本Rubyの会
島田浩二
snoozer.05@gmail.com
OSC 2007 Hokkaido
2007-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/
さいきんのRuby
Ruby 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
Ruby勉強会@札幌 "Rubyist入門講座"
Ruby勉強会@札幌 "Rubyist入門講座"
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
Ruby勉強会@札幌 "Rubyist入門講座"
ポール・グラハム
良いデザイン
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で言ってみる
Ruby勉強会@札幌 "Rubyist入門講座"
文字列クラスの
文字列クラスの
“”.
メソッド一覧の
“”.
“”.
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
ご清聴
ありがとう
ございました

More Related Content

KEY
Rails基礎講座 part.1
KEY
Java7再入門講座
PPTX
PDF
型プロファイラ:抽象解釈に基づくRuby 3の静的解析
PDF
Java SE 8 lambdaで変わる プログラミングスタイル
PDF
社内Java8勉強会 ラムダ式とストリームAPI
PDF
Java x Groovy: improve your java development life
PDF
探検!SwiftyJSON
Rails基礎講座 part.1
Java7再入門講座
型プロファイラ:抽象解釈に基づくRuby 3の静的解析
Java SE 8 lambdaで変わる プログラミングスタイル
社内Java8勉強会 ラムダ式とストリームAPI
Java x Groovy: improve your java development life
探検!SwiftyJSON

Similar to Ruby勉強会@札幌 "Rubyist入門講座" (20)

PDF
Ruby on Rails 入門
PDF
「Html sql」で図書館hpにアクセスしてみよう
PPTX
JavaScriptクイックスタート
PPTX
pecl-AOPの紹介
PPT
第4回勉強会 Groovyの文法からSpockまで
PDF
JDK 10 へようこそ
PDF
from old java to java8 - KanJava Edition
PDF
PDF
Java8から17へ
PDF
Gradleどうでしょう
PDF
The Why and How of Java8 at LINE Fukuoka
KEY
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
PDF
named_scope more detail
PPT
第5回勉強会
PDF
速くなければスマフォじゃない - インターンバージョン-
PDF
Ruby Sapporo Night Vol4
PDF
Ruby 同好会宣言
PDF
JavaのGenericsとは?
PDF
Rubyにメソッドを追加して遊ぶ話
PPTX
コードの自動修正によって実現する、機能開発を止めないフレームワーク移行
Ruby on Rails 入門
「Html sql」で図書館hpにアクセスしてみよう
JavaScriptクイックスタート
pecl-AOPの紹介
第4回勉強会 Groovyの文法からSpockまで
JDK 10 へようこそ
from old java to java8 - KanJava Edition
Java8から17へ
Gradleどうでしょう
The Why and How of Java8 at LINE Fukuoka
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
named_scope more detail
第5回勉強会
速くなければスマフォじゃない - インターンバージョン-
Ruby Sapporo Night Vol4
Ruby 同好会宣言
JavaのGenericsとは?
Rubyにメソッドを追加して遊ぶ話
コードの自動修正によって実現する、機能開発を止めないフレームワーク移行
Ad

More from Koji SHIMADA (20)

PDF
Next Generation Web Application Architecture
PDF
20110614 hmcc-enishitech
PDF
20110718 you-must-unlearn-what-you-have-learned rivisited
PDF
20110602 osc2011do-rubysapporo-public
PDF
20110129 organizational-reform -that-is-a-fairy-tail
PDF
20101204 you-must-unlearn-what-you-have-learned
PDF
20101001-Introduction-to-Developer-Testing-With-Ruby
PDF
20100626-OSC2010do-RubySapporo
PDF
20100626-We-Think-We-Act
PDF
20100526 The Productive Programmer
PDF
20100226 Jim Coplien Said You Should Foster Generative Scheme In Your System
PDF
20100213 Where The Street Has No Name
PDF
20091030 Uncle Bob Said You Should Be A Professional With Clean Code
PDF
Our Strategy To Survive In This Hard World(tochigirubykaigi02)
PDF
RubySapporoDigestAndMore-osc2009do
PDF
20090124 Pleasantly Programming with Ruby
PDF
20081220 Rubybonenkai2008 Sapporo
PDF
20081205 Object Club Reject Talks2008
PDF
Talking About Fluent Interface
PDF
20081004-OSC2008Tokyo/Fall-MetaCon
Next Generation Web Application Architecture
20110614 hmcc-enishitech
20110718 you-must-unlearn-what-you-have-learned rivisited
20110602 osc2011do-rubysapporo-public
20110129 organizational-reform -that-is-a-fairy-tail
20101204 you-must-unlearn-what-you-have-learned
20101001-Introduction-to-Developer-Testing-With-Ruby
20100626-OSC2010do-RubySapporo
20100626-We-Think-We-Act
20100526 The Productive Programmer
20100226 Jim Coplien Said You Should Foster Generative Scheme In Your System
20100213 Where The Street Has No Name
20091030 Uncle Bob Said You Should Be A Professional With Clean Code
Our Strategy To Survive In This Hard World(tochigirubykaigi02)
RubySapporoDigestAndMore-osc2009do
20090124 Pleasantly Programming with Ruby
20081220 Rubybonenkai2008 Sapporo
20081205 Object Club Reject Talks2008
Talking About Fluent Interface
20081004-OSC2008Tokyo/Fall-MetaCon
Ad

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