世界のどこかで楽しくRubyでお仕事するために

93
世界のどこかで Rubyで楽しく お仕事をするために Kuniaki IGARASHI/igaiga 2011.3.20 at 北陸.rb x 高専カンファレンス

description

Hokuriku.rb x 高専カンファレンス2011.3.20 at 石川高専

Transcript of 世界のどこかで楽しくRubyでお仕事するために

Page 1: 世界のどこかで楽しくRubyでお仕事するために

世界のどこかでRubyで楽しくお仕事をするためにKuniaki IGARASHI/igaiga2011.3.20 at 北陸.rb x 高専カンファレンス

Page 2: 世界のどこかで楽しくRubyでお仕事するために

最初に、東北地方太平洋沖地震で被災されたみなさまにおくやみ、お見舞い申し上げます。

Page 3: 世界のどこかで楽しくRubyでお仕事するために

さしあたり、私にできることは義援金を送ること。

Page 4: 世界のどこかで楽しくRubyでお仕事するために

そこで

Page 5: 世界のどこかで楽しくRubyでお仕事するために

世界のどこかでRubyで楽しくお仕事をするためにがっつり稼ぐためにKuniaki IGARASHI/igaiga2011.3.20 at 北陸.rb x 高専カンファレンス

Page 6: 世界のどこかで楽しくRubyでお仕事するために

そして

Page 7: 世界のどこかで楽しくRubyでお仕事するために

会場へ行けずごめんなさい

というか正直行きたかったよ、ええ。

本当に残念です。

Page 8: 世界のどこかで楽しくRubyでお仕事するために

自己紹介

Page 9: 世界のどこかで楽しくRubyでお仕事するために

五十嵐邦明 / igaiga555株式会社 万葉 Rails/iPhone開発高専カンファレンス014東京実行委員長

Page 10: 世界のどこかで楽しくRubyでお仕事するために

提供

株式会社 万葉 Everyleaf Corp.

Ruby on Rails and iPhone

Page 11: 世界のどこかで楽しくRubyでお仕事するために

フリーペーパー”EM高専カンファレンス”絶賛好評配布中!!

Page 12: 世界のどこかで楽しくRubyでお仕事するために

スポンサー

jig.jp様

Page 13: 世界のどこかで楽しくRubyでお仕事するために

おしながきRubyとの出会いと自分史

私がRubyを仕事にした理由Rubyを仕事にしてみてRubyでお仕事世界編

RubyConfへ行ってきた世界でRubyを仕事にする方法

Page 14: 世界のどこかで楽しくRubyでお仕事するために

いがいが史

Page 15: 世界のどこかで楽しくRubyでお仕事するために

1998年 群馬高専電気工学科卒

Page 16: 世界のどこかで楽しくRubyでお仕事するために

2002年 北海道大学量子物理工学専攻卒

Page 17: 世界のどこかで楽しくRubyでお仕事するために

2002 札幌で就職 SE/プログラマになる C, C++, C#2005 東京で転職 コンシューマ機器メーカー C/C++で動画編集ライブラリ開発2010 東京で転職 Rails/iPhone開発

Page 18: 世界のどこかで楽しくRubyでお仕事するために

いがいが史 Ruby編2002 札幌 先輩がRubyを使ってた(気がする) tDiaryを使い始める2005 東京 動画編集ライブラリ開発 Rubyを使い始める 治具としてのRuby テストツールとしてのRuby2010 Ruby on Rails を仕事道具にする

Page 19: 世界のどこかで楽しくRubyでお仕事するために

治具:物をつくるために便利な自作の道具

例)全テキストファイルの先頭に1行挿入したいemacsの拡張を書きたい

治具としてのRuby

Page 20: 世界のどこかで楽しくRubyでお仕事するために

日本語っぽい字を含むファイルがどれくらいあるか知りたい# -*- coding: utf-8 -*-Dir.glob('**/*.*'){ |f| #サブディレクトリも含む全ファイルについて  puts "■file: #{f}" #ファイル名出力  File.open(f, "r:UTF-8:UTF-8").each_with_index{ |l, i| #ファイル開く! ! puts "#{f}:#{i+1}: #{l}" unless l =~ /^[\p{ASCII}]*$/# # #全ての行を調べて、ASCII英字以外の文字が含まれていたら標準出力に表示  }}

# for Ruby1.9# 鬼車(Ruby正規表現エンジン)リファレンス# http://www.geocities.jp/kosako3/oniguruma/doc/RE.ja.txt

最近つくった治具

Page 21: 世界のどこかで楽しくRubyでお仕事するために

参考図書私がRubyを学習した最初の本

当時 現在http://www.amazon.co.jp/dp/4797359986/

Page 22: 世界のどこかで楽しくRubyでお仕事するために

051 文字列を連結する052 文字列の一部を置換する056 文字列の先頭・末尾から空白を取り除く070 文字列が正規表現として正しいか調べる160 ディレクトリとファイルの一覧を取得する162 カレントディレクトリを変更する165 ファイルをコピーする207 現在の日時を取得する227 RubyGemsでライブラリをインストールする228 Rubyスクリプトをコマンドにする

Rubyレシピブック目次(抜粋)

http://www.notwork.org/rubyrecipebook3/contents-detail.html

Page 23: 世界のどこかで楽しくRubyでお仕事するために

当時、動画編集ライブラリの開発をしていました。このライブラリのテストはwindows上でコマンドラインのexeから実行するものでした。とても有用なテストだったのですが、実行時間が長いのが問題でした。 例> lib_test.exe -f file -c avc -s 720 オプションでcodecとか画サイズとかを指定lib_test.exe -f file1 -c avc -s 720lib_test.exe -f file1 -c avc -s 1440lib_test.exe -f file1 -c avc -s 1920lib_test.exe -f file1 -c mpeg -s 720lib_test.exe -f file1 -c mpge -s 1440lib_test.exe -f file1 -c mpge -s 1920lib_test.exe -f file2 -c avc -s 720lib_test.exe -f file2 -c avc -s 1440... 延々続く

動画編集ライブラリテストツール

Page 24: 世界のどこかで楽しくRubyでお仕事するために

改善1ruby のスクリプト化して、タグで実行コードを絞れるように変えました。コミット前など時間が限られたときに便利。また、あるcodecだけ実行することもできるようになりました。その際にtag付きテスト一覧リストはExcelで管理するように変えました。 例> lib_test.rb -tag 720lib_test.exe -f file1 -c avc -s 720lib_test.exe -f file1 -c avc -s 1440lib_test.exe -f file1 -c avc -s 1920lib_test.exe -f file1 -c mpeg -s 720lib_test.exe -f file1 -c mpge -s 1440lib_test.exe -f file1 -c mpge -s 1920lib_test.exe -f file2 -c avc -s 720lib_test.exe -f file2 -c avc -s 1440...

動画編集ライブラリテストツール

Page 25: 世界のどこかで楽しくRubyでお仕事するために

改善2複数マシンで分散実行するようにしました。dRuby の TupleSpace を利用したライブラリを別の部署の人が作ってくれていたので組み込みました。

動画編集ライブラリテストツール

Ruby逆引きレシピ133 タプルスペースを介した分散処理を行ないたい

Page 26: 世界のどこかで楽しくRubyでお仕事するために

TupleSpace

write take

tuple

tuple

複数プロセスからアクセスできる箱tuple = オブジェクト

Page 27: 世界のどこかで楽しくRubyでお仕事するために

サンプルコード

Page 28: 世界のどこかで楽しくRubyでお仕事するために

手順1.TupleSpace 作成

2.write3.take

Page 29: 世界のどこかで楽しくRubyでお仕事するために

TupleSpace

write take

tuple

tuple

1.TupleSpace 作成

Page 30: 世界のどこかで楽しくRubyでお仕事するために

require 'rinda/tuplespace'$ts = Rinda::TupleSpace.newDRb.start_service(

'druby://localhost:12345', $ts)DRb.thread.join

Page 31: 世界のどこかで楽しくRubyでお仕事するために

2.writeTupleSpace

write take

tuple

tuple

Page 32: 世界のどこかで楽しくRubyでお仕事するために

require 'drb'$ts = DRbObject.new_with_uri(

'druby://localhost:12345')$ts.write([1, 2])

↑writeに tupleオブジェクト(この例ではArray [1,2] )を渡すとタプルスペースに格納してくれるヽ(́▽`)ノ

Page 33: 世界のどこかで楽しくRubyでお仕事するために

3.takeTupleSpace

write take

tuple

tuple

Page 34: 世界のどこかで楽しくRubyでお仕事するために

require 'drb'$ts = DRbObject.new_with_uri(

'druby://localhost:12345')p $ts.take([nil, nil])

=> [1, 2]↑さっきwriteで格納したtuple が取れるヽ(́▽`)ノ

Page 35: 世界のどこかで楽しくRubyでお仕事するために

分散テストシステムテスト実行者write

テストテストテスト

テスト

take

テスト機

テスト

テスト

テスト機

テスト

テスト機

Page 36: 世界のどこかで楽しくRubyでお仕事するために

tupleにいろんなオブジェクトを入れられる$ts.write([:label,’str’,1])tupleの生存時間を指定できる$ts.write([1,2], 30) ←生存時間30秒パターンマッチでtakeできる$ts.take([:label, nil])→第1要素が :label で要素数が2のtupleをtakenilは何でもマッチ

便利!

Page 37: 世界のどこかで楽しくRubyでお仕事するために

もともと Rubyist の友人が多かった agile コミュニティにはRubyistが多いRubyKaigi などでさらに多くの Rubyist と出会うRubyコミュニティが好きになる

Rubyコミュニティとの出会い

Page 38: 世界のどこかで楽しくRubyでお仕事するために

2社目の会社大きなコンシューマ機器製造メーカーのグループ会社コードをたくさん書きたくて転職してきたそれは達成できていた同僚も技術レベルが高くいい人ばかり

自分が身につけたい技術と仕事の乖離を感じるように会社依存の技術をこのまま貯めていいのかという焦燥感プログラマとしてのキャリアビジョンを描けるかクローズドな閉塞感

転職を考えるようになる

Page 39: 世界のどこかで楽しくRubyでお仕事するために

プロダクトの規模が小さい 1人でも仕事できる→会社依存からの脱却Rubyコミュニティが好きRubyが好きRubyでお仕事ができないか

Rubyでお仕事できないか

Page 40: 世界のどこかで楽しくRubyでお仕事するために

Railsで開発している会社Ruby会議などでメンバの人を知るRubyでギャルゲなんか楽しそう社長に聞き込みしてみたり小規模(当時8人)なので 自分が貢献できるのでは

万葉という会社があった

Page 41: 世界のどこかで楽しくRubyでお仕事するために

RoR!弊社メンバー紹介

Page 42: 世界のどこかで楽しくRubyでお仕事するために

Yasuko OHBAPresident & CEO“The basis of making DSL with

Ruby”

She is speaking NOW!You could go for main hall.

photo by koichiroo

Page 43: 世界のどこかで楽しくRubyでお仕事するために

Jugyo “g” developerthe best LT talker in RubyConf2009

“My many failed products”He is speaking NOW!

You could go for convention hall 200.

photo by koichiroo

Page 44: 世界のどこかで楽しくRubyでお仕事するために

Yes, we are conflicting now,violently.

Everyleaf Everyleaf Everyleaf BusinessOwnerKaigi「万葉

全力でつぶす!」

盛大にコンフリクト at Ruby会議2010

Page 45: 世界のどこかで楽しくRubyでお仕事するために

       同僚の櫻井さん↑

Page 46: 世界のどこかで楽しくRubyでお仕事するために

↑専務 at RejectTalks

Page 47: 世界のどこかで楽しくRubyでお仕事するために

万葉で働いてみて1年間でRailsとiPhoneの2つの開発環境を習得Rubyコミュニティが同僚的な存在 Tokyu.rb, Asakusa.rb, twitter 開発に関する情報を交換できるRubyばっかりってわけでもない iPhone, html, css, javascript

万葉で楽しくお仕事

Page 48: 世界のどこかで楽しくRubyでお仕事するために

雑談は重要な情報源 知らない知識が入ってくるデバッグ力 隣の人のやり方を覗いてみたり困ったときの情報を交換する

勉強会の力

Page 49: 世界のどこかで楽しくRubyでお仕事するために

転職の動機と条件をまとめると

Page 50: 世界のどこかで楽しくRubyでお仕事するために

会社に依存しなくても生きていける

技術を身につけること

Page 51: 世界のどこかで楽しくRubyでお仕事するために

(ある程度)稼げること

Page 52: 世界のどこかで楽しくRubyでお仕事するために

そしてたぶん

Page 53: 世界のどこかで楽しくRubyでお仕事するために

RubyコミュニティでRubyistのみなさん

と一緒に仕事をしたい

Page 54: 世界のどこかで楽しくRubyでお仕事するために

仕事を選ぶときにコミュニティで選ぶという生き方

もある

Page 55: 世界のどこかで楽しくRubyでお仕事するために

君はどこのコミュニティで生きていきたいか?

Page 56: 世界のどこかで楽しくRubyでお仕事するために

そういう意味で、学生のころから

コミュニティ活動に参加することは自分の将来展望を描く

のに有効

Page 57: 世界のどこかで楽しくRubyでお仕事するために

キャリアについて考えてもらう

入り口になればいい

Page 58: 世界のどこかで楽しくRubyでお仕事するために

Rubyでお仕事世界編

Page 59: 世界のどこかで楽しくRubyでお仕事するために

RubyConfへ行ってきた

Page 60: 世界のどこかで楽しくRubyでお仕事するために

Dave Thomas, DHH, Matz が基調講演ホテル開催、昼ごはん、おやつ付きリクルート活動が盛ん日本人とたくさん話せる

RubyConf

Page 61: 世界のどこかで楽しくRubyでお仕事するために

Matz 基調講演終了後 基調講演内容和訳 http://blog.everyleaf.com/rubyconf2010-matz

Page 62: 世界のどこかで楽しくRubyでお仕事するために

Rubyを17年作っているけど、Rubyのユーザーは100人を超えないと思っていた。ところが、現在はこの会場にもたくさんの人が来てくれているけど、すごくたくさんの人にRubyを使ってもらっている。それは、自分の力ではなくて、Daveが本を書いてくれなければ、DHHがRubyを選んでくれなければ、そしてあなたがコミュニティに参加しなければ、今のRubyはなかったと思います。みなさんに心から感謝します!

matz 基調講演

http://blog.everyleaf.com/rubyconf2010-matz

Page 63: 世界のどこかで楽しくRubyでお仕事するために

セッション

Page 64: 世界のどこかで楽しくRubyでお仕事するために

セッションConfreaks サイトにて公開http://confreaks.net/events/rubyconf2010

例Git ninja training (“Classy Git”)

http://confreaks.net/videos/471-rubyconf2010-classy-githttp://git-tips.heroku.com

$ git diff --word-diff

$ git log --oneline --decorate --graph

Page 65: 世界のどこかで楽しくRubyでお仕事するために

マラソン大会

Page 66: 世界のどこかで楽しくRubyでお仕事するために

マラソン大会

Page 67: 世界のどこかで楽しくRubyでお仕事するために

おやつ

Page 68: 世界のどこかで楽しくRubyでお仕事するために

日本人とたくさん話せる

Page 69: 世界のどこかで楽しくRubyでお仕事するために

感想

行かないと分からないことは意外とたくさんある

Page 70: 世界のどこかで楽しくRubyでお仕事するために

なので、RubyConf2011にみんなぜひ行ってみよう!

Page 71: 世界のどこかで楽しくRubyでお仕事するために

お金はどれくらいかかるの?だいたい20万円

飛行機代 10万円参加費 3万円

ホテル代(4泊) 6万円交通費 1万円食費 2万円

今回は会社に全費用を出してもらいました。ありがとうございました。

Page 72: 世界のどこかで楽しくRubyでお仕事するために

今年はmrknさんも登壇か?

Page 73: 世界のどこかで楽しくRubyでお仕事するために

リクルート活動が盛ん

Page 74: 世界のどこかで楽しくRubyでお仕事するために

ぶっちゃけ、どれくらい稼げるの?

Page 75: 世界のどこかで楽しくRubyでお仕事するために

RailsDevCon@masuidrive「シリコンバレーでRailsエンジニアなら

年収100K~175K$(175K$=1400万円)稼げる」

http://togetter.com/li/71964

Page 76: 世界のどこかで楽しくRubyでお仕事するために

必要なスキルセットRails経験3年以上

Facebookアプリを作った経験RSpec・Cucumberでテスト

NoSQL、Git

http://togetter.com/li/71964

Page 77: 世界のどこかで楽しくRubyでお仕事するために

http://workingwithrails.com/

Page 78: 世界のどこかで楽しくRubyでお仕事するために

用語解説p.a. = per annum = 年間

オーストラリア メルボルン でweb開発者募集(6ヶ月)年収 $69608(約550万円) ~$75350 +9%退職金

Page 79: 世界のどこかで楽しくRubyでお仕事するために

また、学生さんであれば留学→海外で就職というルートも可能

Page 80: 世界のどこかで楽しくRubyでお仕事するために

注意!!この辺から

ネットで調べたことをさも自分が

体験したかのようにお話します。

ご了承ください。情報ありがとうございます。> btoさん、西嶋さん

Page 81: 世界のどこかで楽しくRubyでお仕事するために

そもそも米国で働くことがなぜ難しいのか

Page 82: 世界のどこかで楽しくRubyでお仕事するために

H-1B visa(就労ビザ)の取得が面倒採用企業の気持ち

ビザ出るまで半年も待たされて不確定。そんな面倒でリスキーな思いをするなら自国民を雇用した方が楽じゃんね。

Page 83: 世界のどこかで楽しくRubyでお仕事するために

しかし、留学生には特典がある

Page 84: 世界のどこかで楽しくRubyでお仕事するために

OPTOptional Practical Training

留学卒業後1年間、学生visaのまま(H-1B無しで)

働くことができるこの1年間、働きながらH-1Bを取得すればいい

Page 85: 世界のどこかで楽しくRubyでお仕事するために

米国以外にも仕事がある場所はある

Page 86: 世界のどこかで楽しくRubyでお仕事するために

RubyKaigi2010世界のRubyConfから

EuRuKoRailsConfChinaRailsCamp

Page 87: 世界のどこかで楽しくRubyでお仕事するために
Page 88: 世界のどこかで楽しくRubyでお仕事するために

つづきはいずれ

またの機会に・・・

Page 89: 世界のどこかで楽しくRubyでお仕事するために

まとめ

Page 90: 世界のどこかで楽しくRubyでお仕事するために

RubyConfや海外のカンファレンスに行ってみよう行かなければ

わからないことがある

Page 91: 世界のどこかで楽しくRubyでお仕事するために

米国で働くには留学から

就労ビザをとるLifehackがある

Page 92: 世界のどこかで楽しくRubyでお仕事するために

シリコンバレーではRailsエンジニアで年収1000万円越え

を狙える

Page 93: 世界のどこかで楽しくRubyでお仕事するために

株式会社万葉Everyleaf Corp.

Rubyコミュニティと共に歩むそんな生き方を万葉でしていきたい

ご静聴ありがとうございましたご質問は @igaiga555 まで