📦hajimu_web パッケージ
🌐 Webフレームワーク
hajimu_web は、はじむ言語のWebフレームワークです。PythonのFlask、Node.jsのExpressに相当し、たった5行でWebサーバーが動きます。
5行で動くWebサーバー
はじむ (.jp)
取り込む "hajimu_web" として ウェブ
ウェブ.サーバー作成(8080)
ウェブ.GET("/", "<h1>こんにちは、はじむ!</h1>")
ウェブ.起動()フレームワーク比較
| 機能 | hajimu_web | Express | Flask |
|---|---|---|---|
| Hello World | 5行 | 5行 | 7行 |
| 言語 | 日本語 | 英語 | 英語 |
| 依存パッケージ | 0 | npm依存 | pip依存 |
| 実装 | C11ネイティブ | JavaScript | Python |
| ミドルウェア | 内蔵8種 | 別途 | 別途 |
| セッション | 内蔵 | 要express-session | 要Flask-Session |
📦 インストール
パッケージマネージャ(推奨)
bash
# プロジェクトにhajimu_webを追加
hajimu パッケージ 追加 ReoShiozawa/hajimu-web
# 依存をインストール
hajimu パッケージ インストールソースからビルド
bash
git clone https://github.com/ReoShiozawa/hajimu_web.git
cd hajimu_web
make
make install # → ~/.hajimu/plugins/ にインストール📖 チュートリアル
ステップバイステップでWebサーバーの作り方を学びましょう。
Step 1
Hello World
最小のWebサーバーを5行で作成
はじむ (.jp)
取り込む "hajimu_web" として ウェブ
ウェブ.サーバー作成(8080)
ウェブ.GET("/", "<h1>こんにちは、はじむ!</h1>")
ウェブ.起動()
"text-green-400">// → http://localhost:8080/ にアクセスStep 2
JSON API
フロントエンドから使えるJSON APIを作成
はじむ (.jp)
取り込む "hajimu_web" として ウェブ
ウェブ.サーバー作成(3000)
ウェブ.CORS有効()
ウェブ.JSON応答("/api/status", 200, "{\"状態\": \"正常\"}")
ウェブ.JSON応答("/api/users", 200, "[{\"名前\": \"太郎\"}, {\"名前\": \"花子\"}]")
ウェブ.起動()Step 3
動的ルーティング
コールバック関数でリクエストに応じたレスポンスを返す
はじむ (.jp)
取り込む "hajimu_web" として ウェブ
ウェブ.サーバー作成(8080)
関数 ユーザーページ(リクエスト):
変数 params = リクエスト[6]
変数 id = params["id"]
ウェブ.JSON送信({"user_id": id, "名前": "太郎"})
終わり
ウェブ.GET("/users/:id", ユーザーページ)
ウェブ.起動()
"text-green-400">// curl http://localhost:8080/users/42
"text-green-400">// → {"user_id":"42","名前":"太郎"}Step 4
ミドルウェア
1行で強力なミドルウェアを有効化
はじむ (.jp)
取り込む "hajimu_web" として ウェブ
ウェブ.サーバー作成(3000)
ウェブ.ミドルウェア("logger") "text-green-400">// アクセスログ
ウェブ.ミドルウェア("security") "text-green-400">// セキュリティヘッダー
ウェブ.ミドルウェア("compression") "text-green-400">// gzip圧縮
ウェブ.ミドルウェア("json") "text-green-400">// JSONボディ自動解析
ウェブ.ミドルウェア("rate_limit") "text-green-400">// DoS対策
ウェブ.CORS有効()
ウェブ.GET("/", "<h1>セキュアサーバー</h1>")
ウェブ.起動()Step 5
セッション管理
ユーザーのログイン状態をセッションで管理
はじむ (.jp)
取り込む "hajimu_web" として ウェブ
ウェブ.サーバー作成(3000)
ウェブ.ミドルウェア("session")
ウェブ.セッション有効期限(1800) "text-green-400">// 30分
関数 ログイン(リクエスト):
ウェブ.セッション設定("username", "太郎")
ウェブ.セッション設定("role", "admin")
ウェブ.JSON送信({"message": "ログインしました"})
終わり
ウェブ.GET("/login", ログイン)
関数 プロフィール(リクエスト):
変数 名前 = ウェブ.セッション取得("username")
ウェブ.JSON送信({"username": 名前, "role": ウェブ.セッション取得("role")})
終わり
ウェブ.GET("/profile", プロフィール)
ウェブ.起動()🔧 組み込みミドルウェア一覧
| ミドルウェア名 | 説明 |
|---|---|
"logger" | アクセスログ出力(メソッド・パス・レスポンスタイム) |
"cors" | CORS ヘッダー付与 |
"security" | X-Frame-Options / CSP / HSTS 等のセキュリティヘッダー |
"json" | JSON リクエストボディの自動解析 |
"form" | フォームデータの自動解析 |
"compression" | gzip 圧縮(Accept-Encoding 自動判定) |
"session" | セッション管理の有効化 |
"rate_limit" | レートリミッター(DoS 対策) |
🔄 Express との対応表
はじむ (.jp)
"text-green-400">// Express.js // hajimu_web
const app = express() ウェブ.サーバー作成(3000)
app.use(cors()) ウェブ.CORS有効()
app.use(express.json()) ウェブ.ミドルウェア("json")
app.get('/', (req, res) => { 関数 ハンドラ(リクエスト):
res.json({ hello: 'world' }) ウェブ.JSON送信({"hello": "world"})
}) 終わり
ウェブ.GET("/", ハンドラ)
app.get('/users/:id', handler) ウェブ.GET("/users/:id", ハンドラ)
"text-green-400">// req.params.id // リクエスト[6]["id"]
"text-green-400">// req.query.page // リクエスト[7]["page"]
"text-green-400">// req.headers['host'] // リクエスト[5]["Host"]
res.status(201).json(data) ウェブ.ステータス設定(201)
ウェブ.JSON送信(data)
req.session.user = 'taro' ウェブ.セッション設定("user", "taro")
app.listen(3000) ウェブ.起動()📘 API リファレンス
サーバー管理
サーバー作成(ポート)起動()停止()ポート取得()実行中()サーバー情報()
ルーティング
GET(パス, ハンドラ)POST(パス, ハンドラ)PUT(パス, ハンドラ)DELETE(パス, ハンドラ)PATCH(パス, ハンドラ)JSON応答(パス, ステータス, JSON)グループ(プレフィックス)グループ終了()
レスポンス
JSON送信(値)テキスト送信(文字列)HTML送信(HTML)ファイル送信(パス)リダイレクト(URL)ステータス設定(コード)ヘッダー設定(名前, 値)書き込み(チャンク)応答終了()
セッション
セッション取得(キー)セッション設定(キー, 値)セッション削除(キー)セッション破棄()セッション有効期限(秒)セッション再生成()
設定
CORS有効()CORS設定(origin, methods, headers)静的ファイル(ディレクトリ)レート制限設定(上限, 秒)アップロードディレクトリ(パス)最大スレッド数(数)
テンプレート
テンプレート変数(キー, 値)テンプレートGET(パス, テンプレート)テンプレート描画(パス, 変数辞書)
📥 リクエストオブジェクト
| インデックス | 内容 | 例 |
|---|---|---|
リクエスト[0] | HTTP メソッド | "GET" |
リクエスト[1] | パス | "/users/42" |
リクエスト[2] | ボディ | "{\"名前\":\"太郎\"}" |
リクエスト[5] | ヘッダー辞書 | headers["Host"] |
リクエスト[6] | パスパラメータ | params["id"] |
リクエスト[7] | クエリパラメータ | query["page"] |
リクエスト[10] | Cookie 辞書 | cookies["session"] |
リクエスト[11] | アップロードファイル | files[0][1] |
さらに詳しく
hajimu_webのGitHubリポジトリでは、より詳細なドキュメントとサンプルコードが公開されています。