クリアコードではOSS開発支援サービスの一環でTreasureDataさんが中心になって開発し公開しているFluentdとそのプラグインなど1の開発を支援しています。 かれこれ一年ほどやってきたので、どのようなことをやってきたのかふりかえります。
TreasureDataさんの目的はFluentdの普及促進です。Fluentdが普及すると、TreasureDataさんのサービスを利用する人が増えるためです。
クリアコードはTreasureDataさんの目的を達成するために以下のことをやっています。
-
TreasureData さんが手の回っていないところをサポートする
-
IssueやPRに対応する
-
メンテナのいないプロダクトでよく使われているものはメンテナンスを引き取る
-
新機能の開発
-
バグの修正
-
その他、Fluentdの普及促進につながること
-
-
Fluentd やその関連ソフトウェアに関する技術情報を発信する
- ククログやQiita等に記事を書く
直接依頼されたことだけでなく、Fluentdの普及促進につながることを積極的にやっています。
なお、TreasureDataさんとは基本的にはIssue/PullRequestでやりとりしています。作業の優先順位やIssue/PullRequestで相談しづらいことを相談するときはSlackを使用しています。
IssueやPRに対応する
IssueやPRにコメントを書くことによって、コミュニティが活発になります。コミュニティが活発になると次のような理由で新規ユーザーを惹き付ける要因の一つになります。よってFluentdの普及促進につながります。
-
今後の発展を期待できる
-
問題が見つかりやすくなり安定化につながる
-
ユーザー間での情報共有が活発になり早く問題解決できる
コメントを書いたIssueやPRのうち特に問題の解決につながったものをリストアップしました。
-
Add enable_fallback option by cosmo0920 · Pull Request #37 · fluent/fluent-plugin-sql
-
EventEmitter memory leak · Issue #43 · fluent/fluent-logger-node
-
Add support for Unix domain socket. by masahide · Pull Request #17 · fluent/fluent-logger-golang
メンテナのいないプロダクトでよく使われているものはメンテナンスを引き取る
これらは依頼されて引き取ったものもありますが、Fluentdが内部で利用しているライブラリもあります。 こういったプロジェクトを引き取りメンテナンスを継続することによって、既存ユーザーは安心して使い続けることができますし、新規ユーザーも安心して使い始められます。安心して使えていると既存ユーザーは他の人から意見を求められたときに「安心して使える」という情報を伝えてくれます。このようにFluentdの普及促進につながります。
-
fluent/fluent-logger-node: A structured logger for Fluentd (Node.js)
-
cosmo0920/windows-api: A wrapper for win32-api that simplifies and automates common idioms
-
cosmo0920/win32-api: A different, better variant of the Win32API Ruby library
新機能の開発
既存のFluentdのままでもかなり便利ですが、以下の点をより強化することによりさらにFluentdの普及促進につながります。
-
機能追加
- Fluentdを活用できるケースが増えて普及促進につながります。
-
既存機能の改良
- 運用中のFluentdのメンテナンスが楽になります。運用が楽になると既存ユーザーはよりFluentdを活用でき、まわりにその情報を提供してくれる可能性が増えます。また、新しくFluentdを活用できるケースが増えて普及促進につながります。
-
テスト周りの改良
- プラグインを開発しやすくなり、既存プラグインのメンテナンス・新規プラグインの開発がはかどります。プラグインが増えるとFluentdを活用できるケースが増えて普及促進につながります。
依頼されたものだけでなく、特にFluentdの普及推進につながるものをリストアップしました。
-
以前ククログでも紹介しましたがFluentdに
--show-plugin-config
オプションを追加しました -
fluent-plugin-s3でAWS SDKv2を使うようにしました
-
fluent-plugin-webhdfsにHDFSでよく使われているSnappyという圧縮形式をサポートしました。そのためにRubyでSnappyを扱うためのライブラリにAPIの追加するためのPRも送りました。
-
- Docker Fluentd logging driver 経由だと複数行のログが複数のイベントに分割されてしまうのを一つのイベントにまとめるプラグイン。Docker側で直すのが筋なのですが、現実に困っている人がいたので依頼されて開発しました。
-
in_tailのmultilineサポートに対応するための開発を行いました
-
3rdパーティ製のFluentdのoutputプラグインにfilterプラグインを追加
-
Add filter plugin by okkez · Pull Request #24 · y-ken/fluent-plugin-geoip
-
Add filter plugin by okkez · Pull Request #8 · y-ken/fluent-plugin-anonymizer
-
Add filter plugin by cosmo0920 · Pull Request #24 · tagomoris/fluent-plugin-parser
-
Add filter plugin by cosmo0920 · Pull Request #4 · yu-yamada/fluent-plugin-add
-
-
3rdパーティ製のFluetndのoutputプラグインのissueに対応
-
parserプラグイン用のv0.12向けのテストドライバーを追加しました
-
formatterプラグイン用のv0.12向けのテストドライバーを追加しました
-
fluent-logger-golangでJSON形式のデータを送れるようにしました
-
Fluentdの起動時に表示されるログにプラグインのIDと名前を表示するようにしました
-
in_dummyにsuspendオプションを追加しました
-
fluent-plugin-sqlのout_sqlでfallbackの有効・無効を切り替えられるオプションを追加しました
バグの修正
バグを修正することにより、それが原因で使えなかったケースでもFluentdを活用できるようになり、Fluentdの普及促進につながります。また、既存ユーザーは運用で回避せずに済むため、よりFluentdを楽に運用できるようになります。このような既存ユーザーが情報共有といった形でコミュニティで活躍してくれるとコミュニティがさらに活発になりFluendの普及促進につながります。
依頼されたものではなく、自分たちで見つけたバグを修正したものをリストアップします。
-
削除された例外クラスを使用しないようにしました
-
Rubyのバージョンによってテストが失敗するようになっていたのを修正しました
-
in_httpのHTTPレスポンスヘッダーでRFCで推奨されている形式を使うようにしました
-
fluent-debug コマンドが動作しなくなっていたのを修正しました
Fluentd関連の技術情報発信
QiitaやククログでFluentd関連の技術情報を発信しています。
その他、Fluentdの普及促進につながること
他にも以下のことを実施しました。
-
Fluentdのプラグインを新機能に対応させる2
-
v0.12.11で追加された
secret
パラメータ対応 -
v0.12.16/v0.12.17で追加された
desc
対応 -
v0.12.0で追加されたfilterプラグインに対応するための修正
-
-
Fluentd v0.14のプラグインAPIへの対応3
-
ライセンス表記の修正
-
TravisCIの設定の追加・修正・更新
-
Rubyのバージョンアップに伴う修正
-
ユニットテストの追加
-
警告の除去
-
fluent-bitのHomebrewのFormulaの作成のプルリクエスト
-
RustのFluent Loggerのfruentlyの開発
これらは少し遠回しなものもありますが、次の理由でFluentdの普及促進につながると考えて実施しました。
-
Fluentdの新しいユーザーが簡単に新しいFluentdやFluentdの関連ソフトウェアを使えるようになるため
-
ライセンス表記を正しいものに修正すると、ユーザーがそのソフトウェアを使ってもよいものなのか簡単に正しく判断することができるようになるため
-
メンテナンス性を向上させて開発を続けやすくするため
-
Flume NGからFluentdへの移行や接続を容易にするため
-
Fluentdを動かすには厳しい環境に対してもFluentdのエコシステムに乗っかれるかどうかの検証環境の導入を容易にするため
-
新しい言語のユーザーにFluentdへの関心を持ってもらえるようにするため
まとめ
このようにクリアコードではOSSの開発支援を実施しているので、OSSの開発をしているけれど手が足りなくて思うように進められないといったことがあれば相談してみてください。 相談はフォームからメッセージを送ってください。