はじめに
最近Golangをどんどん使いたい衝動に駆られています。まだ入門した手だけど。
そんな中で、Golangのハンズオンがあるじゃないですか。
それは参加しますよね。
明日は、Golangのハンズオン♪
— FUMI@Python&Go&Rust (@FumiProgrammer) 2019年3月22日
楽しみ!https://t.co/YkltJoSL3V#golangtokyo
主催者
golang.tokyo
プログラミング言語のGoの導入企業のメンバーが集まり、Goの普及を推進するコミュニティです
タイムテーブル
時間 | 内容 |
---|---|
12:30 ~ | 開場・受付 |
13:00 ~ | モクモクハンズオン |
~ 17:00 | 終了・撤収 |
概要(Connpassより)
静的解析に必要な知識をハンズオン形式で学習します。 終わった方々でgolang.org/x/tools/go/analysispkgをつかった静的解析ツールの自作に挑戦してみましょう。
以下の資料で触れられている内容に取り組んでいると当日楽しめるかと思います。
- Goにおける静的解析のモジュール化について | Mercari Engineering Blog
- Software Design 2019年3月号
作品で魅せるGoプログラミング【2】Goのコードチェックツールを作って品質をあげよう……鎌田 健史 - golang.org/x/tools/go/analysisでLinterツールを自作する | My External Storage
- 静的解析をはじめよう - Gopherをさがせ! | golang.tokyo Codelab」 当日の質疑応答などにはSlackも利用する予定です。Gopher Slackに未参加の方は以下のURLより事前に参加しておいてください。(#tokyo チャンネルをお借りする予定)
前準備
前日まで何もしていないので、開始前の午前中に概要で書かれていた資料を一通り目を通します。
当日
来たぜヽ(*゚∀゚*)ノ#golangtokyo pic.twitter.com/vPwyyqlaaM
— FUMI@Python&Go&Rust (@FumiProgrammer) 2019年3月23日
好きなGopherくんが作れる(∩∀`*)
静的解析は何のためにする?
プログラムの品質チェックに使う ・自動生成の時にもよく使う
Goと静的解析
Goは静的解析しやすいように作られている
Goの式とは
Goの式とは #golangtokyohttps://t.co/djSkj4UHwZ
— Yoichiro Shimizu | 技術書典6 け27 golang.tokyo (@budougumi0617) 2019年3月23日
静的解析の基本的な手順
Goの標準パッケージ
go/ast go/build go/constant go/doc go/format etc...
Goのサードパーティパッケージ
x/tools/goパッケージ
中身一覧
* analysis
* ast
* callgraph
* cfg
* expect
* packages
* pointer
* ssa
* types
1. 字句解析
- 入力された文字列をトークンとして分解
- トークンを抽象構文木(AST)に変換
ソースコード => トークン => 抽象構文木(AST)
字句解析と構文解析はあらかじめちゃんと勉強したからわかるぞ!
— Momo Watanabe (@mom0tomo) 2019年3月23日
Goの標準パッケージではじめる静的解析入門①準備編 · mom0tomo https://t.co/fadx9qjnoO #golangtokyo
analysisパッケージhttps://t.co/4TmBQ0Iifz #golangtokyo
— Yoichiro Shimizu | 技術書典6 け27 golang.tokyo (@budougumi0617) 2019年3月23日
go vetの中身はもうanalysisパッケージを使っています。 #golangtokyohttps://t.co/E1pYPJGFaI
— Yoichiro Shimizu | 技術書典6 け27 golang.tokyo (@budougumi0617) 2019年3月23日
analysisパッケージのAnalyzerを使って静的解析をするとPassに全部の情報が入ってきます。 #golangtokyohttps://t.co/RrJiRuv0y8
— Yoichiro Shimizu | 技術書典6 け27 golang.tokyo (@budougumi0617) 2019年3月23日
Analyzerを使って静的解析を作るとtestも簡単に作れます #golangtokyohttps://t.co/vxIyqeFUWqhttps://t.co/QHqtqu2CN4
— Yoichiro Shimizu | 技術書典6 け27 golang.tokyo (@budougumi0617) 2019年3月23日
解説をしているパッケージ #golangtokyohttps://t.co/f3FLSpxNb1
— Yoichiro Shimizu | 技術書典6 け27 golang.tokyo (@budougumi0617) 2019年3月23日
tenntennさんが作ったAnalyzerを使った静的解析CLIを作り始めるのに便利奴です。 #golangtokyohttps://t.co/pO4j2GwK5p
— Yoichiro Shimizu | 技術書典6 け27 golang.tokyo (@budougumi0617) 2019年3月23日
発表中にでてきたanalysisパッケージの解説記事です。 #golangtokyo
— Yoichiro Shimizu | 技術書典6 け27 golang.tokyo (@budougumi0617) 2019年3月23日
knsh14さんによるanalysisパッケージの解説記事が載っていますhttps://t.co/PGEV5XCzlT
tenntennさんによるanalysisパッケージの解説です。
Goにおける静的解析のモジュール化についてhttps://t.co/kfbfEQoOC5
@tenntenn さん作Cloud Spanner用linter https://t.co/O1ZImiVVDc
— Daigo Ikeda (@hogedigo) 2019年3月23日
今日ハンズオンで作ろうとしてたネタとちょっと似てる。参考にさせてもらおう。 #golangtokyo
SSA(静的単一代入)についての解説は一般論まで含めれば山ほどあると思うけど、例えば以前も紹介したこの論文だと、Go のソースコードとの対応が明示されてるので Gopher 各位にとっては比較的わかりやすいかもしれない。#golangtokyo https://t.co/ayxnjJdRVW
— チェシャ猫 (@y_taka_23) 2019年3月23日
黙々ハンズオン
このハンズオンをしながら、Slackで色々質問しながら個々のペースで進みました。
いつも講師がやっているのを真似して、みんな一律で進むからこの方式は初体験。
最初は、どうしたらいいか分からなかったけど、
Slackでどんな初歩的な質問もGoの構文関係についての質問もできてすごく有意義な時間でした!!!
いつも1人で勉強しているから、答えてくれる人がいてめっちゃありがたい!!!
— FUMI@Python&Go&Rust (@FumiProgrammer) 2019年3月23日
Gopher君とまた一歩お友達になれた気がする!!#golangtokyo
これから
とりあえず、以下のリンクのソースを呼んで、使い方をもっと学ぼ。