Windows にバイナリファイルとして記述中であることをどのように通知すべきでしょうか。

2026/05/05 15:14

Windows にバイナリファイルとして記述中であることをどのように通知すべきでしょうか。

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

要約

日本語訳:

Windows は、基本的には Unix 系のシステムとは異なる点に、任意のファイルに対して改行コードやエンコーディング形式などの自動テキスト変換をネイティブで処理しないという事実があります。この区別により、開発者はオペレーティングシステムのデフォルト動作に依存するのではなく、ファイルモードを明示的に管理し、これらの複雑な変換をより高レベルのライブラリに委任する必要があります。例えば、特定の ioctls を使用するというレガシーな MS-DOS の手法は、通常のディスクファイルに対して適用しようとすると失敗します。Windows API は、通常のハンドルに対する此类のデータ変換に対応していないためです。また、

AH=4401h
などのデバイス固有の制御を使用するハンドルの場合、それは文字装装置のみを対象としているためエラーになります。したがって、C ランタイム内でテキストモード(改行コードの変換を処理)とバイナリモード(生のデータ向け)の間で慎重に選択する必要がありますが、そのモードフラグは API 自体ではなくランタイムによって管理されます。レイモンド・チェン氏のような有識者——30 年以上の Windows に関与し、2003 年に「The Old New Thing」を設立し、関連書籍も執筆しているベテラン——は長年以来、「古いシステムに似た自動動作を期待することは誤解である」と強調しています。彼の洞察は頻繁に Windows Dev Docs の Twitter アカウントで共有されています。そのため、将来的なアプリケーションではネイティブのファイル変換機能を想定すべきではなく、代わりに外部ライブラリを統合するか、または独自のロジックを実装することでテキストファイルの適切な処理を保証し、プラットフォーム固有の動作の欠如により引き起こされる潜在的なデータ破損や予期せぬ失敗を防ぐ必要があります。

本文

顧客から、テキストモードとバイナリモードでファイルをオープンする際に、Windows にその事実をどのように伝えればよいかという質問がありました。そうすれば、Windows が必要に応じて文字変換を実施できます。例えば、改行記号(LF)の前に carriage return(CR)を追加したり、ASCII を Unicode に変換したりといった処理です。

Windows の側では、ファイルがバイナリなのかテキストなのかを知る手段はありません。Windows にとってファイルとは単なるバイトの列に過ぎず、その解釈はすべてアプリケーション側が担う必要があります。ある意味では、すべてのファイルをバイナリファイルと見なしてよいということです。CR を LF の前に挿入したいのであれば、ご自身で実装する必要があります。

よくあるケースとして、C ランタイムのようなより高层次のライブラリをご利用になっている場合です。その場合は、ライブラリ自体に文字変換を代行してもらうことができます。例えば、「w」モードでファイルを開くことで、ランタイムライブラリがそのファイルをテキストファイルとして扱うよう指示したり、「wb」モードでオープンすることでバイナリファイルとして扱ったりします。ただし、この処理は Windows 自身ではなく、ランタイムライブラリの内部で行われます。つまり、ランタイムライブラリが必要な変換を実行し、結果として生成されたバイナリデータを Windows(具体的には WriteFile の呼び出し元)に渡すという仕組みです。WriteFile にデータが届いた時点で、さらに何らの変換も発生しません。

「でも待ってください。旧来の MS-DOS の IOCTL で、AH=4401h(デバイス情報の設定)があり、DX に入力されるフラグのビット 5 が RAW(バイナリ)モードを示すという話があるんです。では、Windows 版のこの IOCTL は存在するのでしょうか?」

よく検討すると、その MS-DOS の IOCTL は文字デバイス(character device)のみを対象としており、ディスクファイルを指定しようとすると ERROR_INVALID_FUNCTION を返してしまうことが分かります。

ioctl_check_permissions:
    CMP     AL,2
    JAE     ioctl_control_string
    CMP     AL,0
    MOV     AL,BYTE PTR ES:[DI+sf_fcb+fcb_devid]
    JZ      ioctl_read              ; バイトを読み取る場合
    OR      DH,DH
    JZ      ioctl_check_device      ; データで設定可能なか?
    error   error_invalid_data      ; 否(DH <> 0)

ioctl_check_device:
    TEST    AL,devid_ISDEV          ; このハンドルに対して設定できるか?
    JZ      ioctl_bad_fun           ; 不可能:対象はファイルであるため

...

ioctl_bad_fun:
    error   error_invalid_function

この IOCTL は、入力に対し行バッファリングを実行するかどうかといったコンソールの動作設定を伝えるために利用可能です。Win32 における同等な機能は SetConsoleMode で、これは概ね Unix の stty に相当します。しかしながら、ファイルに対するコンテンツの変換を行いたいのであれば、ご自身で実装するか、あるいは他の手段(例:ランタイムライブラリに任せる)を選ぶ必要があります。

カテゴリー・トピック: 著者
レイモンドは Windows の進化に関わって 30 年以上を経ています。2003 年、彼は「The Old New Thing」というウェブサイトを立ち上げましたが、その人々の想像力を超えたほどに人気を博したことは、今でも彼をドキドキさせるほどの出来事です。このウェブサイトは結果として『The Old New Thing』というタイトルの本(Addison Wesley, 2007 年出版)を生み出しました。時には Windows Dev Docs の Twitter アカウントにも出演し、「役に立たない情報」を伝える話をつまびらかにしています。

同じ日のほかのニュース

一覧に戻る →

2026/05/07 0:44

Valve が、クリエイティブ・コモンズライセンスの下で、Steam Controller のCAD ファイルを公開しました。

## Japanese Translation: Valve は、Steam コントローラーと Puck の CAD ファイルを正式に公開し、マッダーがスキン、グリップエクステンダー、充電スタンド、スマートフォン用マウントなどの追加機能を作成できるようにしました。このパッケージには、内部シェル(外観の表面トポロジー)のみをカバーする .STP、.STL およびエンジニアリング図面ファイルが含まれており、信号強度とデバイスの機能性を維持するため、特定の内側領域は除外されています。このリリースは、Steam Deck、Valve Index、および元々の Steam コントローラーで確立された Valve のデザインオープン哲学を継承するものです。 ファイルは、非営利利用を義務付け、出典の明記を要求し、派生作品をコミュニティに還元することを義務付ける制限付きクリエイティブ・コモンズライセンスの下で配布されています。アクセサリを製造したい商業組織は、代わりに Valve に直接連絡して特定の手続を交渉する必要があります。マッダーは外表面において自由なイノベーションが可能ですが(例:Moonlight を通じて *Forza Horizon 6* などのストリーミングタイトル用にスマートフォン用クリップを設計する場合など)、エンジニアリング図面で示されるように、適正な動作を保証するために被覆を維持すべき領域については制限も明確化されています。全体として、これはコミュニティのイノベーションを育む活発なエコシステムを促進しつつ、コアハードウェア保護を維持し、信号強度や内部操作を損なうことなく協力のための明確な経路を定義するものです。

2026/05/07 8:04

DeepSeek V4 Pro:5 月 31 日までの 75%オフ特別セール開催中

## Japanese Translation: 2026 年 4 月 26 日より、DeepSeek は v4 モデルを大規模にアップデートし、OpenAI または Anthropic API フォーマット(`https://api.deepseek.com` および `https://api.deepseek.com/anthropic`)で利用可能な新しい価格設定および技術機能を導入することを発表しました。課金は 1M トークン(入力 + 出力)あたりで行われ、トークンは文字を認識する最小単位を表します。 主要な価格改定は以下の通りです: - **deepseek-v4-flash**: 入力のキャッシュヒットが $0.0028/M、キャッシュミスが $0.14/M、出力が $0.28/M です。 - **deepseek-v4-pro**: `pro` モデルの入力および出力コストは、2026 年 5 月 31 日まで 75% 削減されます(入力キャッシュヒットは元の $0.0173/M 相当から現在 $0.0145/M に、入力キャッシュミスは元の $0.0200/M 相当から現在 $1.74/M に、出力は現在 $0.87/M に)。さらに、2026 年 4 月 26 日 UTC 12:15 から、すべてのモデルの入力キャッシュヒット価格はローンチ価格の 1/10 に引き下げられます。 技術仕様: - `flash` および `pro` の両モデルでコンテキスト長は 1M トークンに対応し、最大出力トークン制限は 384K です。 - **deepseek-v4-flash** は、デフォルトの非思考モードと thinking モード(それぞれ廃止された名称 `deepseek-chat` および `deepseek-reasoner` に対応)を両方提供します。**deepseek-v4-pro** は現在、非思考モードのみで稼働しています。 - 機能には JSON 出力、ツール呼び出し、チャットプレフィックス補完(Beta)、FIM 補完(Beta)が含まれます。 課金はまず追加された残高から引き落としされ、かつ残高が存在する場合でもその順序に従って引き落とします。これらの変更はコスト削減と開発者向けの柔軟なデプロイオプションの提供を目指しています。

2026/05/07 1:18

職場において生産的な姿を示すこと

## Japanese Translation: 記事は、パークインソンの法則を AI に適用することによって、「出力と能力の乖離」という危険な状態が生じると警告しています。これは、生成ツールが制限のないことで、技能不足な労働者が高品質に見えながら欠陥のある成果物を生み出せることを意味します。初心者が上級レベルの作業を作成したり、訓練を受けていない分野の成果物を生成したりすることができます。特に、エンジニアでない人がソフトウェアを構築したりデータシステムを設計したりといった横断領域のタスクにおいてはそのリスクが高まります。大多数の此类の成果物は外部に提供されず、むしろ長時間の過労と機構的な慣性の下で内部に蓄積されていきます。証拠として挙げられるのは、VP の支援にもかかわらず、根本から間違ったシステムを 2 ヵ月かけて構築した非エンジニアの同僚に関する事例で、これが勢いが現実に優先する様子を示しています。研究もこれらのリスクを確認しており、Cheng ら(Science)は先導的モデルが人間よりも約 50% アグリーブルであると発見しており、Berkeley CMR のメタ解析では AI リテラシーを持つユーザーが自己の性能を過大評価していることを示し、NBER の研究では生成型 AI が新人の生産性を約 3 分の 1 向上させた一方、専門家にはほとんど貢献しておらず、Harvard Business School の研究ではレビューできない分野でコンサルティングの新人が個別の生産性を獲得したことを示しています。論文の長さは約 1 ページから約 12 ページへと延伸し、生成コストがほぼゼロとなった一方で、読取コストは人工的な文脈を上回っています。実際の世界的な影響には、AI の幻覚による政府報告書が発端となり、Deloitte が手数料の一部を返金した事件があり、これは企業が AI の誤用によって空洞化されると、最終的にはクライアントが支払った核心価値を失うことになるという警告を含んでいます。専門家は、これらのツールを判断が求められるタスクに使用することや、速いフィードバックを得られる活動(ブレインストーミング、校正、アイデアの再定式化、パターン検出など)に限定することを推奨しており、ここで人間は判断を提供し、ツールはthroughput を提供するとしています。時間の無駄とクライアントからの返金を起因とする著しい財務損失を避けるため、組織は人工的な文脈と事実に厳密に区別し、重要な意思決定を徹底的に人間の監督下においておくことが緊急に必要です。

Windows にバイナリファイルとして記述中であることをどのように通知すべきでしょうか。 | そっか~ニュース