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
21
Mercari Summer Intern 2022
funera1
November 30, 2022
Tweet
Share
More Decks by funera1
See All by funera1
Unikernelの話
funera1
0
56
Featured
See All Featured
Testing 201, or: Great Expectations
jmmastey
38
7.1k
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
The Pragmatic Product Professional
lauravandoore
31
6.3k
No one is an island. Learnings from fostering a developers community.
thoeni
19
3k
Measuring & Analyzing Core Web Vitals
bluesmoon
3
90
Into the Great Unknown - MozCon
thekraken
32
1.5k
Code Review Best Practice
trishagee
64
17k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
47
2.1k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
31
2.7k
Making Projects Easy
brettharned
115
5.9k
Optimizing for Happiness
mojombo
376
70k
Navigating Team Friction
lara
183
14k
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 • ツールの完成度を高める • 抽象構文木の中身を書き換えるときに、コメントがずれる問題について解決し て、それをブログなどで記事にしたい。 今後やりたいこと