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
アンドパッドのある開発チームでの OSS への取り組み
Search
ANDPAD inc
February 29, 2024
Technology
2
5.2k
アンドパッドのある開発チームでの OSS への取り組み
tomtwinkle
@tomtwinklestar
テックリード
【CHIYODA Tech #3】OSSの活用と貢献 ~各社のOSSとの付き合い方を話します~
ANDPAD inc
February 29, 2024
Tweet
Share
More Decks by ANDPAD inc
See All by ANDPAD inc
本編では話さない Zig の話
andpad
2
140
"noncopyable types" の使いどころについて考えてみた
andpad
0
210
ANDPAD黒板のオフラインモード機能 リリースまでの軌跡
andpad
0
90
アンドパッドのマルチプロダクト戦略を支える SRE
andpad
1
110
Introduction of Cybersecurity with OSS (RDRC2024)
andpad
1
30
開発チームとともに進めるインフラセキュリティの継続的な改善
andpad
2
62
ANDPAD and Ruby
andpad
1
520
Modular semantic actions
andpad
0
110
about #67401 //go:linkname
andpad
3
22k
Other Decks in Technology
See All in Technology
生成AI×マルチテナントSaaSな新規事業を立ち上げる上でテックリードとして気を使った点の紹介
lunastera
0
510
バイセルにおけるAI活用の取り組みについて紹介します/Generative AI at BuySell Technologies
kyuns
1
150
で、ValhallaのValue Classってどうなったの?
skrb
1
420
AWS SAW(AWS Support Automation Workflows)をもっと広めたい
kazzpapa3
2
170
端末が簡単にリモートから操作されるデモを通じて ソフトウェアサプライチェーン攻撃対策の重要性を理解しよう
kitaji0306
0
130
「最高のチューニング」をしないために / hack@delta 24.10
fujiwara3
7
1.2k
CAMERA-Suite: 広告文生成のための評価スイート / ai-camera-suite
cyberagentdevelopers
PRO
1
130
KaigiOnRails2024
igaiga
6
2.9k
5分で完全理解!ゼロから始めるOpenShift Virtualization/Starting from zero OpenShift Virtualization at 5 min
tnk4on
0
120
研究の再現性を高める 仕組みをGoでつくる / Creating a system to improve the reproducibility of research using go
linyows
1
100
オニオンアーキテクチャで実現した 本質課題を解決する インフラ移行の実例
hryushm
11
2.3k
まだ間に合う! 生成AIトレンド一挙おさらい & AWSのBedrockに入門しよう
minorun365
PRO
4
420
Featured
See All Featured
Embracing the Ebb and Flow
colly
84
4.4k
RailsConf 2023
tenderlove
29
870
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
The Pragmatic Product Professional
lauravandoore
31
6.3k
Done Done
chrislema
181
16k
Optimising Largest Contentful Paint
csswizardry
32
2.9k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
37
1.8k
Designing Experiences People Love
moore
138
23k
A Modern Web Designer's Workflow
chriscoyier
692
190k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
191
16k
The World Runs on Bad Software
bkeepers
PRO
65
11k
A Philosophy of Restraint
colly
203
16k
Transcript
Copyright © 2023 ANDPAD Inc. Copyright © 2023 ANDPAD Inc.
アンドパッドのある開発チームでの OSS への取り組み Copyright © 2023 ANDPAD Inc. tomtwinkle
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
Copyright © 2023 ANDPAD Inc. Copyright © 2023 ANDPAD Inc.
弊社千代⽥区ネタ
Copyright © 2023 ANDPAD Inc. 秋葉原駅前弊社ビル1Fに何も無くてdisられる(泣)
Copyright © 2023 ANDPAD Inc. 代わりに(?) 社内カフェ出来ましたハピハピハピ
Copyright © 2023 ANDPAD Inc. Copyright © 2023 ANDPAD Inc.
みなさん、OSS使っていますか?
Copyright © 2023 ANDPAD Inc. Copyright © 2023 ANDPAD Inc.
OSSのメリットってなんでしょう
Copyright © 2023 ANDPAD Inc. OSSのメリット ❌無料なのでコスト低く導⼊できる ⭕いざとなったら⾃分で直せる
Copyright © 2023 ANDPAD Inc. Copyright © 2023 ANDPAD Inc.
OSS参⼊ハードルを下げる
Copyright © 2023 ANDPAD Inc. Copyright © 2023 ANDPAD Inc.
テックブログにコメント書くノリでOSSに Issue/Pull Requestを投げる
Copyright © 2023 ANDPAD Inc. Copyright © 2023 ANDPAD Inc.
チームメンバーがコントリビュートした OSSの⼀例
Copyright © 2023 ANDPAD Inc. go-faker/faker https://github.com/go-faker/faker ⽒名、⽂章、数値、電話番号、住所などをランダムに作成 テストで毎回ランダムな値を渡すことで関数の意図しないバグを⾒つける いわゆるモンキーテストのためのツール
Copyright © 2023 ANDPAD Inc. go-faker/faker • コントリビュートしたのは正確にはgo-faker移⾏前の bxcodec/faker •
Shift-JISのCSVテストデータ作成を⾏おうとしたのが動機 • goのfakerは英語圏や中国圏のコントリビュータが多く、英語や中国語は対応 されているが⽇本語が対応されていなかった • ⽇本語出⼒対応を実施
Copyright © 2023 ANDPAD Inc. sqldef/sqldef https://github.com/sqldef/sqldef 1バイナリで動作する軽いRidgepoleライクなDB Migration Tool
DDLとDB Schemaの差分から変更するSchemaのDDLを作成&DBに反映する
Copyright © 2023 ANDPAD Inc. sqldef/sqldef • そもそもCIでRidgepole動かすのが重いので代価として検討 • まだ開発途中なため本家Ridgepole程フォーマットパターンが充実していない
がYaccによるDDLからASTへのParse、DDLの差分表⽰のロジックが⽐較的シン プルな実装であったためバグったら⾃分で治す前提で採⽤ • プロダクトでMySQLのGenerated Columnを利⽤する必要があったため Generated Columnに対応する修正を実施
Copyright © 2023 ANDPAD Inc. go-gorm/gorm https://github.com/go-gorm/gorm goのActiveRecordライクなORM
Copyright © 2023 ANDPAD Inc. • 不正なDSNを渡してDB connectionを作るとエラーにならずにpanicするバグ の修正 ◦
新卒社員が⾒つけて即座にコントリビュートしていました • v1, v2ドキュメント誤りの訂正 • コントリビュートではないですが「Gormにおける「仕様通り」なSQLイン ジェクションの恐れのある実装についての注意喚起」 go-gorm/gorm
Copyright © 2023 ANDPAD Inc. jinzhu/copier https://github.com/jinzhu/copier goの構造体をコピーするlibrary
Copyright © 2023 ANDPAD Inc. jinzhu/copier • 現在は使⽤していない • 当時、goのレイヤードアーキテクチャではレイヤー毎に異なるmodelを持つ必
要があったため構造体のコピーが必要であったため利⽤ • コードが読みにくかったのでリファクタリングを実施 • struct tag指定で別のfieldにコピーする機能を追加
Copyright © 2023 ANDPAD Inc. Copyright © 2023 ANDPAD Inc.
テックブログ書くノリでOSSのコードを書く
Copyright © 2023 ANDPAD Inc. Copyright © 2023 ANDPAD Inc.
⾃前で管理しているOSSの⼀例
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を作成
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を作成 試験運⽤中
Copyright © 2023 ANDPAD Inc. tomtwinkle/excelizeam https://github.com/tomtwinkle/excelizeam ExcelizeのStreamWriterはExcelのXML構築の都合上必ずCellの書き込みは⾏の順番 に実⾏しないと構築されるExcelが壊れます StreamWriterを使⽤しつつランダムな順番でのCellの書き込みに対応させるために
作成
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
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
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
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 主にテスト⽤
Copyright © 2023 ANDPAD Inc. Copyright © 2023 ANDPAD Inc.
OSSのメンテどうする問題
Copyright © 2023 ANDPAD Inc. OSSでのテストは資産 • どんな使い⽅をすれば良いか具体例はテスト⾒れば⼤体わかる • 新規参⼊者がPull
Requestを出す際Draft解除する基準として機能する • 依存libraryの定期バージョンアップをdependabotにある程度委譲出来る
Copyright © 2023 ANDPAD Inc. Semantic Versioningを意識する • v0.x.xはベータ版、インターフェースや内容が頻繁に変わる可能性があるよ •
Security fixの際にはpatch versionを上げる • 新規機能追加した際や既存の機能の内部ロジックが⼤きく変わった際はminor versionを上げる • OSS利⽤者としてはpatch versionだけ上がった場合はあまり意識せずに更新可 能、minor version上がってる場合はリリースノート参照
Copyright © 2023 ANDPAD Inc. プロダクトで使わなくなったらお掃除 • プロダクトで使ってるなら困ったら直すので基本的に問題なし • 使わなくなったlibraryはdeprecatedコメントを残しいずれ削除
or Repository ごとPublic Archiveする
Copyright © 2023 ANDPAD Inc. Copyright © 2023 ANDPAD Inc.
今後もぼちぼちOSS活動続けていきます
Copyright © 2023 ANDPAD Inc. Copyright © 2023 ANDPAD Inc.
OSS活動に興味あるGopherの皆さん! アンドパッドで⼀緒に働きませんか!!! (Rubyist, Nuxt.js, Flutter etc. の皆さんも募集しています)
Copyright © 2023 ANDPAD Inc. 35 Copyright © 2023 ANDPAD
Inc. いま建築‧建設業界で “ものづくり” に携わる⽅の⼈⼿不⾜や ⻑時間労働が社会問題となっています。 今後これらの課題に対して、デジタルシフトによる⽣産性向上や、 就労者数の底上げを急ぐ必要があります。 本来、ものづくりに携わる⼈々は、誰かに幸せを届ける⼈たちです。 そんな⽅々がもっとクリエイティブに、もっと豊かに働けるよう、 私たちは熱い想いで⽇々現場に向き合っています。
Copyright © 2023 ANDPAD Inc. Copyright © 2023 ANDPAD Inc.
ANDPADについて 36 Copyright © 2023 ANDPAD Inc.