前回に続き、2000年代に発達したソフトウェア開発手法を振り返ります。 プログラマ向けです。
2000年代
動的型付け(Dynamic Typing)
2000年代を一言で表すと「動的型付けの時代」です。
動的型付け(どうてきかたづけ、英: dynamic typing)とは、プログラミング言語で書かれたプログラムにおいて、変数や、サブルーチンの引数や返り値などの値について、その型を、コンパイル時などそのプログラムの実行よりも前にあらかじめ決めるということをせず、実行時の実際の値による、という型システムの性質のことである。
RubyやJavaScriptが有名です。対義語である静的型付け言語の代表はJavaやC#です。
より誤解の無いように謂うと「事前型付け」から「実行時型付け」へ移行した時代です。
動的型付けでは、来たものを信用して動かしてダメだったらどうするか考えます。methodを呼んで無ければ追加します。 静的型付けでは、事前(コンパイル時やキャスト時)に期待した型かチェックしてOKだったら動かします。
この「先にチェックするから、先に実行するへ」の変化はソフトウェア開発のあらゆる層で起きました。
- プログラミング言語では、定義されたインターフェイスからダックタイピングへ
- 通信データ形式は、XMLからJSONへ
- WebAPIでは、型が定義できるSOAPからRESTへ
- WebFrameworkでは、設定ファイルの定義から規約へ
- 永続化層では、型を定義するRDBMSからNoSQLへ
- 開発プロセスでは、ウォーターフォールからアジャイルへ
- 新規事業では、洗練された事業プランから事業を小さく初めて洗練していくスタイルへ
歴史
10年間の間にどのような変化が起きたのか、史実に当たりましょう。
1998年
ちょっと遡ります。
- [idea] Carlo StrozziがNoSQLを提唱
- [spec] J2EEリリース。EJB1.0とServlet2.1が含まれていました
J2EE、つまり業務システムが時代の最先端です。
1999年
- [book] Extreme Programming Explained: Embrace Change 出版
- [spec] SOAP 0.9リリース
- [product] Tomcat3 公開
Servletに続きアプリケーションサーバが揃い、Webアプリケーションの時代が始まりました。
2000年
- [idea] Roy FieldingがRESTの論文を発表
- [book] Programming Ruby 出版
- [book] XPエクストリーム・プログラミング入門―ソフトウェア開発の究極の手法 出版
- [product] Apache Struts 1stリリース
この年、RESTが生まれ、またRubyをメジャーにするきっかけとなったDavid Thomas、Andrew Huntによる世界で最初のRubyの本が出版されます。 当時、多くの人は開発技術のメインストリームになるとは思っていませんでした。後で思えば、2000年代の大きな変化の始まりでした。 また、Strutsは最初のメジャーなWebアプリケーションフレームワークです。
2001年
- [idea] Tim Berners-Leeがセマンティック・ウェブを提唱。Web APIの走り、代表はRSS
- [idea] Ward Cunninghamがアジャイルソフトウェア開発宣言を提唱
- [product] Eclipse OSS化
- [product] iPod発売
- [product] Hibernate 1stリリース
- [product] WindowsXP 発売
2002年
- [product] Ruby 1.6.8 リリース
- [product] C# 1.0 リリース。delegateをサポート。関数をファーストオブジェクトとして扱う。
- [service] GoogleとAmazonのWebAPIが公開される。
WebAPIが公開されました。この頃はSOAPとRESTが両方用意されていました。
2003年
- [product] Ruby 1.8.0 リリース
- [product] Spring 1stリリース
- [product] Memcached 1.0.0
- [event] アジャイルプロセス協議会 発足
SpringはDIをサポートし、AOPで実行時に既存のクラスに機能を追加することができます。 Webアプリケーションフレームワークによる動的なアプローチが始まります。 最初のメジャーなKey Value StoreであるMemcachedがリリースされました。Memcachedはオンメモリキャッシュです。ディスクへの永続化はしません。
この年からHPやDELLが低価格IAサーバを供給しはじめます。 OSをLinuxにすることで本番環境、開発環境が安価にそろえられるようになり業務システムへのWebアプリケーションが本格化します。
Webアプリケーションには以下のような特徴があるため業務システムの受託開発の分野でアジャイルソフトウェア開発が注目されました。
- アプリケーション毎のクライアントインストールが不要
- アプリケーションをアップデートする際もクライアントのアップデートが不要
- アプリケーションの複数回リリースが用意
2004年
- [idea] GoogleがMapReduceの論文を発表
- [product] Spring 1.0 リリース
- [product] Ruby on Rails 1st リリース
- [product] Seasar2 1st リリース
- [service] GMail 公開
- [service] Google Adsence 公開
- [service] iTunes Store 公開
MapReduceの論文が発表され分散ストレージとしてBigTableが注目されました。BigTableはNoSQLの一種です。 また、SpringにつづきRuby on Railsがリリースされ動的なWebフレームワークの時代が始まります。 日本ではSeasar2がリリースされDIブームが起きました。当初期待されていたのはS2DAOによるO/Rマッピングでした。
2005年
- [book] Refactoring 出版
- [product] Ruby 1.8.3 リリース
- [product] C# 2.0 リリース
- [product] Rails 1.0.0 リリース
- [product] Android 1st リリース
- [service] Google Map 公開
Google Mapが公開されました。Google Map の画面遷移なしで地図をスクロールする非同期通信技術はAjaxと呼ばれ世界中に注目されました。 急速にJavaScriptが注目されました。 Martin Fowler の Refactoring が出版されます。
2006年
- [idea] Eric Emerson Schmidt がクラウドコンピューティングを提唱
- [book] From Java to Ruby 出版
- [book] Steve Blank 「The Four Steps to the Epiphany」(邦訳「アントレプレナーの教科書」) 出版
- [spec] J2EE 5 リリース。SOAP から REST へ
- [product] Ruby 1.8.5 リリース
- [product] Rails 1.1.0 リリース
- [product] Spring 2.0 リリース。Spring MVC DI から CoC へ
- [product] Hadoop 1st リリース
- [product] jQuery 1st リリース
- [service] twiter 公開
- [service] Facebook 公開
- [service] Tumblr 公開
- [service] EC2の限定されたパブリックベータ公開
技術的な転換点となる年でした。 J2EE5がリリースされました。J2EE5ではSOAPをサポートしていません。 Spring 2.0がリリースされました。これに含まれるSpring MVCというモジュールはCoCをサポートしています。 「From Java to Ruby」が出版されJavaからRubyへの移行が本格的な流れになる。
また、ビジネスの面においても、twitter、Facebook、Tubmlr、AWSと今も発展するサービスが次々とリリースされました。
アメリカでスタートアップブームが起きます。
2007年
- [book] JavaからRubyへ 日本で出版
- [product] Ruby 1.8.6 ~ 1.9.0
- [product] C# 3.0 リリース。LINQでコレクション処理をサポート
- [product] Rails 1.2.0 ~ 2.0.0 リリース
- [product] iPhone リリース
- [product] kindle リリース
- [event] XP祭り2007
iPhone発売。
XP祭り2007では「アジャイルを導入する方法」が話題になりましたが、受託開発方面でのアジャイルの浸透はこの辺で止まります。 その後、2010年に永和さんの価値創造契約、グラス片手にアジャイル開発、2011年にソニックガーデンさん設立と再び動きが出てきます。2012年にアジャイルサムライが出版され、受託開発に限らないソフトウェア開発の全分野へと広がって行きます。
2008年
- [idea] Steave Blank がリーンスタートアップを提唱
- [spec] HTML5 1st リリース
- [product] Ruby 1.8.7
- [product] Rails 2.2.2
- [product] android T-Mobile G1 発売
- [product] google chrome 1st リリース
- [product] Apache Cassandra 1st リリース。Hadoopみたいな分散データベース管理システム
- [service] Windows Azure 発表
- [service] github 公開
- [event] twiiter社がScalaを採用。Java VMが見直される。
前縁の iPhone に続き Android OS を搭載した端末が発売。スマートフォンに注目が集まります。 AWSに対抗したWindows Azure が発表されIaaSとしてのクラウドが普及します。 またHerokuにつづきgithubも公開されPaaSも姿を現します。
2009年
- [product] node.js 1st リリース
- [product] MongoDB 1st リリース
- [product] CoffeeScript 1st リリース
日本でもソーシャルゲームが流行し始めました。 大量の細かいリクエストを捌くために、node.js、MongoDB、CoffeeScriptなどの負荷分散に向いた動的なソフトウェアに注目が集まります。
2010年
- [product] C# 4.0 リリース。dynamic型サポート
- [product] iPad 1st リリース
- [product] Rust 1st リリース。Goに似たシステムプログラミング言語。最近の言語の機能を大体持ってる。
- [product] CoffeeScript 1.0.0 リリース
最初のタブレット iPad がリリースされました。 そういえばHadoop勉強会が流行っていました。
参考
主に
考えをまとめるに当たりTGSで「Webアプリのアーキテクチャの歴史と進化」について話しました | ありえるえりあが凄く参考になりました。
J2EEの
Web以外のフロントエンドも考慮
が凄くポイントでした。