Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
The original author of Go gopher is Renée French. This Gopher was made by tomoki harada.
Slide 2
Slide 2 text
はじめに
Slide 3
Slide 3 text
これから発表する内容は 個人の見解であり 所属する組織の公式見解で はありません
Slide 4
Slide 4 text
細かすぎて伝わらない Go小ネタ集 ANDPAD inc. tomoki.harada (tomtwinkle)
Slide 5
Slide 5 text
No content
Slide 6
Slide 6 text
建設業界などの ホワイトボード を置き換える
Slide 7
Slide 7 text
なのですが
Slide 8
Slide 8 text
理想:SaaSを使って業務を DX、データはSaaSで完結 現実:既存の業態でも扱えるよ うにカスタマイズ
Slide 9
Slide 9 text
よくある要望 「Excelで出力」
Slide 10
Slide 10 text
1つ目
Slide 11
Slide 11 text
No content
Slide 12
Slide 12 text
https://xuri.me/excelize/ja/
Slide 13
Slide 13 text
https://github.com/qax-os/excelize
Slide 14
Slide 14 text
Intex値からExcelカラム名 に変換するhelperを用意
Slide 15
Slide 15 text
よし準備は万端だ
Slide 16
Slide 16 text
我々が想像するExcel
Slide 17
Slide 17 text
No content
Slide 18
Slide 18 text
実際に要望されるExcel
Slide 19
Slide 19 text
No content
Slide 20
Slide 20 text
背景の罫線は消して 欲しい セル結合 レコードのgroup毎に columnを表示する columnが途中か ら縦で現れる 案件毎に背景色 を変えたい セル結合 列ごとに変わる幅 出力したい表現が1次元 増えてる!! セル結合 外枠の罫線の太さ を変えたい
Slide 21
Slide 21 text
Excelのレイアウトと値の出 力を分けて考える
Slide 22
Slide 22 text
No content
Slide 23
Slide 23 text
No content
Slide 24
Slide 24 text
それぞれのパーツを整理し て個別にレンダリング処理 を実装しよう
Slide 25
Slide 25 text
group header component group records component item header compo nent item records component calendar header component outer frame component
Slide 26
Slide 26 text
実は2つ注意点があります
Slide 27
Slide 27 text
1つは外枠の罫線について の注意点
Slide 28
Slide 28 text
No content
Slide 29
Slide 29 text
出来上がったレイアウトがこ ちら
Slide 30
Slide 30 text
No content
Slide 31
Slide 31 text
No content
Slide 32
Slide 32 text
想定するレイアウト
Slide 33
Slide 33 text
No content
Slide 34
Slide 34 text
どうすべきか
Slide 35
Slide 35 text
No content
Slide 36
Slide 36 text
StreamWriterの問題
Slide 37
Slide 37 text
https://xuri.me/excelize/ja/stream.html
Slide 38
Slide 38 text
https://xuri.me/excelize/ja/performance.html
Slide 39
Slide 39 text
レイアウトと値の書き込み 分離したのも StreamWriterを使用した かったからですが……
Slide 40
Slide 40 text
Styleが複雑すぎる場合 StreamWriterで値が書き 込めません。 2020/09/14時点の情報です。最新版では未確認。
Slide 41
Slide 41 text
詳しいExcelizelianの人教 えて下さい><
Slide 42
Slide 42 text
2つ目
Slide 43
Slide 43 text
「データ出力」
Slide 44
Slide 44 text
No content
Slide 45
Slide 45 text
encoding/csv あるし CSV出力は余裕でしょ
Slide 46
Slide 46 text
「CSVはExcelで読みたい のでShift-JISで出力お願 い!」
Slide 47
Slide 47 text
x/text/transform#Transformer で、簡単に行けるな……?
Slide 48
Slide 48 text
UTF-8 -> Shit-JIS
Slide 49
Slide 49 text
https://go.dev/play/p/4KBqmrB_qdD
Slide 50
Slide 50 text
https://teratail.com/questions/106106
Slide 51
Slide 51 text
とある日
Slide 52
Slide 52 text
「極々稀にコケるFlaky Testあるので直そう」
Slide 53
Slide 53 text
どうも4096byte付近で文 字化けが発生しているらし い
Slide 54
Slide 54 text
あっ
Slide 55
Slide 55 text
https://cs.opensource.google/go/go/+/master:src/bufio/bufio.go;l=19
Slide 56
Slide 56 text
● csv writerはbufioに依存 ● default buffer size = 4096 ● rune writerに渡されるbyte 配列は4096byteで途切れる
Slide 57
Slide 57 text
マルチバイト文字が分断さ れた場合に変換可能かどう か判断出来ない
Slide 58
Slide 58 text
解決策
Slide 59
Slide 59 text
● buffer sizeを指定する
Slide 60
Slide 60 text
https://cs.opensource.google/go/go/+/master:src/encoding/csv/writer.go;l=37 buffer sizeを指定で きない
Slide 61
Slide 61 text
● csvに変換してからShift-JIS に変換する
Slide 62
Slide 62 text
https://github.com/golang/go/issues/51746
Slide 63
Slide 63 text
● tranform.Transformerを自 作する
Slide 64
Slide 64 text
作りました https://github.com/tomtwinkle/garbledreplacer
Slide 65
Slide 65 text
No content
Slide 66
Slide 66 text
No content
Slide 67
Slide 67 text
学び x/text/transform便利 だけどかなり癖つよ
Slide 68
Slide 68 text
No content
Slide 69
Slide 69 text
群雄割拠のSaaS No1であり続けるために 泥臭いきめ細かな対応 を心がけていきたい所存です
Slide 70
Slide 70 text
ご清聴 ありがとうございました