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
28
Mercari Summer Intern 2022
funera1
November 30, 2022
Tweet
Share
More Decks by funera1
See All by funera1
Unikernelの話
funera1
0
85
Featured
See All Featured
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.2k
Why You Should Never Use an ORM
jnunemaker
PRO
59
9.6k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
3.7k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.5k
GraphQLの誤解/rethinking-graphql
sonatard
73
11k
Optimizing for Happiness
mojombo
379
70k
Optimising Largest Contentful Paint
csswizardry
37
3.5k
Navigating Team Friction
lara
190
15k
Designing for Performance
lara
610
69k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
How To Stay Up To Date on Web Technology
chriscoyier
791
250k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
140
34k
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 • ツールの完成度を高める • 抽象構文木の中身を書き換えるときに、コメントがずれる問題について解決し て、それをブログなどで記事にしたい。 今後やりたいこと