私が過去十年ほど、HappyFunCorp1で仕事としてやってきたウェブサービス作りやスマートフォンアプリ開発は、かつてはとてもわかりやすいものだった。決して簡単だったとは言わないが、特に顧客が消費者向けスタートアップの場合は、わかりやすかったのだ。多くの会社がそうだった。
経験を積むほど、私たちはより良いものに手が届くようになった。2つのアプリをデザインし実装する(通常はiOSが先、Androidが後)。デザインには金を惜しんではならない。それらをJSON APIに接続する。それは通常はRuby on Railsで書かれたバックエンドだ。このバックエンドはウェブサイトでも使われている。常にウェブサイトが存在している:一般消費者はアプリで最小限の表示を見ているに過ぎない。その裏には常に機能やアプリの外観を制御するための管理サイトが伴っているのだ。
管理サイトのデザインはそれほど重要ではないので、ActiveAdminのようなもので、見かけは粗いが使えるものを作成することができる。なぜ自分でわざわざ作る必要があるだろう?同様に、認証は面倒で間違いも起きやすいので、FacebookやTwitterへのフックを組み込んだDeviseのようなものを使いたい。データベースは慎重に設計しよう。生のJavascriptを扱うのは悪夢に他ならないので、動的なブラウザ内操作にはjQueryを使おう。サーバーテストにRspecとMinitestのどちらを使うかには議論が分かれる。
全部揃ったかな?OK、それではHerokuのスケーリング環境に展開しよう、単に”git push”とするだけでステージングと本番環境にプッシュすることができる。様々なレベルのPostgresサポート、自動スケーリング、パイプライン、Redisキャッシング、Eesqueワーカージョブなども同様だ。もしスタートアップなら、そのままHerokuの上で様子を見よう。もしそれが製品市場で成功するとしたら、とりわけ素早いイテレーションが可能だったことが大きい。そしてもし成功したならば、ある時点でAWSへと卒業しなければならない。なぜならHerokuのスケーリングには限界があり、しかも大規模になるにつれて多大な費用がかかるからだ。もしそうでないなら…まあ「失敗は早めに」だよね?
ああ、友よ、そんな日々があったのだ。既に過ぎ去った平和な日々…(ノートをチェック)もう5年前の話だ。もちろん沢山の苦労は味わったが、意思決定上の複雑さはほとんどなかった。スマートフォンブームが始まり、ウェブブームは落ち着いて、それでも皆がまだその2つのブームの上に乗っていた。
では現在は?まあ、今でもそれらの波自身は崩れ去ってはいない、ソフトウェアはいまでも世界を食べ続けている。だが状況は…変わってしまった。世界はますます(ソフトウェアによって)食べられ続けているが、その速度は落ちている。まあ今や100万ドルのものが500%成長するというよりも、10億ドルのものが50%成長しているという意味でだが。世界を変える決意に満ちて、それを試すために資金を注ぎ込む、アプリのアイデアに満ちた夢想的起業家の数は少なくなっている。もちろん、そうした者たちはまだ居るし、その力も大きくなってはいるが、現在の風景はより複雑なものになっているのだ。
その代わりに、私たちは大規模なビジネスを目にするようになった。メディア、製造、そして小売などだ、そうしたものたちが新しい技術プロジェクトを適用し、熱中し、実験しなければならないことに気が付いたのだ ―― 興奮と恐れの中で。そうでなければ、とても限られた(しかしとても有益な)用途のカスタムアプリケーションを作ることが要求され、それらを既存の面倒なミドルウェアなどと接続しなければならない。また、たとえ有名なテクノロジー企業であっても、社内のチームを純粋にコアコンピタンスとビジネスモデルに専念させるために、補助的なツールとプロジェクトはアウトソーシングしている。私たちの顧客たちが、ここ数年でより企業向けにシフトしたことは間違いない。
とはいえ、素晴らしいアイデアや触発的なパワーポイントを引っさげたスタートアップたちの登場が途切れたと言いたいわけではない。例えば、かつてのコンシューマアプリの創業者たちを置き換えるように登場した、超夢想的ブロックチェーン創業者たちがいる(実際、私自身も時には少しばかりブロックチェーンに対して夢想家になってしまう)。昨年末から今年にかけて沢山のブロックチェーンスタートアッププロジェクトを仕掛けて、現在はせいぜいそのうちの数個が残っている状態に陥っているのは、私たちだけではないと思っている(とりわけツールが依然としてとてもお粗末なままなので、私には90年代のコマンドラインハッキングを思い起こさせる)。しかし、私はこの分野が消えてしまうとは考えていない。
現段階では、予想していたほど多くのAIプロジェクトを、私たちは手がけていない。おそらくその原因の一部は、AI人材が極端に不足し高価値のままであることであり、また部分的には多くの”AI”的な仕事が、深層学習ニューラルネットワークを訓練し調整することなく、単純な線形回帰を使って行えることが明らかになったことだろう…まあもしTensorFlowでそうした線形回帰を行ったとしても、まだ”AI”というバズワードを使っても許される筈だ。そうだろう?
しかし何よりも、私たちが使用するツールが変わってしまった。いまでは、アプリを作ろうとする際には、自分に問いかけなければならない:本当にネイティブで作るべきか?(JavaまたはKotlin?Objective-CそれともSwift?)そうでなければReact Native?あるいはXamarin?そうでなければGoogleの新しいFlutterとか?またウェブサイトを構築したいときには考えなければならない:従来式でやるのか?それともReact、Angular、またはVueを使ったシングルページにするのか?サーバーに関しては…ご存知のようにGoはRailsよりもはるかに高速で、そう、並列処理もエレガントだ。でもmap/filter/reduceはどこに入れれば良いのだろう?Javascriptはいまだに扱い難い言語だが、システム全体を横断して1つの言語を使うことには一定の利点がある。そして最近のNodeは強力でパッケージも豊富だ。もちろん、それら全体をコンテナに入れたい筈だ、Dockerはさらに1層もしくは2層の設定の複雑さを追加するが、通常そうする価値はある。
完全に「サーバレス」に移行はしないにしても、ある程度の部分をAmazon LambdaやGoogle Firebaseでまかなうというのはどうだろう?たとえFirebaseをデータストアに使用しなくても、認証に使うというのは?そして、もし必要に応じてあるいは適切と思われるので、全てをコンテナ化しKubernetes化していた場合でも、製品が市場に受け入れられたことがはっきりするまでは、多数のマイクロサービスを組み合わせる道筋を進むのはやめておこう。そしてその後どこにシステムを展開すれば良いだろうか。AWS、Azure、Google Cloud、またはDigital Ocean?あるいは、App EngineやBeanstalkのようなPaaSサービスや、Herokuのような「サーバーレス」と「ベアメタル仮想マシン」の間に入るようなものを使いたいだろうか?
過度に単純化しているが、私の言いたいことはおわかりいただけるだろう。開発者として、これほどの選択肢やツールが提供されたことはこれまでになかった。そして利用可能なツールセットの中の、どれが特定の状況に対して最善なのかを決定することが恐ろしく難しいという理由で、分析に対する困難に直面させられることもかつてなかった。場合によっては(実はしばしば)最善ではなく、とりあえず良いものを選ぶことで満足しなければならない。そして、その選択の困難はすぐには簡単になりそうもない。プログラマーでいることは大変な時代だ。私たちは有り余るほどの選択肢の中に巻き込まれて、生きて働かなければならないのだ。
【注】1はい、これは本当に私たちの会社の名前である。このTechCrunchのコラムは私のフルタイムの仕事ではない(人は、これが私のフルタイムの仕事だと考えることが多い。なにしろ目に止まるし、毎週コラムを書くことは大変な重労働だと考える人もいるからだ。しかし私は本当に企業のCTOだ)。
【訳注】この記事の原題は”The tools, they are a-changing”であるが、これはボブ・ディランの”The Times They Are a-Changin’ “のもじりである。この歌の邦題はしばしば「時代は変わる」とされるため、この記事のタイトルも「ツールは変わる」とした。
[原文へ]
(翻訳:sako)