Slide 1

Slide 1 text

Copyright © 2023 ANDPAD Inc. Copyright © 2023 ANDPAD Inc. アンドパッドのある開発チームでの OSS への取り組み Copyright © 2023 ANDPAD Inc. tomtwinkle

Slide 2

Slide 2 text

Copyright © 2023 ANDPAD Inc. tomtwinkle tomoki.tsuchiya ANDPAD Inc. ANDPAD Board Product Tech Lead 好きなOSS https://github.com/qax-os/excelize https://github.com/k0kubun/pp https://github.com/gizak/termui https://github.com/kubernetes/kubernetes https://github.com/cockroachdb/cockroach https://github.com/pingcap/tidb https://github.com/junegunn/fzf

Slide 3

Slide 3 text

Copyright © 2023 ANDPAD Inc. Copyright © 2023 ANDPAD Inc. 弊社千代⽥区ネタ

Slide 4

Slide 4 text

Copyright © 2023 ANDPAD Inc. 秋葉原駅前弊社ビル1Fに何も無くてdisられる(泣)

Slide 5

Slide 5 text

Copyright © 2023 ANDPAD Inc. 代わりに(?) 社内カフェ出来ましたハピハピハピ

Slide 6

Slide 6 text

Copyright © 2023 ANDPAD Inc. Copyright © 2023 ANDPAD Inc. みなさん、OSS使っていますか?

Slide 7

Slide 7 text

Copyright © 2023 ANDPAD Inc. Copyright © 2023 ANDPAD Inc. OSSのメリットってなんでしょう

Slide 8

Slide 8 text

Copyright © 2023 ANDPAD Inc. OSSのメリット ❌無料なのでコスト低く導⼊できる ⭕いざとなったら⾃分で直せる

Slide 9

Slide 9 text

Copyright © 2023 ANDPAD Inc. Copyright © 2023 ANDPAD Inc. OSS参⼊ハードルを下げる

Slide 10

Slide 10 text

Copyright © 2023 ANDPAD Inc. Copyright © 2023 ANDPAD Inc. テックブログにコメント書くノリでOSSに Issue/Pull Requestを投げる

Slide 11

Slide 11 text

Copyright © 2023 ANDPAD Inc. Copyright © 2023 ANDPAD Inc. チームメンバーがコントリビュートした OSSの⼀例

Slide 12

Slide 12 text

Copyright © 2023 ANDPAD Inc. go-faker/faker https://github.com/go-faker/faker ⽒名、⽂章、数値、電話番号、住所などをランダムに作成 テストで毎回ランダムな値を渡すことで関数の意図しないバグを⾒つける いわゆるモンキーテストのためのツール

Slide 13

Slide 13 text

Copyright © 2023 ANDPAD Inc. go-faker/faker ● コントリビュートしたのは正確にはgo-faker移⾏前の bxcodec/faker ● Shift-JISのCSVテストデータ作成を⾏おうとしたのが動機 ● goのfakerは英語圏や中国圏のコントリビュータが多く、英語や中国語は対応 されているが⽇本語が対応されていなかった ● ⽇本語出⼒対応を実施

Slide 14

Slide 14 text

Copyright © 2023 ANDPAD Inc. sqldef/sqldef https://github.com/sqldef/sqldef 1バイナリで動作する軽いRidgepoleライクなDB Migration Tool DDLとDB Schemaの差分から変更するSchemaのDDLを作成&DBに反映する

Slide 15

Slide 15 text

Copyright © 2023 ANDPAD Inc. sqldef/sqldef ● そもそもCIでRidgepole動かすのが重いので代価として検討 ● まだ開発途中なため本家Ridgepole程フォーマットパターンが充実していない がYaccによるDDLからASTへのParse、DDLの差分表⽰のロジックが⽐較的シン プルな実装であったためバグったら⾃分で治す前提で採⽤ ● プロダクトでMySQLのGenerated Columnを利⽤する必要があったため Generated Columnに対応する修正を実施

Slide 16

Slide 16 text

Copyright © 2023 ANDPAD Inc. go-gorm/gorm https://github.com/go-gorm/gorm goのActiveRecordライクなORM

Slide 17

Slide 17 text

Copyright © 2023 ANDPAD Inc. ● 不正なDSNを渡してDB connectionを作るとエラーにならずにpanicするバグ の修正 ○ 新卒社員が⾒つけて即座にコントリビュートしていました ● v1, v2ドキュメント誤りの訂正 ● コントリビュートではないですが「Gormにおける「仕様通り」なSQLイン ジェクションの恐れのある実装についての注意喚起」 go-gorm/gorm

Slide 18

Slide 18 text

Copyright © 2023 ANDPAD Inc. jinzhu/copier https://github.com/jinzhu/copier goの構造体をコピーするlibrary

Slide 19

Slide 19 text

Copyright © 2023 ANDPAD Inc. jinzhu/copier ● 現在は使⽤していない ● 当時、goのレイヤードアーキテクチャではレイヤー毎に異なるmodelを持つ必 要があったため構造体のコピーが必要であったため利⽤ ● コードが読みにくかったのでリファクタリングを実施 ● struct tag指定で別のfieldにコピーする機能を追加

Slide 20

Slide 20 text

Copyright © 2023 ANDPAD Inc. Copyright © 2023 ANDPAD Inc. テックブログ書くノリでOSSのコードを書く

Slide 21

Slide 21 text

Copyright © 2023 ANDPAD Inc. Copyright © 2023 ANDPAD Inc. ⾃前で管理しているOSSの⼀例

Slide 22

Slide 22 text

Copyright © 2023 ANDPAD Inc. tomtwinkle/garbledreplacer https://github.com/tomtwinkle/garbledreplacer UTF-8から別の⽂字コード変換時に変換不可能な⽂字列を別の⽂字列に置き換える Transformer Golang標準の japanese.ShiftJIS 等のEncoderでは変換出来ない⽂字が合った場合 rune not supported by encoding errorが出てしまい変換ができない Encoderを通す前に変換できない⽂字を事前に別の⽂字に置き換える為の Transformerを作成

Slide 23

Slide 23 text

Copyright © 2023 ANDPAD Inc. tomtwinkle/go-pr-release https://github.com/tomtwinkle/go-pr-release git commit差分から対象のPull Requestを抽出してリリース⽤Pull Requestを作成 する git-pr-releaseが遅いので1バイナリで動くgoバージョンのgit-pr-releaseを作成 試験運⽤中

Slide 24

Slide 24 text

Copyright © 2023 ANDPAD Inc. tomtwinkle/excelizeam https://github.com/tomtwinkle/excelizeam ExcelizeのStreamWriterはExcelのXML構築の都合上必ずCellの書き込みは⾏の順番 に実⾏しないと構築されるExcelが壊れます StreamWriterを使⽤しつつランダムな順番でのCellの書き込みに対応させるために 作成

Slide 25

Slide 25 text

Copyright © 2023 ANDPAD Inc. 88labs/go-utils https://github.com/88labs/go-utils 88labsはANDPAD Organizationです。 旧社名オクトだから88なんだとか OSS関連は https://github.com/andpad-dev に移動するかも? aws系 aws-sdk-go v2の共通処理をまとめたlibrary aws-sdkたまにガラッとインターフェース変わるので共通化しておくと対応が楽 envlookup よく使う環境変数のLookUp処理をまとめたlibrary

Slide 26

Slide 26 text

Copyright © 2023 ANDPAD Inc. 88labs/go-utils https://github.com/88labs/go-utils 88labsはANDPAD Organizationです。 旧社名オクトだから88なんだとか OSS関連は https://github.com/andpad-dev に移動するかも? errgroup golang.org/x/sync/errgroup を利⽤してGoroutine処理を⾏う際にpanicを拾うた めにrecoverが必須ですが、それを共通化したlibrary ulid oklog/ulid/v2 をベースにULIDの発⾏処理を⾏うlibrary

Slide 27

Slide 27 text

Copyright © 2023 ANDPAD Inc. 88labs/go-utils https://github.com/88labs/go-utils 88labsはANDPAD Organizationです。 旧社名オクトだから88なんだとか OSS関連は https://github.com/andpad-dev に移動するかも? cerrors プロダクト内でよく使うerror codeをまとめたlibrary sql-escape SQLのLIKE検索を⾏う際の⽂字列エスケープ処理をまとめたlibrary

Slide 28

Slide 28 text

Copyright © 2023 ANDPAD Inc. 88labs/go-utils https://github.com/88labs/go-utils 88labsはANDPAD Organizationです。 旧社名オクトだから88なんだとか OSS関連は https://github.com/andpad-dev に移動するかも? utf8bom ⽂字列にUTF-8 BOMを付与するlibrary 主にテスト⽤

Slide 29

Slide 29 text

Copyright © 2023 ANDPAD Inc. Copyright © 2023 ANDPAD Inc. OSSのメンテどうする問題

Slide 30

Slide 30 text

Copyright © 2023 ANDPAD Inc. OSSでのテストは資産 ● どんな使い⽅をすれば良いか具体例はテスト⾒れば⼤体わかる ● 新規参⼊者がPull Requestを出す際Draft解除する基準として機能する ● 依存libraryの定期バージョンアップをdependabotにある程度委譲出来る

Slide 31

Slide 31 text

Copyright © 2023 ANDPAD Inc. Semantic Versioningを意識する ● v0.x.xはベータ版、インターフェースや内容が頻繁に変わる可能性があるよ ● Security fixの際にはpatch versionを上げる ● 新規機能追加した際や既存の機能の内部ロジックが⼤きく変わった際はminor versionを上げる ● OSS利⽤者としてはpatch versionだけ上がった場合はあまり意識せずに更新可 能、minor version上がってる場合はリリースノート参照

Slide 32

Slide 32 text

Copyright © 2023 ANDPAD Inc. プロダクトで使わなくなったらお掃除 ● プロダクトで使ってるなら困ったら直すので基本的に問題なし ● 使わなくなったlibraryはdeprecatedコメントを残しいずれ削除 or Repository ごとPublic Archiveする

Slide 33

Slide 33 text

Copyright © 2023 ANDPAD Inc. Copyright © 2023 ANDPAD Inc. 今後もぼちぼちOSS活動続けていきます

Slide 34

Slide 34 text

Copyright © 2023 ANDPAD Inc. Copyright © 2023 ANDPAD Inc. OSS活動に興味あるGopherの皆さん! アンドパッドで⼀緒に働きませんか!!! (Rubyist, Nuxt.js, Flutter etc. の皆さんも募集しています)

Slide 35

Slide 35 text

Copyright © 2023 ANDPAD Inc. 35 Copyright © 2023 ANDPAD Inc. いま建築‧建設業界で “ものづくり” に携わる⽅の⼈⼿不⾜や ⻑時間労働が社会問題となっています。 今後これらの課題に対して、デジタルシフトによる⽣産性向上や、 就労者数の底上げを急ぐ必要があります。 本来、ものづくりに携わる⼈々は、誰かに幸せを届ける⼈たちです。 そんな⽅々がもっとクリエイティブに、もっと豊かに働けるよう、 私たちは熱い想いで⽇々現場に向き合っています。

Slide 36

Slide 36 text

Copyright © 2023 ANDPAD Inc. Copyright © 2023 ANDPAD Inc. ANDPADについて 36 Copyright © 2023 ANDPAD Inc.