Slide 1

Slide 1 text

「隙間家具OSS」に至る道 Fujiwara Tech Conference 2025 藤原俊一郎 @fujiwara

Slide 2

Slide 2 text

自己紹介 @fujiwara (X, GitHub, Bluesky) @sfujiwara (hatena, mixi2) 面白法人カヤック 〜2025-01(退職) ISUCON 優勝4回 / 運営(出題)4回 github.com/kayac/ecspresso github.com/fujiwara/lambroll

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

好きなもの 収まりがよくて 手触りがよくて 高性能 フラッグシップにはあまり興味がない

Slide 5

Slide 5 text

https://sfujiwara.hatenablog.com/entry/wdpress108

Slide 6

Slide 6 text

OSSとの出会い 2000年12月 Linux Conference 2000 Fall & Perl/Ruby Conference WEB+DB PRESS 創刊号

Slide 7

Slide 7 text

2006年 Plagger Plugin 関連の記事をブログ(はてなダイアリー)に書いていた このころ年間50記事とか https://sfujiwara.hatenablog.com/entry/20060529/1148879110

Slide 8

Slide 8 text

2007年 IRC / CodeRepos での交流 CPAN authorになる WebService::FC2::SpamAPI Catalyst::Plugin::ClamAV blogをCatalystで実装していた https://gigazine.net/news/20060629_passnavi/

Slide 9

Slide 9 text

2009年 YAPC::Asia 2009 でLTに誘ってもらった (初めてのリアル登壇)

Slide 11

Slide 11 text

2011年 カヤックに転職, ISUCON優勝 https://isucon.net/archives/30155061.html

Slide 12

Slide 12 text

2011/10 YAPC::Asia 2011 ベストスピーカー https://sfujiwara.hatenablog.com/entry/20111014/1318576104

Slide 13

Slide 13 text

2012年 Fluentd との出会い fluent-plugin-zabbix fluent-plugin-suppress fluent-plugin-imkayac fluent-plugin-cloudwatch (メンテナ引継ぎ) Fluent::Logger(perl) https://github.com/fluent/fluent-logger-perl

Slide 14

Slide 14 text

OSS活動 初期の振り返り だいたい何かの Plugin 的なものを書いている 実は自前WebフレームワークとかORMも書いたことはある pluggable な OSS 開発のいいところ 大きなフレームワークから明示的なインターフェースで委譲された 「隙間」を埋める小さなパーツ 取りかかるハードルが低い(技術的にも心理的にも) すぐに成果が出る

Slide 15

Slide 15 text

2014年〜 Go をメインに https://www.kayac.com/news/2014/08/golang 作問した ISUCON3(2013) で Go初期実装提供開始

Slide 16

Slide 16 text

2014-12 Stretcher Pull型デプロイツール 使っていた Archer (perl + ssh + rsync) が辛くなってきたため AWS CodeDeploy や sorah/mamiya を 参考にして設計 pull型 (tarをS3から取ってくる) tar, rsyncをコマンド呼び出し コマンド実行(アプリ再起動) Go でシングルバイナリ

Slide 17

Slide 17 text

2015年ごろ ほぼ全てのワークロードがAWSになる(というか移行した) 最初はIaaS的に使っていたが、だんだんクラウドネイティブな使い方に マネージドサービスの活用 データストア、メッセージング(queue)などをマネージドサービスに コンピューティングとストレージの分離 オートスケール

Slide 18

Slide 18 text

クラウド以前のシステム = サーバーの中で動く 1台のサーバーの中のアプリケーションで ストレージ(ファイル) メッセージング(ただの関数呼び出しだったりするけど) コンピュート(計算処理) 大きなアプリケーションの中で小さい隙間を埋めたい → プラグイン、Glueコード

Slide 19

Slide 19 text

クラウド前提のシステム = 複数のサービスにまたがってシステムを構築する クラウドの中で ストレージ(オブジェクトストレージ) メッセージング(message queue) コンピュート(FaaSも含む) サーバー上の1プロセス → クラウド上の1コンテナ(Function) スケーラビリティを獲得するために進化した結果 大きなクラウドの中で小さい隙間を埋めたい → 入出力がAPIになったアプリケーションやFaaSのコード

Slide 20

Slide 20 text

隙間家具OSSの個人的エポックメイキング Rin - Redshift data Importer by SQS messaging. https://github.com/fujiwara/Rin 2015年に開発 Redshift へのデータ取り込み概念図 COPY クエリを誰か(利用者)が実行する必要がある

Slide 21

Slide 21 text

最初は fluent-plugin-redshift を使っていたが… 手軽で便利なんだけど、運用していると辛くなってきた 1, 2 が同期的・不可分なplugin処理で実装されているため… 2で失敗するとリトライして1からやり直し → S3にごみが残る Redshiftのダウンタイム中にリトライが頻発する

Slide 22

Slide 22 text

Rin の設計方針 S3 へのアップロードは他に任せる (fluentd) S3, SQS の可用性は大変高い ⇔ Redshift のダウンタイムは比較的大きい ミスマッチ部分を一度に処理しないことでリトライを容易に Redshift への COPY 発行に特化するツール

Slide 23

Slide 23 text

誰もが困る隙間は埋まる(ことが多い) Rin 開発2ヶ月後 Firehose がリリース。マネージドな取り込みができるようになった が、東京リージョンで使えるようになったのは2年後 Rinのメリットもあった 設定が柔軟にできる S3に置かれるログなら何でも取り込める(ALB, CloudFront, 他何でも) Firehose はリトライが2時間まで、Redshift の長時間停止が難しい 結局 2015〜2024 まで10年使い続けた (2025/01上旬に引退) 2024-10-30 「Amazon Redshift の自動コピーの一般提供のお知らせ」 https://aws.amazon.com/jp/about-aws/whats-new/2024/10/general-availability-auto-copy-amazon-redshift/

Slide 24

Slide 24 text

2018年「隙間家具OSS」の言語化 https://speakerdeck.com/fujiwara3/xi-jian-jia-ju-ossfalsesusume https://speakerdeck.com/fujiwara3/aws-devday-tokyo-2019

Slide 25

Slide 25 text

その後の隙間家具OSS ecspresso Amazon ECS デプロイツール (2017/12) mirage-ecs ECS で好きなだけ環境構築 (2019/06) lambroll AWS Lambda デプロイツール (2019/11) tracer ECS タスクのログ(など)を見やすく表示 (2021/11) ecrm Amazon ECR を安全に掃除 (2022/08) cfft CloudFront Functions デプロイツール (2024/01) lamux AWS Lambda multiplexer (2024/10) 「fujiwara-ware紹介 Advent Calendar 2024」 https://adventar.org/calendars/10954

Slide 26

Slide 26 text

2018年以降 IaaS をほぼ使わなくなった クラウドサービスを直接扱うものや、開発環境をいい感じにするものが増えている デプロイツール(公式のがあんまり…) ecspresso, lambroll, cfft... マネージドサービスの機能が物足りないのを補完 ecrm, tracer... 開発環境構築を容易にする mirage-ecs, lamux...

Slide 27

Slide 27 text

隙間家具OSSとして大事なこと 必要な機能だけ作る、手を広げすぎない、やりすぎない 公式/自前がどこまでやるか(やるべきか)を考えてインターフェースを設計する 公式で十分な物がでたら捨てる/代替することを常に考えておく 「隙間」を見極めて 適切なインターフェースをもった 過不足がない 外しやすい ソフトウェアを書く → 設計力が必要

Slide 28

Slide 28 text

個人の作品としてのOSS 「隙間家具OSS」は大人数で作るようなものではない 数百行ぐらいのコードを書き捨てて済ませる「隙間」を あえて適切な汎用性を持ったプロダクトとして抽出する → 1人でできる仕事 「早く行きたければ一人で行け、遠くへ行きたければみんなで行け」 「隙間」はみんなで埋めるほど大きくない。1人でさっさと埋めればよい でもよくある「隙間」なら、そこを埋めるパーツを使い回せるといいよね

Slide 29

Slide 29 text

https://speakerdeck.com/twada/quality-and-speed-aws-dev-day-2023-tokyo-edition

Slide 30

Slide 30 text

個人の力で打開する局面はある 現代の IT エンジニアリングはチーム戦、だけど チームでやる大きな仕事 = 個々の小さい局面の組み合わせ 個々の局面は個人の力で打開するしかない そのための力(設計力・実装力・運用力)は常に鍛えておきたいですね

Slide 31

Slide 31 text

結局、好きなものを作っている 収まりがよくて = 隙間によくフィットして 手触りがよくて = 使いやすくて 高性能 = いい感じに動く