• TypeScript — 型を厳しくする tsconfig、不正な状態を作れない型設計、境界での実行時検証
  • TypeScript × Jest — テストと型チェックを分けて @swc/jest と tsc —noEmit、jest.config.ts と paths の同期、テスト用 tsconfig、コロケーションと AAA、jest.mocked と jest.Mocked で型を保つモック、spyOn と clearMocks・restoreMocks、モックは外部境界だけ、ファクトリと satisfies、as any を避ける、resolves・rejects に await、expect.assertions、フェイクタイマー、目的に合ったマッチャー、スナップショットは控えめに、型付きのカスタムマッチャー、it.each、後片付けと —detectOpenHandles、eslint-plugin-jest、CI での並列・キャッシュ・シャーディング、アンチパターン、チェックリスト
  • TypeScript × Vitest — Vitest 5 前提、globals を使わず明示 import、型チェックは tsc —noEmit と —typecheck で別に、clearMocks の既定化と restoreMocks・unstubEnvs、AAA と振る舞いのテスト、it.each・it.for、目的に合ったマッチャー、resolves・rejects に await と expect.poll、vi.fn の型付け、vi.hoisted と vi.mocked、vi.when、フェイクタイマー、MSW、ファクトリと test.extend のフィクスチャ、projects で環境を分ける、expectTypeOf で型のテスト、スナップショットは小さく、独立性と shuffle、プールと concurrent・shard、v8 カバレッジ、CI と .vitest/、@vitest/eslint-plugin、移行チェックリスト
  • Node.js (TypeScript) — LTS と ESM、機能単位の構成と app.ts・server.ts の分離、厳格な tsconfig(strict・noUncheckedIndexedAccess・verbatimModuleSyntax)、any でなく unknown、判別可能なユニオンと網羅性チェック、satisfies とブランド型、floating promise を出さず Promise.all で並列化、AbortSignal.timeout、イベントループをブロックしない、cause で連鎖するエラーと unhandledRejection・グレースフルシャットダウン、起動時に検証する設定と —env-file、境界でのスキーマ検証、構造化ログと AsyncLocalStorage、セキュリティ、ストリームと pipeline、テスト、typescript-eslint、依存は最小限に、マルチステージビルドと node で直接起動、チェックリスト
  • Ruby — 命名とスタイル、Enumerable とガード節、Data とパターンマッチ、例外、依存とセキュリティ
  • Rails — 規約どおりに作り、整合性は DB で守り、副作用は明示した場所に置き、計測してから速くする
  • Rails の DB 設計 — 整合性はバリデーションと DB 制約の両方で守る、後から変えにくい主キーの型・テーブル分割・関連の向きは最初に慎重に、命名規約と真偽値より日時カラム、bigint 自動採番を基本に外部公開なら UUID v7・ULID か public_id、金額に float を使わない、真偽値は null: false と default、jsonb に検索・JOIN の値を入れない、timestamptz、原則 null: false、外部キー制約と on_delete・dependent の対応、uniqueness はユニークインデックスと組み合わせ citext や lower で大文字小文字、チェック制約、外部キーと頻出条件にインデックスを付け複合は等価条件の列を先に、部分インデックス、付けすぎない、多対多は has_many :through、inverse_of と dependent、STI と delegated_type、ポリモーフィック関連は外部キー制約が張れない、enum はハッシュで値を明示し validate: true、論理削除は本当に必要か問い default_scope を避ける、第 3 正規形を基本に counter_cache とスナップショット、トランザクション内は例外を出すメソッドで外部 API を呼ばない、楽観ロックと悲観ロック、create_or_find_by、update_counters でアトミックに、ロールバックできるマイグレーションとモデルクラスを使わない、スキーマ変更とデータ移行を分ける、strong_migrations と concurrently・ignored_columns・validate: false による安全な手順、N+1 と strict_loading、find_each と insert_all、explain、マルチ DB、structure.sql と comment:、設計レビューのチェックリスト
  • Rails × RSpec — 振る舞いをテストし実装をテストしない、読みやすさは DRY より優先、ロジックは Model・Service で網羅し System Spec は主要導線に絞る、ランダム順と verify_partial_doubles、describe は対象で context は条件、let を基本に let! は必要なときだけ、名前付き subject、Mystery Guest を避ける、ファクトリは最小限で trait と sequence、build_stubbed・build・create の使い分け、shoulda-matchers、Controller Spec でなく Request Spec で認証・認可の境界を必ず、System Spec は rack_test を既定に JS だけ Playwright、sleep を使わず待機マッチャ、モックは外部境界だけで instance_double と have_received、allow_any_instance_of を避ける、travel_to と freeze_time、WebMock で外部通信を禁止、shared_examples は共通化しすぎない、build と test-prof で速くする、Flaky を retry で隠さない、rubocop-rspec と SimpleCov のブランチカバレッジ、アンチパターン、チェックリスト
  • Rails × Vue — 迷ったら Inertia で既存アプリにはアイランド型、完全分離は API を他クライアントと共有するときだけ、Hotwire で足りる画面は Vue にしない、vite_rails で importmap は SFC を扱えない、entrypoints にはエントリーだけ、data-props は to_json で渡し Turbo では unmount、Inertia の props は必要なカラムだけで inertia_share と useForm・lazy props、API 分離は rack-cors と Cookie セッションで localStorage にトークンを置かない、script setup と TypeScript、composable、サーバーの状態は props が持ち Pinia に複製しない、CSRF トークン、シリアライザーとキー名の規約、js-routes、バリデーションの正はサーバー、N+1 と bullet、Vitest と request spec、vue-tsc を CI に、assets:precompile と Node.js、アンチパターン
  • Stimulus — 状態は DOM に持たせサーバー描画が主役、Progressive Enhancement、ページ単位でなく振る舞い単位の小さなコントローラと kebab-case の識別子、querySelector でなく Targets と has で存在確認・Target callbacks、設定と状態は Values で xxxValueChanged で UI を更新、クラス名は CSS Classes、Action Options・キーボードフィルタ・@window と @document で解除も自動・Action Parameters、connect で始めたものは disconnect で片付け冪等に、連携は dispatch のイベント優先で Outlets は次善、Turbo のキャッシュと before-cache・再接続、eagerLoad と lazyLoad、TypeScript の declare、システムテスト中心、アンチパターン、チェックリスト
  • PHP — PHP 8.4・8.5 前提、strict_types と全箇所の型、配列より readonly の DTO、コンストラクタプロモーション・Enum・match・プロパティフックと非対称可視性・パイプ演算子と clone with、DI とデフォルト final、イミュータブルと DateTimeImmutable・PSR-20、ドメイン例外と previous、@ を使わない、プリペアドステートメントとホワイトリスト、出力エスケープ、password_hash、random_bytes・CSRF・セッション、composer.lock と composer audit、PHPUnit・Pest と PHPStan の baseline、OPcache とジェネレーター、本番の php.ini、アンチパターン、チェックリスト
  • Laravel — 規約に従い Fat Controller を避ける、コントローラーは HTTP の入出力だけで Form Request・Action・Policy・API Resource に分ける、Repository は必要なときだけ、リソースルートと名前付きルート・ルートモデルバインディング、ルートにクロージャを書かない、validated() だけを保存に渡す、$fillable、N+1 と shouldBeStrict、chunkById と lazy、スコープとキャスト・Enum、生 SQL はバインディング、本番適用後のマイグレーションは編集しない、Policy をコントローラー・ルート・Blade で一貫して使う、Sanctum とレートリミット、env() は config の中だけ、キューは冪等に tries・backoff と afterCommit、Horizon、キャッシュコマンドと OPcache、セキュリティ、Pest の Feature Test と Fake、Pint・Larastan・Rector、命名規則、デプロイと /up、チェックリスト
  • Rails vs Laravel — 機能の有無の差はほぼなく、違いは置き場所・設計思想・公式エコシステムの広さ・フロントエンドの方向性、Rails 8.1 と Laravel 13 を分野ごとに本体・公式・3rd・有償で比較、Rails が本体で持つ Action Text・Action Mailbox・Active Storage・Job Continuations・複合主キー・Kamal、Laravel が本体・公式で持つ Notifications・ジョブのバッチ・Gate と Policy・パスキー・AI SDK・JSON:API・Telescope と Pulse、バリデーションはモデルか Form Request か、DI コンテナの有無、常駐プロセスか share-nothing か、選定はフロントエンド・デプロイの方針とチームの言語スキルで決まる
  • Go — シンプルさと明示性、ゼロ値を有用に、早期リターン、gofmt・go vet・staticcheck・golangci-lint・govulncheck、MixedCaps と頭字語・stutter を避ける・Get を付けない、機能単位のパッケージと internal/、小さく始めるプロジェクト構成、エラーは %w でラップし errors.Is・errors.As で判定、ログか return のどちらか一方、panic はバグだけ、インターフェースは使う側で小さく定義し Accept interfaces, return structs、Functional Options とフィールド名付きリテラル、レシーバを混在させない、防御的コピー、goroutine の終了手段と errgroup、Mutex と atomic、チャネルは送信側が close し ctx.Done() を監視、context は第1引数で構造体に保持しない、ジェネリクスはまず slices・maps・cmp、テーブル駆動テストと t.Helper・t.Cleanup、pprof で計測してから最適化、log/slog、go mod tidy と tool ディレクティブ、アンチパターン、チェックリスト
  • Python — PEP 8 と ruff format・ruff check、絶対 import と import の順序、snake_case・PascalCase・is_ で始める真偽値・組み込み名を使わない、list[str] と X | None のモダンな型ヒントと Protocol・Literal・Final、引数は抽象型で戻り値は具体型、mypy・pyright を CI で、小さな関数、ミュータブルなデフォルト引数を使わない、キーワード専用引数、dataclass の frozen と slots、継承よりコンポジション、内包表記とジェネレータ、enumerate と zip(strict=True)、f-string と pathlib、構造的パターンマッチ、EAFP、具体的な例外と raise from、独自例外の階層、with と encoding の明示、src レイアウトと pyproject.toml、uv とロックファイル、pytest の parametrize とフィクスチャ、logging は %s で渡しライブラリでハンドラを設定しない、cProfile で計測してから最適化とデータ構造の選択、eval・pickle・shell=True を避けプレースホルダ・yaml.safe_load・secrets、docstring とコメントは「なぜ」、pre-commit と pip-audit、アンチパターン
  • Vue — Composition API と script setup、型付きの props と defineModel、ref と computed、composable、Pinia と Vue Router、セキュリティ、テスト
  • React — React 19 系と React Compiler 前提、Create React App でなくフレームワークか Vite、純粋なコンポーネントと合成、コンポーネント内で定義しない、安定した key と key でのリセット、ref は props で Context は value 直書き、state は最小限で派生値はレンダー中に計算、置き場所は状態の種類で選ぶ、イミュータブルな更新、矛盾しない status、useEffect は外部システムとの同期だけでクリーンアップと依存配列を偽らず useEffectEvent、useSyncExternalStore、useEffect で fetch せず TanStack Query や Server Components、use client は葉、Suspense と use、ウォーターフォールを避ける、Error Boundary、useActionState・useFormStatus・useOptimistic とサーバー側バリデーション、計測してから最適化し手動メモ化は React Compiler に任せる、Activity、ComponentProps と判別可能なユニオン、スタイリングの統一とヘッドレスコンポーネント、アクセシビリティ、振る舞いのテストと getByRole・userEvent、feature 単位の構成、eslint-plugin-react-hooks と StrictMode、アンチパターン
  • Next.js — Next.js 16 の App Router。use client は葉だけ、Server Component での取得、use cache、Server Action を公開 API として守る、proxy.ts、パッチの適用
  • Rails vs Next.js — 作れるものはほぼ同じで出発点が逆、Rails はバックエンドの部品が公式で揃い Next.js は UI とレンダリングが強くバックエンドはライブラリを組み合わせる、Rails 8.1 と Next.js 16 の機能ごとの対応表、ジョブ・WebSocket など常駐処理は Rails・リッチな UI と SSG・型安全・React Native は Next.js が有利、開発速度と一貫性・人材・ベンダー依存、ユースケース別のおすすめと Rails(API)+ Next.js や Inertia.js の組み合わせ
  • Stimulus / Vue / React の使い分け — 「HTML をどこで作るか」で決め、サーバーが作るなら Stimulus・ブラウザが作るなら Vue か React、早見表と判断軸ごとの比較、向き不向きと「コントローラ間で状態を同期し始めたら島を検討」のサイン、Stimulus 単体から始め複雑なウィジェットだけ Vue・React のアイランドにして connect でマウント・disconnect でアンマウント、同じ画面に Vue と React を混ぜない、とりあえず React で CRUD 画面まで SPA 化しない、選定フローチャートとチェックリスト