自分でロールを作るな

2026/05/24 7:25

自分でロールを作るな

RSS: https://news.ycombinator.com/rss

要約

日本語訳:

要約: 開発者は、暗号化やユーザーインターフェースコンポーネントといった重要な機能に対して独自の実装を即時に停止する必要があります。なぜなら、「自分自身でつくる」というソリューションは過去の実績が証明する通り危険であるためです。最も重要な教訓は、安全性と使い勝手を確保するために、自作コードの代わりに既成でピアレビューされた標準を採用しなければならないことです。独自のカスタム暗号化パッケージには、初期化の不備や予測可能なパターンなどの深刻な欠陥を内包しており、規制産業では財務規制に違反し、高額の罰則を引き起こす可能性があります。セキュリティの問題だけでなく、ネイティブブラウザ要素を置換することは性能低下をもたらし、過剰な JavaScript ロジックによりキーボードスクロールの破損やリンクの読み込み遅延といった問題を引き起こします。さらに、独自のソリューションは自動入力機能など、安全なパスワード管理などの重要なネイティブ機能を排除してしまいます。この傾向は、組み込みブラウザ機能の安定性よりも創造的なツールの構築を優先しており、ユーザー(高齢者のご家族も含まれます)が慣れ親しんだツールを常に再学習することを強いられています。これらの使い勝手に関する落とし穴を防ぎ、規制当局による罰金を避けるためには、開発者はネイティブ要素を置換するのではなく補完する方向へ転換すべきです。これにより、すべてのウェブサイトで一貫した動作を確保できます。

本文

「自作の機能」を排除せよ:モダンな Web デザインへの不満と提言

Susam Pal 氏による投稿(2026 年 5 月 23 日)

本稿は、現代の Web デザイン手法に対する不平(rant)です。Web ユーザーとしての体験に基づき、開発者が避けるべき「自作(roll their own)」すべき機能を列挙し、その理由を論じます。


📜 「自作しない」の原則:暗号学から Web デザインへ

セキュリティ分野では有名な格言**「自作の暗号を使くな(Don't roll your own crypto)」**があります。

  • 意味: 誰もコードを書き禁止されているわけではなく、必要のある人への支援はあります。
  • 要約: ユーザーデータを保護するプロダクションソフトウェアにおいて、非公開で未検証の実装に依存すべきではありません。
  • 推奨: 確立され、ピアレビューを受け、十分に審査されたパッケージやツールを使用してください。

かつての独自開発 RC4 実装(初期化ベクトル問題、ストリーム予測可能性など)による悲劇から学ばれ、現在は大手 EC サイトや銀行などでも自作の暗号使用はほぼ見られなくなりました。規制対象分野ではこれに抵触すると大規模な制裁を受けるリスクがあります。

Web デザインも同様に、「スクロールバーが壊れることは暗号方式の失敗と同等の重大事態ではないか」という批判もありますが、ユーザーが日常的に依存する機能において**「開発者が X を自作すべきではない」**という原則は通用します。


🚫 自作してはいけない機能一覧(X)

日常業務を行うための Web サイトにおいて、以下の機能を実装せず、ブラウザのデフォルト挙動を引き継ぐべきです。

  • ページスクロール挙動
  • リンクによるナビゲーション
  • テキスト選択機能
  • コンテキストメニュー(右クリックメニュー)
  • クリップボードへのコピー・貼り付け機能
  • パスワード入力フィールド
  • 日付選択ボックス(DatePicker)

免責事項: 本稿はデザインガイドラインではありません。Web ユーザーとしての嘆きであり、専門家の推奨事項ではないことに留意してください。ただし、以下に挙げる不満点は多くの利用者にとって共通するものです。


💬 各機能に関する具体的な不満と理由

1. カスタムスクロール挙動 ❌

ユーザーはマウス、タッチパッド、キーボードでの自然なスクロールを熟知しています。

  • 問題: ブラウザデフォルトを上書きするとページが「壊れた」ように見えます。
    • スクロール速度の不均衡(速すぎたり遅すぎたり)。
    • キーボード操作の不安定さ。
  • 結論: 慣れ親しんだ挙動を、未熟な実装に変えてはいけません。

2. カスタムリンクナビゲーション ❌

Web ブラウザがリンク処理に特化しており、「命綱(bread and butter)」です。

  • 問題: GitHub などでのクリック時に巨大な JavaScript ブロックがトリガーされ、読み込みに時間がかかります。
    • 場合によっては、新しいタブで開く方が圧倒的に速いことがあります。
  • 確認方法: 以下の手順で開発者ツールを確認してください。
    1. 任意の GitHub プロジェクトへアクセス。
    2. ブラウザで F12 を押し、開発者ツール(Debugger / Sources)を開く。
    3. サイドバーの「Event Listener Breakpoints」を拡大。
    4. 「Mouse」から「click」を選択してイベントを設定。
    5. リンクをクリックし、トリガーされる処理を確認。
    
  • 提言: 「正常なリンクナビゲーションを妨げるほど重要なのか?」を再考してください。

3. カスタムパスワード入力フィールド ❌

ブラウザ標準の

<input type="password">
は十分に機能しています。

  • 標準機能:
    • パスワード保存・埋め込みの提案。
    • 強力なパスワード生成(新規アカウント)。
    • 非安全な HTTP 接続での認証情報の警告。
    • パスワードマネージャーやオートフィルとの連携。
    • アクセシビリティツールとの互換性。
  • リスク:
    • 自作バージョンで置き換えると全機能が失われます。
    • 単にテキストフィールドをマスクしただけの場合、OS や支援ツールが「通常の可視テキスト」とみなし、パスワード漏洩のリスクが高まります。

4. カスタム DatePicker ❌

ユーザーはどこでも同じ方法でカレンダーを操作したいです。

  • 現状の問題: 10 のサイトがあれば 10 の使い方を覚える必要が生まれます。
    • 年へ移動するために月表示を縮小するなどの不合理な UI。
    • 「前年度ボタン」を数十回クリックしないと日付を選べない実装。
    • 入力自体を受け付けないケース。
  • 提言: カレンダーウィジェットはネイティブ機能に追加せず、隣接して配置すべきです。
    <!-- 推奨構成例 -->
    <input type="date">
    <!-- カスタム表示が必要な場合のみ横に追加 -->
    

🧠 より広範な提言:フォームコントロールと変化の速度

フォームコントロールへの介入をやめるべき

  • 既存の問題解決を試みることは、ほぼ常に新たな問題を引き起こします。
  • UI/UX を頻繁に変更(数ヶ月ごと)すべきではありません。
    • 新技術に適応するのは可能でも、高齢者や他の利用者はそうなりません。
    • UI が変更されるたびに「全く新しい道具の学習コスト」が発生し、社会的な負担になります。

ユーザー体験への配慮

  • 比喩: Linux コマンドラインオプションが数ヶ月で変わるのを強制するのは同義です。洗濯機のボタン配置が毎日変わる状況も想像してください。
  • 結論:それは愉快なものではありません!ユーザーの学習時間を尊重し、安定した Web エクスペリエンスを提供してください。

同じ日のほかのニュース

一覧に戻る →

2026/05/24 3:45

私の Writerdeck を語る時が来ました。

## 日本語翻訳: 著者は、6年経った System76 Galago Pro ラップトップを「writerdeck」と名づけたオフライン書写ステーションに変換し、X11、Wayland、およびデスクトップ環境を排する tty ベースの構成で Debian Trixie を実行することでミニマリズムを優先しています。コンテンツが公開共有を目的としているためフルディスク暗号化は省略され、管理には `sudo` ユーザーモデルに切り替えて root ログインが無効化されました。本質的なツールとして、Neovim がテキスト編集に使用され(従来のエディタに代わり)、Debian バックポートからの `kmscon` でスケーラブルなターミナルウィンドウを可能にし、セッション多重化には `tmux` を使用し、インストール済みの Network Manager 経由の `nm-tui` が Wi-Fi/WAN の管理に用いられます。電力モニタリングおよび画面明るさ制御は `acpi` と `light` コマンドで行われ、自動ログインと `.bashrc`内の起動スクリプトにより Neovim が `tmux` セッション内で動作し、ブート時に Vimwiki が起動するようにしています。Syncthing は Vimwiki フォルダをリモートサーバーに同期させ、ブラウザ GUI を必要とせずオフラインファーストなワークスペースを維持するために全てのネットワークアドレスを活用しています。この構成はデジタルの雑多さを削減し、悪い書写習慣を打破助けるとともに、クリエイティブ専門家にとってセキュリティと生産性を向上させます。

2026/05/21 6:21

私の二画面デスクセットアップ(2025)

## 日本語訳: 著者は、壁を向いた単調なパソコンデスクを部屋の方を向くように回転させることで(ドアを見渡させ、奥行きを追加)、そしてテック専用だった単一の面を、二つの明確なゾーニングに分かれた大規模な USM ハラーデスクに置き換えることにより、ハイブリッドなワークスペースへと成功裡に変化させています。このデザインは、ソーシャルメディアでのフィードバックを受けてから以前の壁を向いた配置が持っていた「古い」外観に対応し、また、未使用のアイテム、おもちゃ、プロジェクトをアナログ側の面に置き続けることで、ストイックなミニマリズムの限界を解決し、アイデアを刺激することを可能にしています。単純にチェアを二つの半分の間で移動させることで強化された明確な精神的境界線により、このセットアップは一つの表面上で「作業」「思考」「子供たちと過ごす時間」という 3 つの異なる機能を発揮します。9 ヶ月の使用後、著者は単一コンピューターの配置に戻る予定はないことを確認しており、むしろミニマリスト的な規律とマキシマリスト的な柔軟性を融合させたこの柔軟なシステムを維持する意欲を持っています。これにより、別々の部屋を必要とせずに、ワークフローと創造的アウトプットを向上させることができます。

2026/05/23 22:03

『オン・ザ・DL』(2021 年)

## Japanese Translation: HTML の `<dl>` 要素は、名詞と値の組からなる構造化されたリストを作成するためのセマンティックなツールであり、語彙辞典やゲームキャラクターのステータスブロックのようなデータ量の多いインターフェースに極めて効果的です。この要素は 3 つのコアコンポーネントに依存しています:リストを定義する `<dl>`、用語を表す `<dt>`、そしてそれらの用語を詳細説明する 1 つまたは複数の `<dd>` 要素(各用語に対して複数の詳細を許容)。開発者はこの要素を `<div>` など他の適切なセクション要素で包んでスタイル化することが一般的ですが、この構造のもっとも主な利点はアクセシビリティです。これにより、スクリーンリーダーが複雑なデータを論理的にナビゲートでき、項目数を数え、関連性の低いブロックをスキップできるようになります。<dl> は以前の HTML バージョンでは「定義リスト」として登場しましたが、HTML5 の仕様では、堅固な構造的前提を持たずに多様な UI パターンをサポートするようにこれらの要素が改良されました。能力値や攻撃詳細のような複雑なデータ構造を表現する versatility がある一方で、ブラウザとスクリーンリーダーのサポート状況が異なるため、採用には注意が必要です。正確な実装規則については、公式仕様または MDN を参照することをお勧めします。結局のところ、セマンティックな `<dl>` タグを使用することで生テキストをアクセシブルな体験へと変換し、単純なデータと異なるデバイス間で意味のある相互作用の間に架け橋を作るのです。

自分でロールを作るな | そっか~ニュース