フレームワークとどこまで骨を埋めるか問題 ( #phpgenba を聞いて)

問題〜とか言いつつ何も答えが出てない、どころかissueを見定められてないけど。ただの散文です。

#phpgenba を聞きまして。

php-genba.shin1x1.com

「フレームワークとの付き合い方」というトピックがありました。
これについて。正解もないし、良い視点で主張や議論ができるほどの経験値もないと思っているのだけど、まぁ「今の時点で感じていること」を言語化して残して置くことには面白い点もあると思うので。

「どこまでフレームワークの機能を使うか」「(自身で層を敷いて)線引き、責務分離をした上で付き合った方が辛くなりにくい」という話がありました。
DDD、クリーンアーキテクチャの立場から「実装と詳細の分離」という思想と捉えて良いのかな。

その感想を、今の自分なりに。
なお、ここでは「チームで開発する」とした時の「価値」を「自分だけでなく他人も書きやすい・読みやすい・分かりやすい」こと、と定義して思考します。
それを支える要素としては、

  1. PJ全体を通じてブレがない
  2. 具体的なプラクティスやディスカッションを多く仕入れやすい

というのがあると良いな、と思います。

さて、個人的には フレームワークを使うと決めたら、骨の髄までその流儀に乗っかって、旨みを享受する方が美味しい のでは、という立場。*1

支払った学習コストに対して横展開がきくので、少なくとも短期的にはスピードが出る。新規者において、公のソース*2から得られる情報の大きさゆえの学びやすさからだし、同じ理由で、既存メンバーからの指導のしやすがあるから。
この辺りは分かりやすいから良いにしても、自分なりに疑問なのが「フレームワークにロックインされる」ことがどれくらいリスク足り得るか?について。

podcast中で「新しくバンバンwebサービスが立ち上がって行くフェーズから、数年経ったプロジェクトやコードベースをお世話する場面が増えてきた。その背景があって、DDDやクリーンアーキテクチャといった概念が注目されるようになっめきたのではないか」という観点。これは、なるほどなーと思い、賛成で。

他方で、「ドメインに関しては依存したくない」「こっちはフレームワークの機能を使わないレイヤー、というのを決めて置くとうまくいきやすい」のかな?という部分。*3

さて、自分の場合において、「今書いているコードが5年生き残った場合に、(フレームワークべったりか否かで)どっちが親切で説得力があるか」をどう考えれば良いか。

まず、自分が充分に経験を積んだアーキテクト足りえるか?は大きい気がする。要するに、「辛い体験」の経験不足。これは否定しようがないし、今はその「身の丈」で物事を考えなければいけない。
その上で、「世界中で使われているOSSの設計者やコミュニティのほうが、質の高い"良さ"を持っているはずだ」という公算が高かろうな〜と思うところで。
私が考えたデザインと、フレームワークそのものが、「5年後に生き延びていて、かつ良くメンテナンスされている」ことの期待値はどっちが高い・・?

プログラマーは、概して、その本質として「自分の力より高い次元のことを要求される」ものだよな〜とは時々思う。もちろん出来る範囲のことでしかできないのだけど、もし「もっと出来たら」もっと良いデザインや良いやり方で「正解」を出すだろうなーっていう。
そう考えると、「自分の持つ実力を出せる方法があれば、そうしたい」という欲求が生まれる。巨人の方に乗る方法があれば、そうするのが賢いと思う。

自分の中で「フレームワークにのっかり、しゃぶりつくす」というのはそのための方法論の1つ・・・そして、「他のフレームワークに移るときのコストが」という話についても、(今の自分の考えでは)「そのタイミングというのは、これまでの常識で太刀打ちできない要求の変化が起きた」というトリガーがあると想像する。
奇しくも、短いような短くないような職業プログラマ歴の中で、自分は前職と現職で1度ずつ「フルスクラッチの改修」に関わっている。その時に、既存コードの部品を流用しようとはならなかった*4。なので、「この機能を使っちゃうと後々困るかもね」という懸念で、「フレームワークのフルパワーを引き出しながら日々の業務に取り組む」メリットを殺しに行くかなぁ〜というのが、あまりイメージできないなーと。。。正確に言えば、「ここからは独自に」という線引きをするための知識・経験・センスが足りていない・・・のかな。

と、書きながら、程度問題は絶対にあるなとも思った。
それでもソフトウェア/フレームワーク以上のレイヤーで「よくある」かはまだわからないのだけど、例えばデータベースの移行はつらそうだなぁ。。
「mongoすごい!使おう!!」「スキーマレス最高!!多次元構造最高!!」「スケールしていったらつらみが・・」「乗り換えるか・・・?」とかは、一筋縄ではいかないだろうなぁ。


今の自分の武器に盲目的になることはせず、守備範囲内外へのアンテナを貼りつつ、良いもの・悪いもののどちらも正しく批判しつつ、使う道具にはリスペクトを持つ!!

というスタンスでいたい。

*1:数年後には揺り戻しが来るだろうな〜という予感はする・・あくまで、今においてはというもの。

*2:githubも、slackなどのチャットも、stackoverflowもqiitaも。「ググれば出てくる」こと。

*3:この流れで出てきた、「節度」「治安」というのは良い概念だな〜と思いました

*4:cake2 -> cake3の移行は、「同じフレームワークの移行」とは数えないのが正解な気がする・・概念等は共有されているので、キャッチアップについては下駄を履けるのだけど、コードをそのまま使えるか?は・・