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
79
Featured
See All Featured
Why Our Code Smells
bkeepers
PRO
339
57k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
15k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
229
22k
Documentation Writing (for coders)
carmenintech
74
5k
How STYLIGHT went responsive
nonsquared
100
5.8k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
8
530
How to train your dragon (web standard)
notwaldorf
96
6.2k
Side Projects
sachag
455
43k
Stop Working from a Prison Cell
hatefulcrawdad
271
21k
Code Review Best Practice
trishagee
70
19k
For a Future-Friendly Web
brad_frost
180
9.9k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
61k
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 • ツールの完成度を高める • 抽象構文木の中身を書き換えるときに、コメントがずれる問題について解決し て、それをブログなどで記事にしたい。 今後やりたいこと