世界を動かす技術を、日本語で。

GNU Artanis – Scheme用の高速ウェブアプリケーションフレームワーク

概要

  • ArtanisGNU Guile で書かれたWebフレームワーク
  • GNU 公式拡張言語は GNU Guile
  • Python ではなくGuileでWebサイト構築を提案
  • RMS がこのアイデアを支持
  • Guileコミュニティ のイベントで Artanis 誕生

Artanis誕生の背景

  • Artanis は、 GNU Guile を用いて開発された Webフレームワーク
  • GNU プロジェクト内でWebサイトの開発言語を議論する場面
    • 多くの開発者は Python を選択
    • しかし、 GNU 公式の拡張言語は GNU Guile である点に疑問
  • なぜGuileでWebフレームワークを作らないのか」という発案
  • RMS (Richard Stallman)がこのアイデアを「クールだ」と評価
  • 当初は 計画具体案 のないアイデア段階

Artanisプロジェクトの始動

  • 数か月後、 GuileコミュニティGuile2 の2周年を祝う ハック・ポットラック イベント開催
    • 参加者が数週間で「クールなプログラム」を開発するコンテスト形式
  • このイベントをきっかけに Artanis プロジェクトが始動
  • Artanis は、 GNU Guile で書かれた新しいWebフレームワークとして誕生

Hackerたちの意見

これを使ったプロジェクトは404だね。

下のリンクが間違ってるよ。上のリンクはちゃんと動く: https://artanis.dev/projects.html

これってプロトスのエグゼキューター、アルタニスにちなんで名付けられたの?

Sinatraのようなスタイルのルートがあるから、「アルタニス」って名前なんだね ;-)

「アルタニス」を逆さにすると「シナトラ」になるんだけど、これはウェブ開発用の人気のあるRubyのgemの名前でもあるんだよね。

僕も最初にそう思った。意志を示せ!

一度だけ本番環境で使ったことがあるよ。ガイルのウェブサーバーが標準だから、フレームワークをバイパスするのも簡単だしね。ほとんどの人のニーズには十分すぎるくらい速いよ。スキームのおかげで柔軟性もあるし、アルタニスのデザインはFlaskとかの開発者には馴染み深いと思う。

ひとつだけ気になったことがあるんだけど、ドキュメントにはCSRF保護などについての言及がないね。結構いろんなことをカバーしているように見えるのに。(解読できなかったXSSシンボルのアプリケーションを除いて。)

美しくてクリーンなウェブサイト(JSやフォントなしでもちゃんと読み込むし);なんで一部の人が詩に対してネガティブな反応を示してるのか分からない… 本当に、HNの人たちはしばしばミーン・ガールズよりもひどいよ。アルタニス自体については… すごくクールに見えるね!スキームはコーディングやハッキングにすごくいい言語だし、でも直接公開するのはどれくらい安全なんだろう?Guixパッケージのウェブサイトで自社製品を使ってるみたいだから… かなりテストされてるんじゃないかな。

Schemeはコーディングやハッキングにとても良い言語だけど、直接公開するのはどれくらい安全なんだろう? 本当に優秀なSchemeプログラマーがいて、システムをしっかり作っているなら、普通の従来のシステムよりも公開する方が安全かもしれないね。(例:Schemeで作られたシステムが、クラウドサーバー上での機密データホスティングに関する特定の認証を最初に取得した。開発した非常に小さなチームがスタックを熟知していて、必要なことを賢く実行できたからだ。) (一方で、コンサルティング会社がリードするチームが、比較的複雑なシステムの契約を受けて、座っているだけの人数の10倍や100倍の請求をして、理解できない巨大で複雑なスタックを持っていたら… ただ混乱して、スプリントタスクの見た目に集中して、実装が雑で脆弱性が多いものを量産して、初日から使えるシステムを提供するのにかなり時間がかかるだろうね。)

  • テキストが異常に大きい。 - ランディングページの冒頭に無関係なノイズがある。 - 「何ですか?」がFAQセクションにあって、見出しが親見出しと同じサイズ。 - 横幅を全部使ってしまっている。

なんで一部の人が詩に対してネガティブに反応してるのかよくわからない… 今のアートの時代は変な感じだね。最近は本物の表現に対する多くの人の即座の反応が「痛い」になってる。ある程度は昔からそうだったと思うけど、今はネットの注意力と発信の幅が影響して、もっと顕著になってる気がする。

ウェブサイトにすごく感謝してるよ。読みやすいからフレームワークを試してみたくなるし、特にスキームを書くのが最後だったのは15年前の大学時代だったからね。

SchemeのAPIについてちょっとコメント。Webサーバーのルートハンドラーを定義するなら、他の言語と同じようにやるのが普通だよね。このパッケージの例みたいに:(get "/hello/:who" (lambda (rc) (format #f " hello ~a " (params rc "who")))) でも、Schemeでは次のように書く方が簡単かもしれない。各変数のURLパス要素をプログラマーが直接Schemeの変数バインディングにマッピングできるからね:(define-http-get-route ("/hello/" who) (format #f " hello ~a " who)) (もちろん、HTMLに埋め込む前にwhoをサニタイズ/エスケープする関数も必要だよ。)

Guileのビルトインサーバーも似てるよ:(define (hello-world-handler request request-body) (values '((content-type . (text/plain))) "Hello World!"))

hiccupを使ってHTMLを生成しなかったのが残念。フォーマットは?