PR





第0回 あらためてRuby入門

まつもとゆきひろ氏自身による「Ruby入門」をお届けします。日経Linuxの連載開始前の特別企画（2005年4月号）として，Rubyが他のスクリプト言語やオブジェクト指向言語とどこが違うのか，なぜ便利なのかを中心に解説してもらったものです。

● 基本と他言語との違い

● 実装とRuby誕生の秘密



第1回 プログラミングとオブジェクト指向の関係

プログラマを目指す人々の中にも，「オブジェクト指向は難しい」とか，「なかなか分からない」という印象を持つ方が多いようです。そこで，Rubyを題材にオブジェクト指向という考え方について説明していきます。

● その1

● その2

● その3

第2回 抽象データと継承

オブジェクト指向プログラミングを構成する3原則のうち，前回は「ポリモーフィズム」を学びました。今回はオブジェクト指向の歴史を復習した後，残りの「データ抽象」と「継承」について解説します。

● その1

● その2

● その3

第3回 多重継承の光と影

今回は継承についてより深く学びます。特になぜ多重継承が必要なのか，多重継承にはどのような問題があり，JavaやRubyがどのように解決しているのかを学びます。

● その1

● その2

● その3

第4回 Duck Typingが生まれるまで

今回はプログラミング言語の型について学びます。型には静的型と動的型の2種類があります。それぞれの歴史的な背景から始め，利点，欠点について学びます。動的型の新しいプログラミング・スタイルである「Duck Typing」も紹介します。

● その1

● その2

● その3

第5回 高階関数を分かりやすくしたブロック

関数を引数に取る高階関数は，C言語で標準的に利用されるなど，必要不可欠な機能です。ただし高階関数を用いるとコードが複雑になるという欠点があります。Rubyのブロックやクロージャは，高階関数を利用しやすくした構造です。

● その1

● その2

● その3

第6回 メタプログラミング

今回は「プログラミングをプログラムする」メタプログラミングについて学びます。メタプログラミングを利用すると，動的にメソッドを追加するなど，実際のアプリケーション作成に役立つ処理が簡単に実現できます。メタプログラミングと小言語の関係についても解説を加えました。

第7回 コレクションを使いこなす

配列やハッシュなどのオブジェクトをコレクションと呼びます。今回は，コレクション自体の操作方法を押さえた後，他のクラスからコレクションの機能を利用する方法までを紹介します。

第8回 デザイン・パターン（1）

今回はソフトウエア設計に登場するパターンをまとめたものである「デザイン・パターン」について学びましょう。ソフトウエア設計において適切なデザイン・パターンをカタログから選び出すことで，複雑なプログラムでも効率良く設計できるようになります。

第9回 デザイン・パターン（2）

ソフトウエア設計に登場するパターンをまとめた「デザイン・パターン」について学びましょう。デザイン・パターンを使いこなせれば，複雑なプログラムを効率よく設計できます。今回は，既にあるものを使いまわすPrototype，抽象的にアルゴリズムを記述できるTemplate Method，強い依存性を断ち切るObserverの各パターンを紹介します。

第10回 デザイン・パターン（3）

これまで2回続けてデザイン・パターンについて学んできました。今回は，重要なソフトウエア開発原理として知られるオープン・クローズ原則（OCP）の観点からデザイン・パターンを眺めてみましょう。単なる流用可能なソフトウエア・パターン以上の価値がデザイン・パターンに隠れていることが発見できるでしょう。

第11回 コード・ジェネレーション

コード・ジェネレーションとは，ユーザー・インタフェース作成やDBアクセスといった似たようなコードが何度も登場する場合に役立つ手法です。開発したコードを読み込ませることで，定型部分を自動生成できるからです。今回はコード・ジェネレーションに向いたRubyを例に，その考え方や導入方法を紹介します。

第12回 多重継承再び

今回は継承，特に誤解されがちな多重継承について改めて解説します。「オブジェクトは現実世界のモノの反映であり，継承はそのモノの分類を反映したものである」，「多重継承は良くないものだ」という意見が正しいかどうか，判断する基準を紹介します。

第13回 プログラムを高速化する

プログラムの高速化はプログラマにとって永遠の課題です。しかし，そこには知られざる暗黒面が隠れています。そもそも高速化に意味があるのかを調べなければなりません。次に，どの部分をどの程度高速化するのかが重要です。アルゴリズムの効率にも目配りが必要です。

第14回 意外に深い整数の世界

整数はコンピュータにとって最も基本となるデータの一つでしょう。今月はその基本的なデータの背後にあるコンピュータの秘密について考えてみます。最後に，応用問題として公開鍵暗号方式についても触れます。

第15回 浮動小数点数の謎に満ちた世界

前回はコンピュータにおける整数の扱いについて学びました。今回はさらに奥に入り，小数について調べてみましょう。コンピュータ上の小数は整数以上に複雑な謎に満ちているのです。

第16回 ネットワーク・プログラミング（ソケット編）

LinuxのようなUNIX系OSでは，ファイルに対する操作と同様にネットワーク通信を行うために，「ソケット」と呼ばれる仕組みを使います。今回はソケットについて学びましょう。

第17回 ネットワーク・プログラミング（プロトコル編）

ネットワーク通信では，「どのような形式でやり取りするのか」について参加者間で合意しておく必要があります。この合意を「プロトコル」と呼びます。今回はネットワーク通信のプロトコル，特にアプリケーション層について，実例を交えて解説します。

第18回 プログラムを高速化する（その2）

プログラムの高速化については本連載の第13回（2006年5月号）で紹介しています。プログラム中のどの部分を高速化すべきなのか，どのように効果を測定するのか，そもそも高速化が必要なのかを考察しました。今回は実際に高速化を試みます。

第19回 HTTPとCGI

Webアプリケーションが流行しています。Webブラウザ上で何でも実行させる昨今の風潮はいかがなものかと思いますが，これも時流なのかもしれません。Webプログラミングに習熟する前段階として，今回は基礎となるHTTPとCGIについて学びます。

第20回 MVCとRuby on Rails

Ruby on Railsをはじめとする最近のWebアプリケーション・フレームワークの多くは，MVCと呼ばれるデザイン・パターンを採用しています。今回は，このMVCパターンの「正体」について考えます。

第21回 オープンクラスとRuby on Rails

Rubyには「オープンクラス」という機能があり，使い方次第で強力な道具になります。今回はこのオープンクラスを解説します。オープンクラスを活用している「Ruby on Rails」のライブラリActiveSupportについても紹介します。