Ruby開発が教えてくれたこと

    (財)Rubyアソシエーション
  (株)ネットワーク応用通信研究所
      (株)楽天 技術研究所
        Heroku [New]

     まつもと ゆきひろ
     @yukihiro_matz


                       Powered by Rabbit 0.9.2
プログラミングとの出会い

ポケットコンピュータPC-1210




                          1/71
                    Powered by Rabbit 0.9.2
コンピュータでなにするか


ゲーム
計算
プログラミング言語



                  2/71
            Powered by Rabbit 0.9.2
手段と目的


手段としての言語
目的としての言語
手段のためには目的を選ばない



                   3/71
             Powered by Rabbit 0.9.2
Sapir-Whorf仮説


言語は思考に影響を与える
 制限を与える
 発想を与える



                         4/71
                   Powered by Rabbit 0.9.2
言語の選択は重要


生産性に直結
 ストレス
 コスト
 記法


                    5/71
              Powered by Rabbit 0.9.2
プログラミング言語

Ruby
  開発効率に注目
 より簡単に
 より効率よく
 より気分よく

                     6/71
               Powered by Rabbit 0.9.2
気分



重要な要素
プログラマの気分を重視



                    7/71
              Powered by Rabbit 0.9.2
プログラマの気分

気分が良い時
 思った通りに行く時
 万能感
 我慢しない時
 悩まない時

                    8/71
              Powered by Rabbit 0.9.2
思った通りに行く時


常識が通用する
予測が当たる
期待が応えられる



                   9/71
             Powered by Rabbit 0.9.2
万能感


やりたいことができる
やればできる
簡単にできる



                 10/71
             Powered by Rabbit 0.9.2
我慢しない時



苦痛が少ない
不合理を感じない



                11/71
            Powered by Rabbit 0.9.2
悩まない時



海に向かって叫ばない
クリアな世界観



                 12/71
             Powered by Rabbit 0.9.2
気分の良いプログラミング



簡潔
万能感



               13/71
           Powered by Rabbit 0.9.2
ブルックスの法則


プログラマが一定時間
に開発できるソフトウェ
ア量は言語によらず一
定である
       [「人月の神話」より引用]




                     14/71
                 Powered by Rabbit 0.9.2
簡潔さは力なり



Paul Graham
プログラミング言語の進化



                   15/71
               Powered by Rabbit 0.9.2
例題: 階乗


factorial, or n!
  n以下の自然数すべての積
 n! = 1×2×3×...×n



                        16/71
                    Powered by Rabbit 0.9.2
階乗(Java)


class Sample {
  private static int fact(int n) {
    if (n == 1) return 1;
    return n * fact(n - 1);
  }
  public static void main(String[] argv) {
    System.out.println("6!="+fact(6));
  }
}


                                           17/71
                                       Powered by Rabbit 0.9.2
階乗(C)
#include <stdio.h>
int
fact(int n)
{
    if (n == 1) return 1;
    return n * fact(n - 1);
}

int
main()
{
    printf("6!=%dn", fact(6));
}
                                      18/71
                                  Powered by Rabbit 0.9.2
階乗(Ruby)

def fact(n)
  if n == 1
    1
  else
    n * fact(n - 1)
  end
end
print "6!=", fact(6), "n"
                                 19/71
                             Powered by Rabbit 0.9.2
階乗(Ruby)



def fact(n)
  (1..n).inject(:*)
end
print "6!=", fact(6), "n"


                                 20/71
                             Powered by Rabbit 0.9.2
簡潔な表現


get '/foo', :agent => /Chrome/ do
  "You're using Google Chrome"
end

get '/foo' do
  "You're using non Chrome browsers"
end


                                        21/71
                                    Powered by Rabbit 0.9.2
抽象化


for (i=0; i<100; i++) {
  ...
}

100.times do
  ...
end

                              22/71
                          Powered by Rabbit 0.9.2
人間の都合、機械の都合


だれが主人か
 人間?
 コンピュータ?



               23/71
           Powered by Rabbit 0.9.2
200!

printf("12!=%dn", fact(12));
printf("13!=%dn", fact(13));
printf("14!=%dn", fact(14));
printf("200!=%dn", fact(200));
=> 12!=479001600
   13!=1932053504
   14!=1278945280
   200!=0

                                  24/71
                              Powered by Rabbit 0.9.2
200!

print "200!=", fact(200), "n"
=> 78865786736479050355236321393218506
   22951359776871732632947425332443594
   49963403342920304284011984623904177
   21213891963883025764279024263710506
   19266249528299311134628572707633172
   37396988943922445621451664240254033
   29186413122742829485327752424240757
   39032403212574055795686602260319041
   70324062351700858796178922222789623
   70389737472000000000000000000000000
   0000000000000000000000000
                                       25/71
                                   Powered by Rabbit 0.9.2
プログラミング言語Ruby


開発効率に注目
より簡単に
より効率よく
より気分よく


                26/71
            Powered by Rabbit 0.9.2
時代の要請にマッチ


性能よりも生産性
開発者の気分重視
開発者に心地よい言語



                 27/71
             Powered by Rabbit 0.9.2
設計者=ユーザー


使う人の気持ちが分かる
共感できる人のために
共感できない? それもOK!



                     28/71
                 Powered by Rabbit 0.9.2
プログラミングは楽しい


創造する楽しみ
対話の楽しみ
知的刺激



                  29/71
              Powered by Rabbit 0.9.2
でも楽しくない


直らないバグ
迫る〆切
炎上するプロジェクト



                 30/71
             Powered by Rabbit 0.9.2
解決策



コンピュータに仕事を押し付ける
ムーアの法則



                  31/71
              Powered by Rabbit 0.9.2
オープンソース



    どうしてRuby売らない
    んですか?

日本のビル・ゲーツ(笑)


                       32/71
                   Powered by Rabbit 0.9.2
Rubyの認知度



Ruby開発開始(1993)
一般公開(1995)



                     33/71
                 Powered by Rabbit 0.9.2
Rubyの認知度



最初の書籍(1999)
最初の英語書籍(2000)



                    34/71
                Powered by Rabbit 0.9.2
Rubyの認知度


Rubyで就職(1997)
未踏ソフトウェア(2000)
Ruby on Rails(2004)
OSS貢献者賞(2005)


                          35/71
                      Powered by Rabbit 0.9.2
Rubyの認知度


2007
  楽天技術研究所フェロー
 Rubyアソシエーション
 Ruby技術者認定試験


                    36/71
                Powered by Rabbit 0.9.2
Rubyの認知度


2007
  日経BP技術賞大賞
 経済産業大臣表彰



                   37/71
               Powered by Rabbit 0.9.2
Rubyの認知度

2009
  松江市名誉市民
 島根大学客員教授
 ものづくり日本大賞
 日本イノベーター大賞

                   38/71
               Powered by Rabbit 0.9.2
Rubyの認知度
2010
  日経BP チェンジメーカー2010




                          39/71
                      Powered by Rabbit 0.9.2
Rubyの認知度




               40/71
           Powered by Rabbit 0.9.2
キャズム論

イノベーター
アーリーアダプター
アーリーマジョリティ
レートマジョリティ
ラガード

                   41/71
               Powered by Rabbit 0.9.2
キャズムを越えた日


イノベーター
 技術者個人の興味・関心(1995-)
アーリーアダプター
 ベンチャー・零細企業(1997-)


                          42/71
                      Powered by Rabbit 0.9.2
キャズムを越えた日


アーリーマジョリティ
 中小企業・IT系企業(2007-)
レートマジョリティ
 大企業(2010-)


                         43/71
                     Powered by Rabbit 0.9.2
キャズムの向こう側



財団法人
標準規格



                 44/71
             Powered by Rabbit 0.9.2
財団法人




Rubyアソシエーション




                   45/71
               Powered by Rabbit 0.9.2
標準規格



JIS
ISO



                 46/71
             Powered by Rabbit 0.9.2
ローリングストーン




転石苔生さず




                 47/71
             Powered by Rabbit 0.9.2
OSSコミュニティ


生存戦略
 変化を続ける
 課題を提供し続ける



                   48/71
               Powered by Rabbit 0.9.2
Rubyの未来




未来はどうなる?




                   49/71
               Powered by Rabbit 0.9.2
ムーアの法則




LSIの集積度は2年で2倍になる




                       50/71
                   Powered by Rabbit 0.9.2
CPU性能向上




CPU性能向上       51/71
          Powered by Rabbit 0.9.2
CPU性能向上


近年頭打ち
物理的限界
要求の飽和



                52/71
            Powered by Rabbit 0.9.2
未来への対応


Web
分散
並列
マルチコア


                   53/71
               Powered by Rabbit 0.9.2
未来への技術


クラウド
MapReduce
関数型
分散アーキテクチャ


                 54/71
             Powered by Rabbit 0.9.2
未来のRuby

新しい環境への適応
 より広汎
 より高速
 より分散
 より堅固

                  55/71
              Powered by Rabbit 0.9.2
広汎


幅広い実行環境
 スマートフォン
 PC
 スーパーコンピュータ


                  56/71
              Powered by Rabbit 0.9.2
HPC Ruby

Ruby for High Performance
Computing
  型推論
  コンパイル
  Cに匹敵する速度

                                57/71
                            Powered by Rabbit 0.9.2
軽量Ruby


Lightweight Ruby
   組み込み
  ソフトリアルタイム



                       58/71
                   Powered by Rabbit 0.9.2
広汎


幅広い適用分野
 組み込み
 Web
 HPC


                59/71
            Powered by Rabbit 0.9.2
高速


YARV
JIT
最適化
GC


                60/71
            Powered by Rabbit 0.9.2
分散


並列・分散はより重要になる
 dRuby / Rinda
 MessagePack
 MapReduce


                     61/71
                 Powered by Rabbit 0.9.2
堅固


より書きやすく
 キーワード引数
 Classbox
 Enumerableプログラミング


                         62/71
                     Powered by Rabbit 0.9.2
軽量Ruby




RiteVM

             63/71
         Powered by Rabbit 0.9.2
RiteVM



文法:JIS/ISO準拠
ライブラリ:ほぼJIS/ISO拠準



                        64/71
                    Powered by Rabbit 0.9.2
RiteVM




LuaっぽいRuby VM

                    65/71
                Powered by Rabbit 0.9.2
RiteVM


組み込みAPI
レジスタベース
インクリメンタルGC



                  66/71
              Powered by Rabbit 0.9.2
RiteVM



ポータブル
コアはC99のみ依存



                     67/71
                 Powered by Rabbit 0.9.2
RiteVM


コンポーネント構成
 コンパイラ分離可能
 minimal, standard, full



                               68/71
                           Powered by Rabbit 0.9.2
RiteVM


計画中
 ファイバー(コルーチン)
 非同期I/O



                    69/71
                Powered by Rabbit 0.9.2
RiteVM

今後の予定
2011/10
 クローズドベータ
2012/03
 オープンベータ(MITライセンス?)


                          70/71
                      Powered by Rabbit 0.9.2
ご清聴ありがとう
 ございました
           71/71
       Powered by Rabbit 0.9.2

Ruby開発が教えてくれたこと