Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Mercari Summer Intern 2022
Search
funera1
November 30, 2022
0
26
Mercari Summer Intern 2022
funera1
November 30, 2022
Tweet
Share
More Decks by funera1
See All by funera1
Unikernelの話
funera1
0
68
Featured
See All Featured
The World Runs on Bad Software
bkeepers
PRO
69
11k
Balancing Empowerment & Direction
lara
1
420
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
KATA
mclloyd
30
14k
Agile that works and the tools we love
rasmusluckow
329
21k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
252
21k
Practical Orchestrator
shlominoach
188
11k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
15
1.5k
A better future with KSS
kneath
239
17k
Optimizing for Happiness
mojombo
379
70k
Art, The Web, and Tiny UX
lynnandtonic
299
21k
Bash Introduction
62gerente
614
210k
Transcript
1 Confidential サマーインターンシップ成果発表 @daigof Merpay Experts Team
2 Confidential @daigof Name: 藤井大悟(daigo fujii) Team: Merpay Experts Team
GitHub: funera1 Twitter: fun_7776
3 Confidential Goのフォーマットツールを作成した https://github.com/funera1/gofmtal やったこと
4 Confidential Go1.19が最近リリースされて、そこでgo/doc/commentというコメントについて扱え るpackageが出た 背景
5 Confidential gofmt使用した場合 package main /* func main(){ print( "Hello,
World") } */ func main(){ print( "Hello, World") } package main /* func main(){ print( "Hello, World") } */ func main(){ print("Hello, World") } フォーマット前 フォーマット後 format gofmt: Goの公式フォーマットツール
6 Confidential フォーマット前 今回作成したツールを使用した場合 package main /* func main(){ print(
"Hello, World") } */ func main(){ print( "Hello, World") } package main /* func main(){ print("Hello, World") } */ func main(){ print("Hello, World") } format フォーマット後
7 Confidential コメントのパース Parse (*go/doc/comment.Parser).Parseメソッドによってコメントを構造化でき るようになった /* comment func main(){
var a int; } [example]http://exampl e.com */ /* comment func main(){ var a int; } [example]http://exampl e.com */
8 Confidential 実装 /* comment func main(){ var a int;
} http://example.com */ /* comment func main(){ var a int } http://example.com */ func main(){ var a int; } form at 取 り出 す formatされた
9 Confidential 問題点 フォーマットした後コメントの位置がずれてし まう可能性がある package main /* comment func
main(){ var a int } */ func main(){ var a int } 元のソースコード
10 Confidential 問題点 package main /* comment func main(){ var
a int } */ func main(){ var a int } package main /* comment func main(){ var a int } */func main(){ var a int } 想定する挙動 実際の挙動
11 Confidential Goでコードをパースするときに、「コードの構造と中身」と「コードがファイルのどの位 置(何行、何列目)にあったか」に分かれる。 原因
12 Confidential formatによって改行が増えたり、ソースコードの長さが変わってしまう 原因 /* func main(){ var a int}
*/ format /* func main(){ var a int } */
13 Confidential • とにかくどういう条件でうまく行かないのかを確かめるために実験した • 詰まってる問題に対して、詰まってる問題をより簡単な問題にして実験を行った • 具体例: • なんで:関係ないところ
解決するために行ったこと
14 Confidential 解決するために行ったこと • 実験を行った • 実際のツールの中で実験する のではなく、より簡単な問題に 落とし込んでから実験を行っ た
• 実際のツールの中で実験して しまうと、発生した事実が実験 によって確かめたいことによっ て起きたのか、それ以外で起 きたことなのかわからかない
15 Confidential コーディングするときに考えることの引き出しが増えた。 • エラー処理 • ディレクトリ構成 学んだこと
16 Confidential エラー処理 エラー処理としてgo/pkgsiteのderrors.goというファイルを参考にした 学んだこと
17 Confidential ディレクトリ構成 https://github.com/golan g-standards/project-layo ut/issues/117 学んだこと
18 Confidential 今まではコードをきれいに書くことについて、意識していたことはわかりやすい名前を つけるとか、適度に処理を関数で分割するぐらいしかなかった。 インターンでコードレビューやペアプロをしてもらって、コードを書くときに考えることの 手数が増えた 例えば、エラー処理について、ディレクトリ構成など 最初と最後のコミットを比べる 学んだこと
19 Confidential 技術面以外の学び • 問題をシンプルにする • すべての学びを繋げる 学んだこと
20 Confidential • ツールの完成度を高める • 抽象構文木の中身を書き換えるときに、コメントがずれる問題について解決し て、それをブログなどで記事にしたい。 今後やりたいこと