SlideShare a Scribd company logo
GoでOSXのアプリを
書く
2015/03/11(水)
@Gonosy.go#11
というのは嘘で
(gopher-jsも面白いけど)
http://qiita.com/tenntenn/items/4b9587120176c2d4b454
gopher-luaを
使ってみた
2015/03/11(水)
@Gonosy.go#11
自己紹介
上田拓也
KLab株式会社
仕事:
Luaと戦う仕事
趣味:
Go言語, JS, Lua
twitter : @tenntenn
gopher-luaってなんなの?
gopher-luaとは
● 完全にGoで書かれたLuaの実装
○ 作者のブログ
○ https://github.com/yuin/gopher-lua
● GoからLuaが実行できる
● gopher-lua/ast を使うとASTも使える
● goyaccが使われてる
Luaってなんなの?
Lua
● C言語をホストとして、組み込まれる目的で使わ
れるスクリプト言語
● 動作が早い、移植しやすい
● 拡張言語として使われる
○ Redis, nginx, ....
● ゲームエンジン+Lua
○ cocos2d-x, Playground, ...
私とLua
● Luaを使って開発をしている
● Luaの開発環境をもっとよりよくしたい
○ デバッガ
■ https://github.com/tenntenn/lupe
○ lint
■ https://github.com/tenntenn/lualin
gopher-luaの使い方
実行
L := lua.NewState()
defer L.Close()
err := L.DoString(`print("hello")`)
if err != nil {
panic(err)
}
実行
func Double(L *lua.LState) int {
lv := L.ToInt(1)
L.Push(lua.LNumber(lv * 2))
return 1
}
func main() {
L := lua.NewState()
defer L.Close()
L.SetGlobal("double", L.NewFunction(Double))
}
1番目の引数をint
として受け取る
戻り値をpushする
グローバル変数にセット
AST
chunk, err := parse.Parse(f, fn)
if err := nil {panic(err)}
for _, s := range chunk {
if fs, ok := s.(*ast.FuncDefStmt); ok {
if fe, ok := fs.Name.Func.(*ast.IdentExpr); ok {
fmt.Print(fe.Value)
}
}
}
AST([]ast.Stmt)を取得
関数名を取得
関数宣言?
識別子
Go+Luaの利点
Luaを使って拡張できる
● ユーザスクリプト
○ Redisやnginxなど用途
● ゲームエンジン
○ コストの高いコアな処理はGoに任せる
○ ゲーム部分はLuaで柔軟に書く
Luaを使って設定ファイルを書く
-- config.lua
return {
host = “localhost”,
port = 8080,
}
Luaを使って設定ファイルを書く
-- config.lua
local config = {}
for i = 0, 4 do
table.insert(config, {
host = “localhost”,
port = 8080 + i,
})
end
return config
もちろんforも使える
Luaのソースファイルを解析
● ASTが取れる
● Cで書きたくない
● LuaだとLua自体に親和性があってよいが
○ コマンドラインの処理やファイルの処理が面倒
○ 正規表現?がいまいち
luaのlintを作った
lualin
● luaのlint
● 機能
○ 変数名や関数名のチェック
○ グローバル変数の有無
■ local忘れるとグローバル変数になる
○ 拡張可能なルール
実行例
今後の展望
● luaでルールを増やせるようにする
● ASTだけではできないことに対応
○ インデント
○ アンチパターンの検出
まとめ
● gopher-luaの紹介
● lualinの紹介

More Related Content

What's hot (20)

PDF
GAE/GoでLINE Messaging API を使う
Takuya Ueda
 
PDF
ライブコーディング・Androidのライブラリを作ってみよう
Masataka Kono
 
PDF
Cloud Functionsの紹介
Takuya Ueda
 
PDF
エディタの壁を越えるGoの開発ツールの文化と作成法
Takuya Ueda
 
PDF
Namespace API を用いたマルチテナント型 Web アプリの実践
Takuya Ueda
 
PDF
Cloud functionsの紹介
Takuya Ueda
 
PDF
GoによるiOSアプリの開発
Takuya Ueda
 
PDF
What is "Go" Gopher?
Ryuji Iwata
 
PDF
Hello GoDoc!
laco0416
 
PDF
Rubyでアプリ開発(2013 0430)
Shinichirou Nakamura
 
PDF
オススメの標準・準標準パッケージ20選
Takuya Ueda
 
PDF
PHP開発からAndroid開発をするようになって学んだWebとモバイルの違い
Masataka Kono
 
PDF
静的解析とUIの自動生成を駆使してモバイルアプリの運用コストを大幅に下げた話
Takuya Ueda
 
PDF
Google Assistant関係のセッションまとめ
Takuya Ueda
 
PDF
Goのパッケージ構成で 試行錯誤してみた話 ~ Gocon 2015 Summer
Hirokazu Fukami
 
PDF
Go Friday 傑作選
Takuya Ueda
 
PDF
ちょっとさわってみるGo言語ハンズオン
Satoshi Noda
 
PDF
Rubykaigi09 Webでるりまを検索するn個の方法
Hiroaki NAKADA
 
PDF
Introduce the activities of gdg kobe 130917
Yasutaka Kawamoto
 
PDF
今日から始めるGopher - スタートGo #0 @GDG名古屋
Takuya Ueda
 
GAE/GoでLINE Messaging API を使う
Takuya Ueda
 
ライブコーディング・Androidのライブラリを作ってみよう
Masataka Kono
 
Cloud Functionsの紹介
Takuya Ueda
 
エディタの壁を越えるGoの開発ツールの文化と作成法
Takuya Ueda
 
Namespace API を用いたマルチテナント型 Web アプリの実践
Takuya Ueda
 
Cloud functionsの紹介
Takuya Ueda
 
GoによるiOSアプリの開発
Takuya Ueda
 
What is "Go" Gopher?
Ryuji Iwata
 
Hello GoDoc!
laco0416
 
Rubyでアプリ開発(2013 0430)
Shinichirou Nakamura
 
オススメの標準・準標準パッケージ20選
Takuya Ueda
 
PHP開発からAndroid開発をするようになって学んだWebとモバイルの違い
Masataka Kono
 
静的解析とUIの自動生成を駆使してモバイルアプリの運用コストを大幅に下げた話
Takuya Ueda
 
Google Assistant関係のセッションまとめ
Takuya Ueda
 
Goのパッケージ構成で 試行錯誤してみた話 ~ Gocon 2015 Summer
Hirokazu Fukami
 
Go Friday 傑作選
Takuya Ueda
 
ちょっとさわってみるGo言語ハンズオン
Satoshi Noda
 
Rubykaigi09 Webでるりまを検索するn個の方法
Hiroaki NAKADA
 
Introduce the activities of gdg kobe 130917
Yasutaka Kawamoto
 
今日から始めるGopher - スタートGo #0 @GDG名古屋
Takuya Ueda
 

Similar to gopher-lua (19)

PPTX
社内勉強会1 go lang
Tsuyoshi Nakamura
 
PDF
Goでwebアプリを開発してみよう
Takuya Ueda
 
PPTX
Goはじめました
Masanori Masui
 
PDF
スッとGoを取り入れる
Yusuke Wada
 
PDF
Gitoriousをubuntu 10.04 LTSへインストール
Kiyoshi SATOH
 
PPTX
Go言語ってどんな言語? 導入実績や気になるトレンド
Atsushi Yasuda
 
PDF
Flutterやってみよう
Ryuto Yasugi
 
PDF
Go一緒にいかが?
Ryuji Iwata
 
PDF
先取り Go1.5
Preferred Networks
 
PDF
Go言語で色々試行錯誤して フレームワークもどきを作ってみた話
Fumiya Sakai
 
PDF
Fuel phpをcomposerに本気で対応させた時の話
Keishi Hosoba
 
PPTX
Clojureの世界と実際のWeb開発
Tsutomu Yano
 
PDF
GoでMinecraftっぽいの作る
京大 マイコンクラブ
 
PDF
Rubyist started to learn Groovy - things important to leran new LL
Uchio Kondo
 
PDF
私なりのGo言語のご紹介
Ryuji Iwata
 
PDF
今日から始める Go言語 と appengine
a know
 
PDF
プログラマになれないあなたのための言語戦略 (Gunma.web #7 2011/12/17)
parrotstudio
 
PDF
オブジェクト指向プログラマが今関数型言語を学ばないといけない理由
Kohei Taniguchi
 
社内勉強会1 go lang
Tsuyoshi Nakamura
 
Goでwebアプリを開発してみよう
Takuya Ueda
 
Goはじめました
Masanori Masui
 
スッとGoを取り入れる
Yusuke Wada
 
Gitoriousをubuntu 10.04 LTSへインストール
Kiyoshi SATOH
 
Go言語ってどんな言語? 導入実績や気になるトレンド
Atsushi Yasuda
 
Flutterやってみよう
Ryuto Yasugi
 
Go一緒にいかが?
Ryuji Iwata
 
先取り Go1.5
Preferred Networks
 
Go言語で色々試行錯誤して フレームワークもどきを作ってみた話
Fumiya Sakai
 
Fuel phpをcomposerに本気で対応させた時の話
Keishi Hosoba
 
Clojureの世界と実際のWeb開発
Tsutomu Yano
 
GoでMinecraftっぽいの作る
京大 マイコンクラブ
 
Rubyist started to learn Groovy - things important to leran new LL
Uchio Kondo
 
私なりのGo言語のご紹介
Ryuji Iwata
 
今日から始める Go言語 と appengine
a know
 
プログラマになれないあなたのための言語戦略 (Gunma.web #7 2011/12/17)
parrotstudio
 
オブジェクト指向プログラマが今関数型言語を学ばないといけない理由
Kohei Taniguchi
 
Ad

More from Takuya Ueda (18)

PDF
Goにおけるバージョン管理の必要性 − vgoについて −
Takuya Ueda
 
PDF
WebAssembly with Go
Takuya Ueda
 
PDF
GAE/Goとsyncパッケージ
Takuya Ueda
 
PDF
静的解析を使った開発ツールの開発
Takuya Ueda
 
PDF
そうだ、Goを始めよう
Takuya Ueda
 
PDF
マスター・オブ・goパッケージ
Takuya Ueda
 
PDF
メルカリ カウルのマスタデータの更新
Takuya Ueda
 
PDF
Go1.8 for Google App Engine
Takuya Ueda
 
PDF
Static Analysis in Go
Takuya Ueda
 
PDF
メルカリ・ソウゾウでは どうGoを活用しているのか?
Takuya Ueda
 
PDF
エキスパートGo
Takuya Ueda
 
PDF
Go静的解析ハンズオン
Takuya Ueda
 
PDF
Goにおける静的解析と製品開発への応用
Takuya Ueda
 
PDF
Gopher Fest 2017参加レポート
Takuya Ueda
 
PDF
条件式評価器の実装による管理ツールの抽象化
Takuya Ueda
 
PDF
Mobile Apps by Pure Go with Reverse Binding
Takuya Ueda
 
PDF
Goでかんたんソースコードの静的解析
Takuya Ueda
 
PDF
GAE/GoでWebアプリ開発入門
Takuya Ueda
 
Goにおけるバージョン管理の必要性 − vgoについて −
Takuya Ueda
 
WebAssembly with Go
Takuya Ueda
 
GAE/Goとsyncパッケージ
Takuya Ueda
 
静的解析を使った開発ツールの開発
Takuya Ueda
 
そうだ、Goを始めよう
Takuya Ueda
 
マスター・オブ・goパッケージ
Takuya Ueda
 
メルカリ カウルのマスタデータの更新
Takuya Ueda
 
Go1.8 for Google App Engine
Takuya Ueda
 
Static Analysis in Go
Takuya Ueda
 
メルカリ・ソウゾウでは どうGoを活用しているのか?
Takuya Ueda
 
エキスパートGo
Takuya Ueda
 
Go静的解析ハンズオン
Takuya Ueda
 
Goにおける静的解析と製品開発への応用
Takuya Ueda
 
Gopher Fest 2017参加レポート
Takuya Ueda
 
条件式評価器の実装による管理ツールの抽象化
Takuya Ueda
 
Mobile Apps by Pure Go with Reverse Binding
Takuya Ueda
 
Goでかんたんソースコードの静的解析
Takuya Ueda
 
GAE/GoでWebアプリ開発入門
Takuya Ueda
 
Ad

Recently uploaded (7)

PDF
プライバシ保護のためのインターネットアーキテクチャの進化 (2025-07-11)
Jun Kurihara
 
PDF
PostgreSQL18新機能紹介(db tech showcase 2025 発表資料)
NTT DATA Technology & Innovation
 
PDF
20250711_日本IBM ミドルウエア・ユーザー研究会(JIMUC)総会_中村会長資料.pdf
ChikakoInami1
 
PDF
20250711JIMUC総会IBM Automation_Platform最新情報_Connpass公開版.pdf
ChikakoInami1
 
PDF
[Hardening Designers Confernece 2025]ランサムウェアでの見えざるログ・見えるログ
kataware
 
PDF
20250710_Devinで切り拓くDB革命_〜価値創出に集中せよ〜.pdf
Masaki Yamakawa
 
PDF
20250717_Devin×GitHubCopilotで10人分の仕事は出来るのか?.pdf
Masaki Yamakawa
 
プライバシ保護のためのインターネットアーキテクチャの進化 (2025-07-11)
Jun Kurihara
 
PostgreSQL18新機能紹介(db tech showcase 2025 発表資料)
NTT DATA Technology & Innovation
 
20250711_日本IBM ミドルウエア・ユーザー研究会(JIMUC)総会_中村会長資料.pdf
ChikakoInami1
 
20250711JIMUC総会IBM Automation_Platform最新情報_Connpass公開版.pdf
ChikakoInami1
 
[Hardening Designers Confernece 2025]ランサムウェアでの見えざるログ・見えるログ
kataware
 
20250710_Devinで切り拓くDB革命_〜価値創出に集中せよ〜.pdf
Masaki Yamakawa
 
20250717_Devin×GitHubCopilotで10人分の仕事は出来るのか?.pdf
Masaki Yamakawa
 

gopher-lua