Locutus

他言語の標準ライブラリを TypeScript に。PHP・Go・Python・Ruby・C 等、約500関数を個別 import で。

1 — 概要

Locutus は、PHP・Go・Python・Ruby・C・Clojure などの標準ライブラリ関数を TypeScript で再実装したライブラリ。各関数は単体で import でき、tree-shake 可能。キャッチフレーズは「All your standard libraries will be assimilated into our TypeScript collective. Resistance is futile.」で、他言語の「定番」を JavaScript の世界に持ち込むのが目的だ。

~500関数
ESM配信
Tree-shake対応
Node 22+ランタイム

教育・娯楽・実用のバランスで、同じ問題を他言語がどう解くかを TypeScript で体験できる。ビルド成果物は dist/(CommonJS)と dist/esm(ESM)、ES2022 ターゲット。

2 — スコープと方針

Locutus がポートするのは関数の振る舞いであり、他言語のランタイムやデータ構造ではない。API 境界は JavaScript ネイティブに保つ。

つまり、Go の slice/map、Python の tuple/bytes、Ruby の symbol、C の struct/pointer などを Locutus の API で再現しない。例: Go の日付フォーマット系をポートするなら、JavaScript の Date を受け取り string を返す形にする。

例外: PHP 互換のため locutus.objectsAsArrays を有効にすると、プレーンな JS オブジェクトを連想配列として扱う挙動になる。
3 — 対応言語とモジュール

src/ 以下は言語ごとにディレクトリが分かれており、各言語内で array / strings / math / json / url などのモジュールに分類されている。型定義は index.d.tsphp, golang, python, ruby, c の名前空間として公開されている。

言語主なモジュール例
phparray, strings, math, json, _var, datetime, url
golangstrings(Contains, Join, Split, ToLower, Trim 等)
pythonstring(ascii_letters, capwords 等), math(factorial, gcd, sqrt 等), re
rubyMath, String, Array
cmath, stdio, ctype, stdlib, string
clojurecore(reduce_kv, get_in, partition 等), Math, string
4 — 使い方
npm install locutus

必要な関数だけをパス指定で import する。

import { sprintf } from 'locutus/php/strings/sprintf'
const effectiveness = 'futile'
console.log(sprintf('Resistance is %s', effectiveness))
// Resistance is futile
import { Contains } from 'locutus/golang/strings/Contains'
console.log(Contains('Locutus', 'cut'))  // true

公式サイトの「Module JS / Standalone JS」スニペットは、広く使われているブラウザをベースラインにしている。アプリが古いブラウザを対象にする場合は、TypeScript/Babel/SWC/esbuild でトランスパイルし、必要な polyfill を自前で入れて検証する。Locutus はスニペットに polyfill を注入しない。

5 — 開発・参考リンク
  • yarn check — format + lint + test
  • yarn test:parity — 他言語との挙動照合
  • yarn test — フルテスト
  • yarn lint — Biome
  • yarn fix:biome — 自動修正

バージョニングはプラグマティック: 関数レベルのパリティ修正も patch がデフォルト。詳細は CONTRIBUTING.md#versioning を参照。

ライセンスは MIT。ただし src/php/bc/src/php/_helpers/_bc.js は PHP の bcmath/Libbcmath 由来のため LGPL-2.1。