- LavandulaはC言語ベースの軽量Webフレームワークで、モダンなWebアプリケーション開発のために設計されている
- 直感的で高速な開発環境を提供し、不要な機能を省いて生産性と性能に重点を置いている
- コントローラー/ルーティングシステム、ミドルウェアパイプライン、テストフレームワーク、SQLite/JSONライブラリなど、必須機能の大半を含んでいる
- 今後はORM、セッションクッキー、静的ファイル配信、さまざまなデータベース連携などの機能拡張が予定されている
- CLIベースの高速なプロジェクト作成、組み込みユニットテスト、環境変数・ロギング対応などにより、開発者の利便性を最大化している
Lavandula: 軽量で高性能なC Webフレームワークの概要
- Lavandulaは、モダンなWebアプリケーションを素早くシンプルに作れるよう設計されたC言語の軽量Webフレームワーク
- 主な目標はシンプルさ、高速性、高い生産性であり、複雑な機能よりも本当に必要な部分に集中し、重いフレームワークの無駄を減らした構成になっている
主な特徴と有用性
- Cベースで作られており、最小限の依存関係のみを含む
- コントローラーとルーティングシステムを提供し、HTTPエンドポイントを簡単に構成できる
- GET、POSTなどのHTTPメソッドをサポートし、ローカル/グローバルのミドルウェアパイプラインを備える
- CLIツール(lavu) による高速なプロジェクト作成と実行をサポート
- 組み込みユニットテストフレームワーク、環境変数処理、ロギング、SQLite統合、JSONライブラリを内蔵
現在完成している機能
- コントローラー/ルーティングシステム
- HTTPメソッドごとのエンドポイント対応 (GET、POSTなど)
- ミドルウェアパイプライン (ローカル/グローバル)
- 最小限の依存関係 (純粋なCコードベース)
- CLIによる簡単なプロジェクトスキャフォールディング
- 組み込みユニットテストフレームワーク
- 環境変数サポート、ロギングシステム
- SQLite/組み込みJSONライブラリ統合
開発進行中の機能
- HTTP JSONボディのパース
- セッションクッキー
- CORSポリシー設定
- Lavender ORM
- ELA(Embedded Lavandula) HTMLテンプレートエンジン
今後の計画(ロードマップ)
- レートリミット
- 静的ファイル配信
- PostgreSQL、MySQL連携
- 依存性注入フレームワーク候補
- 登録可能なエンドポイント/ルート一覧の自動化
- JSONモデルおよびCRUD関数の自動生成 (
lavu model コマンドを使用)
- URLパラメータ処理と動的ルーティング
プロジェクト作成と実行方法の概要
- CLIコマンド:
lavu new my-projectでプロジェクトフォルダと基本構造を自動生成
- 自動生成されるファイル:
- 設定ファイル(lavandula.yml)
- メイン/コントローラー/ルートのソース
- makefile
- テストコードなど
- すばやく実行: フォルダへ移動後、
lavu runですぐにローカルサーバーを起動可能。デフォルトポートは http://localhost:3000/
ライセンスおよびその他の情報
- ライセンス: MIT License
- オープンソースの精神に沿って、誰でも改善や参加が可能
- **C(97.3%)**ベースで書かれており、一部にMakefile/Shell scriptを含む
Lavandulaの利点まとめ
- C言語エコシステムでは非常に珍しい完全なWebフレームワークであり、リソースが限られた環境や超高速サーバーの実装に優れている
- 人気フレームワークと比べてより高速でオーバーヘッドが低いことに特化している
- CLI、組み込みツール、ミニマルな構成により学習コストが低く、生産性が高い
1件のコメント
Hacker Newsのコメント
#ifdefの条件分岐やアンダースコアだらけの大規模プロジェクトと比べると、むしろCの美意識を学べる良い例だと思う。特に、こういう形でテストコードをCで書いているのは初めて見た。素晴らしい仕事だ。中高生のころ、最初のプログラミング言語としてCを学び、自宅のPCにフリーソフトを入れていた中で、ほとんどのプログラムがCで作られていることを知った。大学で初めてコンピュータサイエンスを正式に学んだときはC++でデータ構造とアルゴリズムをやったが、すでにポインタを理解していたので簡単に適応できた。複雑な要素をいくつも避ければ、Cはとてもクリーンでシンプルな言語だと分かる。もちろん、その複雑さに直接触れられること自体がCの魅力でもあるが、適切なバランスが大事だと思うsnprintfやmallocなどで戻り値を確認していない箇所が多い。さらに、未使用のループも存在する。並列処理の部分はまだ未対応のようなので今すぐ問題にはならないが、Webサーバーという性質上、将来的にはthreadingの導入が有利だ。実装を考える際には、libuvのようなライブラリの使用を勧める個人的には純粋なCのシンプルさは好きだが、AIが書いたCベースのネットワークコードの組み合わせには少し恐さもある
appRouteマクロは型とシグネチャを曖昧にし、不要な間接化を持ち込んでいると思う。削除したほうがよさそうだ。そしてAppContext型は実際にはApp + HTTP Request + DBなどの機能が混ざっているので、RequestContextやControllerContextのほうが適切に思える。そのほか、他の人たちと同じくコードのクリーンさには感心した。本当に素晴らしい取り組みだ