yshnb’s engineering blog

Webエンジニアです。Fundsというサービスを開発・運用しています。

使い慣れている技術の強さと脆さ

プロダクトを新規で開発する際に、どのような技術を使うかという選択をするタイミングがあるはずです。

僕自身は、ある程度成熟してきた技術の方が採用リスクが低いと考えており、新しい技術を積極的に採用したいというタイプではありません。

しかしここ2〜3年の中で、新しい技術をいくつか採用した結果、古いものに戻れなくなった(戻りたくないと感じるようになった)という経験もあり、新しい技術を積極的に採用していくことの重要性を実感しています。

ここでは使い慣れている技術を使用することによるメリット・デメリットと、そこから派生した新しい技術を採用することの価値ついて書いてみたいと思います。

使い慣れている技術の強さ: リスク(不確実性)が小さい

技術を選択する時に、使い慣れているものを選択することのもっとも大きなメリットは、リスク(不確実性)が小さいことであると思っています。

使い慣れている技術であれば、思うように利用できなかったり実装できずに躓く可能性は低いでしょう。また重要な点として、運用開始後に思わぬトラブルに遭遇することもリスクも小さいはずです。

そのため、客観的観点だけから判断するとより適した技術があると知っていても、使い慣れている技術を採用することが望ましい場合があると考えています。

たとえば僕の場合、RDBMSを使用する時に、基本的にはMySQL(あるいはAurora)を採用しています。

MySQLはメジャーなデータベースである一方、標準的なRDBMSでは当然サポートされているべき機能がサポートされていない場合もあり、標準的なRDBMSとしての機能を求めるのであれば、PostgreSQLの方が適しているだろうなと思う場面もあります。

しかし僕個人としては、PostgreSQLの使用経験が浅く、大量のレコードを取り扱ったり複雑な使い方をする場合、運用上で注意すべき点を確実に理解できているわけではありません。

その点MySQLについて言えば、InnoDBのデータ構造やチューニングするべきパラメータ・トランザクション分離レベルやロックの挙動といった、適切に使用するために必要な知識についてある程度知っていることも多く、PostgreSQLを使用する場合よりも正しく使える可能性が高いと思っています。

使い慣れている技術の脆さ: 技術と思考が硬直化する

一方で、決まった技術を採用し続けることによる脆さもあると思います。

決まった技術を採用し続けると自分自身の技術的選択肢が広がらず、本当に既存の経験だけで解決できないような問題に遭遇したときに、問題を解決する力が弱くなってしまいます。

新しい技術の採用は、新しい考え方を取り入れるということでもあります。それまでの常識が通じないものであればあるほど、考え方の転換が必要で最初は苦労します。

しかしその結果、既知の技術を別の視点で見直すこともできるように思います。

比較的最近の僕自身の経験では、いくつかのプロジェクトでKubernetesを使い始めました。Kubernetesは最初こそ覚えるべきことも多く、簡単に使用できるとはやや言い難いですが、一度リソースをYAMLで定義してしまえばクラウドプラットフォーム非依存で環境を構築できるなど、応用範囲の広さを感じています。

またKubernetesで運用しやすい設計という観点でアプリケーションに目を向けると、ポータビリティの高い構成が必要となり、結果的にKubernetes以外の環境でも運用しやすく実装できるように思います。(これはKubernetesというよりコンテナですね)

使えるものを使い続ければよいという慢心は、思考を硬直させ、時代のスタンダードから取り残されてしまうということになり得るなと感じています。

使い慣れていなくても、広く使われている技術は強い

難易度の高いプロジェクトであればあるほど、技術的にクリアしなければならない要求も強く、技術選択で迷うことも多いでしょう。

ただ、自分では使っていなくとも広く普及している技術であれば、なんらか解決策もあり、結果的には正解だったと感じることが多いように思っています。

おまけ

という記事を書いていたら、Redis Turns 10 – How it started with a single post on Hacker Newsという記事が上がっているのを見つけて。

広く普及している技術も、最初にリスクをとって使い始めた人たちがいるから今があるということで、そういうリスクを取ったチャレンジも必要なのかもしれませんね。