k01ken’s b10g

He110 W0r1d!

irisでiris CLIを使う

開発環境は、Windows 10 Pro(64bit) + go version go1.15.3 windows/amd64

Go言語のマイクロWebフレームワークであるirisのCLIであるiris CLIを使い、ファイルを修正してもサーバーを切ることなく、変化を反映できるようにする。

1.以下のコマンドを続けて入力し、プロジェクトを新規作成し、必要なファイルを用意する

cd c:\ && mkdir test_iris_cli && cd test_iris_cli
go mod init test_iris_cli
go get github.com/kataras/iris/v12@master
go get github.com/kataras/iris-cli

2.以下のコードをmain.goという名前で保存する

package main

import "github.com/kataras/iris/v12"

func main() {
    app := iris.New()

    booksAPI := app.Party("/books")
    {
        booksAPI.Use(iris.Compression)

        // GET: http://localhost:8080/books
        booksAPI.Get("/", list)
        // POST: http://localhost:8080/books
        booksAPI.Post("/", create)
    }

    app.Listen(":8080")
}

// Book example.
type Book struct {
    Title string `json:"title"`
}

func list(ctx iris.Context) {
    books := []Book{
        {"Mastering Concurrency in Go"},
        {"Go Design Patterns"},
        {"Black Hat Go"},
    }

    ctx.JSON(books)
    // TIP: negotiate the response between server's prioritizes
    // and client's requirements, instead of ctx.JSON:
    // ctx.Negotiation().JSON().MsgPack().Protobuf()
    // ctx.Negotiate(books)
}

func create(ctx iris.Context) {
    var b Book
    err := ctx.ReadJSON(&b)
    // TIP: use ctx.ReadBody(&b) to bind
    // any type of incoming data instead.
    if err != nil {
        ctx.StopWithProblem(iris.StatusBadRequest, iris.NewProblem().
            Title("Book creation failure").DetailErr(err))
        // TIP: use ctx.StopWithError(code, err) when only
        // plain text responses are expected on errors.
        return
    }

    println("Received Book: " + b.Title)

    ctx.StatusCode(iris.StatusCreated)
}

3.以下のコマンドを入力する

iris-cli init

カレントディレクトリに、.iris.ymlという設定ファイルが作成されている。続けて、以下のコマンドを入力する。

iris-cli run

すると、iris-cli.exeと、main.goの実行ファイルが同時に起動する。
localhost:8080/booksにアクセスしてみてください。試しに、main.goの中のBook構造体の中のBlack Hat Goの文字列を、White Hat Goに変えて、保存してみてください。そうすると、iris-cli.exeの画面に、Change detectedという文字列が表示されて、その後に、再び、サーバーのリッスンが始まるメッセージ(Now Listening on:~)が現れてから、再度、localhost:8080/booksにアクセスすると、中身が変わっています。

これで、いちいち、修正して、サーバーを停止して、サーバーを再起動するということをすることなく開発に専念することができます。

■参考リンク

Iris CLI (Work In Progress)
Iris