伊藤直也氏が「Web開発は高度化している」と語る理由と、押さえておきたい3つの技術領域【2014年前半のインプットlog】
2014/08/08公開
KAIZEN platform Inc. Senior Technology Advisor
伊藤直也氏(@naoya_ito)
2002年に新卒入社したニフティでブログサービス『ココログ』の開発担当となり、一躍有名になる。その後、はてなで『はてなブックマーク』など各種サービスを立ち上げ、2010年にグリーへ入社。2012年に同社を退職して以降は、フリーランスとしてベンチャーの技術顧問などを請け負う。自身のブログ『naoyaのはてなダイアリー』が人気
「Webアプリの実装で差別化は無理」という考えが変わった
現在、KAIZEN platformをはじめ複数社の技術顧問を務めている伊藤直也氏。「普段から、アウトプットの目的なく技術の勉強をすることはほとんどない」という性分から、今年上半期は「顧問としてベストプラクティスを提供するために知っておくべき領域」にフォーカスして情報収集をしてきた。
その領域を大きく分類すると、以下の3つになるという。
【1】継続的デリバリー / GitHub エコシステム
【2】Immutable Infrastructure
【3】MPP(Massively Parallel Processing)
伊藤氏は以前から、継続的デリバリーやImmutable Infrastructureについて自身のブログや書籍、各種イベントで情報発信をしていた。そのため、同氏をよく知るエンジニアにしてみれば、このラインアップは目新しいものではないかもしれない。
ただ、これらの領域を引き続き追っている背景を聞くと、Web開発にかかわるエンジニア全員が聞き逃せない理由があった。
「ここ最近、以前にも増してWeb開発が高度化してきたと感じてまして。何年か前は『Webアプリケーションの開発は技術的には難しくない』、『Webアプリケーションの実装のみで技術的差別化を図るのは難しいだろう』と思っていたのですが、今はフロントエンド、サーバサイド、インフラすべての分野で深化が進んでいるように思います」
例えば、フロントエンド開発は以前のようにサーバサイドの実装者が片手間に実装するようなものではなくなった。フロントエンド開発のためのフレームワークを選定し、それを正しく扱い、長期的に維持可能な設計を行うことが求められるようになった。
インフラも、仮想化やクラウドサービスが広まったことによって、それをハードウエアではなくソフトウエアのように扱うことができるようになった。かつ、インフラの構成をプログラマブルなものにすればするほどテスト~デプロイ~リリースまでのプロセスが高速になる。
さらに、最近はWeb開発領域にログ解析などビッグデータの扱いも含まれるようになっており、「広く浅く知っているだけ」では良いサービスを作ることが難しくなっているのだ。
「それらの知識の積み重ねがシステム設計の成否を分けるようになってきていますよね。市場環境も変化しています。さらに、以前のWebサービスとは異なり、スマートフォンのネイティブアプリなどはリリース直後の最初の評価で判断が下されてしまう。だから、正しいことをきちんとやる体制づくりが大事になっているし、各レイヤーの開発を深い部分まで理解して行うスペシャリストの存在も重要になっていると感じてます」
そんな思いで知識を深めてきた伊藤氏が、ここ最近で参考になったと話す情報ソースを紹介しよう。
伊藤直也氏が参考にしてきた情報ソース
【1】継続的デリバリー / GitHub エコシステム
■Continuous Delivery in COOKPAD by Naoto Takai
https://speakerdeck.com/takai/continuous-delivery-in-cookpad
継続的デリバリーについては、今、クックパッドさんが国内で一番うまくやっている企業だと思っています。この資料は、継続的デリバリーを実践するにあたっての規模感ですとか、どういったシステム構成で対応するかなど実践的な話題がまとまっていて参考になりました。
■書籍『継続的デリバリー 信頼できるソフトウェアリリースのためのビルド・テスト・デプロイメントの自動化』
この本には継続的デリバリーの基本的な概念がまとまっています。目新しい内容はありませんが、昨今のデリバリーにはどういう条件をクリアしてやっていくべきかが一冊にまとまっているので最初に読みました。
■ChatOps at GitHub
https://speakerdeck.com/jnewland/chatops-at-github
昨今のWeb開発では、Pull Request を基本とした開発などGitHub を中心に開発ワークフローを構築していくやり方が一つのベストプラクティスです。そのGitHubを開発しているGitHub Inc.が、そこから一歩進めてチャットbot (Hubot) で運用オペレーションをする例が記載されている資料です。
Hubotを使った開発プロセスの改善はあくまで一例に過ぎませんが、こういった方向性の実践が昨今の組織にはフィットするんだということで参考になりました。
なお、GitHubをベースにチャットを使ってデプロイを進めていく際のtipsは私のブログエントリ『GitHub時代のデプロイ戦略』にも以前少し書きました。
【2】Immutable Infrastructure
■インフラ系技術の流れ
http://mizzy.org/blog/2013/10/29/1/
mizzyさん(宮下剛輔氏。serverspec開発者)のエントリで、ちょうどImmutable Infrastructureという言葉が出始めて理解がまだあいまいだったころ、いい感じにまとまったエントリだったので興味深く読みました。
■The Tweleve-Factor App
http://twelve-factor-ja.herokuapp.com/
これはImmutable Infrastructureが注目を集める前からあったドキュメントで、昨今のWebアプリケーションアーキテクチャの良い作法が記述されています。
作者は、多数のアプリケーションをHerokuで稼働させる経験の中からこの知見を得たようですね。それをHerokuを使うというところからより一般化させた形で記述されたのがこの文書です。Webアプリケーションアーキテクチャの「あるべき論」を考える上でとても良いドキュメントです。
【3】MPP(Massively Parallel Processing)
■Hadoop Conference Japan 2014(※以下はレポート記事)
http://gihyo.jp/news/report/2014/07/0902
■MPP on Hadoop, Redshift, BigQuery
http://repeatedly.github.io/ja/2014/07/mpp-on-hadoop-redshift-bigquery/
ビッグデータの領域で、今一番ホットなトピックがMPPですね。先日 Hadoop Conferenceに行った時にその進化の速さや盛り上がりを肌で感じました。
恥ずかしながら自分のHadoopへの理解は数年前のそれ~Google のMapReduceのOSS実装としてのHadoop、そしてその後にSQLをHadoopクラスタで実行できるHiveが広く使われるようになった~ぐらいで止まっていたんです。
それが、いまやHadoopはビッグデータ解析の基盤となるプラットフォームにまで進化していて、バックエンドの設計や実装も大きく変わりました。
HadoopはMapReduce実行基盤であるという理解はもはや正しくなく、今ではHadoopというのはビッグデータ処理系の開発エコシステムを指す代名詞であるというのが正しい姿です。
MPPはHadoop + Hiveではまかないきれないアドホックなクエリ~ビッグデータに対する SQL での解析を数秒程度のレスポンスで実行する要求などを実現する並列処理基盤です。Facebookが開発したPrestoや、CloudelaのImpalaなどがその代表例です。数秒でビッグデータ処理を行うというユースケースでは、Amazon RedshiftやGoogleのBigQueryなどのクラウドサービスも、この分野に含まれます。
実績のあるOSS実装があるだけでなく、RedshiftやBigQueryなど安定したクラウドサービスもすでに稼働しているように、この分野は急激にコモディティ化が進んでいます。
数十億レコードの分析を数秒で解析できる基盤が誰でも使えるという前提に立つと、システム設計の幅も大きく広がりますよね。
エンジニアとして「フィルターバブル問題」から逃れる方法
自らの情報収集の流儀を語る伊藤氏
MPPに注目したきっかけが、ふと参加したカンファレスだったように、「テクノロジーの世界は自分が着目していないところで急速な技術革新が起きていたりするものだ」と伊藤氏は続ける。
その変化をなるべくキャッチアップするためにも、「みんなが注目しているテーマより誰が書いているのか(発信しているのか)」を重視しながら情報を取捨選択し、時流の変わり目を自分なりに考察しながら必要な情報を取りに行くという。
「日々の情報収集は、はてなブックマークをタイムライン形式で読むための自作iOS アプリ『HBFav』でやっていますが、それ以外にもコミュニティーや勉強会に不定期で参加するなどしながらフィルターバブル問題(情報の閉鎖性によって時流から断絶されてしまうこと)を回避できたらと思っています」
「みんなが注目しているテーマ」をさほど重要視しない理由も、マジョリティーに染まることが【自ら考える力】と【多面的な物の見方】を失ってしまうことにつながると考えているからだそう。
伊藤氏が冒頭で話した「Web開発の高度化」についても、便利な開発ツールがどんどん生まれているという側面だけを見ていたら、「アプリは簡単に作れる」という固定概念に縛られてしまって変化に気付かないまま過ごすことになるだろう。
「確かにiOSやAndroidの開発は、プラットフォームのアップデートによって、より容易になっていってはいます。一方で、効率化されたことにより生まれた余剰時間を、開発者たちはより堅牢な設計、自動化、効率化などの分野を進化させることに投じています。こうして、ある側面では容易になった分、別の側面では高度化や複雑化が進んでいくんです。そして結果的に以前よりも複雑で高品質なアプリケーションが市場に登場して、ユーザーの期待値水準も上がっていくわけです」
こういった情報への読み取り方について「自分はあまのじゃくなんで、あくまでも個人的な考えとしてとらえてほしい。これが他人にとっても良い方法であるとは思っていない」と話す伊藤氏だが、技術情報との接し方という点では多くのエンジニアの参考になるはずだ。
取材・文/伊藤健吾(編集部)