プログラミング言語

BoxLangとは?JVM上で動く動的言語の特徴・構文・Java/CFML連携・導入方法

BoxLangとは?JVM上で動く動的言語の特徴・構文・Java/CFML連携・導入方法

BoxLangは、CommandBoxやColdBoxで知られるOrtus Solutionsが開発したJVM(Java仮想マシン)向けの動的プログラミング言語です。2025年5月に安定版1.0がGA(一般提供)となり、ライセンスはApache 2.0のオープンソース。ColdFusion/CFMLの資産を活かしつつ、OS・Webサーバー・AWS Lambda・Android/iOS・WebAssemblyなど複数ランタイムで同じコードを動かせる点が最大の特徴です。この記事では公式ドキュメントと一次情報をもとに、BoxLangの位置づけ・基本構文・Java/CFML連携・導入手順・AIモジュールまでを実務目線で整理します。

まとめ:BoxLangの要点

  • 開発元:Ortus Solutions(ColdBox/CommandBoxの開発元)。2025年5月に1.0がGA、以降1.x系で更新が続く。
  • ライセンス:本体はApache 2.0のオープンソース。有償のBoxLang+ / BoxLang++はサポートと企業向け機能を提供。
  • 正体:JVM上で動く動的型付け言語。CFMLの後継・上位互換を志向し、CFMLコードをbx-compat-cfmlモジュールで実行できる。
  • 強み:1つのコードをOS/サーバー/サーバーレス/モバイル/WebAssemblyへ展開できるマルチランタイム設計。
  • AI:bx-aiモジュールでOpenAI・Claude・Gemini・Grok・Bedrockなどを共通APIから切り替えて利用できる。

BoxLangの開発元・ライセンス・立ち位置

BoxLangを開発するOrtus Solutionsは、CFMLアプリケーションフレームワークのColdBoxやパッケージ管理ツールのCommandBoxを長年提供してきた企業です。BoxLangは同社が「CFMLの再定義」を掲げて設計した新言語で、既存のColdFusion/Lucee資産を延命しつつ、モダンなJVM機能とクラウドネイティブなアーキテクチャへ移行する経路を提供します。

本体はApache 2.0でオープンソース公開されており、無償で商用利用できます。エンタープライズ向けの優先サポートや追加機能は有償版のBoxLang+/BoxLang++が担う二層構成です。BoxLangが動作する基盤であるJVMの仕組みはJava仮想マシン(JVM)とは何かをわかりやすく解説で整理しているので、前提知識として押さえておくと理解が早くなります。

BoxLangの主な特徴

BoxLangの設計は「動的言語の書きやすさ」と「JVMの実行基盤」を両立させることに軸足があります。なかでも実務で効くのは、後述するマルチランタイムの一枚岩性です。加えて次の点が生産性を押し上げます。

  • 動的型付けと低冗長な構文:型宣言は任意で、暗黙の型推論が効く。Javaより記述量が少なく、プロトタイピングが速い。
  • マルチランタイム:中核はOSネイティブバイナリ(CLI)、Tomcat/Jetty等のサーブレットコンテナ、AWS Lambda/Azure Functions、JSR-223スクリプティングで同じ言語仕様が動く。Android/iOSやWebAssembly/JS向けは対応拡大中で、WASM/JSは別ランタイム(MatchBox)経由での提供が進む。
  • モジュール機構:CFML互換・AI・ORM等を独立モジュールとして追加でき、コア本体は小さく保てる。

JVM上で動くため、実行時にはJITコンパイラによる最適化の恩恵を受けます。動的言語がなぜJVMで高速に動くのかはJITコンパイラとは?仕組み・種類とAOT・インタプリタの違いをわかりやすく解説が参考になります。

BoxLangの基本構文

変数宣言はvarで行い、型指定は不要です。配列は角括弧、構造体(マップ)は波括弧のリテラルで書け、文字列補間は#記法を使います。次は最小限の例です。

// 変数と型推論
var name = "BoxLang";
var version = 1.0;

// 配列と構造体リテラル
var langs = [ "Java", "CFML", "BoxLang" ];
var user  = { id : 1, name : "Ortus" };

// 文字列補間(#記法)
println( "Hello, #name# v#version#" );

// 関数定義(クロージャも可)
function greet( who ) {
    return "Hi, " & who;
}
println( greet( user.name ) );

制御構文はif/for/while/switchを備え、無名関数(クロージャ)も定義できます。CFML経験者にはほぼ地続きの文法で、Java経験者にとっては記述量が大きく減る書き味です。

JavaおよびCFML(ColdFusion)との連携

Javaクラスの直接呼び出し

BoxLangはJVM言語なので、標準のJavaライブラリや既存のJavaクラスをそのまま呼び出せます。InvokeDynamicを基盤に動的ディスパッチを行い、Javaのインターフェースやアノテーションも利用可能です。既存のJava資産(バリデーションや暗号化ライブラリなど)を書き直さずに使える点が、段階的な導入を後押しします。

CFMLコードの実行と移行

ColdFusion/Luceeで書かれたCFMLコードは、bx-compat-cfml互換モジュールを入れることでBoxLang上でネイティブ実行できます。すべてのタグ・関数が1対1で対応するわけではないため、移行時は互換モジュールで動かしながら非対応箇所を洗い出し、段階的にBoxLang構文へ寄せていくのが現実的です。全面書き換えを前提にしない「まず動かす」経路が用意されているのが、他のJVM言語への乗り換えとの違いです。逆に言えば、CFML資産がまったく無い新規案件では、この移行互換性という最大の利点が効かず、KotlinやGroovyなど成熟したJVM言語で十分な場面も多い点は押さえておくべきです。

インストールと実行環境

導入経路は主に、OS向けバイナリのインストーラ、Ortusのパッケージ管理ツールCommandBox経由、Dockerイメージの3系統です。インストール後はboxlangコマンドでスクリプトを実行でき、対話的に試すREPLも同梱されます。複数バージョンを切り替えるBVM(BoxLang Version Manager)や、VSCode拡張によるシンタックスハイライト・デバッグにも対応します。

デプロイ先はDocker、JARへの埋め込み、AWS Lambdaなど幅広く選べます。とくにサーバーレスでJVM言語を動かす際のコールドスタート対策は、サーバーレスJavaの進化とその利点: Lambda SnapStartとAWS Lambda Web Adapterの紹介で扱っているLambda SnapStart等の知見がそのまま応用できます。

BoxLang AI(bx-ai)モジュール

BoxLangはAI連携を公式モジュールbx-ai(BoxLang AI)として提供します。1つの共通APIから複数の大規模言語モデルを抽象化し、設定を1行変えるだけでプロバイダーを切り替えられるのが特徴です。対応プロバイダーはOpenAI、Claude(Anthropic)、Gemini(Google)、Grok(xAI)、DeepSeek、Perplexity、Amazon Bedrock、Ollama、Mistral、Cohereなど多数にわたります。

補足:Grokを提供するのはxAIであり、Metaではありません(Metaの代表的LLMはLlama系)。プロバイダー名を混同しないよう注意してください。APIキーはOPENAI_API_KEYやCLAUDE_API_KEYのように「プロバイダー名+_API_KEY」の環境変数から自動検出されます。モジュールは2026年時点でv2系まで進み、マルチテナンシーやBedrock対応など企業向け機能が追加されています。

よくある質問

BoxLangはColdFusionの後継ですか?

Ortus SolutionsはCFMLの再定義・現代化として位置づけています。CFMLコードを互換モジュールで実行できるため、ColdFusion/Luceeからの移行先として設計されていますが、CFMLだけでなくJVM言語としての新しい記述スタイルも併せ持ちます。

BoxLangは無料で使えますか?

本体はApache 2.0で無償・商用利用可です。優先サポートや企業向け機能が必要な場合のみ、有償のBoxLang+/BoxLang++を選びます。

既存のJavaライブラリは使えますか?

使えます。JVM上で動くためJavaクラスを直接呼び出せ、インターフェースやアノテーションも利用できます。

どのランタイムで動きますか?

OSネイティブ(Windows/Mac/Linux)、サーブレットコンテナ、AWS Lambda/Azure Functions、Android/iOS、WebAssemblyなど複数ランタイムに対応します。

AIモデルはどう切り替えますか?

bx-aiモジュールを使い、boxlang.jsonでプロバイダーとモデルを指定します。設定変更だけでOpenAIとClaudeなどを入れ替えられ、コード側の変更は不要です。

関連記事

お気に入りに入れた記事の一覧

資料請求

今日のトレンド記事 直近 24 時間で、いつもより多く読まれている記事

  1. 2026.09.28 テックブログ タイムズカーの不正アクセスと約660万件の流出|免許証画像を退会者まで残さない保管設計
  2. 2026.09.25 コラム 最低賃金引き上げ【令和8年度】47都道府県の改定額・発効日と企業の対応手順
  3. 2026.09.25 コラム 障害者雇用の助成金一覧:月いくら・支給要件と申請書類を勤怠データで揃える方法
  4. 2026.09.05 コラム 犯罪収益移転防止法の本人確認:2027年4月の対面IC読み取り義務化と改修要件
  5. 2026.09.28 テックブログ anthropic skillsとは?公式19スキルの中身とClaude Code・APIでの導入手順

RELATED POSTS 関連記事

目次