「私の代わりにGoのバージョンを決定するのはやめてください。」

2026/03/29 7:15

「私の代わりにGoのバージョンを決定するのはやめてください。」

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

要約

Japanese Translation:

go.mod
ファイルの
go <version>
行は、モジュールをビルドしたコンパイラではなく、そのモジュールに必要な 最小 Go バージョンを宣言します。Go 1.21 以降、このディレクティブには完全なパッチ番号(例:
go 1.21.0
)を含める必要がありますが、まだ多くのプロジェクトでは単に
1.21
と書かれています。これにより、下流のモジュールは必ずそのバージョン以上を採用せざるを得なくなり、アップグレードできない消費者にとって破壊的になる可能性があります。

最小バージョン要件は「ウイルス」のように拡散します:あなたのモジュールをインポートするプロジェクト全てがその要件を継承します。そのため、

1.25.7
のような高いバージョンを設定すると、すべての下流ユーザーはそのコンパイラまたはそれ以降にロックされます。開発者側でトランジティブインポーターに最新の Go を強制する義務はなく、単に互換性のある最低バージョンを設定すれば十分です。たとえパッケージが特定のパッチリリースでしか動作しない場合でも、他のバージョンが全く機能しない限り、ディレクティブは最低互換性バージョンを反映するべきです。

go mod init
のようなツールはデフォルトで最新の Go リリースを挿入します―これは悪い慣行でありユーザーが修正すべきです。また、GitHub Actions の
actions/setup-go
go
ディレクティブを誤用する場合があります。代わりに
toolchain
ディレクティブやその他のメカニズムに依存すべきです。
go.mod
ファイルを監査し、正確で最小限のパッチレベルを含めるよう修正すると、無音のバージョンロックインを防ぎ、Go エコシステム全体で互換性を維持できます。

本文

go.mod の

go
ディレクティブについて

  • 必須項目

    go <バージョン番号>
    が必ず記述されます。

  • Go 1.21 以降の変更点
    バージョンにフルパッチ番号(例:

    1.21.0
    )を含めるようになりました。
    多くのプロジェクトが誤って
    1.21
    の形式で記述し、結果として多くの人々に影響しています。

  • 意味
    このバージョンは「あなたのプロジェクトがコンパイル可能な最低限の Go バージョン」を示します。

    • あなた自身が使用するバージョンではなく、
    • プロジェクトを依存している全てのユーザーに対しての 最小要件 です。
  • 影響範囲

    go.mod
    に書いたバージョンは、直接あるいは間接的にあなたをインポートするすべてのプロジェクトに伝播します。
    例:
    1.25.7
    と書けば、依存者は必ず Go 1.25.7+ を使用しなければなりません。


FAQ

  • 「最新バージョンを使うべきでは?」
    ライブラリの利用者が常に最新バージョンである必要はありません。
    「最小要件」だけを設定すれば十分です。

  • ビルド時に最新版を使用したい場合

    actions/setup-go
    等のツールは、デフォルトで
    go.mod
    go
    ディレクティブを参照しますが、これは望ましくありません。
    必要なら toolchain ディレクティブや別途指定したバージョンを使用してください。

  • Go が最新バージョンをデフォルトで設定する理由は?

    go mod init
    は最新バージョンを自動的に挿入します。
    これは「便利」だと考えられていますが、実際には誤ったデフォルトです。
    必要なら手動で下位バージョンへ戻すことが可能です。

  • パッチリリースへの依存
    コードが特定のパッチにのみ正しく動作する場合でも、

    go
    ディレクティブにそのパッチを記載するのは推奨されません。
    それが唯一コンパイル可能なバージョンであることが明らかな場合を除きます。

  • 結論

    go
    ディレクティブは「viral」な性質を持ち、あなたのプロジェクトを利用する全ての人に影響します。
    そのため、できるだけ低いバージョン番号(最低限必要なもの)を設定し、他者が自ら選択できるようにしておくことが重要です。

同じ日のほかのニュース

一覧に戻る →

2026/03/29 2:39

GitLab の創業者は、会社を立ち上げることでがんと闘う

## Japanese Translation: **概要** 著者は、上部脊柱のT5椎骨に位置する腫瘍性骨肉腫との個人的な闘いを語ります。標準治療オプションを試みたものの適切な臨床試験が見つからない中で、著者は自身の状態に合わせた新しい診断手法と並行治療プロトコルを開発しました。また、「癌ジャーニーデッキ」と埋め込み型OpenAIフォーラムプレゼンテーションを作成し、この経験を記録しています。著者のアプローチはevenone.venturesに掲載されている企業によって支援され、さらにエリオット・ハーシュバーグによる著者の旅路についての包括的な記事や、ルクサンドラ氏が執筆した「The bureaucracy blocking the chance(機会を阻む官僚主義)」という患者優先医療実践を批判する作品も広い文脈に含まれます。治療データと詳細なタイムラインは、https://osteosarc.com/ で公開されており、データ概要ドキュメントや25 TBの読み取り可能なGoogle Cloudバケットが含まれています。著者は読者にメールリストへの登録を促し、更新情報を受け取れるよう案内しています。また、`cancer@sytse.com` で連絡を取ることもできます。

2026/03/29 5:39

CSSは終焉を迎える運命にあります。

## Japanese Translation: この記事は、CSSのみでレンダリングを行い、ロジックには最小限のJavaScriptしか使用しない完全にプレイ可能なDOOM風ゲームをウェブブラウザ上で動かす方法を紹介しています。壁・床・天井・スプライト・弾道などを表現するために数千もの `<div>` 要素が生成され、各要素はカスタムプロパティとして生のDoom座標を保持し、CSS が `hypot()`(距離)や `atan2()`(角度)といった関数で幾何学を計算します。ワールドはプレイヤーの動きに逆行するように `translate3d` と `rotateY` で移動されますが、CSS にはカメラオブジェクトがないためです。 床は `rotateX(90deg)` で回転し、`clip-path`(または新しい `shape()` 関数)を使って任意の多角形や穴に切り取られます。テクスチャタイルはセクター全体にわたって背景位置をワールド座標に合わせて (`background-position: calc(var(--min-x)*-1px) …`) 配置されます。ドア、リフト、その他の動的要素はカスタムプロパティ上で CSS トランジションによってアニメーションし、JavaScript が状態属性を更新します。スプライトは `rotateY` でカメラに向き、`scaleX` で鏡像化したビルボードです。スプライトのアニメーションは CSS の `steps()` キーフレームで行い、攻撃・死亡フレーム用のデータ状態は JavaScript が供給します。弾道は CSS アニメーションで移動し、衝突検出はまだ JavaScript で処理されます。 照明はセクターごとに `filter: brightness(var(--light))` を使って全体的に適用され、ちらつくライトは `@property --light` を通じてアニメーションします。プロジェクトではアンカー位置決め、`@property`、および「ハッキー」な CSS‑のみのカリング手法(オフスクリーン要素を隠すために負の遅延でアニメーションを一時停止)といった実験的機能が採用されています。 数千もの 3D 転送された要素によるパフォーマンスは課題となり、著者は JavaScript で手動フラスタムカリングを実装し、条件付き `if()` のサポートが登場すれば将来的に純粋 CSS ソリューションへ移行する計画です。記事では Safari のビュー遷移による 3D フラット化、background‑image 再ラスター化の問題、コンポジタ不安定性などブラウザバグも文書化し、インラインスタイルやバグ報告といった回避策を紹介しています。 著者はより多くのロジックを純粋 CSS に移すことで JavaScript を完全に排除できる可能性があり、パフォーマンスをさらに向上させることを想定しています。成功すれば、このアプローチは軽量なブラウザベースゲームを刺激し、高度な CSS グラフィックス機能のサポートを促進し、重いエンジンを必要としない効率的なレンダリングが求められる開発者に利益をもたらすでしょう。

2026/03/27 23:39

オープンブースト・オン・モトローラ 88000プロセッサー

## Japanese Translation: (欠落している詳細を補完しつつ明瞭さを保つ)** ``` モトローラ 68000 ファミリーは、1990年代中頃のワークステーション(Apple、Amiga、Atari ST、Sun、HP、NeXT)や多くの産業用ボードで普及していました。 その RISC 後継機種である 88000(m88k)は、68k と PowerPC の間に導入されましたが、約 1994 年頃に期待された性能を提供できず廃止されました。m88k は二世代存在しました: • 88100 – 第1世代 CPU で、オプションの外部 88200 CMMU チップを搭載し、MVME180(20 MHz、2 本の CMMU)と MVME181 に使用されました。 • 88110 – 第2世代 CPU で、統合キャッシュ/MMU を備え、50 MHz を想定していましたが実際には約 40 MHz で販売されました。MVME187(25 MHz、デュアル CMMU、最大 64 MB)、MVME188(SMP、最大 4 CPU と 8 CMMU)、および MVME197 系列(セカンダリキャッシュ)に搭載されました。 VME バスは 32‑bit アドレス/データラインを備えたパッシブバックプレーンであり、複数ボードサポート、割り込みベクタ、オプションのスレーブマッピング、および終端要件があります。 OpenBSD のポートは 1995 年に MVME187 上で開始されました。Nivas Madhur、Steve Murphree、Marc Espie らの貢献は CVS マージ競合、アカウント停止(Theo de Raadt の関与)、GCC‑2.95 互換性問題、カーネルパニック(「align & align‑1」アサーション)および MVME188 上の不完全な SMP サポートに直面しました。ポートは 3.1‑beta スナップショットまで達成しましたが、ハードウェアエラー(VME バスロックアップ、DCAM2 コンフリクト、I²C フェイル)が未解決のまま残っています。 m88k アーキテクチャに関するドキュメントは、モトローラ AT&T System III/V、Data General DG/UX、Omron UniOS などのプロプライエタリ Unix バリアントと無料 CMU Mach コードから取得されました。メンテナー間の個人メール交換は協力、衝突解決、およびニッチなポートの保守課題を示しています。 MVME VME ボードおよび他の m88k システムのユーザーは、この OpenBSD ポートに安全性と安定性を依存しています。継続的なサポートがない場合、利用可能な OS を失うリスクがあり、新しいアーキテクチャへの移行が必要になるかもしれません。 ``` *改善された要約はすべての主要ポイントを反映し、不適切な推測を回避し、主旨を明確に提示し、曖昧または混乱を招く表現を排除しています。

「私の代わりにGoのバージョンを決定するのはやめてください。」 | そっか~ニュース