102 KiB
ニュース
🚀 Iris v14 が近づいています。 次のメジャーバージョンは、このプロジェクト史上もっとも大きなリリースです。Go のジェネリクスの上に作り直されたフレームワーク、コンパイラが検査するアプリケーションビルダー、検証まで引き受けるリクエストヘルパー、ひとつの中央エラーマップ、30 個の同梱ミドルウェア、そしてリポジトリの中に同梱される一冊の本が含まれます。下の Iris v14 で何が来るのかをご覧ください。
ここで説明している v12 はこれまでどおり動き、修正も入り続けます。v14 は新しい import パスで登場するので、リリース当日にあなたの側で壊れるものはありません。
Iris Web Framework English
العربية
⚡ Iris は、高速でシンプルでありながら、十分な機能を備えた、非常に効率的な Go 用 Web フレームワークです。
✨ あなたの次のウェブサイトや API のために、美しく表現力豊かで使いやすい基盤を提供します。
🌟 Iris についての他の人々の意見を読み、このオープンソースプロジェクトに スターをつけて 応援してください
package main
import "github.com/kataras/iris/v12"
func main() {
app := iris.New()
app.Use(iris.Compression)
app.Get("/", func(ctx iris.Context) {
ctx.HTML("Hello <strong>%s</strong>!", "World")
})
app.Listen(":8080")
}
ある Go 開発者が言ったように、Iris はあらゆる面であなたを支え、長年にわたって揺るがずに立ち続けています ⭐
Iris が提供する機能の一部です:
- HTTP/2(Push、埋め込みデータにも対応)
- ミドルウェア(Accesslog、Basicauth、CORS、gRPC、Anti-Bot hCaptcha、JWT、MethodOverride、ModRevision、Monitor、PPROF、Ratelimit、Anti-Bot reCaptcha、Recovery、RequestID、Rewrite)
- API バージョニング
- Model-View-Controller
- Websockets
- gRPC
- Auto-HTTPS
- ngrok の組み込みサポート。アプリをインターネットに公開するもっとも速い方法です
- :uuid、:string、:int などの標準型で動的パスをパラメータとして扱える独自ルーター。独自の型も作れます
- 圧縮
- ビューエンジン(HTML、Django、Handlebars、Pug/Jade など)
- 独自のファイルサーバーを構築し、自前の WebDAV サーバーをホスト
- キャッシュ
- ローカライズ(i18n、sitemap)
- セッション
- 豊富なレスポンス(HTML、Text、Markdown、XML、YAML、Binary、JSON、JSONP、Protocol Buffers、MessagePack、コンテントネゴシエーション、ストリーミング、Server-Sent Events など)
- レスポンス圧縮(gzip、deflate、brotli、snappy、s2)
- 豊富なリクエスト(URL Query、Headers、Form、Text、XML、YAML、Binary、JSON のバインド、バリデーション、Protocol Buffers、MessagePack など)
- 依存性注入(MVC、Handlers、API Routers)
- テストスイート
- そして何より大切なこと... 初日から今日まで、素早い回答とサポートが得られます
🚀 Iris v14 で何が来るのか
Iris v14 はこのプロジェクト史上もっとも大きなリリースです。フレームワークを Go のジェネリクスの上に作り直し、アプリケーションの組み立て方そのものを変えます。main での配線は減り、ハンドラは短くなり、これまで各ルートに散らばっていた判断がひとつの場所に集まります。
今日のあなたが何かする必要はありません。v12 はこれまでどおり動き、修正も入り続けます。v14 は、名前が変わった API と削除された API のすべてを網羅した移行ガイドとともに届きます。
アプリケーション全体を、コンパイラが検査する 1 本のチェーンで
iris.NewBuilder は CORS、圧縮、アクセスログ、ヘルスエンドポイント、エラーマップ、あなたのサービスと API グループを 1 つの式で結線します。ステップの順序はコンパイラが強制するので、アプリケーションは正しくビルドされるか、まったくビルドされないかのどちらかです。
iris.NewBuilder().
Prefix("/api").
AllowOrigin("*").
Compression(true).
LogRequests(true).
Health(true, "production", "kataras").
Errors(errors.NewOptions().
MapErrors(errors.NotFound, catalog.ErrNotFound)).
Services(catalog.NewRepository, catalog.NewService).
API("/products", api.NewProductsAPI).
Build().
Listen(":8080")
ハンドラが同じことを繰り返さなくなる
デコード、バリデーション、エラー描画がハンドラ本体から出ていきます。rest.ReadJSON[T] はリクエストをデコードし、型に Validate() error があれば実行し、400 まで自分で書きます。レスポンスヘルパーは成功時のステータスを書くか、中央のマップがそのエラーに定めた応答を書きます。
func (api *ProductsAPI) create(ctx iris.Context) {
input, ok := rest.ReadJSON[catalog.ProductInput](ctx)
if !ok {
return // 400 は書き込み済み: 不正な JSON か Validate 失敗。
}
id, err := api.svc.Create(ctx, input)
rest.Created(ctx, id, err) // 201、または中央でマッピングされたエラー。
}
rest.OK、rest.NoContent、rest.Count、rest.Paginated が、API が返すそれ以外の形をカバーします。
エラーは一度だけ宣言する
新しい rest/errors パッケージが、あなたのドメインエラーと HTTP レスポンスの対応を保持します。クライアントには正規化された機械可読のペイロードが届きます。内部メッセージは内部にとどまります。コレクターを登録すれば、すべての失敗がひとつの場所からロガーやデータベースへ届きます。クライアントが何を要求したかに応じて、エラーは JSON にもビューにも描画できます。
依存性注入は MVC だけのものではなくなる
コンストラクタが必要なものを宣言し、コンテナがそれを提供します。ハンドラでも、API グループでも、コントローラでも同じです。Init(ctx context.Context) error を実装したサービスは Build() の中で一度だけ実行されます。閉じられるものはシャットダウン時に閉じられます。hero パッケージはなくなり、より少ない行数でより多くをこなす dep と rest が引き継ぎます。MVC コントローラはジェネリクスの上に作られています。
パッケージは思ったとおりの場所にある
sessions、cache、websocket、i18n、view、versioning はミドルウェアになりました。mvc は controller の下に移り、新しい fileserver、sitemap、apigraph コントローラと並びます。apigraph はあなたのルートツリーをインタラクティブな D3 グラフとして描きます。
30 個のミドルウェアが同梱され、その中には新しいものもあります: httpcost(リクエストごとの時間・メモリ・CPU。性能分析や課金に使えます)、bodylimit、compress、counter、referrer、geolocation、ipaccess、servertiming。ビューエンジンの実装は iris-contrib/views に移りました。
設定は部分的なリテラル
iris.Configuration と With* の設定関数は iris.Options に置き換わります。気にするフィールドだけを書けば、残りはデフォルトから来ます。Bind は SERVER_CONFIG 環境変数から、次にファイルから YAML を読み込みます。
app := iris.New(iris.Options{Name: "myapp", LogLevel: "debug"})
名前が、していることをそのまま表す
リクエストヘッダの読み取りとレスポンスヘッダの設定が、意味の反転する同じ接頭辞を共有しなくなりました。ctx.Header はリクエストを読み、ctx.SetHeader と ctx.ResponseHeader はレスポンスを扱います。Party は Router になりました。ctx.URLParam は ctx.Query().Get になりました。改名はすべて置き換え先とともに移行ガイドに載っており、その大半は検索と置換 1 回で済みます。
既定で安全
セッション Cookie は Secure と SameSite=Lax 付きで発行されます。リクエストボディの上限はすべての読み取り経路で適用されます。作り直しの過程で長年のバグも片づきました。制限を記録するだけで一度も適用していなかったレートリミッタや、プロセスごと巻き込みかねなかった Logout の呼び出しなどです。
最初から最後まで読めるドキュメント
v14 にはリポジトリ内に収録された 23 章の本、テスト付きの REST API を 1 つの文書で組み立てる入門チュートリアル、v12 アプリケーション向けの移行ガイド、そしてソースから生成されコードベースへの質問に答えるライブ AI wiki が付いてきます。
あなたの v12 コードにとっての意味
import パスは github.com/kataras/iris/v14 になります。v12 と v14 は並んで存在でき、リリース当日に壊れるものはありません。都合のよいときにアップグレードしてください。移行ガイドは import パス、パッケージの移動、削除された API とその置き換え、挙動の変更を扱い、機械的な部分にはそのまま使えるコマンドが付いています。
公開されたリリース日はまだありません。リリースを見守るか、@iris_framework をフォローすれば、いちばん早く知ることができます。
👑 サポーター
みなさんの力があれば、オープンソースの Web 開発をすべての人にとってより良いものにできます!
📖 Iris を学ぶ
インストール
必要なのは Go プログラミング言語だけです。
新しいプロジェクトを作る
$ mkdir myapp
$ cd myapp
$ go mod init myapp
$ go get github.com/kataras/iris/v12@latest # または @v12.2.11
既存のプロジェクトにインストールする
$ cd myapp
$ go get github.com/kataras/iris/v12@latest
実行
$ go mod tidy -compat=1.23 # windows では -compat="1.23"。
$ go run .
Iris には広範で詳細な ドキュメント があり、フレームワークを簡単に使い始められます。
より詳しい技術ドキュメントは godocs をご覧ください。実行できるコードは、いつでもリポジトリの ./_examples サブディレクトリにあります。
Plexon AI で開発する
Plexon AI は Hellenic Development によるクロスプラットフォームの AI コーディングアシスタントで、専用の Iris スキルを同梱しています。フレームワークの作者自身が書いた v14 開発ガイドで、ルーティングとマクロ、context API、rest ヘルパー、エラー処理、30 個すべてのミドルウェア、組み込みコントローラ、認証 SDK、セキュリティ強化、永続化、キャッシュ、i18n、可観測性、パフォーマンス、テスト、デプロイ、そして v12 から v14 への移行を扱う 19 本のリファレンス文書が含まれます。
Software Developer ペルソナをインストールすれば、Iris スキルもそれが有効にするエンジニアリング系エージェントと並んで一緒に入ります。以降、アシスタントは学習中にたまたま見たものから推測するのではなく、このフレームワークが本来意図された使い方どおりに Iris のコードを書きます。
旅行中に読書を楽しみますか?
Iris 電子書籍(新版)の PDF とオンラインアクセスを今日リクエストして、Iris の開発に参加できます。
🙌 コントリビュート
Iris Web Framework へのあなたの貢献をお待ちしています! Iris プロジェクトへの貢献方法について詳しくは CONTRIBUTING.md をご覧ください。
🛡 セキュリティ脆弱性
Iris にセキュリティ上の脆弱性を発見した場合は、iris-go@outlook.com までメールをお送りください。すべてのセキュリティ脆弱性は速やかに対処されます。
📝 ライセンス
このプロジェクトは、Go プロジェクト自体と同じ BSD 3-clause ライセンスの下で提供されます。
プロジェクト名「Iris」はギリシャ神話に由来します。

