カラクリサイクル

『輝かしい青春』なんて失かった人の雑記

フルスタックよりも、シングルタスクの方が良いんじゃないか、という話

概要: フルスタックフレームワークよりも、シングルタスク


いつもならこんにちま!で始める所ですが、 今日はまじめに語りたいので、ユヤタンのパロディは封印しておきます。

本日の議題: フルスタック or シングルタスク

僕は思うのですが、Webアプリケーションフレームワークとか、 あるいはO/R Mapperとかについては、 機能満載のフルスタックフレームワークを使うより、機能はしぼられていても、 拡張がしやすいシングルタスクフレームワークを使った方がいいんじゃないか、 と思ってます。

なんでかっていうと、フルスタックフレームワークは、 型にハマった作業を行うときにはとても役に立つと思うのですが、 型から外れた作業とか、あるいはちょっと変則的な技を使おうとすると、 とたんコストが跳ね上がるように思うからです。

また、フルスタックフレームワークは、 モノによりますが速度面とか、リソース消費面でも、 シングルタスクフレームワークに劣るコトもあり、 メモリとかCPUをじゃぶじゃぶ使える環境なら良いかもしれませんが、 安VPSしか使えんとか、あるいは共有サーバでCGIという地獄とか、 そういったリソースの省エネが要求される環境では、 使いづらいと思うのです。

あと、一番重要というか、これからフレームワークを選ぶプログラマーに重要なのは、 そのフレームワークの学習コストだと思います。

まず、大抵のフルスタックフレームワークは、そのフレームワーク流の、 流儀というか作法みたいなモンがあり、それを学習するのに、コストがかかる、 というのは誰しも納得が行くことだと思います。

で、僕みたいな、プロフェッショナル開発童貞なんかは、 完全な独学でプログラミングをやってきて、 プログラマーなら知っておくべきデザインパターンとか、 あるいはデータモデリングの方法論、 大規模開発における負荷分散とか、 そういったプロフェッショナルな領域というのが、さっぱりさっちゃんなワケです。

で、そういった状態で、フルスタックフレームワークを使おうとすると、 大抵フレームワークに振り回されて挫折します。というか挫折しました。 CatalystとかDjangoとか無理だった。DBIx::Classとか暗号文!

んで、その分シングルタスクなフレームワークは、実装がシンプルで、 やれることも少ないけど迷わずに済み、またリソースも省エネ、 という感じで、非常に使いやすい感じではあります。

もっとも、シングルタスクフレームワークは、シングルタスクな分、 ちょっとしたコードでも追加コードを書かなきゃいけなかったり、 あるいは複数人で作業する際にクオリティーが一定しないとか、 あるいはライブラリ自体が枯れてなくて、 企業ユースのプロダクション環境では使えない! とか、一応、問題となる点がない訳では無いと思います。

まあでも、本番環境に裂けるリソースが少ない、 個人とか小規模のスタートアップとかだと、しがらみも少ない分、 そういったシングルタスクフレームワークを使うのもありなんじゃないかなー、 と思います。

もう一個の議題: ブラックボックス化はアリかナシか

で、このフルスタック or シングルタスク問題(今名付けた)に関連することとして、 フレームワークの内部処理が、 ブラックボックスとなる問題について考えを書いていくと、 僕は、

  1. コンポーネント単位(モデルとかビューとか)でのブラックボックス化は推奨
  2. アプリケーション全体が暗号文化することは絶対に避けるべき

と思ってます。

で、1.コンポーネント単位のブラックボックス化は推奨、というのは、 モデルとかビューの場合、場合によっては、最初の作業時からの要求が変わり、 MySQLの変わりにMongoDB使いたい! とか、あるいは、 テンプレートエンジンをC拡張を使った高速なモノに切り替えたい! と言ったような場合、コンポーネントの内部変更に伴って、 コントローラー側で使うAPIもかわってしまう、というコトを避けるために、 積極的にブラックボックス化していくべきではないかなーと僕は思います。

逆に、フレームワークに振り回されて、アプリケーションでのコード全体が、 暗号文のような、何が何だかわからない……、という状態になるのは、 絶対に避けなければならない、と僕は思います。

と、言うのも、自分の書いてるコードが暗号文化すると、 後で修正するときにめっちゃ困りますし、また、企業内とかで、 コードの引き継ぎとかする際に、後任の人がウボアします。

なんで僕は、極力何やってるかわからなくなるようなフレームワークは、 あんまり使わない方が良いんじゃないかなーと思います。

議題終わり

という感じで、以上が今日僕が朝っぱらになんとなくぼーっと考えていた、 アプリケーションとかでのフレームワークについて考えていたコトです。 ま、こうやって考えを書いてみると、結構スッキリするなー。

で、まあ僕は本格的な開発というか、 いわゆるジョブとしてプログラミングをしたことがないので、 実際に企業に勤めてるプログラマーの方だと、 いや、そのりくつはおかしいとか、色々変な所があるかもしれません。

まあでも、上記のコトは、僕が2006年からプログラミングをやってきて、 ようやく理解しつつあることなので、まああんまり外れてはいないかなー、 とは思いますが。


というような感じで、今日はプログラミングに関係する考え事をまとめて見ました。

まあそもなんでこんなコトしてるかっていうと、最近ブログのアクセスが減ってきて、 もうそろそろブログの内容を自分の得意分野にピボットした方が良いかなー、 なんて思ったので、自分の意見を書いてみた次第です。

っていうか僕、最近、プログラミング系記事を書いても、 あんまりぱっとしないというか、自分で読んでもわかりづらい記事しか書けてないので、 やっぱりプログラミング本体の内容より、 それにまつわる考え方なんかを発信していった方が良いのかなー、なんて思ってます。

まあこのブログ、空繰再繰(カラクリサイクル)は、 一応Tech系のコトを中心に、とか考えているので、 今後もそれに関連する今日のような記事を書いていきたいと思います。

というワケで以上で、本日は筆を置きたいとおもいまふ。

ノシ