SlideShare una empresa de Scribd logo
1 de 29
Descargar para leer sin conexión
Rubyエンジニアが
pythonをdisるために
pythonを勉強してみた
@kon_yu
2015.10.24 PyLadies Tokyo - 一周年記念パーティ
のみなさんはじめまして
どうも
です
Who am I
• オンライン英会話サービス CTO
• フリーランスエンジニア
• Railsでサービス開発、実はRails使っている人エン
ジニア募集中です
• 趣味でルンバをRubyで制御したりしているひと
きっかけ
Railsプロジェクトのテンプレートエンジンにslim
を適用したら存外良かった
例
.layout__lesson--right
.buttons--downloads
.buttons__left.tooltip-item
= pdf_download_btn
これがHTMLになる
インデントでブロックを制御しているのええやんけ
これって何かに似てない?
 そうだねPythonだね
基本構文やライブラリで
RubyとPythonを比較して(disって)みよう
こういう新しいことを勉強するときはドットインストールって便利ですね
REPL起動終了
Ruby
> pryやirbで起動
Cntrl-Cで抜ける

exitでも抜ける
Python
> python
Cntrl-Dで抜ける

exit()でも抜ける
exit() <- の括弧

括弧書くのだだるい
変数
Ruby
ruby_val = "hello ruby"
Python
python_val = "hi python"
スネークケースで変数を書くのが一般的なのも同じ
代表的なデータセット
Ruby
Array

Set

Hash
Python
List -> RubyのArrayと大体一緒

Set -> RubyのSetと大体一緒

Directory -> RubyとHashと大体
一緒

Taple -> ?
Rubyにはタプルがない、、、
TapleはRubyにないけど、
タプルっぽいことは出来る
Ruby
タプルはないが固定した配列
は作れる
> rb_tupple

= [1, 2, 3].map(&:freeze).freeze
Python
> py_tupple = (1, 2, 3)

> py_tupple[0] = 4 => 代入
しようとすると代入不可なの
でエラーになる
VimerがVimのプラグインを入れたら

何でもできるっていうのに近いかも・・・
制御構文 ifを例にあげて
Ruby
a = 0

if a > 0

puts "if"

elsif a == 0

puts "else if"

else

puts "else"
puts "kouti if saikou" if 1 > 0
Python
a = 0

if a > 0:

print "if"

elif a == 0:

print "else if"

else:

print "else"
if 1 > 0: print "kouti if ga nai!!!!!"

後置ifがない!!!
mapメソッド
Ruby



> [1, 2].map{¦i¦ i * 2}

[2, 4]
Python
> map(lambda i: i * 2, [1,
2])

[2, 4]
eachメソッド
Ruby



> [1, 2].each{¦i¦ puts i}

1

2
Python
> for i in [1,2]: print i

1

2
mapとeachの使い方を合わせると

Rubyの方が直感的
文字列
Ruby



str = "abcdefg"

長さ

> str.length

検索

> str.index( b")

切り取り

> str.slice(0,2)
Python
str = "abcdefg"

長さ

> len(str)

検索

> str.find("b")

切り取り

> s[0, 2]
OOP的にもどう?ここはRuby良くない?
インタプリタ以外の実行環境
RubyもPythonもインタプリタで
実行する関係上

実行速度に度々問題にあがる
AltRuby, AltPythonを対決形式で
やっぱりあるよねJVM
Ruby



JRuby
Python
Jython
Javaのバーチャルマシンで走らせるのって

作りやすいのかな?
C言語にコンパイルできれば早い
Ruby



Crystal
Python
Cython
両方とも完全にRuby, Python互換ではない?

この辺よくわかってない
ライブラリ名比較
Rubyは中学生が考えたようなライブラリ名が多い
メジャーなライブラリでも
• kaminari(雷)
• nokogiri(鋸)
Pythonにもおんなじ何じゃないの?
実際に調べてみた
Knight
Knight
Ruby
ある
https://rubygems.org/
gems/knight
Python
ある
https://pypi.python.org/
pypi/knight-001/1.2.0
Ninja
Ninja
Ruby

ある
https://rubygems.org/
gems/ninja
Python
ある
https://pypi.python.org/pypi/
ninja/1.5.3
Samurai
Samurai
Ruby
ある
https://rubygems.org/
gems/samurai
Python
ある
https://pypi.python.org/
pypi/samurai/0.6
Dragon
Dragon
Ruby
ある
https://rubygems.org/
gems/dragon
Python
なし
ドラゴンは無いけど

ドラゴンフライ(トンボ)は両方ある



ライブラリ名の中二臭さはどっこい
まとめ
• 基本構文は似てるけど、Rubyのほうが好き
• インデントでブロック制御するのはけっこういい
• 新しい言語を学ぶのは楽しい
• 作るものにあった言語やライブラリを選定をするの
がプロ
結論: Pythonのこと、オレきらいじゃないぜ

Más contenido relacionado

La actualidad más candente

jenkinsのすゝめ - 継続的インテグレーションと継続的デリバリー
jenkinsのすゝめ - 継続的インテグレーションと継続的デリバリーjenkinsのすゝめ - 継続的インテグレーションと継続的デリバリー
jenkinsのすゝめ - 継続的インテグレーションと継続的デリバリー
Junya Suzuki
 
Net なプロジェクトでも jenkins を使ってみた
Net なプロジェクトでも jenkins を使ってみたNet なプロジェクトでも jenkins を使ってみた
Net なプロジェクトでも jenkins を使ってみた
Oda Shinsuke
 

La actualidad más candente (20)

ログ+メトリック+トレースの組み合わせで構築する一元的なオブザーバビリティ
ログ+メトリック+トレースの組み合わせで構築する一元的なオブザーバビリティログ+メトリック+トレースの組み合わせで構築する一元的なオブザーバビリティ
ログ+メトリック+トレースの組み合わせで構築する一元的なオブザーバビリティ
 
Ansibleはじめよぉ -Infrastructure as Codeを理解-
Ansibleはじめよぉ -Infrastructure as Codeを理解-Ansibleはじめよぉ -Infrastructure as Codeを理解-
Ansibleはじめよぉ -Infrastructure as Codeを理解-
 
DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!
 
스타트업에서 기술책임자로 살아가기
스타트업에서 기술책임자로 살아가기스타트업에서 기술책임자로 살아가기
스타트업에서 기술책임자로 살아가기
 
Redmineの開発状況のこれまでと現在
Redmineの開発状況のこれまでと現在Redmineの開発状況のこれまでと現在
Redmineの開発状況のこれまでと現在
 
これから機械学習エンジニアとして戦っていくみなさんへ ~MLOps というマインドセットについて~
これから機械学習エンジニアとして戦っていくみなさんへ ~MLOps というマインドセットについて~これから機械学習エンジニアとして戦っていくみなさんへ ~MLOps というマインドセットについて~
これから機械学習エンジニアとして戦っていくみなさんへ ~MLOps というマインドセットについて~
 
Python製BDDツールで自動化してみた
Python製BDDツールで自動化してみたPython製BDDツールで自動化してみた
Python製BDDツールで自動化してみた
 
アップルの特許に見るUI特許のポイント
アップルの特許に見るUI特許のポイントアップルの特許に見るUI特許のポイント
アップルの特許に見るUI特許のポイント
 
RESTfulとは
RESTfulとはRESTfulとは
RESTfulとは
 
「おうちクラウド」が今熱い!
「おうちクラウド」が今熱い!「おうちクラウド」が今熱い!
「おうちクラウド」が今熱い!
 
ジョブ管理でcronは限界があったので”Rundeck”を使ってハッピーになりました
ジョブ管理でcronは限界があったので”Rundeck”を使ってハッピーになりましたジョブ管理でcronは限界があったので”Rundeck”を使ってハッピーになりました
ジョブ管理でcronは限界があったので”Rundeck”を使ってハッピーになりました
 
jenkinsのすゝめ - 継続的インテグレーションと継続的デリバリー
jenkinsのすゝめ - 継続的インテグレーションと継続的デリバリーjenkinsのすゝめ - 継続的インテグレーションと継続的デリバリー
jenkinsのすゝめ - 継続的インテグレーションと継続的デリバリー
 
[D20] 高速Software Switch/Router 開発から得られた高性能ソフトウェアルータ・スイッチ活用の知見 (July Tech Fest...
[D20] 高速Software Switch/Router 開発から得られた高性能ソフトウェアルータ・スイッチ活用の知見 (July Tech Fest...[D20] 高速Software Switch/Router 開発から得られた高性能ソフトウェアルータ・スイッチ活用の知見 (July Tech Fest...
[D20] 高速Software Switch/Router 開発から得られた高性能ソフトウェアルータ・スイッチ活用の知見 (July Tech Fest...
 
MySQLと組み合わせて始める全文検索プロダクト"elasticsearch"
MySQLと組み合わせて始める全文検索プロダクト"elasticsearch"MySQLと組み合わせて始める全文検索プロダクト"elasticsearch"
MySQLと組み合わせて始める全文検索プロダクト"elasticsearch"
 
Molecule入門
Molecule入門Molecule入門
Molecule入門
 
Agile Quality アジャイル品質パターン (QA2AQ)
Agile Quality アジャイル品質パターン (QA2AQ)Agile Quality アジャイル品質パターン (QA2AQ)
Agile Quality アジャイル品質パターン (QA2AQ)
 
학생 개발자, 인턴십으로 성장하기
학생 개발자, 인턴십으로 성장하기학생 개발자, 인턴십으로 성장하기
학생 개발자, 인턴십으로 성장하기
 
組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術
 
Net なプロジェクトでも jenkins を使ってみた
Net なプロジェクトでも jenkins を使ってみたNet なプロジェクトでも jenkins を使ってみた
Net なプロジェクトでも jenkins を使ってみた
 
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
 

Destacado

Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]
Ra Zon
 

Destacado (10)

白い陽気なやつとPythonでたわむれる
白い陽気なやつとPythonでたわむれる白い陽気なやつとPythonでたわむれる
白い陽気なやつとPythonでたわむれる
 
Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]
 
Rubyのパフォーマンスはどこまで上げられるか。あるいはRubyは本当に遅いのか?
Rubyのパフォーマンスはどこまで上げられるか。あるいはRubyは本当に遅いのか?Rubyのパフォーマンスはどこまで上げられるか。あるいはRubyは本当に遅いのか?
Rubyのパフォーマンスはどこまで上げられるか。あるいはRubyは本当に遅いのか?
 
自社開発プロダクト ALL-IN で行っている単体テストのパフォーマンスチューニングTips
自社開発プロダクト ALL-IN で行っている単体テストのパフォーマンスチューニングTips自社開発プロダクト ALL-IN で行っている単体テストのパフォーマンスチューニングTips
自社開発プロダクト ALL-IN で行っている単体テストのパフォーマンスチューニングTips
 
Benchmarkspec
BenchmarkspecBenchmarkspec
Benchmarkspec
 
凡庸なSEが、大規模SIerの集団でできること - DevLOVE甲子園 2013
凡庸なSEが、大規模SIerの集団でできること - DevLOVE甲子園 2013凡庸なSEが、大規模SIerの集団でできること - DevLOVE甲子園 2013
凡庸なSEが、大規模SIerの集団でできること - DevLOVE甲子園 2013
 
SIerからWebエンジニアへの失敗しない転職方法
SIerからWebエンジニアへの失敗しない転職方法SIerからWebエンジニアへの失敗しない転職方法
SIerからWebエンジニアへの失敗しない転職方法
 
10年以上Java屋してたおっさんが 今年からフロントエンジニアやっている話
10年以上Java屋してたおっさんが 今年からフロントエンジニアやっている話10年以上Java屋してたおっさんが 今年からフロントエンジニアやっている話
10年以上Java屋してたおっさんが 今年からフロントエンジニアやっている話
 
35歳無名のシステムエンジニアが1年半でフロントエンジニアになるために行った3つの成長戦略
35歳無名のシステムエンジニアが1年半でフロントエンジニアになるために行った3つの成長戦略35歳無名のシステムエンジニアが1年半でフロントエンジニアになるために行った3つの成長戦略
35歳無名のシステムエンジニアが1年半でフロントエンジニアになるために行った3つの成長戦略
 
Cookpad 17 day Tech internship 2017 言語処理系入門 Rubyをコンパイルしよう
Cookpad 17 day Tech internship 2017 言語処理系入門 RubyをコンパイルしようCookpad 17 day Tech internship 2017 言語処理系入門 Rubyをコンパイルしよう
Cookpad 17 day Tech internship 2017 言語処理系入門 Rubyをコンパイルしよう
 

Similar a RubyエンジニアがPythonをdisるためにPythonを勉強してみた

LT: 今日帰ってすぐに始められるPython #nds45
LT: 今日帰ってすぐに始められるPython #nds45LT: 今日帰ってすぐに始められるPython #nds45
LT: 今日帰ってすぐに始められるPython #nds45
civic Sasaki
 
次世代言語 Python による PyPy を使った次世代の処理系開発
次世代言語 Python による PyPy を使った次世代の処理系開発次世代言語 Python による PyPy を使った次世代の処理系開発
次世代言語 Python による PyPy を使った次世代の処理系開発
shoma h
 

Similar a RubyエンジニアがPythonをdisるためにPythonを勉強してみた (20)

Pipenvのご紹介 v2
Pipenvのご紹介 v2Pipenvのご紹介 v2
Pipenvのご紹介 v2
 
LT: 今日帰ってすぐに始められるPython #nds45
LT: 今日帰ってすぐに始められるPython #nds45LT: 今日帰ってすぐに始められるPython #nds45
LT: 今日帰ってすぐに始められるPython #nds45
 
PyPy 紹介
PyPy 紹介PyPy 紹介
PyPy 紹介
 
【入門】3時間でアプリ公開!ゼロからのプログラミングRails講座
【入門】3時間でアプリ公開!ゼロからのプログラミングRails講座【入門】3時間でアプリ公開!ゼロからのプログラミングRails講座
【入門】3時間でアプリ公開!ゼロからのプログラミングRails講座
 
Introduction to NetOpsCoding#2
Introduction to NetOpsCoding#2Introduction to NetOpsCoding#2
Introduction to NetOpsCoding#2
 
次世代言語 Python による PyPy を使った次世代の処理系開発
次世代言語 Python による PyPy を使った次世代の処理系開発次世代言語 Python による PyPy を使った次世代の処理系開発
次世代言語 Python による PyPy を使った次世代の処理系開発
 
Why python
Why pythonWhy python
Why python
 
Why python
Why pythonWhy python
Why python
 
mypy - 待望のPython3.9型ヒント対応
mypy - 待望のPython3.9型ヒント対応mypy - 待望のPython3.9型ヒント対応
mypy - 待望のPython3.9型ヒント対応
 
Pyconjp2014_implementations
Pyconjp2014_implementationsPyconjp2014_implementations
Pyconjp2014_implementations
 
20120927 findjob4 dev_ops
20120927 findjob4 dev_ops20120927 findjob4 dev_ops
20120927 findjob4 dev_ops
 
kintone devCamp 2015 ultra fast improvement
kintone devCamp 2015  ultra fast improvementkintone devCamp 2015  ultra fast improvement
kintone devCamp 2015 ultra fast improvement
 
Pythonによる画像処理について
Pythonによる画像処理についてPythonによる画像処理について
Pythonによる画像処理について
 
Hannari python#27
Hannari python#27Hannari python#27
Hannari python#27
 
Introduction to NetOpsCoding
Introduction to NetOpsCodingIntroduction to NetOpsCoding
Introduction to NetOpsCoding
 
プロが教える Rails 教え方ワンポイントとキャリア情報
プロが教える Rails 教え方ワンポイントとキャリア情報プロが教える Rails 教え方ワンポイントとキャリア情報
プロが教える Rails 教え方ワンポイントとキャリア情報
 
素人のための機械学習
素人のための機械学習素人のための機械学習
素人のための機械学習
 
GitLab で実現する Ansible コードの管理
GitLab で実現する Ansible コードの管理GitLab で実現する Ansible コードの管理
GitLab で実現する Ansible コードの管理
 
Python & PyConJP 2014 Report
Python & PyConJP 2014 ReportPython & PyConJP 2014 Report
Python & PyConJP 2014 Report
 
今年はRubyを勉強するぞ!という方へCodeYourRubyリポジトリのご紹介
今年はRubyを勉強するぞ!という方へCodeYourRubyリポジトリのご紹介今年はRubyを勉強するぞ!という方へCodeYourRubyリポジトリのご紹介
今年はRubyを勉強するぞ!という方へCodeYourRubyリポジトリのご紹介
 

Más de Yusuke Kon

Más de Yusuke Kon (14)

RailsでのREST API開発の知見共有
RailsでのREST API開発の知見共有RailsでのREST API開発の知見共有
RailsでのREST API開発の知見共有
 
クソアプリのつくり方
クソアプリのつくり方クソアプリのつくり方
クソアプリのつくり方
 
CTOやフリーランスのキャリアについて
CTOやフリーランスのキャリアについてCTOやフリーランスのキャリアについて
CTOやフリーランスのキャリアについて
 
CTOやフリーランスのキャリアについて
CTOやフリーランスのキャリアについてCTOやフリーランスのキャリアについて
CTOやフリーランスのキャリアについて
 
Railsアプリの長期運用のコツ 未使用コードを削除せよ
Railsアプリの長期運用のコツ 未使用コードを削除せよRailsアプリの長期運用のコツ 未使用コードを削除せよ
Railsアプリの長期運用のコツ 未使用コードを削除せよ
 
Esp32でiot
Esp32でiotEsp32でiot
Esp32でiot
 
Heroku Dockerの使い所
Heroku Dockerの使い所Heroku Dockerの使い所
Heroku Dockerの使い所
 
アントレプレナー養成
アントレプレナー養成アントレプレナー養成
アントレプレナー養成
 
Docker composeで開発環境をメンバに配布せよ
Docker composeで開発環境をメンバに配布せよDocker composeで開発環境をメンバに配布せよ
Docker composeで開発環境をメンバに配布せよ
 
RubyでRoombaをハックする
RubyでRoombaをハックするRubyでRoombaをハックする
RubyでRoombaをハックする
 
管理画面チラ見せナイト3 登壇資料
管理画面チラ見せナイト3 登壇資料管理画面チラ見せナイト3 登壇資料
管理画面チラ見せナイト3 登壇資料
 
Yoshinani
YoshinaniYoshinani
Yoshinani
 
Tokyu ruby kaigi07
Tokyu ruby kaigi07Tokyu ruby kaigi07
Tokyu ruby kaigi07
 
Appiumを用いたiOS(Android)受け入れテスト
Appiumを用いたiOS(Android)受け入れテストAppiumを用いたiOS(Android)受け入れテスト
Appiumを用いたiOS(Android)受け入れテスト
 

RubyエンジニアがPythonをdisるためにPythonを勉強してみた