「隙間家具OSS」に至る道/Fujiwara Tech Conference 2025
by
FUJIWARA Shunichiro
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
「隙間家具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 10
Slide 10 text
Sub::Pipe print "
" | html; # <a> こういう関数( html )を実装できるモジュール 本質部分は2行しかない use overload '|' => sub { $_[0]->( $_[1] ) }; sub joint(&) { bless $_[0], __PACKAGE__ }; danさんに添削してもらった https://dankogai.livedoor.blog/archives/5121567 8.html
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
結局、好きなものを作っている 収まりがよくて = 隙間によくフィットして 手触りがよくて = 使いやすくて 高性能 = いい感じに動く