Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
EN
Uploaded by
Takuya Ueda
3,003 views
goパッケージで型情報を用いたソースコード検索を実現する
Shinjuku.go#1で発表した資料です。 https://shinjukugo.connpass.com/event/52929/
Technology
◦
Read more
1
Save
Share
Embed
Embed presentation
Download
Download to read offline
1
/ 19
2
/ 19
3
/ 19
4
/ 19
5
/ 19
6
/ 19
7
/ 19
8
/ 19
9
/ 19
10
/ 19
11
/ 19
12
/ 19
13
/ 19
14
/ 19
15
/ 19
16
/ 19
17
/ 19
18
/ 19
19
/ 19
More Related Content
PDF
Cloud Functionsの紹介
by
Takuya Ueda
PDF
Cloud functionsの紹介
by
Takuya Ueda
PDF
オススメの標準・準標準パッケージ20選
by
Takuya Ueda
PDF
静的解析とUIの自動生成を駆使してモバイルアプリの運用コストを大幅に下げた話
by
Takuya Ueda
PDF
エディタの壁を越えるGoの開発ツールの文化と作成法
by
Takuya Ueda
PDF
Gopher Fest 2017参加レポート
by
Takuya Ueda
PDF
Namespace API を用いたマルチテナント型 Web アプリの実践
by
Takuya Ueda
PDF
粗探しをしてGoのコントリビューターになる方法
by
Takuya Ueda
Cloud Functionsの紹介
by
Takuya Ueda
Cloud functionsの紹介
by
Takuya Ueda
オススメの標準・準標準パッケージ20選
by
Takuya Ueda
静的解析とUIの自動生成を駆使してモバイルアプリの運用コストを大幅に下げた話
by
Takuya Ueda
エディタの壁を越えるGoの開発ツールの文化と作成法
by
Takuya Ueda
Gopher Fest 2017参加レポート
by
Takuya Ueda
Namespace API を用いたマルチテナント型 Web アプリの実践
by
Takuya Ueda
粗探しをしてGoのコントリビューターになる方法
by
Takuya Ueda
What's hot
PDF
GoによるiOSアプリの開発
by
Takuya Ueda
PDF
Go mobileでモバイルアプリを作ろう
by
Takuya Ueda
PDF
GAE/GoでLINE Messaging API を使う
by
Takuya Ueda
PDF
Google Assistant関係のセッションまとめ
by
Takuya Ueda
PDF
Go初心者向けハンズオン コマンドラインツールを作ろう
by
Takuya Ueda
PDF
Goだけでモバイルアプリを作ろう
by
Takuya Ueda
PDF
Go Friday 傑作選
by
Takuya Ueda
PDF
Goでwebアプリを開発してみよう
by
Takuya Ueda
PDF
条件式評価器の実装による管理ツールの抽象化
by
Takuya Ueda
PDF
go.mobile で Android 開発
by
Hiroshi Kurokawa
PDF
Goだけでモバイルアプリを作る
by
Takuya Ueda
PDF
GAE/Goとsyncパッケージ
by
Takuya Ueda
PDF
メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法
by
Takuya Ueda
PDF
Go1.8 for Google App Engine
by
Takuya Ueda
PDF
Go入門
by
Takuya Ueda
PDF
GAE/GoでWebアプリ開発入門
by
Takuya Ueda
PDF
メルカリ・ソウゾウでは どうGoを活用しているのか?
by
Takuya Ueda
PDF
Goでかんたんソースコードの静的解析
by
Takuya Ueda
PDF
Go MobileでAndroidアプリ開発
by
Takuya Ueda
PPTX
私が複数人開発で感じている Git・GitHubのうまみ
by
Shihomi Katayama
GoによるiOSアプリの開発
by
Takuya Ueda
Go mobileでモバイルアプリを作ろう
by
Takuya Ueda
GAE/GoでLINE Messaging API を使う
by
Takuya Ueda
Google Assistant関係のセッションまとめ
by
Takuya Ueda
Go初心者向けハンズオン コマンドラインツールを作ろう
by
Takuya Ueda
Goだけでモバイルアプリを作ろう
by
Takuya Ueda
Go Friday 傑作選
by
Takuya Ueda
Goでwebアプリを開発してみよう
by
Takuya Ueda
条件式評価器の実装による管理ツールの抽象化
by
Takuya Ueda
go.mobile で Android 開発
by
Hiroshi Kurokawa
Goだけでモバイルアプリを作る
by
Takuya Ueda
GAE/Goとsyncパッケージ
by
Takuya Ueda
メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法
by
Takuya Ueda
Go1.8 for Google App Engine
by
Takuya Ueda
Go入門
by
Takuya Ueda
GAE/GoでWebアプリ開発入門
by
Takuya Ueda
メルカリ・ソウゾウでは どうGoを活用しているのか?
by
Takuya Ueda
Goでかんたんソースコードの静的解析
by
Takuya Ueda
Go MobileでAndroidアプリ開発
by
Takuya Ueda
私が複数人開発で感じている Git・GitHubのうまみ
by
Shihomi Katayama
Viewers also liked
PDF
Javaトラブルに備えよう #jjug_ccc #ccc_h2
by
Norito Agetsuma
PDF
Goにおける静的解析と製品開発への応用
by
Takuya Ueda
PDF
HTTP2 RFC 発行記念祝賀会
by
Jxck Jxck
PDF
Mobile Apps by Pure Go with Reverse Binding
by
Takuya Ueda
PPTX
うしちゃん WebRTC Chat on SkyWayの開発コードw
by
Kensaku Komatsu
PDF
Go静的解析ハンズオン
by
Takuya Ueda
PDF
Static Analysis in Go
by
Takuya Ueda
PDF
HTTP2 時代の Web - web over http2
by
Jxck Jxck
PPTX
WebRTC Browsers n Stacks Implementation differences
by
Alexandre Gouaillard
PDF
エキスパートGo
by
Takuya Ueda
PDF
メルカリ カウルのマスタデータの更新
by
Takuya Ueda
Javaトラブルに備えよう #jjug_ccc #ccc_h2
by
Norito Agetsuma
Goにおける静的解析と製品開発への応用
by
Takuya Ueda
HTTP2 RFC 発行記念祝賀会
by
Jxck Jxck
Mobile Apps by Pure Go with Reverse Binding
by
Takuya Ueda
うしちゃん WebRTC Chat on SkyWayの開発コードw
by
Kensaku Komatsu
Go静的解析ハンズオン
by
Takuya Ueda
Static Analysis in Go
by
Takuya Ueda
HTTP2 時代の Web - web over http2
by
Jxck Jxck
WebRTC Browsers n Stacks Implementation differences
by
Alexandre Gouaillard
エキスパートGo
by
Takuya Ueda
メルカリ カウルのマスタデータの更新
by
Takuya Ueda
goパッケージで型情報を用いたソースコード検索を実現する
1.
goパッケージで型情報を用いた ソースコード検索を実現する 2017/04/13(木) @Shinjuku.go#1 The Go gopher
was designed by Renee French. The gopher stickers was made by Takuya Ueda. Licensed under the Creative Commons 3.0 Attributions license.
2.
自己紹介 メルカリ/ソウゾウ 上田拓也 twitter: @tenntenn ■ コミュニティ活動 Google
Cloud Platform User Group (GCPUG) Tokyo Goビギナーズ golang.tokyo Go Conference ■ 業務 GAE/Goでメルカリアッテを作ってます GoやGCPコミュニティを盛り上げる仕事 Gopherを描く仕事(LINEスタンプ) 2
3.
静的解析をして型情報から ソースコードを検索しよう 3
4.
ソースコードの静的解析とは? 4 ■ ソースコードを実行せずに解析すること ● ソースコードから抽象構文木(AST)などを取 得して解析する ●
静的型付け言語だと、静的解析で型情報が 取得できる ● 逆は実行して解析する動的解析
5.
Goで静的解析をすると何が嬉しいのか? ● リファクタリングツール ○ 変数の宣言位置や使用箇所の抽出 ○
パッケージの解析 ● コードジェネレーター ○ コメントによるアノテーションの抽出 ○ コードフォーマッタ ● 処理系 ○ 抽象構文木(AST)の解析 ○ 定数の扱い 5 静的型付け言語なので 静的解析でも多くの事が知れる
6.
6 コントリビュータになれる!
7.
7 https://www.slideshare.net/takuyaueda967/go-72158330
8.
開発ツールとソースコードの静的解析 8 ■ 開発ツールの多くは静的解析を行っている ● gofmt/goimports ○
コードフォーマッター ● go vet/golint ○ コードチェッカー、リンター ● guru ○ 静的解析 ● gocode ○ コード補完 ● errcheck ○ エラー処理のチェック ● gorename/gomvpkg ○ リファクタリングツール
9.
■ 標準パッケージで静的解析の機能を提供 goパッケージ 9 go/ast 抽象構文木(AST)を提供 go/build
パッケージに関する情報を集める go/constant 定数に関する型を提供 go/doc ドキュメントをASTから取り出す go/format コードフォーマッタの機能を提供 go/importer コンパイラに適したImporterを提供 go/parser 構文解析の機能を提供 go/printer ASTの表示機能を提供 go/scanner 字句解析の機能を提供 go/token トークンに関する型を提供 go/types 型チェックに関する機能を提供
10.
静的解析の流れ 10 ソースコード トークン 抽象構文木(AST) 型情報 構文解析 字句解析 型チェック go/scanner go/token go/parser go/ast go/types go/constant
11.
字句解析 - go/scanner,go/token ■
文字列をトークンにしていく ● 空白などを取り除き、意味のある単位=トー クンにしていく作業 11 v + 1 IDENT ADD INT トークン ソースコード
12.
構文解析 - go/parser,go/ast ■
トークンを抽象構文木(AST)にしていく ● プログラムの構造を持たせる 12 v + 1 IDENT ADD INT ソースコード + v 1 BinaryExpr Ident BasicLit トークン 抽象構文木(AST)
13.
型チェック - go/types,go/constant ■
型チェックを行う ● 識別子の解決 ● 型の推論 ● 定数の評価 13 n := 100 + 200 fmt.Println(n) 定数の評価 =300 型の推論 -> int 識別子の解決 識別子の解決 -> fmtパッケージ
14.
型情報を用いて検索してみる 14
15.
具象型のエラーを返してる部分を検索 15 ■ やりたいこと ● errorインタフェースを実装している型を返 す関数を探す ●
そのうち、error型として返さず別の型とし て返しているものを探す ■ やりかた ● ASTを取得する ● 型情報を取得する ● 型情報とASTから該当の関数を探す ほら、簡単!
16.
今回対象とするサンプル type Err string func
(err Err) Error() string { return string(err) } func f() Err { return Err("error") } func main() { fmt.Println(f()) fmt.Println(func() Err { return Err("error2") }) fmt.Println(func() error { return nil }) } 16 これ これ
17.
ここから ライブコーディング! 17 https://gist.github.com/tenntenn/607e27 638a3ec850c9a7c2dec334b5b7
18.
まとめ 18 ■ 静的解析はかんたん ● goパッケージを使う ●
ASTや型情報の取得も簡単 ● 静的解析で多くの情報が知れる ■ 開発ツールを作って開発効率を上げよう ● 標準でも多くの開発ツールがある ● 自分でも簡単に開発ツールが作れる ● 21世紀なのでソースコードの質はツールで 保証しよう
19.
Thank you! twitter: @tenntenn Qiita:
tenntenn connpass: tenntenn 19
Download