Rubyにおけるデザインパターンとは、オブジェクト指向の仕組みを活用したよく使われることの多いプログラムの書き方を指す言葉です。Webエンジニアとして初心者から脱却したいなら、デザインパターンへの理解が欠かせません。
今回はステップしたいエンジニアに知ってほしいデザインパターンの基本について解説します。
デザインパターンとは
デザインパターンとは、Rubyのようなオブジェクト指向なプログラミング言語お用いてソフトウェアを開発する際、再利用性の高い設計とするためのプログラムのパターンを指す言葉です。デザインパターンをよく知らない方のためにその考え方について紹介します。
オブジェクト指向で求められる書き方
Rubyはオープンソースのオブジェクト指向スクリプト言語です。そしてRubyではプログラムの中で使える全ての変数がオブジェクトであり、オブジェクト指向のメリットをフルに活用できます。とはいえオブジェクト指向のメリットを理解していなくても、短く読みやすいプログラムが書ける点もRubyの特徴です。
ではオブジェクト指向で求められる書き方とはどのような書き方でしょうか。オブジェクト指向のプログラミングが使われる理由は、以前書いたコードを再度書く必要が無くなる「生産性」と、以前書いた正しく動作するコードを再利用して得られる「信頼性」です。
つまりオブジェクト指向では、再利用性の高いプログラムの書き方が求められます。
再利用性の高いプログラムの書き方
経験の豊富なプログラマーは、過去に書いたプログラムと同じようなプログラムを何度も書いています。そのため解決したい課題に合わせたプログラムを書くことが可能です。しかしプログラムを書けたとしても、そのパターンを解りやすく解説できる方は少ないかもしれません。
なおオブジェクト指向のプログラム言語が広く普及したのは1990年代でした。その時代に出版された再利用性の高いプログラムの書き方に関する本が「Design patterns: Elements of reusable object orientated software」(日本語版「オブジェクト指向における 再利用のためのデザインパターン 改訂版」)です。
そして、この本に書かれたプログラムの書き方は、今でも活用できるパターンとして多くのプログラマーが学んでいます。
Rubyでデザインパターンを実践するには
先ほど紹介した本には、23のデザインパターンとそのJavaのサンプルコードが紹介されています。残念ながらそのままではRubyでは試せませんが、この23のデザインパターンの考え方はRubyでも応用可能です。そしてRubyでも使えるデザインパターンの例を紹介した参考書もあるので参考にしてください。
デザインパターンとはノウハウ集?
デザインパターンとは、オブジェクト指向プログラミングにおけるノウハウを集めたもの、と言えば解りやすいかもしれません。なぜデザインパターンがそう言えるかについて解説します。
よく使われるコードの特徴
オブジェクト指向の考え方は、ソフトウェアの大規模化に伴い拡大を続けるソースコード対策として、既にあるソースコードを効率よく再利用する方法として登場しました。とはいえオブジェクト指向が登場する前からよく使われるプログラムにはパターンがあり、一部のプログラマーはこれを活用していました。
なおこのようなプログラムのパターンは、Rubyのようなオブジェクト指向のプログラムを利用することで誰でも使うことが可能です。このようなよく使われるコードを誰でも使えるようにしたプログラミングにおけるノウハウが、デザインパターンです。
特徴的な23のパターン
普通デザインパターンと言えば、先ほど紹介した「オブジェクト指向における 再利用のためのデザインパターン 改訂版」で解説されている23のデザインパターンを指します。
これらはいずれも経験豊富なプログラマーがよく使うようなプログラムのパターンです。そしてオブジェクト指向言語のJavaやRubyを利用することで、誰でも理解しやすいように解説されています。
そのため経験の少ないプログラマーなら、この23のデザインパターンを理解することで、ベテランプログラマーと同じようなコードを書けるようになります。
23のデザインパターン
- 分類:生成
Abstract Factory
Factory Method
Singleton
Builder
Prototype - 分類:構造
Adaptor
Bridge
Composite
Decorator
Facade
Flyweight
Proxy - 分類:振る舞い
Chain of Responsibility
Command
Interpreter
Iterator
Mediator
Memento
Observer
State
Strategy
Template Method
Visitor
理解するにはオブジェクトの基本から
デザインパターンを理解する際の必須知識として、Rubyのようなオブジェクト指向のプログラミング言語でよく使われる、継承、コンポジション、ポリモフィズムが挙げられます。デザインパターンをプロジェクトで応用するなら、ぜひ、このようなオブジェクトの基本を理解してください。
- 継承
継承を利用することで既存のクラスの再利用が可能であり、コードの重複を解消できます。 - コンポジション
あるクラスの内部に他のクラスを取り込むことことで、階層構造を持つオブジェクトを構築する方法です。 - ポリモフィズム
異なるクラスに対し、同じインターフェースを適用する方法です。
デザインパターンを学ぶうえでのポイント
デザインパターンの重要性を理解でき、さらにどんなデザインパターンがあるかが解ったたとしても、それをプログラミングで実践できるとは限りません。デザインパターンを活用できるようになるには、その前提として課題をプログラムによって解決するためのスキルが必要です。
次からRubyによるデザインパターンを活用するスキルを習得するうえで、注目してほしいポイントについて紹介します。
機能をクラスとして切り出すスキル
Webアプリケーションで利用するほとんどの機能は、RubyGemsにあるライブラリを活用することで実現可能です。そして誰かにこの機能はRubyGemsのこのライブラリを使えと指示してもらえれば、そのライブラリを使ったプログラミングはそれほど難しくありません。
しかし、自分が指示する立場になった場合はそうはいきません。Webアプリケーションに組み込む機能を分割し、それらをクラスに割り当てるスキルが必要です。
そしてデザインパターンを活用するためには、これと同じように機能をクラスとして切り出すスキルを使います。なおこのスキルはWebエンジニアとして必須のスキルなので、ぜひ習得しましょう。
課題解決の着眼点
Webエンジニアの役目とは、Webアプリケーションによって利用者の課題を解決することです。そして課題を解決する方法として過去に多くのWebエンジニアが取り組んだ技術の集大成がデザインパターンです。デザインパターンを理解することとは、Webアプリケーションによって課題を解決する方法を理解することだと言えます。
とはいえWebアプリケーションによって解決する課題が何か解らないようでは、デザインパターンを知っていてもそれを使えません。従ってデザインパターンを活用できるようになるには、Webアプリケーションによって解決する課題を理解することが重要です。ぜひwebエンジニアとしての着眼点を鍛えてください。
スキルアップには実践あるのみ
デザインパターンを学ぶうえでのポイントは、機能をクラスとして切り出すスキルと課題解決の着眼点の2つが重要ですが、残念ながらこの2つはそのやり方紹介する参考書を読んだだけで習得できるスキルではありません。
実際に解決したい課題を検討してクラスに分割し、さらにそれらのクラスにデザインパターンをあてはめて実際にプログラムを作るといった実践が必要です。
ぜひ、今取り組んでいるプロジェクトで指示されたコードを書くだけでなく、ぜひデザインパターンを活用するにはどうすれば良いかを意識して仕事に取り組んでください。
まとめ
これまで解説したようにデザインパターンとは、プログラミングにおけるノウハウをオブジェクト指向の考え方でパターン化したものです。Rubyはオブジェクト指向のプログラミング言語なので、デザインパターンを利用したプログラムコードを記述できます。
なお通常デザインパターンと言えば、「オブジェクト指向における 再利用のためのデザインパターン 改訂版」で紹介されている23のパターンを指します。Rubyのプログラマーとしてスキルアップを目指すなら、ぜひ、この23のパターンを理解してシステム開発に利用できるようになりましょう。
デザインパターンをもっと詳しく知りたい方は、下記の本を読んでみてください。
オブジェクト指向における 再利用のためのデザインパターン 改訂版
Rubyによるデザインパターン