「Culebra」は、モダンでスッキリした構文と豊富な標準ライブラリが魅力の動的型付け言語です。PythonやRubyのような気軽さで使える上に、実行ファイルも生成可能です。深層学習からデスクトップアプリ、ゲーム、ツール作成など、幅広い用途に使えます。加えて、開発者が日本人というのも応援したくなるポイントです。今回は、モダンな機能をたくさん備えたCulebraの魅力を掘り下げてみましょう。

  • モダンな動的型付け言語「Culebra」を試してみよう

    モダンな動的型付け言語「Culebra」を試してみよう

今後の飛躍が楽しみな言語「Culebra」

「Culebra」は、新しい言語で、本稿執筆時点(2026年8月)で、v0.4.0がリリースされたばかりです。開発履歴は2018年2月から確認できますが、ここ数か月で、開発が急速に進んでいます。こちらのGitHubリポジトリにて公開されています。

  • 期待の新言語「Culebra」の公開ページ

    期待の新言語「Culebra」の公開ページ

開発者は、C++向けHTTPライブラリのcpp-httplibやPEGパーサーのcpp-peglibなどで有名なyhirose氏です。氏はC++によるライブラリや言語処理系など、比較的低レイヤー寄りの技術を扱うプロジェクトを多数公開しており、Culebraにもそうした実装経験が生かされています。

Culebraは、PythonやRustなどのモダンなプログラミング言語の良い所を数多く取り入れており、とてもスッキリしたプログラムを記述できます。また、深層学習やGUIアプリ開発など、用途の広さも特徴です。

Culebraのインストールから「Hello World!」まで

Culebraをダウンロードして、実際に手を動かしながら、その魅力を確認してみましょう。各OS向けのバイナリがこちらで配布されています。

ただし、ブラウザからアーカイブを直接ダウンロードすると、OSのセキュリティ保護機能によって実行が制限されることがあります。そのため、コマンドラインからダウンロードすると便利です。

WindowsではPowerShellを開いて次のコマンドを実行すると良いでしょう。以下は、原稿執筆時点の最新版はv0.4.0で、これをダウンロードする手順を示したものです。

# Windows版をダウンロード
curl.exe -L `
  -o culebra-windows-x64.zip `
  https://github.com/yhirose/culebra/releases/download/v0.4.0/culebra-windows-x64.zip
# アーカイブを解凍する
Unblock-File .\culebra-windows-x64.zip
Expand-Archive `
  .\culebra-windows-x64.zip `
  -DestinationPath .\culebra-windows-x64
# 実行ファイルのあるフォルダに移動
cd culebra-windows-x64\culebra-v0.4.0-windows-x64

macOSの場合も、ターミナル.appを起動して以下のようなコマンドを実行すると良いでしょう。

# macOSでダウンロードして解凍
curl -fsSL https://github.com/yhirose/culebra/releases/download/v0.4.0/culebra-macos-arm64.tar.gz | tar xz
# 実行ファイルのあるフォルダに移動
cd culebra-v0.4.0-macos-arm64

以下のようにして、実行できます。すると、対話実行環境が起動して、一行ずつプログラムを実行できます。

# Windowsの場合
.\culebra
# macOSの場合
./culebra

一番簡単なプログラムを実行してみましょう。次のコードは「Hello, World!」と表示するものです。

println("Hello, World!")

実際に、ターミナルで動かしたのが次の画面です。println関数を実行するだけなら、ほかのスクリプト言語と似たような感じです。

  • 対話実行環境でCulebraを動かしたところ

    対話実行環境でCulebraを動かしたところ

FizzBuzzのプログラムを作ってみよう

次に、本連載恒例のFizzBuzzのプログラムを作ってみましょう。FizzBuzz問題とは、次のようなプログラミングの練習問題です。

1から100までの数を出力するプログラムを書いてください。ただし、3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」と表示してください。3と5の両方の倍数の時は「FizzBuzz」と表示してください。

Culebraで実装したプログラムは次のようになります。以下は、非常にオーソドックスな方法で記述したものです。

# 関数を定義
fizzbuzz = fn (n) {
  # Fizz/Buzzの条件を確認
  is_fizz = n % 3 == 0
  is_buzz = n % 5 == 0
  # 条件を一つずつ確認
  if is_fizz && is_buzz {
    "FizzBuzz"
  } else if is_fizz {
    "Fizz"
  } else if is_buzz {
    "Buzz"
  } else {
    n
  }
}

# 関数を100回呼び出す
for i in range(1, 101) {
  println(fizzbuzz(i))
}

プログラムを実行するには、上記のプログラムを「fizzbuzz.cul」という名前で保存して、次のコマンドを実行します。

# macOSの場合
./culebra fizzbuzz.cul
# Windowsの場合
.\culebra fizzbuzz.cul

すると、次の画面のように表示されます。

  • FizzBuzz問題を解くプログラムを実行したところ

    FizzBuzz問題を解くプログラムを実行したところ

改めて、プログラムを見てみましょう。関数定義は「関数名 = fn (引数) { 関数本体}」のように記述します。また、Rustのようなモダンな言語と同様に、if文が値を返すことができます。for文ではrange関数を使って任意の範囲の値を生成できます。

次に、match文を使って、FizzBuzzをもう少し簡潔に記述してみましょう。match文を使うと、各条件ごとに「条件 => 値」のように記述できます。

# FizzBuzz関数を定義
is_fizz = |n| n % 3 == 0
is_buzz = |n| n % 5 == 0
fizzbuzz = fn (n) {
  match (is_fizz(n), is_buzz(n)) {
    (true , true ) => 'FizzBuzz',
    (true , false) => 'Fizz',
    (false, true ) => 'Buzz',
    (false, false) => n
  }
}

# FizzBuzz関数を100回呼ぶ
for i in range(1, 101) {
  println(fizzbuzz(i))
}

デスクトップアプリを作ってみよう

デスクトップアプリを作るのも簡単です。Culebraには、OSが提供するWebViewコンポーネントを利用するライブラリが標準搭載されています。以下のような簡単なプログラムで、任意のHTMLをウィンドウに描画できます。

let w = Webview.Window.new()
w.set_title('hello')
w.set_size(480, 320)
w.set_html('<h1>心配事があると心が沈み良い言葉によって心が晴れる</h1>')
w.run()

上記のコードを実行すると、次のように表示されます。とても簡単にデスクトップアプリが作成できます。

  • Windowsでデスクトップアプリを作ったところ

    Windowsでデスクトップアプリを作ったところ

  • macOSでデスクトップアプリを作ったところ

    macOSでデスクトップアプリを作ったところ

Webview.Window.new()でウィンドウを作成し、各種設定を行うだけで、手軽にデスクトップアプリが完成します。

なお、今回はHTMLを表示するだけのアプリでしたが、こちらに詳しい解説があり、HTML側からCulebraに対してアクセスする方法も紹介されています。

実行ファイルを手軽に生成できる

Culebraのもう一つの長所は、手軽に実行ファイルを作成できる点にあります。上記のプログラムを「webview.cul」という名前で保存した場合、次のコマンドを実行して、app(またはapp.exe)という実行ファイルを生成できます。

# macOSの場合
./culebra build webview.cul -o ./app
# Windowsの場合
.\culebra build webview.cul -o ./app

Windowsでは、次の画面のようにapp.exeという実行ファイルが生成されます。

  • Windowsでスクリプトから実行ファイルを作ったところ

    Windowsでスクリプトから実行ファイルを作ったところ

なお、Windowsで実行ファイルを作成するには、別途UCRT64環境とMinGW-w64のg++のインストールが必要でした。環境を構築するには、管理者権限でPowerShellを起動して、以下のコマンドを一行ずつ実行します。

winget install -e --id MSYS2.MSYS2
C:\msys64\usr\bin\bash.exe -lc "pacman -Syu --noconfirm"
C:\msys64\usr\bin\bash.exe -lc "pacman -Syu --noconfirm" # ← 失敗したらもう一度
C:\msys64\usr\bin\bash.exe -lc "pacman -S --noconfirm mingw-w64-ucrt-x86_64-gcc"
$env:Path = "C:\msys64\ucrt64\bin;$env:Path"

豊富な標準ライブラリが魅力

次の画面は、標準ライブラリの一覧ですが、幅広い機能が提供されていることが分かります。これだけ多くの機能が用意されていれば、さまざまなツールを作成できます。

  • Culebraの標準ライブラリ

    Culebraの標準ライブラリ

もう一つうれしい点は、開発者が日本人であり、日本語のチュートリアルや開発者向けドキュメントが充実していることです。新しい言語を使う上で大切なのが、チュートリアルやマニュアルですが、すでに開発に必要な情報が幅広く用意されています。

PythonやJavaScriptに詳しい方であれば、一通りGitHubリポジトリのdocsフォルダ以下にある資料に目を通せばスムーズに使い始められるでしょう。

FizzBuzzをデスクトップアプリに表示してみよう

最後に、ここまで紹介したFizzBuzzとデスクトップアプリを組み合わせて、ウィンドウ上にFizzBuzzの結果を表示するプログラムを作ってみます。

# FizzBuzzをHTMLとして生成
head = """
<!DOCTYPE html><html>
<head><meta charset="utf-8"></head><style>
  .bb \{ font-size: 32px; }
  .fb \{ background-color: orange; }
</style><body>
<h1>FizzBuzz</h1><div class="bb">
"""
foot = "</div></body></html>"

# 1から100までFizzBuzzを生成
el = []
for i in range(1, 101) {
  mut value = to_string(i)
  if i % 15 == 0 {
    value = '<span class="fb">FizzBuzz</span>'
  } else if i % 3 == 0 {
    value = '<span class="fb">Fizz</span>'
  } else if i % 5 == 0 {
    value = '<span class="fb">Buzz</span>'
  }
  el.push("<span>{value}</span>")
}
body = el.join(" - ") # FizzBuzzの結果を結合

# WebViewでFizzBuzzの結果を表示
let w = Webview.Window.new()
w.set_title('FizzBuzz')
w.set_size(800, 600)
w.set_html(head + body + foot)
w.run()

このプログラムを実行すると、次のように表示されます。

  • デスクトップアプリにFizzBuzzを表示したところ

    デスクトップアプリにFizzBuzzを表示したところ

まとめ - Culebraについて

以上、今回は、モダンでスッキリした構文を持つ「Culebra」について紹介しました。インストールからFizzBuzz、デスクトップアプリの作成、実行ファイルの生成まで試してみました。

Culebraは、まだバージョン1未満であり、発展途上にある言語ですが、ここまで見てきたように大きな可能性を感じるものとなっており、今後の発展が楽しみです。

自由型プログラマー。くじらはんどにて、プログラミングの楽しさを伝える活動をしている。代表作に、日本語プログラミング言語「なでしこ」 、テキスト音楽「サクラ」など。2001年オンラインソフト大賞入賞、2004年度未踏ユース スーパークリエータ認定、2010年 OSS貢献者章受賞。技術書も多く執筆している。直近では、「実践力をアップする Pythonによるアルゴリズムの教科書(マイナビ出版)」「シゴトがはかどる Python自動処理の教科書(マイナビ出版)」「すぐに使える!業務で実践できる! PythonによるAI・機械学習・深層学習アプリのつくり方 TensorFlow2対応(ソシム)」「マンガでざっくり学ぶPython(マイナビ出版)」など。