diff --git a/articles/biome-vs-eslint-prettier-2025.md b/articles/biome-vs-eslint-prettier-2025.md new file mode 100644 index 0000000000..e41464feeb --- /dev/null +++ b/articles/biome-vs-eslint-prettier-2025.md @@ -0,0 +1,30 @@ +--- +title: 'ESLint, prettier の代替として見たときの Biome についての感想メモ' +emoji: '🐈' +type: 'tech' # tech: 技術記事 / idea: アイデア +topics: ['biome', 'eslint', 'prettier', 'typescript'] +published: false +--- + +## Biome のメリット(ユーザー目線) + +- 速度: + - BiomeはRustで書かれており、非常に高速に動作する。 +- 統合性: + - Biome は、リンター、フォーマッター、そして将来的にコンパイラなど、複数の機能を統合している。これにより、ツール間の互換性問題を減らし、開発体験を向上させることができる。 +- 設定の簡素化: + - Biome は、デフォルト設定が優れており、多くのプロジェクトで追加設定なしに利用できる。 + - biome.json でlint ルール等に補完が効くため記述体験が良い。 +- より厳密な構文解析: + - BiomeのパーサはPrettierのパーサよりも厳密に構文を解析する。そのため、より正確にエラーを検出し、コードを整形できる +- ESLint, prettier との比較 + - 後発であるため prettier や ESLint の色々な問題を解決しており将来性がある + +prettier plugin recommended config などを超えて ESLint の rule option をがっつり定義したものと比べると(開発思想上納得できるものの)カスタマイズできる余地が少なく機能が現状まだ劣るので使いづらい。 + +## 執筆時点(2025年2月24日)時点での筆者の結論 + +ESLint + prettier の方がコードの品質を保つ事に関しては現状 Biome より高機能であるため、当分は実行が遅くても ESLint + prettier を使うことになりそうです。 +以前 [ESLint を使い倒す(おすすめルール紹介)](https://zenn.dev/noshiro_piko/articles/take-full-advantage-of-typescript-eslint) という記事で様々な ESLint ルールを紹介しましたが、これらの中には Biome にはまだ実装されていないものや設定が現状多く存在します。既に主要な ESLint plugin から移植済みの lint ルールであっても option が削られているケースも確認しており(どれだったか思い出したら書き足します🙇)、もしかしたらこれが意図的な場合一部の option は今後も追加されないかもしれません。 + +Biome の基本設定で足りないところを、重複しないように特定のルール設定だけ ON にした ESLint と prettier を併用して補う、という使い方も一応可能ではありますが、ツールの統合・設定の簡素化というメリットはむしろ確実に悪化してしまう上に速度面で得をするのかすら怪しいため、あまり得策とは言えないと思われます。 diff --git a/articles/frontend-frameworks-survey.md b/articles/frontend-frameworks-survey.md new file mode 100644 index 0000000000..7f169ac030 --- /dev/null +++ b/articles/frontend-frameworks-survey.md @@ -0,0 +1,752 @@ +--- +title: '[WIP] ウェブフロントエンドフレームワーク Survey(加筆予定)' +emoji: '🐈' +type: 'tech' # tech: 技術記事 / idea: アイデア +topics: ['javascript', 'typescript', 'react', 'frontend', 'spa'] +published: false +--- + +:::message +なるべく気を付けますが、自分はいずれのフレームワークについてもその開発者レベルで実装の詳細を熟知しているわけではありませんので、不正確になりうる点はご了承ください。誤りがあればぜひコメント欄でご指摘ください。 +::: + +## 今回取り上げたフレームワーク・ライブラリとその理由(使用時期) + +- 業務でもプライベートでも使用経験があるもの + - [React](https://react.dev/) (2019年頃~現在) + - [Angular](https://angular.dev/) (v2) (2017年~2018年頃、2020~2022年頃) +- プライベートで使用経験があるもの +- Vanilla JS, jQuery(2015年?~2017年頃) + - [Preact](https://preactjs.com/) (2021年頃~現在) + - [Solid](https://www.solidjs.com/) (2021年頃) +- 名前は元から知っていたが少ししか書いたことがないもの + - [Svelte](https://svelte.jp/) + - [Vue](https://vuejs.org/) + - [Elm](https://elm-lang.org/) + - [PureScript](https://www.purescript.org/) + - [ReScript](https://rescript-lang.org/) +- Rust (WebAssembly) を活用するタイプの SPA フレームワークも比較したいため追加 + - [DIOXUS](https://dioxuslabs.com/) + - [Yew](https://yew.rs/) + - https://github.com/flosse/rust-web-framework-comparison により詳しい比較あり +- 今回 SPA フレームワーク調査中に存在を知ったもの + - [Inferno](https://www.infernojs.org/) + - [Ember](https://emberjs.com/) + - [Lit](https://lit.dev/) + - State of JS 2024 の top 10 から + - [Qwik](https://qwik.dev/) + - [Stencil](https://stenciljs.com/) + - [HTMX](https://htmx.org/) + +## State of JS + +https://2024.stateofjs.com/ja-JP/libraries/front-end-frameworks/ + +## 比較表 + +| | 使用する言語 | View の記述言語 | レンダリング方式 | 登場時期(年) | 特徴 | +| :--------- | :--------------------- | :-------------------------- | :--------------------------------------------------- | :------------- | :------------------------------------------------------------------------------------ | +| React | JavaScript, TypeScript | JSX | 仮想DOM | 2013 | 関数コンポーネント、hooks | +| Preact | JavaScript, TypeScript | JSX | 仮想DOM | 2015 | 関数コンポーネント、hooks、軽量 | +| Inferno | JavaScript, TypeScript | JSX | 仮想DOM | 2016 | 最適化された仮想DOM実装によりハイパフォーマンス | +| Solid | JavaScript, TypeScript | JSX | fine-grainedリアクティビティ | 2019 | 仮想DOMを使わず独自のリアクティヴシステムを提供、ハイパフォーマンス・省バンドルサイズ | +| Svelte | JavaScript, TypeScript | Svelte 構文 | | 2016 | コンパイル時にコードを最適化するフレームワーク | +| Vue | JavaScript, TypeScript | JSX or テンプレート構文 | 仮想DOM | 2014 | テンプレート用の記法でデータバインディングを記述する | +| Angular | JavaScript, TypeScript | テンプレート構文 | Incremental DOM | 2009 | テンプレート用の記法でデータバインディングを記述する | +| Ember | JavaScript, TypeScript | テンプレート構文 | Glimmer | 2011 | | +| Lit | JavaScript, TypeScript | TypeScript デコレーターなど | Web Componentsの更新APIを直接利用 | 2019年頃? | Web components を記述するための軽量ライブラリ | +| Stencil | JavaScript, TypeScript | JSX | Web Componentsの更新APIを直接利用 | 2017年 | Web Components をベースにしたコンパイラ | +| Qwik | JavaScript, TypeScript | JSX | Resumability & パーシャルハイドレーション | 2021年 | SSR との親和性を重視した設計により、高速なロードとインタラクティブ性を両立させる | +| Elm | Elm | Elm | 仮想DOM の最適化版 | 2012 | 静的型付けの純粋関数型プログラミング言語 | +| PureScript | PureScript | PureScript 独自構文 | 仮想DOM の最適化版 | 2014 | 静的型付けの純粋関数型プログラミング言語、Haskell の影響を強く受けた言語 | +| ReScript | ReScript | JSX or ReasonML | | 2020 | OCamlから派生した言語 | +| HTMX | HTMX, JavaScript | HTMX | サーバーサイドでHTMLを生成し、ブラウザで部分的な更新 | 2020年 | HTMLの拡張構文、JavaScript をほとんど書かずに動的な Web アプリケーションを開発できる | +| Yew | Rust, WebAssembly | | 仮想DOM に類似する最適化された差分検出システム | 2018年頃? | Rust で記述 | + +## 各フレームワークの特徴 + +### [React](https://react.dev/), [Preact](https://preactjs.com/) + +```tsx +import * as React from 'react'; + +export const Counter = () => { + const [count, setCount] = React.useState(0); + + const increment = () => { + setCount((c) => c + 1); + }; + + return ( +
{`カウント : ${count}`}
+ +カウント: {{ count }}
+カウント: {{ count }}
+ +カウント: {count.value}
+ +Count: {{count}}
+ +カウント: {count}
+カウント x 2: {doubled}
+{React.string( "カウント : " ++ string_of_int(count)) }
+ +{ format!("カウント : {}", self.count) }
+ +カウント : ${this.count}
+ +カウント : {count.value}
+ +カウント : {this.count}
+ +