
ソフトウェアエンジニアリングデイリー:FacebookのReactプロジェクトがアプリ開発をどう変えるのか
ジェフ・マイヤーソン著
Facebookのエンジニアリングチームは最近、ソフトウェア開発のための強力な疎結合ツールスイートを開発しました。React、GraphQL、Relay、React Native、そしてFlux Architectureです。これらは極めて実用的な開発ツールです。ReactはFacebookと大規模なオープンソースコミュニティの成果です。
Software Engineering Daily ポッドキャストの最近のシリーズでは、React の内部の仕組みとソフトウェア開発への影響について検討しました。その中には、Facebook が React オペレーティング システムを構築するという予測も含まれていました。
ネイティブアプリの開発は現在、PlayストアとiOS App Storeの審査プロセスによってボトルネックとなっており、アップデートのプッシュからユーザーへの提供までに数時間、数日、あるいは数ヶ月もの時間がかかります。Facebookは、モバイル開発者がWeb開発者と同様にネイティブアプリを継続的にリリースできるようにしたいと考えています。
Software Engineering DailyのReact Weekのハイライトの一つは、FacebookのReact CoreエンジニアリングチームのメンバーであるBen Alpert氏へのインタビューです。 以下のエピソードをお聴きいただき、編集された抜粋をお読みください。
Jeff Meyerson、Software Engineering Daily:ReactはiOSと同様にアプリケーション開発に大きな影響を与える可能性があるというのが私の持論です。FacebookのReactコアチームに所属するあなたも、この見解に賛同されますか?

Facebook社 React Coreエンジニア、ベン・アルパート氏: そうですね、興味深い質問ですね。iOSの誕生と新しいスマートフォンのパラダイムによって、これまで存在しなかった全く異なる種類のソフトウェアが誕生したと思います。これらのアプリは、以前のものとは全く異なります。Reactはそれとは全く異なると言えるでしょう。私たちは新しいタイプのアプリを作っているわけではありません。Reactはアプリの開発をはるかに容易にし、アプリの理解や検討をはるかに容易にします。つまり、より複雑なアプリでも、非常にスムーズに動作し、バグのないアプリを簡単に開発できるということです。経験の浅い人でも、すぐに使いこなせるようになり、独自のアプリを作り始めるのも容易になります。ですから、時間が経つにつれて、プログラミング経験がほとんどない、あるいは少ししかなく、少しだけ触っただけの人たちが、自分専用の本格的なアプリを作るようになると思います。彼らはリマインダーアプリが欲しいと思っていて、自分のワークフローに特化した動作をしたいのです。彼らはそれを作ることができます。あるいは、これまでアプリを作ることなど考えもしなかった人たちが、アプリ開発市場に参入してくるようになるでしょう。
ジェフ・マイヤーソン: Reactチームにおけるチームのダイナミクスとソフトウェア開発文化がどのように進化してきたのか、とても興味があります。Facebookは開発の面で非常に最先端の企業だと考えているからです。皆さんは、おそらく他の企業では周縁的だったり、できないようなことをたくさんやっているように見えます。他の企業ではエンジニアリングの質が十分ではないからです。Reactチームでの仕事は、これまで見てきたより一般的なアプリケーション開発やソフトウェアエンジニアリングの管理スタイルと比べてどうですか?
Ben Alpert:ある意味、それほど違いはないと思います。ユーザーにとって最高の製品を作ろうとしているという点では変わりません。私たちの場合、製品はJavaScriptライブラリで、ユーザーは製品を開発しようとしている他の開発者です。しかし、それ以外は、実際にはそれほど違いはないと思います。Reactを数人だけで同じように開発しているスタートアップもあるでしょう。しかし、資金調達はおそらく難しいでしょう。収益化の方法など、様々な問題があります。しかしFacebookでは、プログラムを簡単に開発できるよう、可能な限り最高の開発者体験を提供しようと努めています。何百人もの開発者がこれらの製品を開発しているのであれば、その点は容易に正当化できます。人材は他のものとそれほど変わらないと思います。
ジェフ・マイヤーソン:あなたが開発している製品、いや、Facebook全体のソーシャル性は、開発をよりソーシャルなものにするのでしょうか?それとも、開発の力学に変化をもたらすのでしょうか?
Ben Alpert: あまりないと思います。Facebookはfacebook.comとFacebookモバイルアプリで最もよく知られていますが、実際にはReactや関連プロジェクトを活用した様々なプロジェクトが数多くあります。全てにソーシャルコンポーネントが組み込まれているわけではありませんが、もちろん多くのプロジェクトにソーシャルコンポーネントが組み込まれています。
ジェフ・マイヤーソン: Facebookが最適なWeb開発をどのように捉えているか、あるいはWeb開発の全体像を知りたいです。React、GraphQL、Relay、Flux Architectureといった、Facebookから生まれた様々な発明やパラダイムを通して、ベストプラクティスがどのように実現されてきたのか、お話ししたいと思います。これまではこれらの要素を個別に見てきましたが、それらがどのように組み合わさり、エンジニアリングの未来像を描き出せるのかを深く理解したいのです。
Ben Alpert: 私たちは、アプリケーションを構築する最もシンプルな方法を模索しているだけだと思います。つまり、ほとんどの場合、人々が使い慣れているものの上に抽象度を高め、その上にさらに高次の抽象化を構築するということです。C言語が作られた当時、「C言語は使いたくない。どんなアセンブリコードにコンパイルされるのかわからないし、自分で書いたアセンブリよりも遅くなるだろうし、そういう問題もある」といった声が上がっていました。今では、純粋なアセンブリ言語を書く人は基本的に誰もおらず、誰もがC言語、あるいはそれよりも高水準の言語で書いています。ReactやRelay、そしてこれらのプロジェクトでも同じことが見られると思います。これらのプロジェクトは、使用時に実際には意識する必要のない細部を抽象化しようとしています。つまり、場合によっては制御が多少制限されることもありますが、全体的には作業量が減り、プログラムは以前と同じように動作するということです。どの組み立てラインでタイプミスをしたかを調べるのに時間を費やす代わりに、製品の製造に集中できるため、実際にはより効率的に作業できます。
会話の続きは、Software Engineering Dailyポッドキャストの全編をお聴きください。また、Software Engineering DailyのReact WeekにおけるFundamental Answersのリストもご覧ください。