17 ポイント 投稿者 GN⁺ 2025-10-10 | 1件のコメント | WhatsAppで共有
  • LavandulaC言語ベースの軽量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件のコメント

 
GN⁺ 2025-10-10
Hacker Newsのコメント
  • 最近見たCコードの中で最もクリーンでモダン、そして美しいコードだと感じた。これはカーネルではないものの、#ifdefの条件分岐やアンダースコアだらけの大規模プロジェクトと比べると、むしろCの美意識を学べる良い例だと思う。特に、こういう形でテストコードをCで書いているのは初めて見た。素晴らしい仕事だ。中高生のころ、最初のプログラミング言語としてCを学び、自宅のPCにフリーソフトを入れていた中で、ほとんどのプログラムがCで作られていることを知った。大学で初めてコンピュータサイエンスを正式に学んだときはC++でデータ構造とアルゴリズムをやったが、すでにポインタを理解していたので簡単に適応できた。複雑な要素をいくつも避ければ、Cはとてもクリーンでシンプルな言語だと分かる。もちろん、その複雑さに直接触れられること自体がCの魅力でもあるが、適切なバランスが大事だと思う
    • ポインタの理解は難しいという話をよく聞くが、実際そんなに難しいのかはよく分からない。最初に学んだときは15分ほどで大まかな感覚はつかめた記憶がある。もちろん使いこなせるようになるにはもっと時間がかかっただろうが、ポインタが神話的な難しさのように語られる理由はあまり理解できない。今回のプロジェクトも素晴らしいと思う。ただ、こうしたプロジェクトが求職者のポートフォリオに載ったあと、すぐにアーカイブされて忘れ去られるようなことにはなってほしくない
    • コードを褒めてもらえたことは本当に大きな意味がある。いつもそういうコードにしようとたくさん努力しているので、そう言ってもらえてありがたい
  • このプロジェクトを必要以上に深刻に批判したり、「PHPの代替になり得るか」などという無意味な分析をしたりしないでほしい。これはC言語でクールな挑戦をしてみた優れた例だと思う。HTMLテンプレートが追加されれば、完成度の高いフレームワークに発展できそうだ
    • 温かい言葉を本当にありがとう。HTMLテンプレートは優先順位リストに入っていて、いずれ楽しく実装する予定だ
    • 趣味でCを学んでいるが、このプロジェクトは本当に素晴らしいと思う
  • コードはとても読みやすく、よく整理されている。ただ、error checkingがほとんどなく、snprintfmallocなどで戻り値を確認していない箇所が多い。さらに、未使用のループも存在する。並列処理の部分はまだ未対応のようなので今すぐ問題にはならないが、Webサーバーという性質上、将来的にはthreadingの導入が有利だ。実装を考える際には、libuvのようなライブラリの使用を勧める
    • 丁寧なフィードバックをありがとう。並列処理は後で追加する計画だったので、触れてもらえてよかった
  • Jetzigという似たフレームワークを面白く使ったことがあるが、このプロジェクトもとても良いと思う。BSD C CGIとPostgresの組み合わせも好きで、普段はPythonを使っているが、低レベル言語とメモリの概念を直に体験するのは本当に楽しい。現実性を指摘する人もいるが、組み込みデバイスがより広く普及するほど、こうした低レベルのフレームワークの価値はむしろ高まる気がする。pico calcでも実験していて、もしそのための「モバイルアプリ」を作るなら、フレームワークのコードはCで書くだろう。素晴らしい仕事だ
  • 個人的には、このプロジェクトは本当に素晴らしいと思う。セットアップが読みやすく、Cのパフォーマンスを享受できるなら十分価値がある。特にClaudeのようなAIでフレームワークの一部を簡単に作り、必要に応じて必要な分だけ追加して、軽量でプラットフォーム非依存のWebフレームワークを自分で組み立てられるのは利点だ。かなり高いパフォーマンスも期待できそうだ
    • 保守地獄チェックリスト:
      • Webフレームワークは変化し続ける標準のせいで、そもそも保守が難しい
      • AIが書いたコードなので、誰もどう動いているのか明確に分からないかもしれない
      • Cで書かれている
        個人的には純粋なCのシンプルさは好きだが、AIが書いたCベースのネットワークコードの組み合わせには少し恐さもある
  • CでHTTPパーサをゼロから自作するのは非常に危険だと思う。深刻な脆弱性が入り込み得るので、実運用を念頭にWebフレームワークを作るなら、libmicrohttpd、libevent_http、fastcgiなど、実績のあるライブラリを土台にしたほうが安全だ
    • こういう警告には強く同意する。だとすると、ではCで安全なHTTPサーバーを作るにはどうすればいいのかが気になる。本当に面白い本の題材になりそうだ。各章で脆弱性を取り上げながら、成熟したHTTPライブラリになっていくための構造的な方法を扱えば面白いだろう
    • 実際、このプロジェクトが本番環境で使われることはないだろうが、もしそんな考えが少しでもあるなら思い直したほうがいい
  • unsolicited feedbackだが、appRouteマクロは型とシグネチャを曖昧にし、不要な間接化を持ち込んでいると思う。削除したほうがよさそうだ。そしてAppContext型は実際にはApp + HTTP Request + DBなどの機能が混ざっているので、RequestContextControllerContextのほうが適切に思える。そのほか、他の人たちと同じくコードのクリーンさには感心した。本当に素晴らしい取り組みだ
  • マクロの活用によって多くのことが可能になると示している。実際、現代のWebフレームワークも各言語のメタプログラミングなど複雑な道具を積極的に活用している。自分で作り上げたことを大いに称えたい。大変な作業ではあるが、間違いなく楽しいことでもある。「なぜ作ったのか」という問いもあるが、必ずしも理由は要らないと思う。純粋に開発そのものを楽しんでいるからだ
    • 本当にありがとう。完全に同感だ
  • ハードウェアベンダーがこのプロジェクトを採用して、管理用Webページの品質が少しでも良くなることを期待している
  • 丁寧に作られた良いアイデアのプロジェクトなのに、否定的な反応が多いのは驚きだ。Ashtonが今回積み上げた実力は、これからも消えない貴重な財産になる
    • そう評価してもらえて本当にありがたい