**Gleam アプリを単一の実行ファイルにまとめる手順**

Gleam アプリケーションを1つのスタンドアロンバイナリとして配布したい場合、以下のステップで進めます。

---

### 1. プロジェクトをコンパイル  
```bash
gleam build --release
```
`./_build/default/gleam` に最適化された成果物が生成されます。

### 2. Erlang リリースを作成(任意)  
追加の Erlang 依存関係をバンドルしたい場合は、次のようにリリースを作ります。  
```bash
rebar3 as prod tar
```

### 3. Mix を使って配布設定  
`mix.exs` に Gleam コンパイラを追加し、リリースを構成します。  
```elixir
def project do
  [
    app: :my_app,
    version: "0.1.0",
    elixir: "~> 1.14",
    start_permanent: Mix.env() == :prod,
    deps: deps(),
    escript: escript_config()
  ]
end

defp escript_config do
  [
    main_module: MyApp.CLI,
    # Gleam コードを先にコンパイルするよう指示
    extra_applications: [:gleam]
  ]
end
```

### 4. 実行ファイルの生成  
```bash
mix escript.build
```
生成されたバイナリ(`my_app`)は `./_build/dev/rel/my_app/bin` に配置されます。

### 5. バイナリをテスト  
```bash
./_build/dev/rel/my_app/bin/my_app --help
```

### 6. 配布  
- バイナリと必要な設定ファイルをターゲットマシンへコピーします。  
- 標準の Erlang/Elixir ランタイム以外に実行時依存はありません。

---

## 主なポイント

- **`gleam build --release`** で本番用の Gleam アーティファクトを作成。  
- Mix の **`escript.build`** がコンパイル済みコードを単一バイナリにまとめます。  
- このバイナリは、同じ Erlang/Elixir バージョンが動く環境ならどこでも実行可能です。

2026/03/03 1:20

**Gleam アプリを単一の実行ファイルにまとめる手順** Gleam アプリケーションを1つのスタンドアロンバイナリとして配布したい場合、以下のステップで進めます。 --- ### 1. プロジェクトをコンパイル ```bash gleam build --release ``` `./_build/default/gleam` に最適化された成果物が生成されます。 ### 2. Erlang リリースを作成(任意) 追加の Erlang 依存関係をバンドルしたい場合は、次のようにリリースを作ります。 ```bash rebar3 as prod tar ``` ### 3. Mix を使って配布設定 `mix.exs` に Gleam コンパイラを追加し、リリースを構成します。 ```elixir def project do [ app: :my_app, version: "0.1.0", elixir: "~> 1.14", start_permanent: Mix.env() == :prod, deps: deps(), escript: escript_config() ] end defp escript_config do [ main_module: MyApp.CLI, # Gleam コードを先にコンパイルするよう指示 extra_applications: [:gleam] ] end ``` ### 4. 実行ファイルの生成 ```bash mix escript.build ``` 生成されたバイナリ(`my_app`)は `./_build/dev/rel/my_app/bin` に配置されます。 ### 5. バイナリをテスト ```bash ./_build/dev/rel/my_app/bin/my_app --help ``` ### 6. 配布 - バイナリと必要な設定ファイルをターゲットマシンへコピーします。 - 標準の Erlang/Elixir ランタイム以外に実行時依存はありません。 --- ## 主なポイント - **`gleam build --release`** で本番用の Gleam アーティファクトを作成。 - Mix の **`escript.build`** がコンパイル済みコードを単一バイナリにまとめます。 - このバイナリは、同じ Erlang/Elixir バージョンが動く環境ならどこでも実行可能です。

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

要約

Japanese Translation:

この記事では、Gleam プロジェクトを単一の実行ファイルに変換する方法について説明しています。Gleam 自体は Erlang または JavaScript にしかコンパイルできず、ネイティブバイナリを生成しないためです。

  1. セットアップ
    gleam install
    を実行して Gleam をインストールし、新しいプロジェクトを作成します(
    gleam new <project_name>
    )。
  2. ビルド
    gleam build --target=erlang
    または
    gleam build --target=javascript
    のいずれかでプロジェクトをコンパイルします。ターゲットに応じて、どのパッケージング手順を採用するかが決まります。

Erlang ターゲット

  • Gleescript は Erlang の stdlib を使って escript をバンドルします。
    gleam add gleescript
    を実行し、ビルド後に
    gleam run -m gleescript
    で escript 実行ファイルを生成します。この結果得られるバイナリはホストマシン上に Erlang VM が必要です。
  • Burrito は BEAM コードを自己解凍アーカイブに包み、Erlang ランタイムなしで実行できるようにしますが、現在 Gleam との互換性は未テストです。

JavaScript ターゲット

  1. gleam build --target=javascript
    でビルドします。
  2. 生成された
    bundle.cjs
    をバンドル(例:Esbuild)。
  3. 実行ファイルに変換します:
    • Deno compile (
      deno compile bundle.cjs
      ) –
      --target=<arch>
      や権限オーバーライドなどのフラグを追加でき、Deno ランタイムを埋め込むため約 100 MB の大きなバイナリが生成されます。
    • Node SEA(Node v23+で実験的) – sea‑config ファイルと blob 注入が必要で、CommonJS のみサポート。自己完結型の実行ファイルを作成します。
    • Bun build --compile – Bun 自身のランタイムを含む高速バンドルで、同様に約 100 MB の大きなバイナリが生成されます。
    • Nexe – Node.js を実行ファイルへ変換する別ツールですが、Gleam との互換性はまだ完全には検証されていません。

記事では、Deno/Bun 実行ファイルのランタイムフットプリントが大きいことや、未テストの組み合わせ(例:Burrito + Gleam)などの注意点を指摘しています。また、将来の更新でプラットフォームサポートが拡張されたり、ビルドプロセスが簡素化される可能性があると示唆しています。最終的に、これらのツールは開発者が Gleam アプリケーションを単一バイナリとして配布できるようにし、エンドユーザーへのデプロイを容易にするとともに、クロスプラットフォームでの配布も簡便化します。

本文

目次

  • Gleam プロジェクトの作成について
  • 実行ファイルを作る方法
    • Erlang ターゲット
      • Gleescript(システムErlangが必要)
    • Burrito
    • JavaScript ターゲット
      • Deno compile
      • Node SEA
      • Bun build —compile
    • Nexe
  • 結論

Gleamについて

Gleam は Erlang と JavaScript にコンパイルされる比較的新しい関数型言語です。Rust のような構文を持ち、Elm の複雑さと楽しく作業できる点が特徴です。

問題は、Gleam では実行ファイル(バイナリ)をネイティブに生成する機能がないことです。本ガイドでは、様々な手段で Gleam 実行ファイルを作成し、そのメリットと注意点を解説します。私の WIP プロジェクトを例にプロセスを示します。


Gleam プロジェクトの作成

  1. Gleam をインストール – 公式手順を ここ に従ってください。
  2. 新規プロジェクトを作る
    gleam new <project_name>
    
  3. ビルドする
    gleam build --target=erlang|javascript
    
    ターゲットは生成される出力と、実行ファイルにパッケージ化する方法を決定します。

実行ファイル作成の手段

Erlang ターゲット – Gleescript(システムErlangが必要)

Gleescript は Erlang の

escript
モジュールを使って単一の escript をバンドルします。Erlang VM がインストールされている任意のマシンで実行可能です。ただし、古い VM では新しい bytecode がサポートされないことがあるため、1〜2世代以内に留めると安全です。

手順

  1. Gleescript を依存関係として追加
    gleam add gleescript
    
  2. Erlang 用にビルド
    gleam build --target erlang
    
  3. escript を作成
    gleam run -m gleescript
    
  4. 実行ファイルを起動
    ./your_project
    

Burrito

Burrito は Elixir アプリケーションを BEAM バーニャっとに包み、コンパイル済み BEAM コードと必要な ERTS を含む自己解凍アーカイブを生成します。Windows、macOS、Linux で動作します。

Gleam と Burrito の組み合わせはまだ完全にはテストしていませんが、まず escript に変換した後にラップすることで動く可能性があります。


JavaScript ターゲット

Deno compile

Deno の

compile
コマンドは、Deno ランタイムをバンドルした単一の実行ファイルを生成します。ただし、Gleam が出力する JS を Webpack/Parcel/Rollup/Esbuild などで1つにまとめる必要があります。

手順

  1. JavaScript 用にビルド
    gleam build --target=javascript
    
  2. Esbuild でバンドル
    esbuild \
      build/dev/javascript/<project_name>/<project_name>.mjs \
      --platform=node \
      --minify-whitespace --minify-syntax \
      --bundle \
      --outfile=bundle.cjs \
      --format=cjs \
      --footer:js="main();"
    
  3. 実行ファイルにコンパイル
    deno compile \
      --target=<target_architecture> \
      --output <executable_name> \
      bundle.cjs
    

実行ファイルがファイルシステムやネットワークアクセスを必要とする場合は、適切な権限を付与してください。

Node SEA(Single Executable Applications)

Node の実験的 SEA 機能は、Node.js アプリを単一の実行ファイルにバンドルし、Node がインストールされていなくても動作させます。ただし CommonJS モジュールのみ対応しています。

手順

  1. JavaScript 用にビルド
    gleam build --target=javascript
    
  2. Esbuild でバンドル(上記と同じコマンド)。
  3. sea-config.json
    を作成(main と output フィールドが必須)。
  4. SEA バイオを生成
    node --experimental-sea-config sea-config.json
    
  5. Node のバイナリをコピーし、バイオを注入
    cp $(command -v node) <executable_name>
    npx postject <executable_name> NODE_SEA_BLOB <output>.blob --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2
    
  6. (任意)バイナリを署名し、実行
    ./<executable_name>
    

この手順でセグメンテーションフォルトが発生したため、更なる調査が必要です。

Bun build —compile

Bun の

--compile
フラグは JS ファイルをバンドルし、外部バンドラーなしで単一の実行ファイルにコンパイルします。Deno と同様ですが、設定が簡潔です。

手順

  1. JavaScript 用にビルド
    gleam build --target=javascript
    
  2. Bun でコンパイル
    bun build \
      --compile \
      --outfile=bundle \
      build/dev/javascript/<project_name>/<project_name>.mjs \
      --footer="main();"
    

Bun は非常に便利で高速です。


Nexe

Nexe は Node.js アプリを単一の実行ファイルにコンパイルします。Gleam との組み合わせはまだテストしていませんが、概念的には簡単に利用できるはずです。


結論

使ったツール・ライブラリの中で Bun が最も高速かつ扱いやすく判明しました。Bun と Deno のバンドルランタイムは実行ファイルサイズが大きくなる(通常 100 MB を超える)点だけ注意が必要です。非本番用途なら問題ありませんが、配布を考慮する場合はこの点を念頭に置いてください。

同じ日のほかのニュース

一覧に戻る →

2026/03/03 7:32

メタ社のスマートグラスの裏側にいる作業員は、全てを見渡すことができます。

## Japanese Translation: > Metaの新しい「Meta Ray‑Ban」メガネは、仕事・旅行・リアルタイム翻訳・プライバシー制御を一つのAIアシスタントとして位置付けられています。EssilorLuxotticaと共同で製造され、スウェーデンで販売される予定で、2023‑24年に200万台から2025年秋には700万台へと売上が急増する見込みです。このデバイスはサーバー側で処理を行う必要があり、ローカルでの対話は不可能です。アプリは電話にインターネット接続がなくても、常にMetaサーバーにアクセスします。 > Metaのプライバシーポリシーでは、ユーザーが明示的にオプトインしない限り、音声・テキスト・画像・動画を自動的に取得することが許可されています。すべてのコンテンツはAIによって自動または手動でレビューされる可能性があり、オプトアウトの選択肢はありません。プライバシー専門家は、ユーザーがしばしばメガネのカメラがAIアシスタントに話しかけた際に録画していることを認識していない点を指摘し、透明性の欠如を強調しています。 > データ注釈作業はサブコントラクター(例:ナイロビのSama)に委託されており、従業員は極めてプライベートな資料(例:トイレ訪問、セックスシーン、銀行カード情報など)をレビューすることがあります。匿名化は不完全であり、照明が悪い場合には顔が見えてしまう可能性があります。Metaの利用規約では保存場所や詳細な取り扱いについて具体的に示されておらず、ヨーロッパの幹部はGDPR準拠がサーバー所在地よりもデータ保護基準に依存していると指摘し、法的責任はMeta Irelandに帰属すると述べています。 > スウェーデンのプライバシー保護機関はまだ製品をレビューしていないため、ユーザーが自分のデータがAIモデルのトレーニングや広告ターゲティングにどのように使用されるかを十分に理解できていないという懸念があります。MetaはクラウドベースのAI処理を維持しつつメガネの販売を継続する計画であり、これがGDPR監視の強化につながり、企業や消費者がウェアラブルAIデバイスにおけるより明確なオプトインデータポリシーを要求する動きを促す可能性があります。

2026/03/03 6:09

Macintoshへようこそ(お帰りなさい)。

## Japanese Translation: --- ## Summary 著者は、最近の macOS リリース―特に不安定な「macOS Tahoe」―が継続的なバグと頻繁な UI 変更に悩まされており、システムの安定性やユーザー体験を侵食していると主張しています。主要な問題点は次の通りです: - **Time‑Machine バックアップ** は古いスナップショットが削除されない限り失敗します。 - **Spotlight** のタグインデックスは不完全な結果しか返さず、インデックスを再構築したり Finder を再起動しても部分的にしか解決しません。 - **Finder** は Spotlight クエリ中や検索結果の更新時にハングします。また、外部ファイルが作成された後にフォルダ内容を更新できず(*Go To Folder* やパスオートコンプリートといった回避策も限定的で、しばしば Finder の再起動が必要になります)。 - **AirPods Pro** は約 1 秒後に音声の不具合を起こし、ファームウェアや OS アップグレードでは問題は解決されません。 - **全画面ウィンドウ** は Cmd + Tab で切り替えるとフォーカスが失われ、キーボードショートカットが機能せず、ウィンドウをクリックするまで Safari のビデオコントロールに影響します。 これらの問題は複数の macOS リリースおよび Mac モデル(著者自身の M1 Max 2021 を含む)で継続しており、Apple 自身のコンポーネントに起因することを示しています。著者は、アイコン変更やダークパターン UI の微調整といった Apple の迅速な美観修正が長期的信頼性を損ねる可能性があると警告しています。将来のアップデートでバグが対処されることは期待できるものの、安定性よりも視覚的洗練を優先することへの懸念があります。 **Rosetta 2 の段階的廃止** は ARM64 Linux コンテナサポートに依存している開発者にとってさらに悪影響を及ぼし、アプリケーションの互換性を脅かす恐れがあります。総じて、著者は Apple に対し、短期的な美観更新よりもソフトウェア安定性、謙虚さ、および長期的利用価値に再集中するよう訴えています

2026/03/03 5:30

ブリティッシュコロンビア州、時刻変更を廃止し一年中サマータイムを採用

## Japanese Translation: ### 改訂要約 ブリティッシュコロンビア州は、2026年11月1日付で「太平洋時間(Pacific Time)」と呼ばれる夏時間を永久に採用し、それ以降の時刻変更をすべて終了します。デービッド・エビー首相は月曜日にこの決定を発表し、3月8日(最後の春先進調整)が最終的な移行となると述べました。この動きは、2019年の公衆意見調査で回答者の93%が健康・安全上の理由から永久夏時間を支持したことに続くものです。エビー氏は子供やペットの睡眠不足、二度の時刻変更による車両事故増加を強調しました。歴史的に、BC州は1918年以降に時刻を切り替えてきました(法務長官ニキ・シャルマ氏が指摘)。州政府は最終変更前に住民に8か月の調整期間を設け、カリフォルニア州、オレゴン州、ワシントン州といった米国隣接州にも同様の法案採択を促しています。東部BC地域(例:デイソンクリーク)はすでに年間を通じて山岳標準時を観測しているため除外されます。新制度下では、バンクーバーの永久夏時間で最も早い日の出は6月5:06 AM、最も遅い日は12月9:08 AMです。夕暮れは12月5:14 PMから6月9:22 PMまで変動します。この変更は生活品質の向上、事故リスクの低減、およびイエローナイフ州と同じ年間を通じて夏時間を採用することでBC州を調和させることを目的としています。

**Gleam アプリを単一の実行ファイルにまとめる手順** Gleam アプリケーションを1つのスタンドアロンバイナリとして配布したい場合、以下のステップで進めます。 --- ### 1. プロジェクトをコンパイル ```bash gleam build --release ``` `./_build/default/gleam` に最適化された成果物が生成されます。 ### 2. Erlang リリースを作成(任意) 追加の Erlang 依存関係をバンドルしたい場合は、次のようにリリースを作ります。 ```bash rebar3 as prod tar ``` ### 3. Mix を使って配布設定 `mix.exs` に Gleam コンパイラを追加し、リリースを構成します。 ```elixir def project do [ app: :my_app, version: "0.1.0", elixir: "~> 1.14", start_permanent: Mix.env() == :prod, deps: deps(), escript: escript_config() ] end defp escript_config do [ main_module: MyApp.CLI, # Gleam コードを先にコンパイルするよう指示 extra_applications: [:gleam] ] end ``` ### 4. 実行ファイルの生成 ```bash mix escript.build ``` 生成されたバイナリ(`my_app`)は `./_build/dev/rel/my_app/bin` に配置されます。 ### 5. バイナリをテスト ```bash ./_build/dev/rel/my_app/bin/my_app --help ``` ### 6. 配布 - バイナリと必要な設定ファイルをターゲットマシンへコピーします。 - 標準の Erlang/Elixir ランタイム以外に実行時依存はありません。 --- ## 主なポイント - **`gleam build --release`** で本番用の Gleam アーティファクトを作成。 - Mix の **`escript.build`** がコンパイル済みコードを単一バイナリにまとめます。 - このバイナリは、同じ Erlang/Elixir バージョンが動く環境ならどこでも実行可能です。 | そっか~ニュース