ActiveSupport はきめ細かく require できる ということを学んだのが昨日。とはいえ、それでもやはりためらいはある。
次に示すのは ActiveSupport が依存するモジュールである。
~~~ bash % gem dep activesupport Gem activesupport-6.0.3.1 concurrent-ruby (~> 1.0, >= 1.0.2) i18n (>= 0.7, < 2) minitest (~> 5.1) tzinfo (~> 1.1) zeitwerk (~> 2.2, >= 2.2.2)~~~
よく見かける名前のラインナップであるから、安定したモジュールなのだとは思う。しかし正直にいって、具体的になんの責務を担っているのかはわかっていない。
外部モジュールを採用するということは、自分のコードを第三者のコードに「従属させる」ということになる。ActiveSupport を採用すると、 ActiveSupport に従属しなければならなくなる。それはとりもなおさず、 ActiveRecord が従属しているこれらのモジュールに間接的に従属させられることに他ならないし、その先に従属先があれば、さらに再起的に従属することになる。
ほとんど意識せずに利用できる、安定したモジュールであるからといって、手放しに利用することにはためらいがあるべきでなないか? 自分のプロジェクトに自分の感知しない要素を取り込むことに、不安はあってしかるべきではないか?
■
無知ゆえの、的外れで不毛な恐怖なのだろうと感づいてはいる。これだけ言っておいても、 Rails プロジェクトに携わるとなれば、こんな疑問もなんのその、あらゆる従属を所与のものとして扱い始めるだろう。そのようにして働いてきたのは揺るぎない事実。
他方で、自分で選び取るとなると、ためらってしまう。要するに、レールを外れて自分のプロジェクトにとって最適な選択肢を見極める眼がまだ未熟なのだろう。オマカセからアラカルトへの道は先が長い。
「自分でやるべきこと」と「自分ではやらないこと」の線引きを適切にできるようになること、それがあるべき姿だとする。「なにを自分で実装し、なにをOSSに任せるか?」という問いに言い換えてもいい。
自分で実装できないものは OSS に委ねる。これが初学の頃に身に付けたアティチュードであった。安易ではあるが、自分にできないことを理解し、できないことは集合知に委ねられる、という意味で、必ずしも悪いスタンスではなかったと思う。
とはいえこれでは先がないし、おもしろくない。そしていくらかの知識と能力が身について、自分である程度の実装をこなせるようになった今、この命題は書き換えられなければならない。つまり、「自分でも実装できるもののうち、なにを OSS に委ねるか?」
そのさじ加減を会得するには、つまるところ OSS をより正確に読みこなし、その可能性と限界について正しく把握できる能力が必要だろう。そしてそれは、基本の API をどれだけ正確に理解し、利用できるか、というところに帰着する。というのも、およそあらゆるライブラリは、その依存を上位に辿っていくと必ず、言語のコア機能にたどり着くはずだからだ。
おりしも DateTime クラスの不思議な用途を、ようやく知ったところであった。ようやくではありながら、これはおもしろい、と素直に楽しみながら学ぶことができた。まだまだ知らないことはたくさんある。そのひとつひとつを、これはおもしろい、と知っていくことができれば、ずいぶん幸せなことだと思う。
宗教と暦の「歴史的文脈」を担うDateTimeクラス - ユユユユユ (https://jnsato.hateblo.jp/entry/2020/06/17/230000)