大学でCとJavaを授業で学ぶ傍ら、PHPを独学して、就職したらPHPをやることになった
1社目の仕事の傍らにVuejsに出会って惚れ込んで以来、
以降4社にわたってVue.jsをメインの技術に据え続けてきた私のものの好き嫌いの話
C 学生の頃
よくわからない
Java 学生の頃
よくわからない
PHP(〜5.6, 7) 4年くらい
私の母になるかもしれなかった言語
1社目(現場1、2)と2社目はゴリゴリのPHPだった。
今でも魂にPHPが根付いているような気がする。
array_collmuns が今でも好き。
今でも触りたい気持ちはあるんだけど、ブラウザ(フロントエンド)で動かない。なむ。
Multi Framework (2年半くらい)
いわゆるオレオレフレームワークで、「基本的なポチポチゲーのゲームエンジン」の上に「派生作品としてアセットを載せ替えるアドオン」という仕組みになっていた。
当時はアドオンだけじゃなくて根底フレームワークのMultiを直さないと直せないバグとかがあってかなりつらい気持ちになったんだけど、今思うといい思い出。
この頃はライブラリを組み合わせてフレームワークを作る時代のちょっと前で、ORMapperから自作っぽかった。
このORMが、結構出来が良くて、 Hoge.getOne() で1件を、 Hoge.getWhere(“条件”)を書くと Hoge[] (配列)が返るようになっていた。(うろ覚え)
そして.join() がない。
あらかじめアプリケーションで取ってきて array_collumns() でidを抜いてきてもう一度 Fuga.getWhere(ids) しましょうというような方針だった。
曰く、「joinは人類にはまだ早い」というのがこのフレームワーク作者の言い分だったと聞いている。
実際、n+1問題が発生しないわけではなかったものの、あっちこっちのリソースに触りまくるわりにはパフォーマンスで悩む機会は少なかった気がする。
これが最適なアプローチだったかというとわからないけど、結構面白かった。
Laravel (3ヶ月くらい)
一瞬だけ紹介でコードを書いてみたのだけど、バリデーターとか暗黙のコードがRails以上に多くて、そしてRails以上に書き間違えたときのフォローがなんにもなくて辛かった思い出しかない。
触れてる期間が短すぎたのも要因だと思うので、Laravel激推しの人いたら教えて……でももうPHP書く機会あんまりないしな……
Ruby, Rails (3年くらいサブウェポン)
RubyとRailsは私のキャリアにおいて不可分なので一緒に書くことにする。
ActiveRecordは概ね好きだけど、暗黙的な規約により動いてるロジックが多すぎてちょっと苦手
あと return を書かなくてもreturnされるところと、rubocopの異常なまでの小さなメソッド・クラスへの執着で頭がおかしくなってしぬ
循環複雑度とメソッドとファイルの行数制限は標準で必要なの?
JavaScript サブウェポン3年→メイン5年くらい
私が一番好きな言語。ひょっとするとTypeScriptより好きかもしれない。
ブラウザで動くのこいつしかいないし、他に選択肢ないっていうか。
だいたいの問題が自分の手足のようになんらかの方法で解決できるのが好き
TypeScript メイン2年くらい
実はTypeScriptなら諸手を上げて賛成できるかというとそうでもない。
なんというか、私はTypeScriptをBetter JavaScriptとして使いたいんだけど、ブラウザで動くJavaみたいな書き方とか、とにかくいろいろなプログラミングパラダイムが流れ込んできてしっちゃかめっちゃかとなっており、それらのプロジェクトごとの作法に慣れる前にメンタルがすり減ってしまうところがある。
自分でプロジェクトを作るなら最高の言語だ。
VueとかReactとか
Vue.js(v2) 4年くらい
最高のライブラリ
沼といってもいい
APIドキュメントを上から下まで舐めるように読み、たまに聞いたことないけど有用そうなオプションを見つけて歓喜するなどした
Reactでコンポーネントのメモ化とか頑張らなくてもVueならよしなにやってくれるのになあと思ってみているが、Reactの人はVueなど歯牙にもかけないのだろう。まあそれならそれで。
それはそれとして、Vueを使ってる人でもReactivityのルールとして、
- 基本的にdata() でreturnされたものしかReactivityを持たない
- Reactiveのオブジェクトでもプロパティを動的に増やすと監視対象ではない(Vue.$set() でプロパティを増やした場合を除く)
- computedはreactivityを持たない変数がcomputedの算出の素材に使われても更新をトリガーしない
- Vue.observable() を使うとコンポーネントの外でもReactivityを持ったオブジェクトを作ることができい
あたりのルールがあったことに気づかずにドツボにハマっていく人がいて「あ〜〜〜」みたいな気持ちになることはそこそこあった。
この辺はVue3で解決された……のか?
Vue.js(v3) 2年くらい
script setup をプロジェクトのスタンダードにしたのは正解だったのか今でも懐疑的。
うま夫のためのプログレッシブな部分の一つだったら良かったのになあと思っている。
composition APIそのものは歓迎
Nuxt 1年+2年くらい
SSR機能って実はいらないんじゃね?
ファイルベースのオートルーティングとコンポーネントのオートロードは超便利だし、他にも色々入っててお得だし、出自的にSSR機能がなくなることはないんだけど、SSRをすることによって発生する複雑さが得られるメリット(= ファーストコンテントペイントが早くなる)に見合ってなくない?とずっと思うようになった。
もう一個のメリットとして、Botが解析しないJavaScriptの実行結果を反映させられるというものがある。
わかりやすいところで検索エンジン最適化みたいな話があるんだけど、Googleからの流入ってどうなんですかみたいに思ったり。
OGPはOGPクロール用のBotが来たらUserAgentで別のサーバーに飛ばしてAPIから OGP用のコードだけが書かれたHTMLを返すほうがシンプルなんだよねえ
そこまで考えたらほとんどのプロジェクトではSSRいらないんじゃないの、というように考えている
React
かなり意識的に触らないことにしている。
理由は宗教上の理由と思ってもらってよい。
でももう全部Reactに塗り替えられていくんだろうなと思っている
UIフレームワーク
Vuetify 2年くらい+2年くらい
UIコンポーネントライブラリセットはもう二度と使わねぇ
使うならCSSだけのライブラリだなと強く心に誓った
Tailwind 3ヶ月くらい
なんかユーティリティクラス郡多すぎない?
私はちょっと苦手
bluma 半年くらい
使い心地的にはしっくりくるんだけど、名前だけなんかちょっと恥ずかしい
Database
MySQL
普通。
でもマテリアライズド・ビューがなくてランキングの実装が死ぬほど死んだことがある。
ほかは普通。
Postgres
普通。
単独でオンプレ(VPS)にセットアップするには pg_hba.confを設定するのが死ぬほど沼でそこだけ嫌い
GraphQL
触ったときのプロジェクトの印象に引きづられてとても嫌い
私怨である自覚はある
Not Web Platform
Electron(デスクトップアプリケーション)
デスクトップアプリケーションをJavaScript(TypeScript)で書ける
Tauriをやたらと押されることがあるんだけど、私はRustを覚えたくないのでElectronがいい。
気合があればNative APIを呼ぶSwiftのプログラムを作って、Nodeから呼んでしまえばなんでもできるな!の気持ちになった。
こんなの作ったけど普通に動いてる。
https://github.com/fruitriin/taskbar
Capacitor(モバイルアプリケーション)
動作イメージとしてはElectronの代わりにCapacitorが動いているようなやつ。
アプリとしてはWebViewがそのままがドンとあって、Capacitorがhttpサーバーになってるからビルドされたhtml, js, cssファイルを表示できるらしい。このhtml, js, cssはアプリの中に置かれるので、ローカルファイルアクセスである。つまり、爆速。
ガワネイティブって遅くねー?っていうのはWebアプリを無理やりネイティブに詰め込んだせいで体験が悪いというのが実際のところなので、(言うならばSNSアプリで外部記事を読みに行ったときの遅さであって、それは遅いよね)ちゃんとモバイルネイティブ用のWebを作れば良いものが作れると思っている。
これでPush通知とかGeoLocationとかそういうネイティブAPIにもアクセスできるし、アプリストアに載せられるっていうのも魅力。
Capacitorについて調べるとIonicというUIフレームワークがでてくるんだけど、これはあくまでIonicとは特に関係がない。
なので好きなフロントエンドフレームワークで書くことができるぞ!私はもちろんVueでアプリ作った。
総論
ワタシVueが好き。
他にも色々触ったものあると思うんだけど、「アレってどうなん?感想おしえてよ」って言われないと何触ったか覚えてない