Fork me on GitHub

役立ちぬ開発史、それはただのブログ

覚えておくといい、ブログの時代は終わる。いつかその内、きっとたぶん…

GoとRevelの使い方をチュートリアルで学ぶ

| Comments

 昨年、一昨年あたりから、「Goだ!Goだ!!」っと、周りの知り合いが言っていましたが、今回まで、全く手を出して来ませんでした。ずっと気になっていたので、まとまった時間が取れる休日に、触ってみました。学生のときは、特に気にしてなかったのですが、社会人になって、土日のありがたみが身に染みています。

Goとは

 Goは、Googleが開発した言語です。Dockerが、Goで作られているたりして、最近すごく人気が出てきています。
 ここでは軽く流しますが、深く知りたい方は、プログラミング言語Goの情報サイトを読むと詳しく分かります。

Goのインストール

 Macでは、Homebrewを使って、導入できます。

1
2
brew install go
brew install mercurial

 その他のOSは、公式サイトを確認しましょう。
 インストールできたら、$HOMEにある.bash_profileまたは.zprofileに、以下のコマンドを記入しましょう。

1
2
export GOROOT=$HOME/go
export PATH=$PATH:$GOROOT/bin

Revelとは

 Revelは、GoのWebフルスタックフレームワークになります。レスポンスがメチャクチャ速いフレームワークです。Play-Frameworkを参考に作られているそうです。詳しく知りたい方は、使ってみましょう!w

golang-revel-pic

Revelのインストール

 Revelをインストールするために、GitMercurialが必要になります。
 Macにインストールする人は、上のコマンドで、Mercurialインストールしているため、Gitを導入しましょう。

 無事にインストールできたら、以下のコマンドを実行すると、Revelのインストールが始まります。

1
2
go get github.com/revel/revel
go get github.com/revel/cmd/revel

 インストールが無事終了したら、以下のコマンドを実行してみましょう。
 http://localhost:9000にアクセスして、チャットが行なえたら、インストール成功です。

1
revel run github.com/revel/revel/samples/chat

Revelでアプリの作り方

 Revelでアプリケーションを作成するには、以下のコマンドを実行しましょう。

1
2
revel new myapp
revel run myapp

 http://localhost:9000で、It Works!の画面が表示されたら、作成成功です。コレの中身をイジって、アプリケーションを開発していきましょう。

golang-revel-itworks-pic

 It Works!を別のモジに変更するときは、app/controllers/app.goを開き、以下の部分を変更します。

1
2
3
4
 - return c.Renderx()

 + greeting := "Everyone World"
 + return c.Render(greeting)

 次に、app/views/App/Index.htmlを開き、該当場所を変更しましょう。

1
2
3
 - <h1>It works!</h1>

 + <h1>{{.greeting}}</h1>

 すると、文字がEveryone Worldに変わります。

golang-revel-everyone-pic

Hello Worldアプリ

 アプリケーションを作ってみましょう。
 まず、app/controllers/app.goに、以下のコードを追記します。ここでは、バリデーションも設定しています。

1
2
3
4
5
6
7
8
9
10
11
12
func (c App) Hello(myName string) revel.Result {
    c.Validation.Required(myName).Message("Your name is required!")
    c.Validation.MinSize(myName, 3).Message("Your name is not long enough!")

    if c.Validation.HasErrors() {
        c.Validation.Keep()
        c.FlashParams()
        return c.Redirect(App.Index)
    }

    return c.Render(myName)
}

 次に、app/views/App/Hello.htmlを作成します。後ほどIndex.htmlで、formタグの送り先として、設定します。

1
2
3
4
5
6
7
{{set . "title" "Home"}}
{{template "header.html" .}}

<h1>Hello {{.myName}}</h1>
<a href="/">Back to form</a>

{{template "footer.html" .}}

 revel newして、何も変更していなければ、大丈夫ですが、app/views/flash.htmlが、以下の内容であるかを確認しましょう。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
{{if .flash.success}}
<div class="alert alert-success">
  {{.flash.success}}
</div>
{{end}}

{{if or .errors .flash.error}}
<div class="alert alert-error">
  {{if .flash.error}}
      {{.flash.error}}
  {{end}}
  {{if .errors}}
  <ul style="margin-top:10px;">
      {{range .errors}}
          <li>{{.}}</li>
      {{end}}
  </ul>
  {{end}}
</div>
{{end}}

 最後に、app/views/App/Index.htmlに、以下を追記すれば、大丈夫です。

1
2
3
4
5
6
<form action="/App/Hello" method="GET">
  {{with $field := field "myName" .}}
      <input type="text" name="{{$field.Name}}" value="{{$field.Flash}}"/><br/>
  {{end}}
  <input type="submit" value="Say hello!" />
</form>

 設定したように、何も入力しないと、以下のエラーが返ってきます。

golang-revel-empty-pic

 アルファベットが3文字以上でないと、以下のエラーが返ってきます。

golang-revel-error-pic

 3文字以上入力すると、画面が遷移して、以下のように表示されます。

golang-revel-hello-pic

 最後に、GoとRevelを使ったハックライフを楽しみましょう!

参考サイト

「最速」フルスタックWebフレームワーク「revel」の紹介

Comments