Fork me on GitHub

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

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

革命的なフレームワーク「Gin」の使い方、すぐに始めれる入門

| Comments

個人的に、今熱いフレームワークGinを始めるための使い方について、分かりやすく書きました。フレームワークの初期段階が公開されたばかりで、まだまだ知名度は低いです。しかし、このフレームワークの目的や考え方には、共感する人も多いのではないかと思い、これからくるのではないかと密かに期待しています。別の似たフレームワークが作られたら、そっちに火が移るかもしれませんがw
この革命的なフレームワークのGinについては、「ちょっと前に見かけた「GIN.IO」の紹介」に気持ち程度まとめてあります。(本当に気持ち程度に…)

Ginの始め方

まず、Ginをインストールしましょう。インストールの方法については、「これからくる!? JSON-API フレームワークのGinをインストールする方法」に書きました。ぜひ参考にしましょう!

まず、Ginのアプリケーションを作成しましょう。今回は、testという名前で作成しました。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
gin new test

Creating app test...
  created file test/spec/models/.gitkeep
  created file test/app/models/.gitkeep
  created file test/spec/spec_helper.lua
  created file test/config/settings.lua
  created file test/spec/controllers/1/pages_controller_spec.lua
  created file test/db/schemas/.gitkeep
  created file test/db/mysql.lua
  created file test/config/nginx.conf
  created file test/config/errors.lua
  created file test/lib/.gitkeep
  created file test/config/application.lua
  created file test/app/controllers/1/pages_controller.lua
  created file test/db/migrations/.gitkeep
  created file test/.gitignore
  created file test/config/routes.lua

作成したtestディレクトリに移動します。

1
cd test

作成されたディレクトリの中には、bustedというテストライブラリがデフォルトで入っています。なので、テストしましょう。

1
busted

ま、ドキュメント通りに、何もせずともテストは通る…ん??

1
2
3
4
5
6
7
ERROR: Cannot initialize launcher (is this a Gin project directory?).
0 successes / 1 failure / 0 pending : 0.032072 seconds.

Failure → ./spec/controllers/1/pages_controller_spec.lua @ 6
PagesController / #root / responds with a welcome message
/usr/local/share/lua/5.1/gin/cli/launcher.lua:32: attempt to index local 'db' (a boolean value)

何だと!!(((((((( ;゚Д゚))))))))
エラーが出る!何度やってもエラーだ!!
インストールは間違っていない、なんでだ!?っとなり、ただ時間だけが過ぎていきました。
昨日、コーディングがバリバリできる友人に相談したところ、ようやく原因が分かり、解決無事できました。

原因は、DBの設定ができておらず、テストがコケていました。解決するために、まずdb/mysql.luaを編集します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
local SqlDatabase = require 'gin.db.sql'
local Gin = require 'gin.core.gin'

-- First, specify the environment settings for this database, for instance:
-- local DbSettings = {
--     development = {
--         adapter = 'mysql',
--         host = "127.0.0.1",
--         port = 3306,
--         database = "test_development",
--         user = "root",
--         password = "",
--         pool = 5
--     },

--     test = {
--         adapter = 'mysql',
--         host = "127.0.0.1",
--         port = 3306,
--         database = "test_test",
--         user = "root",
--         password = "",
--         pool = 5
--     },

--     production = {
--         adapter = 'mysql',
--         host = "127.0.0.1",
--         port = 3306,
--         database = "test_production",
--         user = "root",
--         password = "",
--         pool = 5
--     }
-- }

-- Then initialize and return your database:
-- local MySql = SqlDatabase.new(DbSettings[Gin.env])
--
-- return MySql

開くと、ほとんどコメントアウトされています。このコメント以外のコメントアウトを外しましょう。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
local SqlDatabase = require 'gin.db.sql'
local Gin = require 'gin.core.gin'

-- First, specify the environment settings for this database, for instance:
local DbSettings = {
    development = {
        adapter = 'mysql',
        host = "127.0.0.1",
        port = 3306,
        database = "test_development",
        user = "root",
        password = "",
        pool = 5
    },

    test = {
        adapter = 'mysql',
        host = "127.0.0.1",
        port = 3306,
        database = "test_test",
        user = "root",
        password = "",
        pool = 5
    },

    production = {
        adapter = 'mysql',
        host = "127.0.0.1",
        port = 3306,
        database = "test_production",
        user = "root",
        password = "",
        pool = 5
    }
}

-- Then initialize and return your database:
local MySql = SqlDatabase.new(DbSettings[Gin.env])

return MySql

前回のインストールで、homebrewでMySqlをインストールしたままだと、ユーザ名やパスワードなどそのままで大丈夫です。変更していたら、合わせましょう。

編集したら、次はmigrationを作成します。

1
gin generate migration

これで、もう一度bustedしてみましょう。

1
busted

キタ━━━━(゚∀゚)━━━━!!

1
2
1 success / 0 failures / 0 pending : 0.137629 seconds.

これは、ドキュメントが不親切ですね。書き直して欲しいものです。詰まって、挫折した人もいるんじゃないでしょうかね。予期せぬエラーで無駄に時間がかかってしまいました。

テストも通ったことなので、さっそくGinアプリケーションを起動してみましょう。

1
gin start

起動が、やたら早いです。 起動したら、ブラウザで
http://localhost:7200/
を開くと確認できます。

1
2
3
4
{
code: 101,
message: "Invalid Accept header format."
}

このエラーが表示されたら、成功です。失敗ではなく、正常な動作です。。

Ginには、API Consoleがあります。
http://localhost:7200/ginconsole
にアクセスすることで、ブラウザからAPIをイジることができます。 アクセスしたら、何も変更せずにHITボタンを押すと"message": "Hello world from Gin!"が、下にあるResponseのBodyに返ってきます。

1
2
3
{
  "message": "Hello world from Gin!"
}

最後に、Ginアプリケーションを停止させるには、このコマンドです。

1
gin stop

おわりに

Ginを始めるための使い方について、書きました。あまりドキュメントも充実してないので、ちょっとエラーすると、行き詰まってしまいすね。相談に乗ってくれた友人に、本当に感謝、感謝です。
わざわざRailsなどの重たいフレームワークを使ってる人はいるので、GinのようなJSONを出力するためのフレームワークを欲してた人は意外と多いんじゃないかなっと思います。なので、今後これの日の目を浴びる日がくるかもしれません!

参考先:

Getting Started(公式docs)

Comments