Three.js で僕の部屋を表現する
僕が React Three Fiber を使って実際の自分の部屋をブラウザ上に再現し、実世界のオブジェクトを目録に見立て、空間の記憶を通してここ数年の生活と仕事について語った話。
僕が React Three Fiber を使って実際の自分の部屋をブラウザ上に再現し、実世界のオブジェクトを目録に見立て、空間の記憶を通してここ数年の生活と仕事について語った話。
Jake Archibaldの記事を起点に、現代のレスポンシブ画像の書き方を整理する。なぜwidth/heightを付ける必要があるのか、CSSのaspect-ratioはいつ使うべきか、AVIFとWebPの選び方、そしてpicture/source/srcsetを使ったモバイル向け画像の切り替えについて。
かつてtextareaの自動高さ調整は、JavaScriptでscrollHeightを監視するしかなかった。しかしCSSのfield-sizing: contentなら、わずか1行で代替でき、textarea、input、selectに対応している。本記事では従来のやり方のペインポイントと、field-sizingの使い方をまとめる。
デフォルトでは下線と文字が近すぎて、このスタイルを好まないデザイナーもいるし、僕自身もあまり綺麗ではないと感じていた。
Pixel Perfect はそれが本当に重要な場合にのみ意識すべきであり、そうでなければ往々にしてお互い損をする結果に陥ってしまう。
Web開発において、従来の HEX や RGB による色表現は広く使われているものの、可読性に乏しく直観的でないという課題があり、P3 のような広色域のカラースペースでの表現力にも限界がある。HSL(色相・彩度・輝度)はより直感的な色の定義方法を提供し、開発者が色をより簡単に理解・調整できるようにする。HSL は色相、彩度、輝度の3つの次元で色を表現するため、色調整がより人間にとって扱いやすくなり、特にデザインシステムにおいてカラーパレットの明度変化をうまく表現できる。
本記事では、Webデザインにおいて line-height を 1 に設定することが推奨されない理由と、ellipsis を使用する際に生じる言語面での問題について考察する。
僕がこれから挑戦してみたい実験について共有したいと思う。僕がソフトウェア開発やフロントエンドの世界に入ってから、もうすぐ最初の10年を迎えようとしている。フロントエンド百花繚乱の戦国時代を経験したことは、その後のフロントエンドの変化や気づきを理解する上で大いに役立っている。ブログではすでに多くの記事をシェアしてきたけれど、実のところ、まだ書ききれていない共有したいことがたくさんある。
本記事は「IT 2023 鉄人レース」の記事:プログラミング系ゲーム3選 (1) – A=B
フロントエンドエンジニアとして、すべてのHTMLタグを暗記する必要はないものの、よく使われるHTMLタグやその利用シーンについては一定の理解を持ち、状況に応じて使い分ける必要がある。しかし、セマンティックタグを使う目的とは何だろうか?セマンティックタグに関する記事の多くは表面的な議論、つまり「どのタグをどこで使うべきか」にとどまっていることが多いと僕は感じている。その結果、ウェブページ上のタグは見かけ上多彩になったものの、ユーザー体験はそれに見合って向上していないのが現状だ。
ニュースレターサイトを構築する際の要件を検討し、最終的にAstroを選定した。本記事では、他の静的サイトジェネレーターとの比較や、最終的にAstroを選んだ理由について掘り下げる。
ふと自分が面白いと思った問題を記録しておこうと思い立った。特に視覚化できるものがいい。余力があれば毎日の問題をノートにまとめたいところだ。とりあえず、Advent Of Code Day10 の問題がなかなか面白かったので、まずは記録しておく。
2017年に、HTML/CSSだけで実現できるさまざまなレイアウトテクニックを紹介する記事を読んだ。最初に読んだときは深く共感し、当時まだ不慣れだった多くのテクニックを学べたので、とてもおすすめしたい記事だ。JavaScriptはほぼ大半の問題を解決できるが、アクセシビリティ、パフォーマンス、バンドルサイズの観点から見れば、CSSで解決できるに越したことはない。しかし、「JSを極力使わない」ことは「JSを一切使わない」ことと同義ではなく、この両者には明確な違いがある。この記事では、前述の記事を改めて読み返し、僕が改善できると考えるポイントをいくつか挙げていく。
CSSでレイアウトを組む際、スタイルに応じてCSSを調整したり、場合によってはJavaScriptを使って実現したりすることもある。だが実は、CSSの疑似クラス(pseudo-classes)を上手く活用すれば、CSSをシンプルにし、不要なJavaScriptの実装を減らすことができる。しかも、かつてのように一部のブラウザしか対応していないということもなくなっている。
GatsbyからNext.jsへとブログを移行した過程と感想の記録。採用した技術や実装の詳細などをまとめている。
「また新しいフレームワークか」と思う人も少なくないかもしれないが、Remixには確かに独自の特徴がある。ドキュメントを読んだことがある人なら最も顕著に感じるのは……
Node.jsにおいてfsモジュールを介したファイル操作は非常に一般的だが、スループットが大きい状況下では、I/Oに関連する操作すべてに細心の注意を払う必要がある。
現在、多くの Web サイトで Web Vitals の計測プロセスが導入され、指標を定量化して改善点を見つけられるようになっている。だが、あまり知られていないが、実は Sentry も以前から Web Vitals の統計機能を提供している。
UIの観点から見ると、フロントエンドとモバイル開発が直面する課題は似ている。使われる言語や開発手法は違っても、使いやすいユーザーインターフェースを作り上げる必要がある点では同じだ。そうであるなら、コンポーネント指向開発、状態管理、データフロー、副作用(APIやI/O)の管理など、お互いに似たような問題に直面する。僕にとって、この二つは互いに学び合うのに非常に適した領域だ。
WebGLはlineWidthが1より大きい線をサポートしておらず、Three.jsにも太さを調整できる線の実装が標準ではないため、自分で線を自作することにした。
ウェブページを閲覧する際、僕たちはよくサブドメインを通じてサービスの内容を区別する。しかし、あるウェブサイトがサブドメインであるかどうか、あるいは2つのサイトがSameSiteであるかどうかを区別することは、想像ほど簡単ではないようだ。
shiki はコードのシンタックスハイライトを行うパッケージで、他のパッケージ(highlightjs、prismjs)と比べると比較的新しく、知名度もまだそれほど高くない。主にサポートしている構文が多くて設定もしやすく、組み込みテーマもかなり豊富だったため、元々使っていた prismjs から乗り換えてみた。
フロントエンド開発では、画面に表示する値が他の値から複合的に計算されたものだったり、何らかの計算を経てから画面に配置されたりするケースによく遭遇する。通常、この種のリファクタリングには useMemo を使ってコードをシンプルにできる。
この記事はあくまで僕自身の観点と考えを述べるものであり、同業者を批判する意図は一切ない。現在のフロントエンド領域(ここではWeb開発を指す)は成熟しつつあり、フロントエンドフレームワークはコンポーネント化という中核思想とリアクティブな仕組みを採用し、独自の構文や開発手法、哲学を組み合わせることで、大半のユースケースに対応できるようになっていると僕は考えている。
Google Chrome 89でWeb Serial APIが導入され、USBデバイスやシリアルインターフェースを持つBluetooth機器などの外部機器とブラウザAPIを通じて直接やり取りできるようになった。これにより、ブラウザがハードウェアと直接通信できるようになる。
本記事では、ブラウザの裏側でformタグがどのように処理されるのか、そしてJavaScriptでFormDataを使ってフォーム操作を簡素化する方法について紹介する。
フォームはウェブにおいて非常によく使われる機能であり、プレーンテキストの送信だけでなく、ファイルアップロード機能も実現できる。しかし、formの挙動は他のデータ送信方法とやや異なるため、時に疑問や誤解を生むこともある。この記事では、仕様を読み解きながら経緯を整理し、formの背後で実際に行われている処理や、フォームと他の送信方法との違いについて深く理解していく。最後にHTMLのformタグが裏で何を行っているのかについても触れる。
Svelteのコアコンセプトからわかるように、Svelteはコンパイルプロセスから必要な情報を可能な限り取得し、ランタイムのオーバーヘッドを削減することを目指している。前回の記事ではSvelteがコンパイルからコード生成までどのように動作するのかを説明したが、今回はSvelteが生成したコードがどのように動作しているのかを観察してみよう。
最終的なコードを生成するために、Svelteはコンポーネントを一度コンパイルして必要な情報を取得する必要がある。Svelteのコンパイルからコード生成までのプロセスは主にいくつかのフェーズを経るが、本記事ではそれらを一つずつ紹介していく。
Svelteの注目度は年々高まっている。この記事では、2022年にSvelteを学ぶべき理由を整理しつつ、Svelteを使用する上でのデメリットについても語っていく。
この一連の記事では Svelte の原理と実装の探求を中心とし、読者が Svelte のコンパイルメカニズムとコード生成をより深く理解できるようにすることを目指している。Svelte のコンパイルプロセスにはコード解析が含まれるため、この記事ではまず抽象構文木とは何かについて議論し、抽象構文木が果たす役割と重要性を詳しく説明していく。
TurbolinksはJavaScriptパッケージであり、通常はRuby on Railsと一緒に使われる(単体のライブラリとして使うことも可能だ)。主にHTMLをfetchして直接差し替える手法によって、通常のページ遷移に伴う再リクエストやCSSのコストを回避する。「JavaScriptを使う必要がない」と言うのは厳密には正しくない。JavaScript自体は存在しており、ライブラリ側ですでに処理してくれているため、開発時にJavaScriptを書かなくて済むというだけのことだ。
linaria はゼロランタイムを強調する CSS-in-JS ライブラリであり、styled-components に似た構文を使いつつコンパイル時に CSS を生成することで、スタイル動的変更によるオーバーヘッドを削減できる。
ブラウザのクローラーが Web ページをクロールする際、HTML の内容を読み取ってインデックスを生成し、データベースにキャッシュを保存して定期的に更新する。つまり、SSR を実装していない場合、HTML ファイル自体は真っ白であり、JavaScript がパースされて実行されるまで実際のページを見ることはできない。
今回このテーマを作ろうと思ったのは、ニュースを見かけたこととデータが比較的揃っていたからだ。ちょうどSvelte自体の紹介・普及にもなると思い、構想を練りながら実装してみた。
Vueの作者である尤雨溪(Evan You)が最近、ref宣言の構文においてJavaScriptのラベル文を使ってさらに簡素化できるようにするRFCを提案した。この構文はSvelteと瓜二つであり、ここに僕自身の考えを記録しておく。
Svelte は僕がかなり気に入っているフロントエンドフレームワークの一つだ。シンプルな構文と柔軟性、作者の理念、そして多彩なアニメーションやトランジションの使い勝手など、どれも非常に気に入っている。以前にも Svelte に対する僕の考えをいくつか書いたことがある。今回の Svelte Summit は 2020 年 10 月 18 日に開催され、コロナ禍の影響により全編オンライン生配信という形で行われ、計 7 時間、17 のセッションがあった。ここでは僕が面白いと感じたいくつかのセッションと自分なりの感想を記録しておく。
iOSの一部のバージョンではmousedownハンドラーが正しく動作しないが、他のデバイス(Androidなど)ではmousedownは依然として正常に動作する。
通貨などを表示する際、元の数値を人間にとって読みやすい形式に変換したいという要件がよくある。フロントエンドでは、Intl.NumberFormat を使う方法や正規表現を使う方法など、いくつかの手段で実現できる。
談談 SameSite 政策發布後,我對 Cookie 與 CORS 的再思考。Cookie 真的滴水不漏嗎?讓我們來看看一些案例。
React 17 のリリースには重大な更新や新機能は含まれていないが、useEffect のクリーンアップ関数の実行タイミングがひっそりと変更された。この記事では、すべてのアップデートを逐一解説するのではなく、記事の中で特に注目すべきポイントを僕が記録しておく。
ブラウザでできることが増えるにつれて、フロントエンドがカバーする範囲もどんどん広がり、「フロントエンド」という言葉一つをとっても、いくつもの分野に分岐できる。
僕が新しいライブラリを研究するとき、同時にその人のことも調べる(もちろん全員ではない、そうでなければ npm install 1回で一生かかってしまうだろう)。技術の創作者は人であり、ライブラリの創作者も人、フレームワークの創作者も人、みんな血が通い、感情を持った人間だからだ。
part1 では JSON パーサーの書き方に触れ、文字列をパースする機能を実装した。今回は残りの関数を補完していく。(実際のところ、基本原理さえ理解していれば、残りの関数実装はマニュアル通りに進めるだけだ)
今日はJSONのパースから始めて、ゼロからJSONパーサーを作る方法を解説する。JSONの構造はシンプルなので、練習として最適だ。
僕がSvelteを使ってご機嫌でsmooth-scrollを実装したあと、実はCSS 1行で実現できることに気づいた。
今日はSvelteのソースコードを読みに行き、アーキテクチャの理解を深めつつ、練習がてら手頃なissueがないか探してみた。
Rollup 本体の仕組みは、まだ Webpack ほど整っていないように感じる
しかし、Svelte が歩む道には必然的にいくつかの問題も待ち受けている。その最たるものは、Svelte が runtime であまり多くのことを肩代わりできないという点だ。
初めて Svelte を目にしたとき、心の中で「うーん…また新しいフロントエンドフレームワークか?」と思い、それほど気に留めていなかった。しかし、紹介するブログ記事が増え、多くのウェブサイトで使われているのを目にするようになってから、僕の好奇心が刺激され始めた。
Chrome 80以降では、CookieのSameSite属性のデフォルトがLaxに変更される。SameSiteの定義や用途、そしてCookieについての考察を出発点として、この件全体に対する僕の考えを述べていく。
以前からフロントエンド開発に関する知見を記録しておきたいと思っていたが、なかなか着手できずにいた。そこで鉄人レースの期間を利用して一気にまとめ上げた。このシリーズはいくつかのパートに分かれており、今後機会があれば続きを書いていくつもりだ。JavaScriptの基礎、JavaScriptとECMAScriptについての簡単な考察…
react-transition-group を v1 から v4 にアップグレードする際、重要なポイントがいくつかある:アップグレード後に CSSTransitionGroup コンポーネントが削除された、leave が exit になった、transitionName が classNames になった、transitionEnterTimeout…
この記事では、各React HooksのAPIを網羅的に紹介するのではなく、設計の観点からその背後にある理由を探っていく。主な構成は以下の通り:関数コンポーネントとクラスコンポーネントの違い、コンポーネント間で似たロジックを再利用する方法、Higher-Order Componentについての簡単な考察…
この記事は「Implementing a pin-to-bottom scrolling element with only CSS」を読んだ後、JavaScript を使った実装方法も交えてまとめたものだ。最近のウェブサイトでは、新しいコンテンツが追加されるたびにスクロール位置を最下部に自動調整するUIをよく見かける。例えば Twitch…
ある日ページを開発していたとき、リクエストヘッダーの項目が正しいか確認するために開発者ツールを開いたところ、リクエストに見慣れない不審なヘッダーがいくつか増えていることに気づいた。不審な点に気づいただろうか?よく見てみると、Sec-Fetchから始まる3つの…
多くのWebページではさまざまなスクリプトを実行する必要があり、当然それらには優先度が存在する。例えばUIのレンダリング、インタラクションイベントの登録、APIを呼び出してデータを取得することなどは優先度の高いタスクだ。一方で、アナリティクスのスクリプト、遅延読み込み(lazy loading)、それほど重要でないイベントの初期化などは優先度の低いタスクとなる。何をもってIdle(アイドル)とするのか…
フロントエンドにおいて、リクエストを送信する方法は主に2つある。XHRとFetchだ。XHRは、うーん…、かなり昔からあるAPIだ。ただ設定がとても面倒なため、jQueryのgetJSON、axios、RxJSのAjaxObservableといった、より高レイヤーのAPIにラップされて使われることが多かった…
CORSとCookieはフロントエンドにおいてかなり重要な問題だが、開発時はフロントとバックエンドのドメインが同じであることが多いため、あまり気にしないことが多い。あるいはバックエンドにAccess-Control-Allow-Originを…
Array.sort を紐解く。この記事は JavaScript ネイティブの sort において注意すべき点(例えば、デフォルトの sort メソッドは値を String に変換し、文字コード順でソートするため上記のような結果になるなど)を語るものではない。今回は JavaScript の sort の背後にある実装方式について探っていく。
一つの事実を認識しておこう。table は閲覧するためのものであり、派手なビジュアルのために使うものではない。最近、管理画面でテーブルを扱う要件が増えており、ユーザーにとって使いやすい table をどうデザインするかは一つの挑戦だ。特にデータ件数やカラム数が多い場合、ユーザーは余計な要素に気を取られやすくなる。実のところ、データの提示において table は…
Reactがついに正式にv16をリリースした。実際のところ公式ブログの紹介はすでにかなり充実している(しかも見やすくて素晴らしい)。本記事はメモとまとめとして、一部の詳細を簡潔に整理したものだ。1. componentDidPatch(error, info) React 16で最も注目すべき機能として、ErrorBoundary機能が追加され、lifecycle…
ようやく最近の面接の振り返りをまとめる時間ができた。まず見えてきたことを総括しておくと:通常、企業の面接ではJavascriptの習熟度ばかりが問われ、その多くはアルゴリズムやプロトタイプチェーンの解説などで、DOMやEventの操作が問われることは滅多にない。CSSはほぼ出題されず、あってもclassやIDの優先順位を判定するような基本問題程度。HTMLの面接は…
Ramda は非常に便利なライブラリだ。lodash や underscore を知っていれば、Ramda を関数型プログラミング(FP)版の lodash と捉えることができる。それらの API には多くの類似点があるが、違いは Ramda 自体が FP の機能を持っている点だ。どんな API でも…
今日は鐵人賽(アイアンマンレース)の最終日だ。結びの部分がうまくまとまらなかった気がするし、時間の都合で十分に紹介しきれなかった部分もたくさんある。
フロントエンドのページでは、要素の高さを揃えるレイアウトが必要になることがよくある。最も直感的な方法は、コンテナ内のすべての要素を float や inline-block に設定することだ。float レイアウトを使う場合、親要素のコンテナを押し広げる(clearfix)必要があるだけでなく、子要素に margin を設定する必要もある…
以前、CSS変数についての僕の考えを書いたことがあった。もともとこのプロパティにはそこまで期待していなかったし、SASSの変数に使い慣れていたせいで、このCSS変数はかえって中途半端なシステムのように思えていた。しかし、もし君も同じように考えているなら、ぜひこの記事を参考にしてみてほしい。
SASSからPostCSSへ。およそ1年前、PostCSSはフロントエンドのエコシステムで急速に人気を集め始めた。いわゆるプリプロセッサとしての特性、プラグインの高度なカスタマイズ性、cssnextの機能を先取りして使える点、そして各種ビルドツール(gulp、webpack…)と組み合わせて手軽に扱える点がその理由だ。
セマンティクス、クラスの命名規則、イベント伝播