編集部記:Martin PuryearはCrunch Networkのコントリビューターである。
Martin PuryearはCoding Dojoの筆頭指導者で、プリンシパル・エンジニアを務める。Coding Dojoは、14週間でフルスタック開発を教えるコード・ブートキャンプだ。
世界中の技術者や開発者にとってこれ以上面白い時代はないだろう。実用的な開発言語やフレームワークと共に開発ツールや学習の場が複数台頭している。
こんなにも近くにリソースがあるにも関わらず、私たちの向かう業界トレンドがどのようなものか分かりづらくなっている(潤沢にあるのが原因とも言えるかもしれないが)。コード・ブートキャンプの指導者という立場から、最新の強力なテクノロジーを支えている技術に日々接している。今後数年におけるプログラミングのトレンドは次のように考えている。
2015年6月に正式にリリースされた、ECMAScript (ES6)の最新版(JavaScriptの名前の方が知られている)は、ウェブ開発環境において2009年にリリースされた前のバージョン(ES5)以降、最も大きな影響をもたらすものになるだろう。
JavaScriptは世界で最も広く使われているプログラミング言語で、ウェブブラウザを持つほぼ全てのパーソナル・コンピューターやモバイル端末が対応している。つまりES6、そしてそれがもたらす様々な機能が現代のウェブ開発に与える影響は計り知れない。
代表的な機能は、ブロックスコープ変数と関数、定数、クロージャ・シンタックスを簡略化する矢印、文字列のインターポレーション、クラス、モジュールなどだ。
普及しているブラウザも最新のJavaScriptに早くも対応し始めている。Microsoft Edgeのバージョン13は、先行してすでに80%の機能に対応済みだ。今年はEdge、Chrome、Firefoxで対応が急速に進むだろう。
その間、開発者はES6が提供する機能の大部分を使用して開発を始めることができる。Babelなどのトランスパイルを使うことで、ES6のコードを現在のブラウザが対応しているES5 JavaScriptに問題なくコンパイルすることが可能だ。
今後、アプリケーションは全てを自社で管理し、完全に閉じられた開発ではなくなるだろう。代わりに、開発にはサード・パーティのサービスを活用して、プロジェクトの共通する必要な要素の大部分を委託するようになる。例えば、クラウドストレージ、プッシュ通知、ユーザー管理の部分などだ。
サービスとしてのバックエンド(BaaS)は、このような用途ではお馴染みのものであり、それらが普及することは保証されている。特に法人分野でスケールすることが重大な課題となる大規模アプリケーションについて言える。ParseといったBaaSを使用することで、エンジニアとオペレーションのチームは、自社と競合を引き離すための仕事に注力できる。その間、基本的な機能とそれに伴うオーバーヘッドは別のところに引き渡すことが可能となる。
サービスとしてバックエンドは、プロジェクトのクラウドストレージやソーシャル・ネットワークのAPIとの連携を簡単にするが、多くのアプリケーションが正しく機能するにはまだローカルの開発スタックとサーバーを慎重にプロビジョニングすることが求められる。残念ながらサーバーのプロビジョニングは構造的に難しく、時間がかかる作業だ。そのため、驚くことではないが、プロビジョニングの自動化とコンテナが彗星のごとく登場した。
PackerやDockerといったサービスは特定のOS、ライブラリ、言語、フレームワークに応じたマシンイメージを生成することができる。このマシンイメージはコンテナと呼ばれ、既存のサービスを拡張するために複製したり、新規に制作したりすることも可能だ。もし、オペレーションチームがこのことについて話しあっていないのなら、するべき時期に来ている。他の人もその話を聞いていないのなら、積極的に聞くべきだろう。
現代のアプリケーションはより多くの通信帯域幅、ストレージ、処理を必要としているが、単一処理モデルでは、要件を満たしてスケールすることはできない(これまでもできない場合が多々あった)。システムをスケールさせるためには、出来る限り並列処理を進める必要があり、Haskell、Clojure、 Scala、Erlangといった関数プログラミング言語の重要性が増している。それに伴い、これらのテクノロジーを有効活用し、生産性を発揮できる開発者も必要となる。
命令型プログラミングは、状態を書き換える(オブジェクトの値を実行時に変更する)方式に依存しているが、関数プログラミングは不変の状態が軸になっている。宣言されたオブジェクトの値は全ての過程の中で同じままだ。そのため関数言語は、命令型やオブジェクト指向の言語より大幅に有利である。関数言語は、並列処理や並行処理に対応できるような仕組みなのだ。
実行時にデータが変更されないことは確実で、さらに関数に直接アクセス(不変であることが効果を発揮)することができるため、関数言語を使用することで制作するアプリケーションのスケールや分散コンピューティングを楽に行うことができるようになるだろう。
オブジェクト指向プログラミングは今後数年は業界の標準のままだろうが、ユーザーがより早い検索結果を望んだり、リサーチャーがさらに正確な計算を望んだりするほど、関数プログラミングは明らかで分かりやすいソリューションとして、光が当たることになるだろう。
近年、現代的なUIとしてミニマリストのアプローチであるフラットデザインが席巻していたが、2016年はマテリアルデザインに焦点が移るだろう。Appleはフラットデザインの強力な支持者で3次元的なデザインを補足する要素を取り除いてきた。Microsoftは10年前に発表したZuneに実装した「Metro」デザインで最初にそこにたどり着き、次にWindows Phone 7、そして現在ではWindows 10に受け継がれている。
AppleとMicrosoftにとって最大の競合となるGoogleがマテリアルデザインへとそのトレンドを推し進めた。3次元的な奥行きを出す効果、例えばグラデーションや光の当たるデザインだ。この新しい見た目でデジタルな構成パーツが奥行きを取り戻した。例えば、ドロップシャドウを使うと、アプリケーションの各エレメントがクリックできるものなのか、動かないものなのかが分かりやすくなる。
今年はマテリアルデザインが前面に出ることが予想され、クリエイティブ(ソフトウェアデザイナーが)レスポンシブデザインに対応し、新たなUIデザインのパターンが一気に溢れることになるだろう。ウェブUIに関してもそれに似てくることが予想されるが、それも悪いことではない。デザイナーはログイン画面、ナビゲーションメニューといった共通タスクは、どんなユーザーにとっても馴染みのある見た目と感触であることが求められていることに気がついているからだ。
今年はウェブソフトウェアにとって期待が持てる年になるだろう。基本となるテクノロジーからユーザー・エクスペリエンスまでの全ての部分にそれが言える。ECMAScript6で、どこでも使われているウェブ言語がアップグレードする。BaaSとデプロイメントのコンテナでコストや基本機能、プロビジョニングという頭痛の種の大部分が取り除かれるだろう。関数言語がメインストリームへと移行し、並列処理へのアプローチを変えることになる。
マテリアルデザインは、ユーザーが使うパーツに命を吹き込むことを目指している。そして新しい共通フレームワークで、デバイス間のユーザ・エクスペリエンスが統合することになるかもしれない。エンジニアリング分野や業界に問わず、これらの新しい技術がどのような価値をもたらすかに注目すると良いだろう。
[原文へ]