【ITニュース解説】Porting MiniScript to Cosmopolitan Libc
2025年09月23日に「Dev.to」が公開したITニュース「Porting MiniScript to Cosmopolitan Libc」について初心者にもわかりやすく解説しています。
ITニュース概要
軽量プログラミング言語MiniScriptのインタプリタが、複数のOSで動作する単一ファイルを作成できる技術Cosmopolitan Libcに対応した。これにより、MiniScriptで書かれたプログラムを、様々な環境で実行可能な自己完結型ファイルとして手軽に共有・配布できるようになる。
ITニュース解説
今回のニュースは、プログラミング言語である「MiniScript」を、「Cosmopolitan Libc」という特殊な技術に対応させたというものだ。これは、ソフトウェアの配布と実行のあり方において、システムエンジニアを目指す皆さんにとって非常に興味深い可能性を提示している。
まず、このニュースを理解するために重要な二つの要素、「MiniScript」と「Cosmopolitan Libc」について説明する。 MiniScriptは、2016年にJoe Strout氏によって生み出されたプログラミング言語である。元々は、子どもたちがプログラミングを学ぶための言語として設計されており、その特徴は「クリーンでシンプル」であることだ。学習しやすく、C#やC++で開発された既存のプロジェクトにも組み込みやすいように設計されている。実際に、MiniScriptの主要な言語仕様は一枚の紙にまとめられるほど簡潔であり、これはプログラミング初心者にとって、複雑な壁にぶつかることなく学習を始められる大きな利点となる。
次に、「Cosmopolitan Libc(コズモポリタン・リブシー)」について説明しよう。これはJustine Tunney氏が開発した、非常に革新的な技術である。通常、C言語やC++で書かれたプログラムは、Windows、macOS、Linuxなど、それぞれのオペレーティングシステム(OS)に合わせて個別にコンパイルする必要がある。しかし、Cosmopolitan Libcを利用すると、「一度ビルドすれば、あらゆる場所で動作する」という特性を持つ、単一の実行ファイルを生成できるのだ。これは、Javaが「一度書けば、どこでも動く」という理念のもと、共通の実行環境であるJava仮想マシン(JVM)を必要とするのとは異なり、Cosmopolitanで生成されたファイルは、各OSから見てネイティブな形式として認識される点が画期的だ。例えば、Windowsでは通常の.EXEファイルとして、macOSやLinuxでは、内部で特殊な処理を行うシェルスクリプトとして動作する。さらに、この単一ファイル自体がZIPファイルとしての機能も持ち合わせており、プログラムが実行時に必要とする追加のファイル(データやライブラリなど)を、そのファイル内部にまとめて格納できる。これにより、プログラム本体だけでなく、その実行に必要なすべてを一つの自己完結型ファイルとして配布できるのだ。
今回のプロジェクトで達成されたのは、MiniScriptのC++版コマンドラインインタープリタを、このCosmopolitan Libcを使ってコンパイルし、Windows、macOS、Linuxなど、複数のOS上で動作する「ユニバーサル実行ファイル」として作り上げたことだ。具体的には、「miniscript.com」という、たった一つのファイルが生成された。このファイルには、MiniScriptのコマンドラインインタープリタ本体だけでなく、日付や時刻の処理、JSONデータの操作、リストやマップのユーティリティなど、MiniScriptでよく利用される標準ライブラリ群もすべて内蔵されている。これらは、Cosmopolitanの「ZIPファイルとしての機能」を活用して、実行ファイルの中に圧縮された状態で格納されている。 この成果のさらなる応用として、ユーザーが自分で作成したMiniScriptのプログラムも、このユニバーサル実行ファイルをベースにして、同様に単一の実行ファイルとして配布できるようになったことだ。その手順は比較的簡単である。まず、生成された「miniscript.com」ファイルをコピーし、「MyAwesomeProgram.com」のように好きな名前に変更する。次に、このファイルの名前を一時的に「MyAwesomeProgram.zip」に変更し、その中に、あなたが書いたMiniScriptのスクリプトファイル(例: MyAwesomeProgram.ms)や、そのスクリプトがインポートする追加のライブラリファイルをZIP形式で追加する。さらに、ZIPファイル内に「.args」という名前のファイルを作成し、そこに「/zip/MyAwesomeProgram.ms」のように、実行したいスクリプトのパスを記述する。最後に、ファイル名を再び「MyAwesomeProgram.com」に戻せば、この「MyAwesomeProgram.com」を実行するだけで、あなたが作ったMiniScriptのプログラムが、特別な環境設定なしにどこでも動作するようになる。
では、このような成果は具体的にどのようにして実現されたのだろうか。
MiniScriptは、CMakeというビルドシステムを使って構築されるC++プロジェクトだ。Cosmopolitan Libcは、このC++コードをCosmopolitan形式の実行ファイルにコンパイルするための特別なコンパイラ「cosmocc」を提供している。このコンパイラを使用することで、MiniScriptのコードをCosmopolitan形式でビルドすることが可能となった。
しかし、単にコンパイルするだけでは全てが機能するわけではなかった。MiniScriptが、自身の実行ファイルの場所を正確に把握するための機能(whereami.cというファイルで実装されている部分)が、Cosmopolitan環境に対応していなかったため、ここを修正する必要があった。具体的には、Cosmopolitanが提供するGetProgramExecutableNameという関数を利用するようにコードを調整し、MiniScriptがCosmopolitanプラットフォーム上で動作していることを正しく認識できるようにした。
また、Cosmopolitanの「ZipFS」という機能、つまり実行ファイル自体がZIPファイルのように振る舞い、その内部にファイルを格納できる仕組みを活用することも重要だった。MiniScriptの標準ライブラリをこのZipFSの中に格納することで、すべてのライブラリが単一の実行ファイルに統合された。具体的には、MiniScriptがライブラリを探すためのパス(デフォルトのインポートパス)を、Cosmopolitan環境でコンパイルする際に「/zip/lib」というZipFS内のパスも参照するように変更した。
さらに、プログラム実行時に与えるコマンドライン引数(arguments)の処理についても、Cosmopolitan固有の機能を利用した。Cosmopolitanではcosmo_argsという関数が提供されており、これを呼び出すことで引数を適切に処理できる。MiniScriptのコードで引数処理を行う前にこのcosmo_argsを呼び出すように組み込むことで、Cosmopolitan環境下での引数処理も正しく機能するようになった。これらの修正は、Cosmopolitanでコンパイルする場合にのみ適用されるように条件分岐を設けることで、他のプラットフォームへの影響なく実現されている。
このMiniScriptのCosmopolitan Libcへの移植は、なぜこれほどまでに興味深く、また有用なのだろうか。 まず、MiniScriptが、すでにCosmopolitanに対応しているJanet、Lua、Perl、PHP、Python、Tclといった他の有名なプログラミング言語の仲間入りを果たしたという点で、技術的な進歩として評価される。 しかし、最も重要な意義は、その「配布の容易さ」と「実行の手軽さ」にある。システムエンジニアが開発したツールやアプリケーションを他のユーザーに提供する際、環境構築は常に大きな課題となる。OSの種類、必要なランタイムのバージョン、依存するライブラリのインストールなど、ユーザーがプログラムを実行するまでに準備すべきことは多く、これがソフトウェアの普及を妨げる要因となることが少なくない。 だが、Cosmopolitan LibcとMiniScriptの組み合わせは、この課題を劇的に解決する。MiniScriptで開発されたプログラムを、MiniScriptの実行環境、必要なライブラリ、そしてプログラム本体まですべて含めて、「MyAwesomeProgram.com」のような一つの単一ファイルとしてパッケージングし、配布することが可能になる。これにより、ユーザーは、そのファイルを受け取ったら、特別なインストール作業や複雑な環境設定を行うことなく、単にダウンロードしてクリックするだけでプログラムを実行できる。Windowsユーザーならダブルクリック、macOSやLinuxユーザーなら、実行権限を与えてコマンドラインから実行するだけだ。これにより、開発者は、ユーザーがプログラムを実行するまでの障壁を最小限に抑えることができ、より多くの人々に自分のソフトウェアを使ってもらえる可能性を大きく広げられる。これは、システムエンジニアが開発する多様なツールの配布方法に、非常に強力で魅力的な新しい選択肢が加わったことを意味する。