ここ数年前から2015までのモダンフロントエンドを総まとめしてみた
HTML5や、次々と台頭するJavaScriptフレームワークにみられるように、現在のフロントエンドは異常なほど動きがあります。
常にキャッチアップしていないと、いつのまにかOLDな技術を使い続けることになります。実際に今回記事にしてみて、ちょっとつらくなりました。。
しかし、フロントエンドエンジニアとしてコードを書いていて(最近は主にJavaScript)、そのおもしろさに日々驚いています。
そこで今回は、ここ数年~2015年のフロントエンド界隈で一度は流行った技術、今後の動向などをまとめました。タイトルにモダンとありますが、その辺は適当です。ぜひ一度整理してみてください。
(ここではフロントエンドというのを、ざっくりとHTML/CSS/JavascriptをつかったWeb技術のことをいうことにします)。
目次
- Javascriptフレームワーク
- React.js
- Angular.js
- Angular.js 2.0
- Backbone.js
- Vue.js
- Mithril.js
- Aurelia.js
- Knockout.js
- Ember.js
- Riot.js
- Ractive.js
- まとめ
- ES6
- タスクランナー
- Grunt / Gulp
- Yeoman
- モジュール管理
- パッケージ管理
- ハイブリッドアプリ
- SPA
- 概要
- SEO
- HTML6
- サーバーサイドJavascript
- Node.js
- Express.js
- io.js
- CSS
- CSS3
- 設計パターン
- アートスクリプティング
- まとめ
Javascriptフレームワーク
まずは、みんな大好きJavascriptフレームワークについて軽くまとめます。
React.js
- 最近注目を浴びているFacebook製のライブラリで、MVCアーキテクチャでいうViewにあたる機能を提供する
- JSX、Virtual DOMという、新しいアプローチ
- MVCとは違う、Fluxという設計パターン
- Isomorphicなアーキテクチャが可能
- Reactがなぜ素晴らしいのか // Speaker Deck
- React.jsプロジェクト構成ベストプラクティス検討 - Qiita
- 今話題のReact.jsはどのようなWebアプリケーションに適しているか? Introduction To React─ Frontrend Conference | HTML5Experts.jp
Angular.js
- Google製人気MVCフレームワーク
- フルスタックで、できないことは殆ど無い
- Yeomanなどを使うとSPAが30分位で作れてしまう(SEOは残念)
- Angular Wayともいわれるが、モジュール化がきっちりされていて、汚いコードにはほぼならない
- 実際に作ってみるのが早い
Angular.js 2.0
- ES6等の最新のJavaScript規格を取り入れ、TypeScriptをベースとし記述する
- Angular.jsとはかなり書き方が違う
- WebComopmentsを利用した、より厳密に独立したコンポーネント化を推進
- Angular 2.0 - ワザノバ | wazanova
- 姿を現した!次世代JSフレームワークAngularJS2.0アルファ版を試しみてた! - paiza開発日誌
Backbone.js
- 単一データの管理を行うModel、複数件のモデルの管理を行うCollection、画面の管理を行うViewを組み立てていく
- Backbone.js自体は構造化の仕組みがなく、フレームワークとしてMarionette.jsと一緒に使われることが多い
- 事例が案外多い(Buffer、Soundcloud、Trello、Qiitaなど)
- Backbone.js ではじめるクライアントサイド MVC プログラミング | CYOKODOG
Vue.js
- MVVM
- 作成したUIコンポーネントを組合せてページを構成することを前提にしている
- 似ているといわれるが、AngularJSと設計思想は全く異なるもの
- 理解しやすいフレームワークとして有名
- Vue.js on Railsパーフェクトガイド - Qiita
Mithril.js
- Mercuryとともに、スピードがかなりはやいフレームワーク
- mercury/mithril.js // Speaker Deck
Aurelia.js
- ES6、ES7なシンタックス
- GoogleでAngularJSの開発に関わっていたRob Eisenbergさんが開発した
- AngularJSはもう古い?未来志向フレームワークAurelia.JSを試してみた! - paiza開発日誌
Knockout.js
- MVVM
- Bindingに特化したフレームワーク
- 機能は少ないが、導入するのが容易で、学習コストも低い
- MVC(MVVM) JS フレームワークの中でKnockoutJsを選んだ理由 - Qiita
Ember.js
Riot.js
Ractive.js
まとめ
ざっと書いただけでこれなので、多すぎます。特にこだわりのない方は、上から5つくらいを覚えておけば普通にアプリケーションをつくる上では困ることはないと思いますので、残りは、参考程度にしてください。
ES6
次に、次世代のフレームワークに続々採用されている、ES6を紹介します。
ES6とはECMAScript 6のことで、Javascriptの標準言語ECMAScriptの次期標準仕様となります。
class
機能などが導入され、これまでのJavascriptとは大きく変わります(Angular.js 2.0の開発チームも採用したTypescriptは、ES6の構文を積極的に取り入れています)。JavaScriptフレームワークなんて、何個か覚えておけばいいと書きましたが、ES6の流れを汲み取っているかは注意してみておいたほうがいいと思います。
現状ES6を実行しても動かないので、BabelやTraceurをつかってコンパイルする必要がありますが、今後、遠くない未来にES6標準がくるので今のうちに取り入れたいですね。
タスクランナー
Grunt / Gulp
タスクランナーは、フロントエンドの様々な面倒事を自動化できるツールです。これなしのフロントエンドはもはや考えられない気がします。
GulpとGruntが2代勢力ですが、できることは大差はありません。違いは調べればたくさん出てくるのでみてみてください。どちらを使うかは好みの問題だと思います。
Gruntだと、記述が長くなってみにくい、同期処理(タスクが1個1個順番に実行される)なので処理が遅い(非同期にするプラグインもありますが)、それに対してGulpは、1個1個のタスクをコンパクトに書くことができ、また、タスクを同時実行できるという特徴があるので、個人的にはGulpの方が好きです。
ファイルもGruntだとマッチョな感じになりますが、Gulpは可愛い印象です。
Yeoman
タスクランナーではないのですが、セットで語られることも少なくないのでYeomanを紹介します。簡単にいうとフロントエンドの「scaffold」をやってくれるツールです。
人気のものだとAngular.jsのgenerator-angular-fullstackやWepアプリをつくるgenerator-gulp-webapp、React.jsのgenerator-react-webpackなどもあります
Gulp、Gruntのタスク、サーバー起動から本番用ビルドなど、基本的なものであればデフォルトで用意してくれるジェネレータが多く、非常に助かります。
モジュール管理
概要は以下をみればわかると思います。
- JavaScriptのモジュール管理(CommonJSとかAMDとかBrowserifyとかwebpack)
- gulp.jsを使ってフロントエンドのビルドをする【webpack, stylus】 - yutaponのブログ
- browserifyとwebpack
- Google Trends - webpack vs browserify
BrowserifyとWebpackに関しては、タスクランナーと同じく、できることに大差はありません。Webpackが後発ですが、最近の新しいプロジェクトとかだとWebpackの採用事例も増えてきています。
また、Browserifyが単一のJSファイルを出力するのに対して、Webpackは複数のJSを出力するのが容易、かつ、BrowserifyはGulpなどと組み合わせて使うのが一般的ですが、Webpackはそれがなくてもけっこうフルスタックでビルドができます。
無理してWebpackにする必要はありませんが、新規でアプリを作る際は試してみるといいかもしれません。
パッケージ管理
概要は以下の記事が詳しいです。
パッケージ管理は、npm・Bowerで行います。簡単にいうと、npmが主にNode.jsの世界であるのに対して、Bowrはブラウザの世界で動くライブラリを管理します。
最近は、「CommonJSスタイルでモジュール管理=>ビルド」の流れでJavaScript開発をするのがデフォとなってきているので、npm&Webpack(Browserify)でソースを管理し、require('パッケージ名')
して読み込む、というパターンに落ち着く気がします。
Angular.js 2.0やReact.jsなど、ES6の流れをくんでいるスクリプトは、Node.jsの世界で完結させることができるので、今後Bowerは使いドコロが減ってゆきそうです。
ハイブリッドアプリ
ハイブリッドアプリか、ネイティブアプリか?という話は宗教チックになるのでここではしません。
いつの間にか多すぎるほどできていて、気になるものはたくさんありますが、安心できそうなのは、Ionic、React Native、Meteorあたりでした。
弊社ではReact Nativeでのアプリ開発がスタートしていて、さわり始めたばかりでいうのもアレなのですが、React.jsがさらに勢いをました場合、Webからモバイルまで同じ言語で動くものをつくれるというのはすごいのではないかな、と思います。実際にReact.jsでの開発と並行しても、頭のスイッチコストがかなり低いです。
以下適当にリストアップします。
-
- Angular.js製
- React Nativeがでていなければこれを使っていたと思う
-
- 最近話題に
SPA
概要
Single Page Applicationの略で、JavaScriptフレームワークのおかげで、開発コストが大きく下がったアプリケーションアーキテクチャのひとつです。
- SPAを構築するときに知っておいた方がいい7つの課題
- 「SPAを構築するときに知っておいた方がいい7つの課題」は課題ではない
- SinglePageApplication - SPA Single Page Applicationを作る際のエトセトラ(入門的な取っ掛かり情報) - Qiita
SEO
Angular.jsでは、SEOが問題になったりしましたが、React.jsのServer Side Renderingでそれが解決されるかも、とのこと。
- From AngularJS to React: The Isomorphic Way
- reactjs - Reactでサーバーサイドで生成したHTMLに対してDOMを初期化せずにReactComponentとして状態を更新する - Qiita
- react-rails // Speaker Deck
HTML6
こちらの記事では、HTML6での「JSなしのSPA」について述べられており、議論をうみました。
サーバーサイドJavascript
Node.js
まだ動きの激しいところとして、サーバーサイドJavaScript(Node.js)があります。
JavaScriptなだけあって、非同期な処理をすぐに実装することができるので、リアルタイムなWebをつくるときや、JSONを扱うAPIサーバーとして使うのに向いています。
Express.js
だいぶ前にMEAN StackのEとして話題に上がった、Node.jsのフレームワークExpress.jsがあります。RESTfulなAPIがシンプルに記述できます。
io.js
Node.jsの話に欠かせないのがio.jsです。こちらもアンテナを張っておきたいところです。
CSS
CSS3
これまでJavaScriptでやっていたことが、次々にCSSでできるようになっています。
例えば、アニメーションにおいては、主要なJavaScriptフレームワークにおいても、すでにCSSが基本となっていて、GPUで処理されているため、処理能力の低いデバイス(スマホなど)でも滑らかに動きます。
また、3DなどをJavaScriptなしで実装できるのも、WebGLがモバイル対応していない機器が多いいまは助かります。
今後、より様々な技術がCSSでできるようになっていくのは間違いありません。
- CSS の極致! 絶滅危惧種の動物たちを表現した In Pieces がすごい!
- Matrixをつかったサイト|WILD - Timbre
- どう考えても無茶な「CSSプログラミング」が話題に
- スムーズなアニメーションを実装するコツと仕組みを説明するよ。CPUとGPUを理解しハードウェアアクセラレーションを駆使するのだ!
- 3Dでできたカルーセルのデモ
設計パターン
CSSの壊れやすさに関してはまだ進化しているとは残念ながらいえないと思います・・・。しかし、多くの概念やフレームワークが登場し、開発は楽になっています。
設計
設計方法でいうと以下が有名です。どれも共通しているのが、CSSに構造を持たせて(プログラムのオブジェクト指向のように)設計しなさいということです。なかでも簡単に導入できるのがBEMで、オレオレで設計するくらいなら絶対に入れるべき設計方針だと思います。
- BEM
- OOCSS
- SMACCS
メタ言語
CSSを効率的にコーディングできるように拡張されたメタ言語が、SCSSとLESSになります。特にこだわりがないのであればSCSSを使うのがよいと思います。
Compass
SCSSをさらに使いやすくしたフレームワークで有名なものがCompassです。Compassを使うと、便利なmixin群、スプライト自動作成、プロジェクトごとに設定ファイルを適用するなど、多くの機能を使うことができます。
mixinが使えるのはいいですね。他にも、mixinが使えるライブラリは、Rails gemのBourbonがあります。mixinがいらないよ、という方は、GruntやGulpのautoprefixerとかで事足りるかもしれません。
フレームワーク
これは多すぎて把握できていません。基本、Bootstrapで十分なのかなと思っています。
ただ、2014-2015は、Angular.jsやReact.jsでも取り入れているというのもあり、Material design系が増えたという印象があるので、さくっと導入したいですね。
アートスクリプティング
HTML5のおかげで、かつてはフラッシュで行なっていたようなアートスクリプティングができるようになりました。
これらも、VR機器やIoTのおかげで無視できない存在になっていると思っています。理由は2つあって、1つ目は、多様なAPI、美しいグラフィックなど、アウトプット(=デバイスで取得したデータの表現先)にはHTML5が優秀なこと。2つ目は、サーバーサイドは、HTML5との相性、サポートなどの面でNode.jsが優秀なことです。
何より、未来なWeb UIをみるのはワクワクしますよね。
- webgl
- canvas
- VR
- IoT
- svg
まとめ
以上、長くなりましたが、最近のフロントエンドをまとめてみました。
- Javascriptフレームワーク
- ES6
- タスクランナー
- モジュール管理
- パッケージ管理
- ハイブリッドアプリ
- SPA
- サーバーサイドJavascript
- CSS
- アートスクリプティング
- まとめ
これ全部追いかけるのはたぶん無理ですが、やっぱりフロントおもしろいな、と。1年後にはまた状況が変わっているかもしれませんが・・・。
なにか間違っていれば@okmttdhrまでご意見くださいm(. .)m。参考になれば幸いです。
参考
- フロントエンドを楽にするために
- フロントエンド「エンジニア」とは何か? - nobkzのブログ
- 10年以上Java屋してたおっさんが 今年からフロントエンジニアやっている話
- JavaScriptのフレームワークについて検討してみよう | プログラミング | POSTD
最新のフロントエンド事情を把握した上で、適切なアーキテクチャによるシステム開発やモバイルアプリケーション開発をご希望の企業様は、是非MMMにご相談下さいませ!