Murga

個人的に言いたいコト・主張・気持ち。

Gulp 依存を止めたつもりで npm 依存しているだけ

フロントエンドエンジニアの教科書

フロントエンドエンジニアの教科書

Gulp をグローバルインストールさせて、「gulp build」みたいなタスクを叩くのは止めて、

Gulp はローカルインストールしておいて package.json にタスクを定義しておいて、npm run build と叩くと裏で gulp build が呼ばれるのがベストだ!的な。

Gulp に依存していること自体は変わらないし、結局コレも npm run がパッケージ管理しているモノの PATH をいかに解決するかという動きに依存している気がしてしまう。

さらには Gulp 止めようっつって npm run に CLI のワンライナーを連ねて、でもそれだと限界があったり OS 依存があるから、って rimraf・mkdirp・cpx 入れてみたり、better-npm-run・npm-run-all 使ってみたり、更には長いからって Shell スクリプト呼び出しに変えたりって、オメーそれ Gulp 使わないようにするために逆に無理してんだろがアァン!?的な。

自分は npm-scripts に「処理」を書くのは最適解だとは思えない。だいたい package.json、つまり JSON ファイルは「データを定義する」用途だと思って、そこに「処理」が混じるのは意味が分からない。処理は「スクリプト (台本)」として書くべきだろうと。

だから自分は、ローカルインストールさせている Gulp を呼ぶための gulp タスクを npm-scripts として書くのが限度じゃないかなと思う。別に Gulp 信仰ってワケではないので、どの環境でも動くならシェルスクリプトでもいいんだけど、Gulp は「スクリプト」としてタスクを繋いでいき、条件分岐とかもできるのが良いなと思っている。その点 Webpack は webpack.config.js は連想配列で要は JSON チックに書くので、タスクの「定義」でしかないよなぁと思うので。

まぁいずれにしても色んな技術に依存していることは変わらず、「npm-scripts だからイイネ」ってことはないと思う。もはや生の HTML・CSS・JS をそのまま書くフロントエンド開発もなかなかなくて、何でもかんでもトランスパイルしたがって、でもそれって JavaScript がデキるっていうより TypeScript が分かってるって解釈にならない?みたいな。生の JavaScript でどうやるのか分からず、そういう環境がないと開発ができない、ってなっちゃうのってなんかダセーなって思う。自分が生の HTML・CSS・JS を書くしかなかった時代からそうしてきているから、トランスパイルする言語が逆にダルくて仕方ない。書いたら書いた瞬間に、ライブリロードとかなしに画面に出るのがフロントエンドちゃうんかいみたいな気もするし、そういうモノがなくたって自分が書けると苦労だとも思わないし、逆に「便利なツールがないと作れない」みたいなこと言ってるヤツの方がダルいなーと思ってしまう。

なんだろう言いたいこと伝わってる?というか自分は何が言いたくて、どうなったら気が済むんだろう?


逆にどういう感じになったら気が済むのかというと、個人的には「トランスパイル言語が不要になって、ビルドツールの一切が要らなくなったらいいんじゃないか」と思う。

最近はブラウザごとの環境差異がほとんどなくなってきたことだし、ES2015 もトランスパイル不要で何も気にせず動くようになったら楽だろう。ついでに JS で型定義したい人のために型定義したければできるようにすうr構文ができたらいいんじゃないか?

JS は誤りがあればスクリプトエラーになるからまだいいとして、HTML・CSS はどんなに無茶苦茶書いても、「エラーになって画面表示がされなくなる」みたいな挙動にはなかなかならない。タグのネスト構造が狂っていたり、無効なプロパティを書いていたりしても、ブラウザがかなり甘く見て修正してくれちゃうから、「間違ってる?でもコレで動いてるよ?」とか言い出すバカエンジニアが増える。

構文エラーとかがあったときに Sleep する、JS の開発者ツールの挙動みたいな感じで、HTML も CSS も、おかしな構文があったらブラウザがその場で Sleep みたいになって「パースできませんでした」ってエラーにしてくれたらいいのに、そしたら汚いコードは世から消えるし、汚いコードを書くバカも生存できなくなっていなくなる。「ブラウザで表示できること」が、現時点でいう「Lint とトランスパイルが通る」になれば、ビルドツールも Linter もいちいち自前で導入しなくて済むようになると思う。

もう頻繁にバージョンアップするツール群についていくのはダルいし、生の HTML・CSS・JS を書かない開発はそもそも好きじゃない。直接の成果物を作れていない感覚が拭えない。

とはいえ生の言語の不便なところとか曖昧なところとかも分かるので、トランスパイル言語の良いところは言語仕様として取り込んでもらいつつ、Lint やコンパイラのチェッカに頼っていた人向けに曖昧な解釈を許さないブラウザが主流になってくれたらいいんじゃないかとか思った。