時代を超えて生き続ける技術と、破壊的な変化をもたらす技術を見極める(前編)。JavaScript技術選定の審美眼。時代を超えて生き続ける技術と、破壊的な変化をもたらす技術を見極める(前編)。デブサミ20182018年2月20日IT分野の技術はつねに速いスピードで変化し続けています。したなかで登場する新しい技術には、スルーしてもかまわないものと、スルーすべきでない重要な技術があります。めまぐるしい変化の中で、どこに着目することで重要な技術を見極めるのか。一方で、長年にわたって変わらず現役で使われ続けている技術にはどのような特徴があるのでしょうか。2018」では、こうした変化する技術、変化しない技術をテーマにした、和田卓人氏の講演「技術選定の審美眼」が行われました。本記事では、その講演の内容をダイジェストで紹介します。最近の立ち位置としてはライオンと一緒にされていまして、テストを書いていないプルリクエストとかに対して、却下の代わりにこの画像が張られるみたいな形で、一種の恫喝の代わりに使われています。本人はきわめてジェントルな人で、いましゃべってるところを見て、このライオンとはキャラが違うなとお感じになっていただければ嬉しいです。昨今の技術の現場でよくあるのは、フロントエンド疲れ。JavaScriptの新しいフレームワークや、開発方法論とか、そういうのがどんどん登場して、また新しいものが出てきたと。2年前に標準とされていたものがすっかり過去のものになってしまっていて、Gruntはどこに行ってしまったんだとか、Backbone.jsはどこに行ってしまったんだとか。した変化に追いつけずに、疲れてしまうわけです。思えば、一種の限界集落。言えば安定し、悪く言えば停滞し、若者がやってこない、というプロジェクトもあったりしますよね。いった2つの極端なコントラストは、なぜ出てくるのか。技術の世界はどんどん変化していくわけですが、そこには重みがあって、つまり「ついて行くべき変化」と「スルーしていい変化」がある。その見分けがつかないと、日々キャッチアップに疲れてしまう。変化の速さは、本質ではない変化を強いられる頻度でもあります。とあるフレームワークの変化が激しいとすると、自社のビジネスニーズやシステムの変化とは関係なくフレームワークをアップグレードせざるを得なくなる。アップグレードには機能やセキュリティ面でのメリットもあるでしょうが、それがあまりに多いと自分たちの望む変化のサイクルとは関係なくアップグレードを強いられて、それで疲れてしまったり、変化すべきところでついていけなくなったりします。すると、はてブに愚痴るようになる。フロントエンドの技術はいつになったら落ち着くんですか、みたいな。今回のデブサミのテーマは「変わるもの、変わらないもの」なので、今日のテーマはこのデブサミのテーマそのものです。変わるもの、変わらないものがあるとして、それはどう変化しているのか、あるいはなぜ安定しているのか、といったことを僕なりに考えてみた内容です。技術の変化は、よく振り子に例えられます。振り子ではなく、どちらかというと螺旋(らせん)のようなものだと思っています。同じところに戻ってきているように見えて、前回の周期からは差分がある。差分と、その差分を可能にした技術。以前と同じところに戻ってきているように見えて、実は進化している部分のキーファクターが重要なんですね。そこが見えないと「それは20年前に通った道だ」みたいな、老害発言かもしれないことを言ってしまいます。一方で、螺旋に乗っていないような安定した技術もあって、それはなぜなんだろう、ということも考えたいと思います。UNIX、REST/Web、RDBMS/SQLまずは変わらないものからお話をしたいと思います。変わらず、長生きをして、使われ続けてる現役の技術で思い浮かぶものを3つ持ってきました。リレーショナルデータベースとSQL。これも実に強固で長生きしています。UNIXの何がその長生きを支えているか。1つは、その背後にある思想、哲学だと考えています。大きなソフトウェアを書くのではなく、ひとつのことをうまくやる小さなプログラムを書き、それを組み合わせることで複雑さに対処しましょう、という考えです。そのため、UNIXではすべてがファイルとして示されていて、それに標準入力と標準出力という単純なインターフェイスを組み合わせることで、プログラムはそのあいだでフィルタとして扱える。この単純かつ一貫した思想が背後にあることで、UNIXがいまだに生き残っているわけです。RESTやWebを考えると、RESTやWebはすべてがURLで示されるリソースであり、それに対して少なく統一された振る舞いが用意されています。メソッド自体は正確には8つくらいありますが、基本的にはGET、POST、PUT、DELETEの4つくらいです。バリエーションはURLで表現し、振る舞い自体は少ないセットにキープして、しかも状態を持たない。それらのあいだの状態遷移はハイパーリンクで示す。分散コンピューティングとして非常に強固でよくできているわけです。リレーショナルデータベースやSQL。これが生き残っているかというと、数学的な背景があって、これが強固で理論的な支えになっています。先ほどのRESTに似ていますが、操作が少ない。SELECTやINSERTなど、いくつかに絞られていて、その代わりすべてをリレーションで示せるようになっています。SELECT文とテーブルを同一視できる。テーブルが書けるところにはSQLのクエリも書けるため、系が閉じているわけで、これも強みになっています。長生きする技術に共通するのは「制約の大きさ」UNIX、REST/Web、RDBMS/SQL、この3つに共通するものとして思い浮かぶのは、制約が大きいこと。制約の大きいルールを共有することで、その上での相互作用、フィルタとしてのプログラムをつないだり、Webサイトをつなげたり、テーブルをつなげたり、ということができます。インターフェイスが限定的で振る舞いの種類が少なく、かつそれぞれが実装依存ではなく抽象的な層のインターフェイスで再利用できる。lsコマンドの出力をRubyで書いたフィルタにかませて、それをSedにわたして、最後にPythonで書いたコマンドにわたすと、だいたい40年の時を超えてプログラム同士がつながっていきます。UNIXはあっさり、そういったことを成し遂げているのです。これら生き残っている技術の強さに共通するものは、強い抽象であると考えました。UNIXはすべてがファイルとフィルタであると考えるからつながる。REST/Webはすべてはリソースであり、そのリソースに対する操作は狭い範囲で閉じているので、新しいメソッドを覚える必要はなくて、URLと望む操作に閉じています。RDBMS/SQLは、すべては集合であるとしているので、系が閉じており、それがさらに系を強固にしています。次に、螺旋のように変わる技術について考えていきます。ここでまっさきに思い浮かぶのは、集中と分散の螺旋ですね。僕のキャリアは最初は大規模システムをやっていましたが、そのあとはWebシステムが多くて、それが僕のバイアスなので、その話が多くなります。Servletなどがあり、これからは動的なWebサイトが作れて、ECサイトなどもできるんだ、という時代がありました。基幹システムにJavaなどが使われ始めると、企業は既存の資産を生かしつつ分散コンピューティングを実現するようになってきて、そのための技術がEJBやSOAP、XML、SOAなどでした。Railsが現れます。Railsの登場によって、例えばEJBやXMLなどを用いた場合と比べて生産性が10倍、つまり10分の1の時間で開発ができるようになりました。Railsの登場前と後では大きく違うくらい影響を与えました。Railsは、こういうルールに則るのなら設定を書かなくてもよくて、コードも書かなくてよい、となれば生産性がマックスになる、という世界を見せました。Railsを使って作ったサービス企業が上場を目指すようになると、サービスで攻めたい事業部と、守りたい事業部でデプロイのやり方に温度差が生まれたりして。そこで事業部ごとに必要なアーキテクチャを引っ張れる方がいいのではないかとmicroservices(マイクロサービス)が登場して、コンウェイの法則やGraphQLなどがWebに適用される時代が来たわけです。microservicesを用いた分散の世界にやや戻ってきているのがいまの時代です。EJB時代とmicroservices時代の差分は?じゃあ、EJB時代の分散からmicroservices時代の分散に戻ってきたとき、その差分のキーファクタはなんだろうかと考えると、あきらかにクラウドコンピューティングです。クラウドコンピューティングの登場前後で、コスト構造が完全に変わってしまいました。いまでは考えられない若者もいるかもしれませんが、クラウド以前はまずサイズの見積もりをしてハードウェアを購入し、データセンターで設定しないとちゃんとWebシステムが動かなかったのです。Webがとてもよくできた分散システムの事例であることにみんな気づきました。XMLじゃなくてJSONで十分だ、ということにも気づいたわけです。ムーアの法則による限界が来ると言われていて、それを打破するのがマルチコアプロセッサだと言われていましたが、実は打破したのはクラウドでシェアドナッシングでサーバを横に並べてなんとかするという単純な分散コンピューティングでした。その要素技術としてDockerなどのコンテナ技術が登場し、またJSONでRESTfulだけだと型の定義がふわっとしているので、SwaggerやGraphQLなどがでてきましたと。Changerな技術とは、などの解説へと展開していきます。時代を超えて生き続ける技術と、破壊的な変化をもたらす技術を見極める(後編)。Guide」と自動整形ツールを導入する理由。Niino(jniino)IT系の雑誌編集者、オンラインメディア発行人を経て独立。2009年にPublickeyを開始しました。WebAssembly」正式版を5月にリリース。Backupに新機能。EC2インスタンスをEBSごとバックアップ/リストア可能に。クロスリージョンにも対応クラウド上のアプリケーションでもExcelファイルの入出力を可能にするライブラリ。Cloud、大容量長期アーカイブ向け「Archive」ストレージを提供開始。CodeのJava環境が強化。usPublickeyについて/運営者についてお問い合わせ広告についてプライバシーポリシ。