Upgrade to Pro — share decks privately, control downloads, hide ads and more …

個人開発OSSが世界に勝てなかった話

 個人開発OSSが世界に勝てなかった話

Nextbeat Tech Bar:第一回ライブラリ開発について考える会で本記事の内容を発表しました。
https://nextbeat.connpass.com/event/312789/?utm_campaign=event_message_to_selected_participant&utm_source=notifications&utm_medium=email&utm_content=title_link

スライドのより詳しい内容をzennにポストしました。
https://zenn.dev/yukinarit/articles/7177ba04453e02

【概要】
ゆーすけべー氏の「OSSで世界と戦うために」にインスパイアされました。5年間pyserdeというOSSのライブラリを開発・メンテしてきた筆者が、ちょっとだけ世界と戦ってみたけど全然勝てなかったという話です。Honoとはプロダクトの規模も開発にかける情熱も全然違うけど、単純にポストモーテムは読み物として面白いかなと思ったので話してみます。また、5年間の開発で学んだ、やってよかったことや失敗などもシェアできればと思います。

yukinarit

May 28, 2024
Tweet

Other Decks in Programming

Transcript

  1. 自己紹介 * yukinarit (https://github.com/yukinarit) * MapboxというアメリカのIT企業でソフトウェアエンジニアをしています 地図会社 カーナビ / 経路探索Webサービス

    ゲーム会社 MMORPGゲームサーバ 証券会社 Market Data / 先物オプション取引 Mapbox 広告 / EVプラットフォーム開発 Rust何も分からない... #7 「Rustで高速な広告配信サービスを作っている話」
  2. pyserdeでできること * Data Format: dict, tuple, JSON, YAML, TOML, MsgPack,

    Pickle * Supported types   * dict, list, set, frozenset, defaultdict, Union, Optional, Any   * NewType, Literal, Generic, ClassVar, InitVar, Enum   * pathlib, decimal, uuid, datetime, ipaddress, numpy … * Case conversion, Rename, Alias, Skip, Flatten * Custom field/class/global (de)serializer * Strict type check, type coercing
  3. pyserdeをつくった動機 * 証券会社時代にC++17, Rust, Pythonで使える社内RPCフレームワークを開発 * Serialization: MsgPack * Transport:

    ZeroMQ (TCP, Uni/Multicast, IPC etc.) * Rustのserdeのようなライブラリがほしかった * python 3.7のdataclassesをベースに作れそうだったので始めてみた
  4. 理由: Rust 2017年からRustを使いはじめ、今ではほぼRustで書くようになってしまった WebAPI IaC HTTP以外のサービス (TCP, UDP etc) スクリプティング

    データエンジニアリング CLI 2017年以前 2024年現在 WebAPI IaC HTTP以外のサービス (TCP, UDP etc) スクリプティング データエンジニアリング CLI OSSのユーザーであり続け、ドッグフーディングするのが重要
  5. とことん自動化 * CIでユニットテスト、Linter、スタイルチェック、コードカバレッジ * ドキュメントのビルド * Github ReleaseでCHANGELOG生成、PyPIでパッケージ公開 * .github/release.yml,

    poetry-dynamic-versioning GitHub Actionsでいい感じのリリースノートを完全自動で作成する poetryを利用した動的なバージョン管理とGitHub ActionsによるPyPIへのrelease
  6. 機能毎に超簡単なexampleを作る リグレッションテストにもなるし、機能のshowcaseにもなる alias.py any.py class_var.py collection.py custom_class_serializer.py custom_field_serializer.py custom_legacy_class_serializer.py default_dict.py

    default.py enum34.py env.py field_order.py flatten.py forward_reference.py frozen_set.py generics_nested.py generics_pep698.py generics.py global_custom_class_serializer.py init_var.py jsonfile.py kw_only.py lazy_type_evaluation.py literal.py msg_pack.py nested.py newtype.py pep681.py plain_dataclass_class_attribute.py plain_dataclass.py primitive_subclass.py python_pickle.py recursive_list.py recursive.py recursive_union.py rename_all.py rename.py simple.py skip.py tomlfile.py type_check_coerce.py type_check_disabled.py type_datetime.py type_decimal.py type_ipaddress.py type_numpy.py type_pathlib.py type_uuid.py union_directly.py union.py union_tagging.py user_exception.py variable_length_tuple.py yamlfile.py