
2026/01/20 20:15
**Guix(開発用)**
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Guix shell は、宣言された依存関係を自動的に隔離された空間にインストールすることで再現可能な開発環境の作成を簡素化します。これにより、開発者はリポジトリをクローンし、手動設定なしで
を実行できます。Ubuntu に Guix をインストールしたり、自身のディストリビューションとして使用する場合でも、数分で完了します。著者は、makeファイルが JavaScript のguix.scmと似た役割を果たし、必要なパッケージを列挙していると説明しています。package.jsonを呼び出すと、これらのパッケージがサンドボックス化された環境にフェッチされます。guix shell(ほとんどの環境変数をクリア)や--pure(Docker のような隔離のために Linux 名前空間で実行)などのオプションフラグは、さらに隔離とセキュリティを追加し、ユーザーは現在のパスを--containerに追加してプロジェクトディレクトリをホワイトリストに登録できます。Guix は同じ~/.config/guix/shell-authorized-directoriesをguix.scmやguix build -f guix.scmで使用することもでき、非対話的に実行可能なため、CI/CD ワークフロー(例:direnv または emacs‑direnv 経由)向けにスクリプト化できます。Guix は Docker、Nix、Python の virtualenv、Ruby の rvm/bundler、Node の nvm/npm などと競合しますが、これらの多くは言語固有であるかグローバルインストールを必要とするため、Ubuntu 上または自身のディストリビューションとしてマルチランゲージプロジェクトに統一されたソリューションを提供します。著者は direnv や Emacs などとの将来の統合可能性を示唆し、ユーザーが既存のワークフローに Guix を埋め込むか、Docker/Nix のような代替手段を選択することもできると提案しています。設定ドリフトの削減、オンボーディングの高速化、およびホワイトリストや名前空間隔離によるセキュリティ強化により、Guix は CI/CD パイプラインや共同開発環境での採用を促進する可能性があります。guix package -f guix.scm
本文
開発における Guix Shell のクイックスタートガイド
「オレンジ色の表紙で『Guix shell』と書かれているのを初めて見た時、Docker や仮想環境が既に存在する中で新しいツールに手間を掛ける意味はないのでは?」と思うかもしれません。
短い答えはこうです:Guix は強力な汎用パッケージマネージャーで、コンテナや VM を使わずに隔離された再現可能な開発環境を作成できます。
以下では、実際に
guix shell を使って新規プロジェクトのセットアップから Emacs への統合までを簡潔にご紹介します。
1. 現状の問題点
- 手動で依存関係をインストール:過去は新しいプロジェクトごとにシステムパッケージを手作業で入れなければならなかった。
- 言語専用ツール(virtualenv, rvm, nvm) はランタイムのみを管理し、OS レベルの依存関係は扱わない。
- Docker は完全に隔離されるが、複雑さと余計なオーバーヘッドが発生することが多い。
2. Guix の解決策
Guix は任意のディストリビューション上で動作可能(または独立したディストリビューションとしても)です。主な特徴は次の通りです:
| 機能 | 内容 |
|---|---|
| 指定したパッケージだけを含む一時環境を起動します。 |
| グローバルインストールなし | パッケージはユーザー専用ディレクトリに置かれ、 には入らない。 |
/ フラグ | 必要に応じてさらに隔離を強化します。 |
3. 実際の例:Guile の SDL2 バインディング構築
-
リポジトリをクローン
git clone https://git.dthompson.us/guile-sdl2.git cd guile-sdl2 -
ディレクトリを認証(セキュリティ)
echo $PWD >> $HOME/.config/guix/shell-authorized-directories -
Guix シェルに入る
guix shell -
通常通りビルド
./configure make
追加の手順はプロジェクトディレクトリを認証するだけです。以降は
とすれば OK。./configure && make
4. 背景で起きていること
guix shell は現在のディレクトリにある guix.scm を自動的に探し読み込みます。このファイルはパッケージを記述した小さな Scheme プログラムです。
(use-modules (guix git) (guix packages) (guix licenses) (guix build-system gnu) (gnu packages) (gnu packages autotools) (gnu packages guile) (gnu packages pkg-config) (gnu packages sdl) (gnu packages texinfo)) (package (name "guile-sdl2") (version "0.7.0") (source (git-checkout (url (dirname (current-filename))))) (build-system gnu-build-system) (arguments '(#:make-flags '("GUILE_AUTO_COMPILE=0") #:phases (modify-phases %standard-phases (add-after 'unpack 'bootstrap (lambda _ (invoke "sh" "bootstrap")))))) (native-inputs (list autoconf automake pkg-config texinfo)) (inputs (list guile-3.0-latest sdl2 sdl2-image sdl2-mixer sdl2-ttf)) (synopsis "Guile bindings for SDL2") (description "Guile-SDL2 provides pure Guile Scheme bindings to the SDL2 C shared library via the foreign function interface.") (home-page "https://git.dthompson.us/guile-sdl2.git") (license lgpl3+))
- inputs(実行時依存関係)と native‑inputs(ビルドツール)が宣言されます。
は必要な全ての依存パッケージをダウンロードまたはビルドし、その隔離環境内であなたのビルドルーチンを実行します。guix shell
5. 高度な隔離オプション
-
純粋環境
guix shell --pureほとんどの既存環境変数(
等)がクリアされ、Guix が提供するパスだけが見えるようになります。$PATH -
コンテナモード
guix shell --containerLinux 名前空間を使ってホストファイルシステムから完全に隔離された状態でシェルを起動します(Docker に似ています)。
実際にはこれらのフラグはほとんど必要ありません。デフォルトの隔離設定で十分です。
6. 統合と自動化
direnv + Emacs
-
とdirenv
をインストール。emacs-direnv -
に追加:.envrceval $(guix shell --search-paths) -
Emacs で
を有効化。direnv-mode
でM-x compile
を実行すると自動的に Guix 環境が使用されます。make
非対話型利用
guix shell -e 'make' # 単一コマンドを実行
またはスクリプト用:
guix shell --pure --search-paths <<EOF export PATH=$PATH:/my/custom/bin make EOF
7. 同じ guix.scm
を使った代替コマンド
guix.scm| コマンド | 内容 |
|---|---|
| プロジェクトディレクトリ外でパッケージをビルド(欠落ファイルの検出に便利)。 |
| ビルドしたパッケージをユーザープロファイルにインストール。 |
8. 要点まとめ
Guix shell を使うと:
- 必要なものだけを揃える(例:Guile 3, SDL2, make, texinfo)。
- ホストシステムをクリーンに保つ。グローバルインストールやコンテナオーバーヘッドは不要。
- 同じ
をビルド、パッケージ化、実行に再利用できる。guix.scm
最後の一言
Docker や Nix など、あなたが最も使いやすいツールを選んでください。Guix はその中のもうひとつの選択肢として存在します。