Submit Search
Upload
goパッケージで型情報を用いたソースコード検索を実現する
•
1 like
•
2,990 views
Takuya Ueda
Follow
Shinjuku.go#1で発表した資料です。 https://shinjukugo.connpass.com/event/52929/
Read less
Read more
Technology
Report
Share
Report
Share
1 of 19
Download now
Download to read offline
Recommended
Cloud Functionsの紹介
Cloud Functionsの紹介
Takuya Ueda
Cloud functionsの紹介
Cloud functionsの紹介
Takuya Ueda
オススメの標準・準標準パッケージ20選
オススメの標準・準標準パッケージ20選
Takuya Ueda
静的解析とUIの自動生成を駆使してモバイルアプリの運用コストを大幅に下げた話
静的解析とUIの自動生成を駆使してモバイルアプリの運用コストを大幅に下げた話
Takuya Ueda
エディタの壁を越えるGoの開発ツールの文化と作成法
エディタの壁を越えるGoの開発ツールの文化と作成法
Takuya Ueda
Gopher Fest 2017参加レポート
Gopher Fest 2017参加レポート
Takuya Ueda
Namespace API を用いたマルチテナント型 Web アプリの実践
Namespace API を用いたマルチテナント型 Web アプリの実践
Takuya Ueda
粗探しをしてGoのコントリビューターになる方法
粗探しをしてGoのコントリビューターになる方法
Takuya Ueda
Recommended
Cloud Functionsの紹介
Cloud Functionsの紹介
Takuya Ueda
Cloud functionsの紹介
Cloud functionsの紹介
Takuya Ueda
オススメの標準・準標準パッケージ20選
オススメの標準・準標準パッケージ20選
Takuya Ueda
静的解析とUIの自動生成を駆使してモバイルアプリの運用コストを大幅に下げた話
静的解析とUIの自動生成を駆使してモバイルアプリの運用コストを大幅に下げた話
Takuya Ueda
エディタの壁を越えるGoの開発ツールの文化と作成法
エディタの壁を越えるGoの開発ツールの文化と作成法
Takuya Ueda
Gopher Fest 2017参加レポート
Gopher Fest 2017参加レポート
Takuya Ueda
Namespace API を用いたマルチテナント型 Web アプリの実践
Namespace API を用いたマルチテナント型 Web アプリの実践
Takuya Ueda
粗探しをしてGoのコントリビューターになる方法
粗探しをしてGoのコントリビューターになる方法
Takuya Ueda
GoによるiOSアプリの開発
GoによるiOSアプリの開発
Takuya Ueda
Go mobileでモバイルアプリを作ろう
Go mobileでモバイルアプリを作ろう
Takuya Ueda
GAE/GoでLINE Messaging API を使う
GAE/GoでLINE Messaging API を使う
Takuya Ueda
Google Assistant関係のセッションまとめ
Google Assistant関係のセッションまとめ
Takuya Ueda
Go初心者向けハンズオン コマンドラインツールを作ろう
Go初心者向けハンズオン コマンドラインツールを作ろう
Takuya Ueda
Goだけでモバイルアプリを作ろう
Goだけでモバイルアプリを作ろう
Takuya Ueda
Go Friday 傑作選
Go Friday 傑作選
Takuya Ueda
Goでwebアプリを開発してみよう
Goでwebアプリを開発してみよう
Takuya Ueda
条件式評価器の実装による管理ツールの抽象化
条件式評価器の実装による管理ツールの抽象化
Takuya Ueda
go.mobile で Android 開発
go.mobile で Android 開発
Hiroshi Kurokawa
Goだけでモバイルアプリを作る
Goだけでモバイルアプリを作る
Takuya Ueda
GAE/Goとsyncパッケージ
GAE/Goとsyncパッケージ
Takuya Ueda
メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法
メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法
Takuya Ueda
Go1.8 for Google App Engine
Go1.8 for Google App Engine
Takuya Ueda
Go入門
Go入門
Takuya Ueda
GAE/GoでWebアプリ開発入門
GAE/GoでWebアプリ開発入門
Takuya Ueda
メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?
Takuya Ueda
Goでかんたんソースコードの静的解析
Goでかんたんソースコードの静的解析
Takuya Ueda
Go MobileでAndroidアプリ開発
Go MobileでAndroidアプリ開発
Takuya Ueda
私が複数人開発で感じている Git・GitHubのうまみ
私が複数人開発で感じている Git・GitHubのうまみ
Shihomi Katayama
Javaトラブルに備えよう #jjug_ccc #ccc_h2
Javaトラブルに備えよう #jjug_ccc #ccc_h2
Norito Agetsuma
Goにおける静的解析と製品開発への応用
Goにおける静的解析と製品開発への応用
Takuya Ueda
More Related Content
What's hot
GoによるiOSアプリの開発
GoによるiOSアプリの開発
Takuya Ueda
Go mobileでモバイルアプリを作ろう
Go mobileでモバイルアプリを作ろう
Takuya Ueda
GAE/GoでLINE Messaging API を使う
GAE/GoでLINE Messaging API を使う
Takuya Ueda
Google Assistant関係のセッションまとめ
Google Assistant関係のセッションまとめ
Takuya Ueda
Go初心者向けハンズオン コマンドラインツールを作ろう
Go初心者向けハンズオン コマンドラインツールを作ろう
Takuya Ueda
Goだけでモバイルアプリを作ろう
Goだけでモバイルアプリを作ろう
Takuya Ueda
Go Friday 傑作選
Go Friday 傑作選
Takuya Ueda
Goでwebアプリを開発してみよう
Goでwebアプリを開発してみよう
Takuya Ueda
条件式評価器の実装による管理ツールの抽象化
条件式評価器の実装による管理ツールの抽象化
Takuya Ueda
go.mobile で Android 開発
go.mobile で Android 開発
Hiroshi Kurokawa
Goだけでモバイルアプリを作る
Goだけでモバイルアプリを作る
Takuya Ueda
GAE/Goとsyncパッケージ
GAE/Goとsyncパッケージ
Takuya Ueda
メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法
メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法
Takuya Ueda
Go1.8 for Google App Engine
Go1.8 for Google App Engine
Takuya Ueda
Go入門
Go入門
Takuya Ueda
GAE/GoでWebアプリ開発入門
GAE/GoでWebアプリ開発入門
Takuya Ueda
メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?
Takuya Ueda
Goでかんたんソースコードの静的解析
Goでかんたんソースコードの静的解析
Takuya Ueda
Go MobileでAndroidアプリ開発
Go MobileでAndroidアプリ開発
Takuya Ueda
私が複数人開発で感じている Git・GitHubのうまみ
私が複数人開発で感じている Git・GitHubのうまみ
Shihomi Katayama
What's hot
(20)
GoによるiOSアプリの開発
GoによるiOSアプリの開発
Go mobileでモバイルアプリを作ろう
Go mobileでモバイルアプリを作ろう
GAE/GoでLINE Messaging API を使う
GAE/GoでLINE Messaging API を使う
Google Assistant関係のセッションまとめ
Google Assistant関係のセッションまとめ
Go初心者向けハンズオン コマンドラインツールを作ろう
Go初心者向けハンズオン コマンドラインツールを作ろう
Goだけでモバイルアプリを作ろう
Goだけでモバイルアプリを作ろう
Go Friday 傑作選
Go Friday 傑作選
Goでwebアプリを開発してみよう
Goでwebアプリを開発してみよう
条件式評価器の実装による管理ツールの抽象化
条件式評価器の実装による管理ツールの抽象化
go.mobile で Android 開発
go.mobile で Android 開発
Goだけでモバイルアプリを作る
Goだけでモバイルアプリを作る
GAE/Goとsyncパッケージ
GAE/Goとsyncパッケージ
メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法
メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法
Go1.8 for Google App Engine
Go1.8 for Google App Engine
Go入門
Go入門
GAE/GoでWebアプリ開発入門
GAE/GoでWebアプリ開発入門
メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?
Goでかんたんソースコードの静的解析
Goでかんたんソースコードの静的解析
Go MobileでAndroidアプリ開発
Go MobileでAndroidアプリ開発
私が複数人開発で感じている Git・GitHubのうまみ
私が複数人開発で感じている Git・GitHubのうまみ
Viewers also liked
Javaトラブルに備えよう #jjug_ccc #ccc_h2
Javaトラブルに備えよう #jjug_ccc #ccc_h2
Norito Agetsuma
Goにおける静的解析と製品開発への応用
Goにおける静的解析と製品開発への応用
Takuya Ueda
HTTP2 RFC 発行記念祝賀会
HTTP2 RFC 発行記念祝賀会
Jxck Jxck
Mobile Apps by Pure Go with Reverse Binding
Mobile Apps by Pure Go with Reverse Binding
Takuya Ueda
うしちゃん WebRTC Chat on SkyWayの開発コードw
うしちゃん WebRTC Chat on SkyWayの開発コードw
Kensaku Komatsu
Go静的解析ハンズオン
Go静的解析ハンズオン
Takuya Ueda
Static Analysis in Go
Static Analysis in Go
Takuya Ueda
HTTP2 時代の Web - web over http2
HTTP2 時代の Web - web over http2
Jxck Jxck
WebRTC Browsers n Stacks Implementation differences
WebRTC Browsers n Stacks Implementation differences
Alexandre Gouaillard
エキスパートGo
エキスパートGo
Takuya Ueda
メルカリ カウルのマスタデータの更新
メルカリ カウルのマスタデータの更新
Takuya Ueda
Viewers also liked
(11)
Javaトラブルに備えよう #jjug_ccc #ccc_h2
Javaトラブルに備えよう #jjug_ccc #ccc_h2
Goにおける静的解析と製品開発への応用
Goにおける静的解析と製品開発への応用
HTTP2 RFC 発行記念祝賀会
HTTP2 RFC 発行記念祝賀会
Mobile Apps by Pure Go with Reverse Binding
Mobile Apps by Pure Go with Reverse Binding
うしちゃん WebRTC Chat on SkyWayの開発コードw
うしちゃん WebRTC Chat on SkyWayの開発コードw
Go静的解析ハンズオン
Go静的解析ハンズオン
Static Analysis in Go
Static Analysis in Go
HTTP2 時代の Web - web over http2
HTTP2 時代の Web - web over http2
WebRTC Browsers n Stacks Implementation differences
WebRTC Browsers n Stacks Implementation differences
エキスパートGo
エキスパートGo
メルカリ カウルのマスタデータの更新
メルカリ カウルのマスタデータの更新
Similar to goパッケージで型情報を用いたソースコード検索を実現する
今日から始める Go言語 と appengine
今日から始める Go言語 と appengine
a know
Go言語ってどんな言語? 導入実績や気になるトレンド
Go言語ってどんな言語? 導入実績や気になるトレンド
Atsushi Yasuda
オープンセミナー香川2012 LT
オープンセミナー香川2012 LT
Kouta Imanaka
Groovy Grails eXchage 2014 報告
Groovy Grails eXchage 2014 報告
Tsuyoshi Yamamoto
Tokyo.R女子部発表スライド「Rではじめるデータ解析の超基礎」
Tokyo.R女子部発表スライド「Rではじめるデータ解析の超基礎」
tokyorgirls
The History of Groovy #GroovyBase
The History of Groovy #GroovyBase
kyon mm
What is "Go" Gopher?
What is "Go" Gopher?
Ryuji Iwata
今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築
You&I
FOSS4G OSAKAライトニングトーク
FOSS4G OSAKAライトニングトーク
Yoichi Kayama
SnapDishの事例
SnapDishの事例
Fumikazu Kiyota
Go一緒にいかが?
Go一緒にいかが?
Ryuji Iwata
今日から始めるGopher - スタートGo #0 @GDG名古屋
今日から始めるGopher - スタートGo #0 @GDG名古屋
Takuya Ueda
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
Katsuhiro Morishita
実践Go ツールの作成から配布まで
実践Go ツールの作成から配布まで
Yusuke Miyake
言語処理するのに Python でいいの? #PyDataTokyo
言語処理するのに Python でいいの? #PyDataTokyo
Shuyo Nakatani
オレオレ言語実装に役立つプル型ASTウォーカーAPI
オレオレ言語実装に役立つプル型ASTウォーカーAPI
隆行 神戸
Goとtest coverage
Goとtest coverage
nakaji-s
gopherと学ぶgolang ~go fmt編~
gopherと学ぶgolang ~go fmt編~
nakaji-s
GoでMinecraftっぽいの作る
GoでMinecraftっぽいの作る
京大 マイコンクラブ
A Tour of やきう&Go - やきう民の私とGoの半年(実質3日間)
A Tour of やきう&Go - やきう民の私とGoの半年(実質3日間)
Shinichi Nakagawa
Similar to goパッケージで型情報を用いたソースコード検索を実現する
(20)
今日から始める Go言語 と appengine
今日から始める Go言語 と appengine
Go言語ってどんな言語? 導入実績や気になるトレンド
Go言語ってどんな言語? 導入実績や気になるトレンド
オープンセミナー香川2012 LT
オープンセミナー香川2012 LT
Groovy Grails eXchage 2014 報告
Groovy Grails eXchage 2014 報告
Tokyo.R女子部発表スライド「Rではじめるデータ解析の超基礎」
Tokyo.R女子部発表スライド「Rではじめるデータ解析の超基礎」
The History of Groovy #GroovyBase
The History of Groovy #GroovyBase
What is "Go" Gopher?
What is "Go" Gopher?
今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築
FOSS4G OSAKAライトニングトーク
FOSS4G OSAKAライトニングトーク
SnapDishの事例
SnapDishの事例
Go一緒にいかが?
Go一緒にいかが?
今日から始めるGopher - スタートGo #0 @GDG名古屋
今日から始めるGopher - スタートGo #0 @GDG名古屋
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
実践Go ツールの作成から配布まで
実践Go ツールの作成から配布まで
言語処理するのに Python でいいの? #PyDataTokyo
言語処理するのに Python でいいの? #PyDataTokyo
オレオレ言語実装に役立つプル型ASTウォーカーAPI
オレオレ言語実装に役立つプル型ASTウォーカーAPI
Goとtest coverage
Goとtest coverage
gopherと学ぶgolang ~go fmt編~
gopherと学ぶgolang ~go fmt編~
GoでMinecraftっぽいの作る
GoでMinecraftっぽいの作る
A Tour of やきう&Go - やきう民の私とGoの半年(実質3日間)
A Tour of やきう&Go - やきう民の私とGoの半年(実質3日間)
Recently uploaded
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
CRI Japan, Inc.
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
Toru Tamaki
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
CRI Japan, Inc.
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
sn679259
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
Toru Tamaki
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Hiroshi Tomioka
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
WSO2
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
atsushi061452
Recently uploaded
(11)
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
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 now