📦hajimu_web パッケージ

🌐 Webフレームワーク

hajimu_web は、はじむ言語のWebフレームワークです。PythonのFlask、Node.jsのExpressに相当し、たった5行でWebサーバーが動きます。

5行で動くWebサーバー

はじむ (.jp)
取り込む "hajimu_web" として ウェブ

ウェブ.サーバー作成(8080)
ウェブ.GET("/", "<h1>こんにちは、はじむ!</h1>")
ウェブ.起動()

フレームワーク比較

機能hajimu_webExpressFlask
Hello World5行5行7行
言語日本語英語英語
依存パッケージ0npm依存pip依存
実装C11ネイティブJavaScriptPython
ミドルウェア内蔵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リポジトリでは、より詳細なドキュメントとサンプルコードが公開されています。