得意・苦手(技術)
得意
クラスコンポーネントの時代から使っています
mixin、HoC、Render Props、hooks の歴史的変化とそれぞれの良し悪しを把握しています
action の命名、reducer の分割、selector の利用を適切に行えます
local state と store の使い分けについて指針を持ち、人に共有できます
型安全に Redux を運用するための設計方針を持ち、人に共有できます
redux-thunk を使います( saga や observable の知見はありません )
Redux Toolkit はほぼ使ったことがないのでわかりません
「がんばる TypeScript」を好みます
いわゆる型パズルを適切に実践できます
Brand 型などのテクニックを用いて、プリミティブ型の値を安全に扱うことができます
Conditional Types や infer なども日常的に使用します
noImplicitAny: false な状況から strict: true への移行ができます
Compiler API を用いて TypeScript の AST を操作することができます
TypeScript Plugin を用いたツールを実装したことがあります
SVG
通常の DOM で表現の難しい UI を、React + SVG で実装することができます
SVG の文字( <text> )を resizable なコンポーネントとして実装することができます
複雑GUI
draggable の処理をライブラリ無しで作れ、と言われて多分できます
レガシーフロントエンドの良い倒し方
普通の人よりも Rails や PHP のフロントエンド改善に詳しい自信があります
なにもないレガシー環境に生の webpack や vite を導入しろと言われて、できます
Rails で Webpacker や Asset Pipeline への依存を剥がせと言われて、できます
prototype を使ったオブジェクト指向、クロージャ、class および this の性質の一般的な理解を持ちます
DOM API( React 環境でも状況に応じて DOM API を使用することができます )
非同期処理
古い callback ライブラリを適切に Promise でラップして利用できます
async / await はもちろん、Promise.all / race / allSettled を適切に利用できます
再帰を使ったポーリングを実装したり、EventEmitter を用いて簡易 Observer を実装したりできます
Rx はあんまりわかりません。Subject / Observer / Observable というのがあるのは知っています
BEM、CSS Modules 辺りを普通に運用できます
styled-components の使い方を理解しています
SCSS、PostCSS、Stylus はわかります。dart-sass の新機能もそれなりに把握しています。
CSSフレームワークは一般的に好きではありません( Bootstrap は大の苦手です )
最近は Tailwind.css を好んで使用します
Headless CMS
本家の npm モジュールや gem に何件かの PR を送ってマージされています
フロントエンド環境構築
webpack.config.js をゼロから書き、現場に合わせて適切にプラグインや loader を選択できます
…と思っていましたが2021年ぐらいからwebpackの設定を書く機会が減ったのでできなくなってそうです
tsconfig、prettier、eslint、stylelint について自分なりに意見を持ち、適切に導入ができます
npm パッケージの開発に必要な知識があまり足りてない自覚があります( rollup は常に雰囲気で使っています )
得意ではないができる
v9 ぐらいからぼちぼち使っています
SSR / SSG を使い分けたり、逆にクライアントサイドでレンダリングすべき箇所の判断ができます
仕事で Vercel を使用しないことが多いので、ISR 他 Vercel に関連する機能はどちらかというと疎いです
基本的な MVC に則った開発ができます
「M と C は好きだが V が嫌い」というスタンスです
(と言っても、ほとんど全てのサーバーサイドフレームワークについてこういう意見を持っていますが)
OpenAPI スキーマのある #REST API を作ったりできます graphql-ruby は趣味で軽く触ったことがある程度です
Fat Model の解消について、自分なりに意見を持って取り組むことができます
適切に PORO、Form Object、Validator などを利用できます
Service や Interactor と呼ぶものについてはよく分かっていません
「一周回って全部 app/models 以下でいいんじゃないか」という思想でやっています
ActiveRecord のクエリチューニングはあまり詳しくありません
雰囲気で includes / preload を使う、ループ内で呼ばないことで n + 1 を避けるは普通にできますが、そのくらいです
エコシステムについての知識はあまりありません
Rails の標準機能に沿ったことはそこそこやれますが、こういうときにこの gem 入れよう!といった意見をあまり持っていません。
たとえば devise と sorcery どっちが良い?とか、そういう話はちっともできません
1.x 系、2.x 系の時代に経験があります
SFC を普通に設計・実装ができます
Vuex の設計も通常程度にはできます(が、過剰に Redux 風に書いて失敗したことがあるのでどうだろう…)
Nuxt はほとんど知りません
生 PHP および Slim Framework(v2、v3 の時代)あたりは経験があります
著名フレームワーク( Laravel や CakePHP )の経験はありません
trait、interface、マジックメソッドなどを適切に利用できます
express を普通に使用することができます
NestJS は趣味で軽くさわった程度です
ORM は prisma を趣味でさわった程度です
react-dom/server で SSR するアプリケーションを生 express でやれと言われて、おそらくできます
スクリプトとしての用途( gulp、yargs )でも利用できます
実は苦手
React Router
実はほとんど使ったことがありません
Next.js を使うか、さもなければ Universal Router を使うことが多かったため、縁がありませんでした
クラウドサービス、サーバーレスの知見
オンプレサーバーの業務が長く、AWS や GCP の技術選定が非常に弱い自覚があります
個人開発で Firebase の周辺を使う関係上、AWS よりは GCP の方が土地勘があると思います
PaaS / IaaS 関連は heroku、Vercel、Netlify 以外あまりわかりません
認証・認可
PaaS 知見の弱さも相まって、ログインのあるアプリケーションを一から作るのが少し苦手です
Firebase Authentication 以外の方法でログインのあるアプリケーションを作ることができません
詳しい人のサポートがあれば Rails + devise も行けるかもしれません
Twitter 連携をしてツイートを投稿する機能とかは作ったことあります
PHP なら twitteroauth、Ruby なら omniauth 、Node.js なら Passport を触ったことはあります
Linux 周辺
サーバーをいじる以外の用途(メイン PC など)で Linux を使ったことがありません
Linux コマンド、シェルスクリプトは毎回ググっており、書き捨てのスクリプトは Ruby か node.js が必要になります
vim も emacs もほとんど使えません。全部 VSCode。
canvas、CSS アニメーション
SVG できるなら得意でしょ?と思われることがありますが、そんなにです
誰かが予めデザインしてくれてる状況なら使えます
E2E テスト
あんまり強い意見を持っていません
Elm
Signal とかの古い時代に概念に触れましたが、今の状況は詳しく知りません
The Elm Architecture について、Redux との共通点と差異を大まかに把握しています
本格的に何かを作ったり運用した経験はありません
CDN / エッジサイドコンピューティング
フロントエンドの未来として CDN Worker やエッジサイドの JS に興味はありますが、詳しくありません
NoSQL( Firestore、DynamoDB、MongoDB… )
Firestore は数回使ったことがあり、非正規化に基づく設計も実践したことがありますが、あまり自信を持っていません
MongoDB は数年前に mongoose を使用して以来あまり知見がありません
DynamoDB はそもそも触ったことがありません
趣味で apollo-server を Nest.js や Next.js 内で利用したことがあります
apollo-codegen を用いた型定義の生成のやり方と、そのメリットを理解しています
fragment をどういうときに使うかは知ってるつもりですがちゃんと使った経験がありません
ちゃんとした運用、あるいは federation をどのように使うかなどは理解していません
数学
大学は文系受験しており、高校で数ⅢCの範囲を学んでいません
複雑GUIの影響で回転行列や線形代数を扱えるように見えているかもしれませんが、社会人になってから学んでいます
PWA
本格運用の経験はありません
ServiceWorker にできることはだいたい理解してると思いますが実践したことがありません
AMP
本格運用の経験はありません
Rust
The Rust Programming Language を一度読みました、それ以上のことはありません
WebAssembly
触ったことがありません
WebSocket
地味に触ったことがありません