現代エンジニアの三種の神器は何か

現代エンジニアの三種の神器は何か

現代エンジニアの三種の神器はなんだろう、とボンヤリ考えていました。 パッと思いついたのはDockerとGitHub。

2つはすぐに思いついた

DockerとGitHub、この2つに関しては、(異論は認めますが)すべてのエンジニアが身につけておくべき技術であり、この先10年(あるいはそれ以上)の常識となるものだと思います。

Docker

仮想環境として環境を固定することで、外部環境の変化に影響されることがなくなりソフトウェアの寿命を延ばすことができます。 しかし、過去いくつもの仮想環境が勃興し、同じメリットを謳っていました。

確かにDockerは軽量な仮想環境として大活躍していますが、以下の点で過去の仮想環境とは一線を画しています。

サービス稼働を前提としていない

Dockerが環境なのは間違いないのですが、Webサーバのようにサービスとして稼働することだけを前提としていません。 1コマンドとして実行可能なため、シェルスクリプトに組み込むことも可能です。

今までの仮想環境はホストOSの上に仮想OSが乗っかって常駐する方式でしたが、Dockerの場合は常駐するかどうかもユーザの意思で選択できます。 例えばWebサーバをコンテナで作った場合、-dオプションでコンテナを動かし続ける(常駐させる)ことができます。 一方-dオプションを指定しなかった場合、ENTRYPOINTで指定したコマンドの実行が終われば、当該のコンテナも終了します。

パッケージング

オンプレミス環境の場合、開発(ローカル)環境、ステージングサーバ、本番サーバそれぞれを構築する手間があります。 また、丁寧にメンテナンスしていてもいつの間にか差異が広がっていて、本番リリース時に想定外のトラブルに見舞われることがあります。

Dockerfiledocker-composeを使って、複数のサービスが連携する既存のシステムもDocker化できます。 環境をDocker化すると、開発環境から本番環境まで全く同じ環境であることが保証できます。

そして、既存のシステムがDocker化できれば、クラウドの力が利用できるようになります。 クラウド化すれば、維持コストと実行パフォーマンスが最適化される上、自社サーバの保守から解放されます。

GitHub

Gitもすごいのですが、GitHubがGitを完成させたと言っても過言ではないと思います。 プルリクエストの仕組みに然り、GitHub上の全ての活動がURLで参照できるとこ然り、何よりGitHubアカウントがあれば世界中の誰とでも協業できるソーシャルコーディングの門を開いたことで、文字通り世界の扉が開いた感があります。

「世界中の誰とでも」という相手は人間だけではないことにお気づきでしょうか? Rubyのgem(bundler)も、GCPのCloudRun(CloudBuild)も、GitHubと連携します。 人間同士が仲良くコーディング、とは違う次元のスピードでコードの再利用が行われているのです。

GitHubはソーシャルコーディングを根付かせただけにとどまらず、未来のソフトウェア開発とは何かを(世界最高レベルで)模索を続けています。

最後のピース

あと一つは何だろう?

最初、Rubyかな?と思いましたがちょっと違う気がします。 次にシェルスクリプトかも?とも思いましたが、これもしっくり来ません。 もしかしたらクラウドかもしれない、と考えましたが、これもピッタリとはハマらない。

私が思うに、いい感じにコネコネできる何かが欲しいのです。 試しに作ってみたら良さそうだったんで、整えたらサービスができちゃった、みたいな。 つまり、仕様と実装が融合する体験を提供できる技術が最後のピースになるのではないかと考えます。

Ruby、シェルスクリプト、クラウド。 どれもある場面ではとんでもない生産性があり、既存のサービス同士を組み合わせたり、拡張する場面で威力を発揮することがあります。 でもまだ足りない。 どれか1つでは実現できない。

もしかすると将来、ノーコード、ローコードといった技術もその候補に上がるかも知れませんが、最後のピースと言えるものはまだ産まれていないようです。


謝辞
画像は Unsplash 様より使わせていただきました。