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
4.4k
アンドパッドのある開発チームでの 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
MySQL の SQL クエリチューニングの要所を掴む勉強会
andpad
5
7.5k
Long journey of Ruby standard library
andpad
0
19
Go 1.22 の Vet 変更点について
andpad
0
290
最初のファンを作り、最初のファンに価値を届けるまで
andpad
1
750
Deep dive into Ruby's require
andpad
0
89
AWS Security Hub を 「有効化したけど見てない」人に向けた DevSecOps の実現方法
andpad
0
79
EC2 からの脱出劇:多用途なサーバの全役割をサーバレス・コンテナ環境へ
andpad
0
28
Ruby on Rails + Sidekiq構成のモノリシックサービスをコンテナ化した話
andpad
0
260
Go Get での checksum 不一致 に遭遇した話とその対応
andpad
0
160
Other Decks in Technology
See All in Technology
コードや知識を組み込む / Incorporate Code and knowledge
ks91
PRO
0
120
Google Cloud Next '24 Recap(Cloud Run/k8s)
mokocm
0
290
Tellus の衛星データを見てみよう #mf_fukuoka
kongmingstrap
0
260
[新卒向け研修資料] テスト文字列に「うんこ」と入れるな(2024年版)
infiniteloop_inc
4
17k
GrafanaMeetup_AmazonManagedGrafanaのアクセス制御機能とマルチテナント環境下でのアクセス制御について
daitak
0
360
AOAI をきっかけに 社内の Azure 管理を見直した話
recruitengineers
PRO
1
430
ServiceNow Knowledge Learning Rise up
manarobot
0
230
Cracking the KubeCon CfP
inductor
2
270
データベース02: データベースの概念
trycycle
0
170
推しは推せるときに推せ! プロダクトにフィードバックしていこう
nakasho
0
440
Azure犬駆動開発の記録/GlobalAzureFukuoka2024_20240420
nina01
1
230
MixIT 2024 - Pulumi : Gérer son infra avec son langage de programmation préféré
ju_hnny5
1
110
Featured
See All Featured
GraphQLの誤解/rethinking-graphql
sonatard
54
9.3k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
22
1.6k
Imperfection Machines: The Place of Print at Facebook
scottboms
261
12k
4 Signs Your Business is Dying
shpigford
176
21k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
20
1.7k
The Illustrated Children's Guide to Kubernetes
chrisshort
32
46k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
188
16k
Large-scale JavaScript Application Architecture
addyosmani
504
110k
YesSQL, Process and Tooling at Scale
rocio
165
13k
Fontdeck: Realign not Redesign
paulrobertlloyd
76
4.9k
Fantastic passwords and where to find them - at NoRuKo
philnash
38
2.5k
The MySQL Ecosystem @ GitHub 2015
samlambert
244
12k
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.