Created
November 29, 2017 12:28
-
-
Save niaeashes/3641e0ffe5527683c5e10820b2ca50d8 to your computer and use it in GitHub Desktop.
車輪の再製造・原稿
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
「車輪の再発明」という言葉があります。 | |
これは「すでによく知られている物事の解決手段である車輪のことを知らないために、車輪を自らのエネルギーで再発明してしまう」ことの無駄を揶揄した言葉です。 | |
ぼくたちは無知故に、すでに解決された問題に再挑戦することがあり、そしてそれは多くの場合、徒労に終わります。なぜなら、この世界にはすでに、車輪の設計図があるからです。 | |
設計図のとおりに車輪を作れば、誰もが、重い荷物を運ぶ時の摩擦係数から解放されます。 | |
車輪とは何でしょうか? | |
ぼくたちはパッケージされた無数のライブラリを、gemやyarnやpipやyumやcocoa-podsで管理し、ダウンロードし、インストールし、メモリ上にロードし、実行しています。 | |
これらのライブラリたちは、ぼくたちを多くの苦難から救ってくれる便利な武器であると同時に、「なにかを実装しなくても良い」という甘い誘惑でもあります。 | |
すでに実装を終えたライブラリは、ぼくたちがそれをインストールしさえすれば、何らかの手段でぼくたちの課題を解決してくれます。 | |
仮に、無数にあるライブラリを車輪に例えると、すでに実装が終わっているライブラリと同じコードを書くことは、無駄なことのように感じられます。「車輪の再発明」という言葉の意味する通りに。 | |
しかしぼくたちは知っています。 | |
あまりに多くのライブラリを導入すると、実際にビルドされた実行可能なバイナリやメモリ上にロードされるソースコードの量は増大し、プロダクトは醜く太り、やがて身動きが取れなくなってしまいます。 | |
また、ライブラリの内部のコードをすべて掌握することはほぼ不可能です。日々更新されるオープンソースプロジェクトに送信されたプルリクエストを査読することはできません。 | |
アップデートしたライブラリが今まで通りの方法でうまく動いてくれることの保証はありません。もちろん自動テストを使えば、それによるトラブルは検出できますが、そうだとしても、健全とは言い難いでしょう。 | |
とすると、ライブラリを導入することは必ずしも良いわけではないことがわかってきます。これは、「車輪の再発明」という言葉が示すことと矛盾しているように感じられます。 | |
車輪とはなんでしょうか? | |
車輪とは、具体的な解決の手段のことです。 | |
重い荷物を運ぶ時、摩擦係数を考慮しなくて良くなるような手段のことです。 | |
パスワードハッシュにおけるソルトや、CSRFトークンや、left-padや、デザインパターンのことです。 | |
車輪とは実際のソースコードでもなければ、ライブラリでもないのです。ある事柄を達成するために広く知られた解決法が車輪です。 | |
だからぼくたちは、ライブラリを導入することと車輪を自分で作ることを天秤にかけるべきです。車輪についての十分な知識があれば、「車輪を再製造」することは、決して難しいことではありません。 | |
むしろ車輪の再製造は、車輪の対する理解を深め、車輪を使いこなすための足がかりになります。 | |
「車輪の再発明」とは、車輪という概念を再発明することを揶揄した言葉であり、車輪そのものの製造を揶揄した言葉ではありません。 | |
「車輪の再発明」とは、自分でコードを細部まで作り込むことを取りやめるための理屈でもありません。 | |
車輪に対する理解と、それを適切な場所で用いることができる知識を得ることを推奨する言葉です。 | |
まとめるとこうです。 | |
- ある一つの複雑なシステムをうまく扱うための単一のライブラリ | |
- 環境的要素に起因する差異を吸収するのみのライブラリ | |
- 特定の事柄を専門的に、過不足なく実行してくれるライブラリ | |
これらのライブラリには多くの場合、価値があるでしょう。共通点は「専門性」と「解決する課題の複雑さ」です。 | |
逆に | |
- 多くのパラメーターを持ち、様々な状況に対応できるライブラリ | |
- 小さすぎるライブラリ | |
- 解決すべき課題が曖昧なライブラリ | |
こういったライブラリの導入は慎重に行うべきです。自分でコードを書いたほうば幸せになれるかもしれません。 | |
というわけで、みなさん、必要な時には、車輪を再製造しましょう。 | |
以上です。 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment