paint-brush
オープンソースに貢献して他の開発者より目立つ@empiree361
新しい歴史

オープンソースに貢献して他の開発者より目立つ

Oleg Dubovoi7m2024/12/28
Read on Terminal Reader

長すぎる; 読むには

本当にプログラミングが好きで、開発者として成長したいのであれば、小さなライブラリでもサービスでも、自分で何かを作るように努めてください。
featured image - オープンソースに貢献して他の開発者より目立つ
Oleg Dubovoi HackerNoon profile picture


みなさん、こんにちは。オープンソース ライブラリの開発経験を共有し、そのプロセスについてお話しし、皆さんが独自のプロジェクトを作成するきっかけになればと思います。

先史時代

春に Yegor Bugaenko のストリームを見ていたとき、オープンソース開発のアイデアに触発されました。Yegor は、普通の開発者を超えて、より需要のあるユニークなスペシャリストになりたいなら、自分自身で何かを作る必要があると主張しました。本、ブログ、ライブラリ、フレームワークなど、そのようなプロジェクトは、特に今日の IT 市場では、他の多くの開発者の中で目立つ存在になることを可能にします。これは、あなたのプロフェッショナリズムを示すだけでなく、その分野の開発への真摯な取り組みを示すものでもあります。


これらすべてから、私は考えるようになりました。他の開発者の中で本当に目立つにはどうしたらいいのでしょうか? 何年も IT 業界で働き、さまざまなプロジェクトに参加してきたにもかかわらず、私にはまだ自分の独自性やプロ意識を示すようなものがありませんでした。

アイデアを探す

GitHub で昔のプロジェクトを見直しましたが、どれも本当に重要なものではないことにすぐに気づきました。そこで、ゼロから始めて何か新しいものを作ることにしました。やる気と熱意にあふれ、少なくとも少数のユーザーの間で需要があり、自分のスキルに見合ったものを書けるか考え始めました。


2、3 日かけて、オープンソース プロジェクトのアイデアを分析しました。考えれば考えるほど、すべてがすでに書かれていて、まだ実現されていないものは一人では実現できないように思えてきました。はっきり言っておきます。これは誤解を招く見方です。自分の可能性を台無しにしないでください。確かに、すでに多くのものが作られていますが、だからといってあきらめて、自分で何かを作るというアイデアを放棄する理由にはなりません。


では、その理由を説明します。

  • 流行を捉えて、すぐに人気が出るツールやサービスを生み出すチャンスは常にあります。例えば、新型コロナウイルス感染症のパンデミックの際には、感染状況や最新ニュースをリアルタイムで提供するウェブサイトが開発されました。現在、AIサービスへのトレンドが勢いを増しています。その瞬間を捉えて、その時期に求められるソリューションを提供していくことが大切です。
  • ニッチ市場を制覇するために、その市場をリードする必要はありません。Discord を例に挙げてみましょう。Discord は 2015 年に登場しましたが、当時は TeamSpeak、Ventrilo、Skype、RaidCall などの定評ある企業がすでに存在していました。しかし、わずか数年で Discord はその分野のリーダーになりました。重要なのは、アイデアの斬新さではなく、既存の問題にいかに効果的に対処できるかです。


新しいものを作る上で最も重要なのは、実際の問題を特定し、解決策を提示することです。これは、世界的な課題である場合もあれば、改善が必要な小さいながらも重要な問題である場合もあります。他の開発者や一般ユーザーがどのような困難に直面しているか、そして、その課題を克服するためにどのように支援できるかを理解することが重要です。


さらによく考えた結果、.NET コミュニティに役立つもの、つまりプロジェクト開発を円滑にできる小さなライブラリを作りたいという思いが湧いてきました。私の主な関心は .NET なので、自分がすでに知っていて得意としていることに集中することにしました。頭に浮かんだアイデアの 1 つは、キーボードとマウスからの入力イベントを追跡するためのライブラリを作成することでした。


その 1 か月前、Windows 用のデスクトップ アプリケーションの開発中に、特定のアクションを実行するためにキーボードのキーの押下を追跡するというタスクに直面しました。主なニュアンスは、アプリケーションがアクティブであるかどうかに関係なく機能する必要があるということでした。当時は既成のソリューションがなかったため、ネイティブのP/Invoke呼び出しを利用して、目的の結果を達成できました。その時点では、他の開発者もこの問題に直面する可能性があり、この問題に対処する小さなライブラリが非常に役立つ可能性があることは考えていませんでした。


確かに、これは誰かの人生を変えるような図書館ではありませんが、私自身の何かを創り出すための第一歩です。これは貴重な経験を積み、本当に情熱を注げる何かに時間を費やす機会であり、それが私が行動を起こすことを決めた理由です。

発達

最初のステップは、ライブラリの機能についてアイデアを出し合うことでした。アクセスしやすくユーザーフレンドリーでありながら、できるだけ幅広い機能を備えたライブラリにしたいと考えていました。ほとんどのシナリオで、ユーザーが 3 ~ 5 行以上のコードを書かなくても済むようにすることが目標でした。


ブレインストーミングの過程で、入力を追跡するだけでなく、制御することもできるというアイデアが浮かびました。たとえば、コードを使用して、ボタンの押下やキーの組み合わせをシミュレートしたり、マウス カーソルを移動したり、特定のキーを無効にしてシステムがそのキーの押下に反応しないようにしたり、キー バインディングを変更したりすることができます。これらの機能はすべて、アップデートを通じて徐々に実装されました。


機能セットが確定するとすぐに、私は意欲的に開発を始めました。コードを書くのは特に難しいことではありませんでしたが、他の開発者が何が行われたか、なぜ行われたかを簡単に理解できるように、構造と簡潔さに重点を置きました。開発プロセスでは、グローバル リファクタリングを数回実行し、構成と名前を変更し、コードの一部を別のクラスに抽出しました。プラットフォーム依存のコード (将来的にクロスプラットフォーム ソリューションを作成する予定だったため) をライブラリ コード自体から分離することに特に注意を払いました。これにより、P/Invoke から移行するときにコードベース全体を書き直す必要がなくなります。また、ライブラリのユーザーが各メソッドまたはクラスの機能を理解できるように、XML コメントを追加する時間も取りました。


ライブラリの最初のバージョンが完成したら、 NuGet (npm や pip に似た .NET プラットフォームのパッケージ管理システム) にアップロードしました。このプロジェクトに興味を持っている人がいるかどうか、次にどの方向に進むべきかを知るために、フィードバックを受け取りたいと考えました。ライブラリを宣伝する前に、ライブラリの目標に関する情報と使用方法に関する簡単なガイドを含むREADMEファイルを GitHub リポジトリに作成することにしました。



最初のユーザー

私はRedditで最初のユーザーを探すことにしました。適切なコミュニティをいくつか見つけた後、「 Windows UI アプリでキーボード/マウス イベントを処理するためのオープン ソース C# ライブラリ」というタイトルの短い投稿を書きました。少しストレスがたまり、正直、大きな成果は期待していませんでした。しかし、驚くべきことに、その成果はありました。投稿の 1 つには約14,000 回の閲覧と、肯定的なフィードバックを含む約30 件のコメントが寄せられました。それは、プロジェクトに費やした時間が無駄ではなかったという実感であり、誰もが体験して欲しい素晴らしい感覚でした。画期的なものを作成したわけではありませんが、それを本当に役立つと感じ、私の努力をサポートしてくれる人がいることを理解しました。


すべてのフィードバックを集めた後、私は開発を継続し、コメントを残してくれた最も関心のあるユーザーと連絡を取り続けることにしました。私は彼らと積極的にコミュニケーションを取り、彼らが望む機能のリクエストに耳を傾けました。次の 1 か月間で、私はいくつかの小さなアップデートをリリースし、その後、ユーザーを引き付けることに再び重点を置きました。


GitHub には、「awesome」と呼ばれる特別なタイプのリポジトリがあります。これは、 awesome-dotnetなど、特定のトピックについてまとめられたリンクとリソースのコレクションです。私の目標は、これらの各リポジトリで自分のライブラリを宣伝することでした。これは簡単な作業ではありませんでしたが (GitHub で 10 ~ 15 個の星が付いたライブラリはあまり関心を集めません)、それでもいくつかのリポジトリに入ることができました。これにより、ユーザー トラフィックが大幅に増加し、私のプロジェクトに注目が集まりました。

開発へのコミュニティ貢献

開発を進めるうちに、小さなタスクがいくつも発生し、時にはやり遂げる意欲やエネルギーが足りませんでした。そこで、オープンソース開発の利点の 1 つである、これらのタスクを手伝ってくれる熱心な人を引き付けるという利点を活用することにしました。そのために、 Up-for-Grabsサービスに頼りました。このサービスは、貢献したい人向けに、アクティブな問題のあるオープンソース リポジトリのリストを提供しています。リポジトリを追加して問題をいくつか作成すると、すぐに支援の依頼が届きました。

私のライブラリが 1,000 回以上ダウンロードされた後、私はドキュメントの作成に積極的に取り組むことにしました。最初の更新以降、ライブラリの機能は大幅に向上し、 READMEファイルの例だけでは不十分になりました。考えられるすべてのオプションの中から、最もシンプルでアクセスしやすいものを選択しました。別の Markdown ファイルを作成し、ライブラリが提供するすべてのクラスの詳細を記述しました。また、ライブラリの機能を最大限に活用したい上級ユーザー向けに、小さなガイドを作成することにしました。驚いたことに、技術ドキュメントの作成を専門とする人が私に連絡し、協力を申し出てくれました。彼は、資料を適切に構成し、すべての詳細を正確に記述するのを手伝ってくれました。彼の助けにより、私たちはこのタスクをすぐに完了しました。

オープンソース開発は、他のプログラマーと出会い、ネットワークを広げる絶好の機会です。これまでに、米国、オーストラリア、アルゼンチン、カナダ、ドイツ、ポーランドなど、さまざまな国の 9 人がライブラリに貢献しています。彼らは、機能、単体テスト、ドキュメントの作成を支援してくれました。さらに、素晴らしい経験の交換と楽しいコミュニケーションができました。貢献者の何人かと一緒に、新しいプロジェクトを一緒に始めることができるかもしれません。

仕事やその他の義務があるにもかかわらず、私は開発を継続し、ライブラリに含めるべきだと思う機能を備えた完全版をリリースしたいと考えています。将来の計画には、クロスプラットフォーム化と特定の UI フレームワークからの分離が含まれています。

結論

最後に、私が述べたことをすべてまとめたいと思います。新しいことに挑戦することを恐れず、立ち止まらないでください。プログラミングが本当に好きで、開発者として成長したいのであれば、小さなライブラリでもサービスでも、自分で何かを作るよう努めてください。それがどこにつながるかはわかりません。このライブラリの開発を通じて、プログラミングだけでなく、人々と出会い、新しいつながりを作ることにも喜びを感じました。自分のプロジェクトを進めるだけでなく、コミュニティライブラリに貢献することで、オープンソース開発に引き続き携わるつもりです。これも素晴らしい経験です。


オープンソース開発に取り組み始めたい方には、このガイドをお勧めします。


この投稿を気に入っていただけましたら、GitHub でスターを付けてライブラリをサポートしていただければ幸いです。


リンクトイン/ GitHub