BashとZshのタブ補完の強化:完全な単語の説明を表示する

2025-08-10

この記事では、BashとZshのタブ補完機能を改良し、すでに完成した単語の説明も表示できるようにする方法について説明しています。以前は、タブ補完は複数の候補が一致する場合にのみ説明を表示していましたが、これにより、単一の命令の説明を確認することが不便でした。作者は巧妙に「ダミー」の補完オプションを追加することでこの問題を解決し、ユーザーはタブキーを押すだけで、任意の完成した単語の説明を見ることができるようになりました。単語の重複表示という小さなUI上の欠点はありますが、ユーザーエクスペリエンスは大幅に向上しています。

続きを読む
開発 タブ補完

Mill:Reactにインスパイアされたビルドツールの革命

2025-05-13

Millは、React.jsの中核となる設計思想である、直接的なスタイルのビルドと単一の汎用言語を採用した、ユニークなビルドツールです。コールバックと複数の言語に依存する従来のビルドツールとは異なり、Millでは、最終的なビルド成果物を直接返す関数を書くことができ、Millがキャッシング、並列処理、最適化を自動的に処理します。このアプローチにより、ビルドプロセスが簡素化され、可読性と保守性が向上し、IDEとの統合が強化されます。

続きを読む
開発

Millがビルド設定にScalaを使用する理由

2025-02-13

YAMLやXMLなどの代替手段ではなく、Millビルドシステムの構成言語としてScalaが選択されたことに疑問を持つ人がいます。この記事では、この点について、汎用プログラミング言語を使用することの利点、Scalaの具体的な利点、Java仮想マシンを活用する理由という3つの主要な理由を探求することで説明します。Scalaはニッチな言語ですが、その独自の特性により、プロジェクトの規模に関係なく、ビルドシステムの構成に特に適しています。

続きを読む
開発

Github Actions を使用した Mill のクロスプラットフォームネイティブバイナリ

2025-02-02

Mill プロジェクトは、Github Actions を利用して、様々なプラットフォーム(Mac、Windows、Linux)でネイティブバイナリをビルドし、Maven Central にアップロードします。巧妙な構成により、JVM 互換の汎用アーティファクトとプラットフォーム固有のネイティブバイナリのアートファクトの公開が分離され、クロスプラットフォームの互換性が確保されます。カスタム `artifactName` と `jar` タスクにより、OS と CPU アーキテクチャのサフィックスが付いたバージョン付きファイルが生成され、ユーザーは自分の環境に適した実行ファイルを選択できます。

続きを読む

Mill JVMビルドツール:直接実行可能なアセンブリJAR

2025-01-02

Mill JVMビルドツールは、`java -jar`コマンドが不要な、直接実行可能なアセンブリJARを作成します。これは、JARファイルの先頭にシェルスクリプトを追加することで実現されます。このスクリプトはJavaランタイム環境を呼び出します。このスクリプトはUnixとWindowsの両方のシステムと巧みに互換性を持たせて設計されており、クロスプラットフォームでの実行が可能になります。この記事では、ZIPファイルの性質を利用して、ランチャースクリプトとJARの内容を連結し、シームレスな実行を実現する方法を詳細に説明しています。これにより、Javaプログラムのコマンドラインワークフローへの統合が大幅に向上します。

続きを読む
開発

MillによるCI高速化:選択的テスト戦略

2024-12-30

大規模なコードベースで全てのテストを実行するのは非効率的です。この記事では、フォルダベース、依存関係ベース、ヒューリスティックベースの3つの選択的テストアプローチを探ります。フォルダベースはシンプルですがエラーを見逃す可能性があります。依存関係ベースは包括的ですが、過剰なテストを行う可能性があります。ヒューリスティックベースはカスタムルールでテスト選択を最適化し、速度と網羅性のバランスを取ります。Millビルドツールは、依存関係ベースの選択的テストをネイティブにサポートしており、CIの効率を大幅に向上させます。しかし、ヒューリスティックな方法と組み合わせることで、速度とテストカバレッジのバランスをさらに最適化できます。

続きを読む

モノレポビルドツール:コードベースの拡張

2024-12-20

従来のビルドツールは、大規模なコードベース(100~10,000人のアクティブ開発者)に苦労します。BazelやMillなどのモノレポビルドツールは、複数の言語、カスタムビルドタスク、自動キャッシングと並列化、リモートキャッシングと実行をサポートすることで、ビルドの速度と効率を大幅に向上させます。依存関係に基づいたテスト選択とビルドタスクのサンドボックス機能も備えており、テスト時間と非決定性を軽減します。これらの機能は小規模プロジェクトでは不要に思えるかもしれませんが、大規模プロジェクトにおける大規模なコラボレーションと継続的インテグレーションには不可欠であり、ビルド時間がボトルネックになるのを防ぎます。

続きを読む