オープンソースとは何か、なぜオープンソースにするのか
オープンソースで何かを始めたいと考えていますか?それは素晴らしい!世界中の人々が喜んでくれるでしょう。ではオープンソースとは何なのか、なぜオープンソースにするのか、お話しましょう。
オープンソースとは何を意味するのか?
プロジェクトがオープンソースであるとは何を意味するのかというと、そのプロジェクトが、だれでも閲覧が可能で、利用し、変更を加え、再配布することができる、それもあらゆる目的のために、ということになります。それらの許可はオープンソースライセンスによって保証されています。
オープンソースは強力なものです。というのは、オープンソースであるプロジェクトは採用しやすいからです。また、プロジェクトのアイディアを急速に広められるからです。
オープンソースのはたらきをもっと理解するには、こんな想像をしてみましょう。友人から持ち寄りのパーティーに誘われ、あなたはチェリーパイを持参したとします。
- みんながチェリーパイを食べる (利用する)
- チェリーパイは大好評!彼らはチェリーパイの作り方を教えてもらう (閲覧する)
- パティシエである友人アレックスが、砂糖を減らすことを提案する (変更する)
- 別の友人リサがアレックスのレシピを気に入り、来週のディナーで使いたいと申し出る (再配布する)
一方、ソースコードを公開しないプロセスを例えるなら、レストランでチェリーパイを注文するようなものです。代金がかかるうえに、レシピも教えてもらえないでしょう。レシピをそっくりマネして自分の店を出そうものなら、レストランに訴えられかねません。
なぜ人々は作ったものをオープンソースにするのか
理由はたくさんありますが 、なぜ、個人にしろ組織にしろ、オープンソースでプロジェクトを始めようとするのでしょうか。たとえば以下の様なものが挙げられます:
-
他者との協力: オープンソースプロジェクトは世界中のあらゆる人々が編集することが可能です。 Exercismの例でいえば、これはプログラミング教育プラットフォームですが、350人を超えるコントリビュータによって支えられています。
-
採用すること、混ぜ合わせること: オープンソースプロジェクトは目的の似ている人であれば、あらゆる人が使うことができます。別のものを作るために利用することだってできます。例えばWordPress、これはあるプロジェクトのフォークとして始まりました。b2と呼ばれるプロジェクトです。
-
透明性: あらゆる人がオープンソースプロジェクトのエラーや矛盾を検査できます。透明性が特に重要視されるのは政治であり、たとえば、ブルガリアやアメリカのような国々です。あるいは、規制がなされる産業も同様で、たとえば銀行や医療などの産業です。ほかにも、セキュリティソフトウェアでも重要で、Let’s Encryptのような例があります。
オープンソースはソフトウェア以外の分野でも重要です。データセットから書籍まで、あらゆるものをオープンソースにすることができます。GitHub Exploreを見れば、オープンソース化できる様々なアイディアを得られるでしょう。
オープンソースとは「無料」を意味するのか?
オープンソースの最大の特徴のひとつは、コストをかけずに利用できることです。しかし、「無料」であることはオープンソースの本質的な価値から生じた、副産物にすぎません。
オープンソースライセンスが義務付けることがあります。同じような目的をもつあらゆる人たちに、利用、修正、共有をできるようにすることです。その義務付けにより、プロジェクト自体は無料になる傾向があります。なぜなら、もしプロジェクトを有料にしても、だれでも無料版のコピーを合法的に作ることができるので、ほとんどの人が無料版を使うと思われるからです。
つまり、多くのオープンソースプロジェクトは好きに利用できますが、「無料」であることがオープンソースの定義として規定されているわけではないのです。オープンソースプロジェクトを間接的に課金することは可能であり、たとえば2つのライセンスを適用したり、あるいは利用できる機能に制限をかけるなどをして、オープンソースの公式的なルールに則ったうえで課金することはできます。
私はオープンソースプロジェクトを立ち上げるべきなのか?
結論から言えば「イエス」です。なぜなら、結果を求められるわけではないからです。自分でオープンソースプロジェクトを立ち上げることが素晴らしいのは、オープンソースの仕組みをよく理解することができるということです。
もしこれまでオープンソースプロジェクトを立ち上げたことがないなら、不安を感じているかもしれません。他者がどう反応するだろうか、あるいはだれも気づいてくれないのではないか、と。もしそうだとすれば、心配する必要はありません。あなたはひとりではないのですから!
オープンソースの仕事というのは創造的な活動のようなもので、執筆業や絵画と似ています。自分で作ったものを世界中の人々に共有することは怖いかもしれませんが、その気持ちとうまく付き合う最良の方法は、実際にやってみることです。たとえ共有する相手がいなかったとしても。
もし確信が持てないとしても、少し考えてみてください。あなたのゴールをどこに設定しますが?
ゴールを設定する
ゴールを設定することは、自分が何をやろうとしているのか理解する助けになるでしょう。また、何をやらないのか、どういう部分で他者の助けが必要なのか理解することにもなります。自分自身に問いかけることから始めましょう。 なぜこのプロジェクトをオープンソースにするのでしょうか?
ひとつの絶対的な答えがあるわけではありません。プロジェクトに複数のゴールが存在することはありえますし、ゴールに応じていくつかのプロジェクトを持っているかもしれません。
自分の作品を見せびらかしたいだけなら、他者からのコントリビュートを望まないかもしれませんし、READMEにそう書くかもしれません。一方、他者からのコントリビュートを得たい、時間をかけてドキュメントを分かりやすくして興味を持ってくれた他者を歓迎したい、と考えるかもしれません。
プロジェクトが成長するにつれて、そのコミュニティはあなたのコードだけではなく、ほかのタスクも必要になってきます。イシューに返信すること、コードをレビューすること、プロジェクトの存在を広めること、それら全てがプロジェクトにとって重要なタスクとなります。
上記のコーディングしないタスクに、どれだけの時間を費やせば良いでしょうか。それは、プロジェクトの大きさと範囲によって決まります。コーディングしないタスクに取り組む担当者のことをメンテナといいますが、あなたはメンテナになる準備を進めるべきです。あるいは、ひとりでメンテナの役割を担うのが大変ということであれば、助けてくれる人を探しましょう。
もしあなたがオープンソースプロジェクトを運営する会社のメンバーだとしたら、知っておかなければならないことがあります。そのプロジェクトを成長させるためには、社内リソースが必要になるということです。プロジェクト公開後のメンテナンスに誰が責任をもつのか明確化したり、これまであなたが担当していたタスクを社内メンバーにどう共有するか考えることになります。
プロジェクトを広めたり、メンテナンスするのには予算や人員が必要になるかもしれません。そうであるなら、上記の社内での話し合いは、できるだけ早めに始めましょう。
他のプロジェクトにコントリビュートする
もしあなたのゴールが、どのように他者と協働すればよいか学ぶこと、あるいはオープンソースがどのようにはたらくか理解することだとすれば、既存のプロジェクトに貢献してみるのはどうでしょうか。すでに利用していて、愛着の湧くプロジェクトで始めるのが良いでしょう。プロジェクトにコントリビュートするというのは、誤字を直すことやドキュメントをアップデートするようなシンプルなことでも歓迎されます。
コントリビュータとしてどのように始めればよいか分からない場合、どうやってオープンソースに貢献するかをチェックしてみてください。
オープンソースプロジェクトを立ち上げる
オープンソースプロジェクトを立ち上げるのに十分な時間というものは、存在しません。あなたはアイディアをオープンソースにすることができますが、その作業は実はすでに進行しているか、あるいは数年の間クローズドソースでいた後にオープンソースとなるのです。
一般的にプロジェクトをオープンソース化すべき状況とは、どうのような状況でしょうか。それは、プロジェクトを他者から見られて気持ち良いと思える場合か、フィードバックをもらいたいという場合です。
プロジェクトのオープンソース化を決心できたかどうかに関わらず、あらゆるプロジェクトには以下のドキュメントが用意されているべきです。
メンテナとして、これらのコンポーネントは次のようなことについてあなたを助けてくれるでしょう。あなたが最終的にやりたいことを明確化すること、コントリビューションを管理すること、あなた自身を含むあらゆる人々の法的な権利を守ること、についてです。上記のドキュメントを用意することによって、あなたが得られる経験はより意義深いものになるでしょう。
もしプロジェクトがGitHubにあるなら、それらのファイルを推奨されたファイル名にしてrootディレクトリに設置すると良いでしょう。そうすれば、GitHubはそれを認識して自動的にあなたを購読している人々に知らせてくれるでしょう。
ライセンスを選ぶ
オープンソースライセンスは次のことを保証します。他者がそのプロジェクトを利用、複製、修正、そしてプロジェクトに貢献し返してくれる場合などに発生しうる、悪い影響を起こさないでくれるということです。法的に面倒な状況からも、あなたを守ってくれます。 オープンソースプロジェクトを立ち上げる場合には、必ずライセンスを含めなければなりません。
法律に関する仕事は楽しいものではありません。しかし、良いニュースがあるとすれば、既存のライセンスをコピー&ペーストして良いということです。つまり、あなたが多大な労力をかけて作ったプロジェクトを、ほんの短時間で守ることができるということです。
MIT、Apache 2.0、GPLv3は、もっとも人気のあるオープンソースライセンスですが、その他のオプションも選択することができます。
あなたが新しいプロジェクトをGitHub上で作成するなら、どのライセンスを選択するか選ぶオプションが表示されます。オープンソースライセンスを含めることは、あなたのGitHubプロジェクトをオープンソースにすることを意味します。
その他に質問がある場合や、オープンソースプロジェクトの運営するうえでの法的な側面に興味があるなら、こちらのページで案内しています。
READMEを書く
READMEが重要なのは、プロジェクトの使い方を説明するだけではありません。なぜあなたのプロジェクトが重要なのか、プロジェクト利用者がどんなことをできるようになるか、ということも説明します。
READMEに何を書けばよいかということですが、たとえば以下の質問に対する回答を書いてみてください:
- このプロジェクトは何をやっているのか?
- なぜこのプロジェクトが役に立つのか?
- どうやって使い始めればよいのか?
- 詳しいヘルプを知りたくなったとき、どこを見ればよいか?
他の質問に関する回答を書いても良いでしょう。たとえば、コントリビューションをどう扱うのか、プロジェクトのゴールはどう設定されているのか、ライセンスと帰属に関する情報、など。もしコントリビュータを受け入れたくない場合や、実用的な形としてまだ仕上がっていない場合には、それらの情報もREADMEに書いておきましょう。
ときどき、READMEを書かないようにしている人々がいます。プロジェクトがまだ完成していないから、あるいはコントリビューションを望んでいないから、と思っているようです。しかし、実はそのような状況は、READMEを書くにはとても良い機会なのです。
もっとインスピレーションが必要ということであれば、@18Fの“READMEをより読みやすくする”や、@PurpleBoothのREADMEテンプレートを参照して、より理想に近いREADMEを書いてみましょう。
READMEファイルをプロジェクトのrootディレクトリに置けば、GitHubは自動的にリポジトリのホームに表示してくれます。
コントリビュートのガイドラインを書く
CONTRIBUTINGファイルとは、あなたのプロジェクトを見ている人に、どうすればそのプロジェクトに参加できるのかを伝えるものです。たとえば、以下のような情報です:
- どうやってバグリポートを提出するか(イシューとプルリクエストのテンプレートを使ってください)
- どうやって新しい機能を提案するか
- どうやって環境設定を行い、テストを行うか
技術的な詳細に加えて、CONTRIBUTINGファイルはどんなことをコントリビュートしてほしいのか伝えます。たとえば:
- どのような種類のコントリビューションをしてほしいか
- 今後のロードマップやビジョン
- どのような手段であなたに連絡を取るべきか(取るべきでないか)
温かい心をもって、友好的な口調で、やってほしいコントリビューションを具体的に伝えましょう(たとえばドキュメンテーションを書くこと、ウェブサイトを作ること)。これからの長い道のりを、新しく参加してくれた人々は、歓迎されている喜びを感じながら、ワクワクした気持ちでプロジェクトに参加することができます。
たとえば、Active Adminはコントリビューションのガイドをこんな文章で書き始めています:
まずはじめに、あなたに感謝の気持ちを伝えたい。Active Adminへのコントリビュートを検討してくれてありがとう。あなたのような人々が、Active Adminをすばらしいツールにしてくれるのだ。
プロジェクト最初期の段階では、CONTRIBUTINGファイルはシンプルなものでしょう。あなたが常に説明すべきことですが、どうやってバグレポートを提出するか、技術的な必要条件(たとえばテスト)にどのようなものがあるか、ということをコントリビュータに伝えなければなりません。
プロジェクト開始からある程度の時期が経ったら、よくある質問をCONTRIBUTINGファイルに書くと良いでしょう。この情報を書くことで、何度も同じ内容の質問をされることを回避できます。
CONTRIBUTINGファイルの書き方でもっとヘルプが必要であれば、@nayafiaのコントリビューションガイドのテンプレート 、あるいは@mozillaの “どうやってCONTRIBUTING.mdを書くか”が助けになるでしょう。
リンクをREADMEからCONTRIBUTINGファイルに貼っておくことで、より多くの人びとに見てもらうことができます。もしCONTRIBUTINGファイルをあなたのプロジェクトのリポジトリに置いたら、GitHubは自動的にリンクをあなたのファイルに貼ってくれますが、それはコントリビュータがイシューを作成した時、あるいはプルリクエストを開いたときに貼られます。
Code of Conductを制定する
最終的に、Code of Conductはどういう振る舞いをして良いかというルールの基盤をつくり、プロジェクト参加者に提供します。これが特に役に立つのは、コミュニティや会社のためにオープンソースプロジェクトを立ち上げるときです。Code of Conductはあなたに権限を与えることを意味し、健康的かつ建設的にコミュニティ上で振る舞うようにはたらきかけることで、メンテナとしてのストレスを軽減させるでしょう。
もっと詳しい情報が必要であれば、Code of Conductガイドを参照してください。
コミュニケーションに加えて、_どうやって_あなたが期待することを参加者に行ってもらうかということですが、Code of Conductは次のようなことを伝えるのに役立ちます。Code of Conductの対象が誰なのか、いつ適用されるのか、もし違反が起きた時にどう対処すればよいのか、ということです。
オープンソースライセンスと同様に、Code of Conductは近年に新しく作られた決まりであり、自分で書く必要はありません。Contributor CovenantはCode of Conductの溜まり場のようなもので、これは40,000以上のオープンソースプロジェクトに使われていて、Kubernetes、Rails、Swiftなどでも利用されています。このテキストを利用しなくても構いませんが、施行するCode of Conductは必要に応じて用意すべきです。
そのテキストを直接ペーストしてください。リポジトリの中にあるCODE_OF_CONDUCTファイルの中に。CODE_OF_CONDUCTファイルはプロジェクトのrootディレクトリに置き、見つけやすいようにし、そしてREADMEからリンクしやすいようにしておきましょう。
プロジェクト名とブランド戦略
ブランド戦略とは、華やかなロゴや人気を呼びそうなプロジェクト名をつける、ということだけにとどまりません。プロジェクトをどのように紹介するかということであり、どのような人々に届けたいのかという意味をもっています。
正しい名前を選ぶ
覚えやすい名前を選ぶことが重要であり、理想的には、何をするプロジェクトなのか伝えることができればなお良いでしょう。たとえば:
もし既存プロジェクトのうえに乗ったプロジェクトを立ち上げるなら、既存プロジェクトの名前を接頭辞として用いれば、何をするプロジェクトなのかを理解する助けになるでしょう。(例: node-fetchはwindow.fetchをNode.jsにもたらしてくれます)
何よりも明瞭さを考慮してください。語呂合わせで名前を考えることは楽しいですが、それ以上に重要なことは、ジョークは異なる文化や経験をもつ人々にとって、翻訳できない可能性があるということです。潜在的なユーザのなかには会社に雇われている人びともいるかもしれません。彼らを不快な気持ちにさせるつもりはなかったとしても、彼らは仕事中に真面目な顔でジョークを含んだプロジェクトのことを説明しなければならないのですよ!
別プロジェクトと同じ名前にしない
ほかのオープンソースプロジェクトに似たような名前がないか確認してください。特に、同じ言語やエコシステムを共有している場合には。もし既存の人気プロジェクトと重複していたら、利用者を混乱させることになってしまいます。
ウェブサイト、ツイッターのハンドルネーム、あるいはその他の資産を用いてプロジェクトを広めたいと思うなら、欲しい名前を取得することができるか確認しておきましょう。できることなら、平静な気持ちで、すぐに確保しましょう 。たとえ、いますぐ使う予定がなかったとしても。
重要なことですが、プロジェクト名は商標権を犯してはいけません。あなたの会社にプロジェクトを停止させられるかもしれませんし、法的な行動を取られるかもしれません。不必要なリスクは避けましょう。
WIPO Global Brand Databaseを見れば、重複したトレードマークがないか調べることができます。もし会社としてオープンソースプロジェクトを立ち上げようとしているのであれば、貴社の法務チームが助けてくれることは様々ありますが、商法違反がないか調べることはそのうちのひとつです。
最後に、プロジェクト名をGoogle検索してみましょう。これからプロジェクトを利用する人たちは、簡単にプロジェクトを見つけられますか?もし検索結果一覧に、関係のないウェブサイトがたくさん表示されているとしたら、別の名前を検討しましょう。
言葉遣いやコーディングスタイルが、ブランドにも影響を与える!
プロジェクトの至るところで、何かを書くことになります。たとえば、README、チュートリアル、コミュニティのドキュメント、イシューへの返信、あるいはニュースレターやメーリングリストへの投稿など。
公式なドキュメントであるか、カジュアルなメールなのかに関わらず、あなたがどのような書き方をするかということはプロジェクトのブランドに影響を与えるのです。考えてみてください。プロジェクトを訪問してくれた人があなたの振る舞いを見たとき、どういう印象を持つでしょうか?あなたが伝えようとしていることが、適切な言葉で表現されているでしょうか?
温かい気持ちで、他者を巻き込むような言葉遣いをすること(たとえば「彼ら」のような言葉を用いること。たとえ特定の誰かに言及するような場合であっても)は、プロジェクトを運営していく長い期間に渡って、新しいコントリビュータを歓迎する雰囲気を作ってくれます。これは、ある言語に限ったことではなく、英語ネイティブでない人々についても同じことが言えます。
どういう言葉で表現するかということ以上に、あなたのコーディングスタイルも同様にプロジェクトのブランドの一部となっていくでしょう。AngularやjQueryは、厳格なコーディングスタイルとガイドラインを持つ事例です。
スタイルガイドを用意する必要性ですが、プロジェクトが始まったばかりの頃は必要というわけではありませんし、むしろコーディングスタイルの違いにおもしろさを感じるかもしれません。しかし、事前に予測しておくことは重要ですから、あなたの言葉遣いやコーディングスタイルが、他者を魅了したり、あるいはやる気を削ぐ可能性があることは頭に入れておくべきです。プロジェクト最初期の段階というのは、あなたが見たいようにできる良い機会です。
ローンチ直前のチェックリスト
プロジェクトをオープンソース化する用意はできていますか?このチェックリストが役に立つでしょう。すべての項目にチェックが入ったなら、準備OKです!「publish」をクリック して、すこし自分を褒めてあげましょう。
ドキュメンテーション
コード
人
個人としてオープンソース化する場合:
会社や組織としてオープンソース化する場合:
すべて完了です!
お疲れ様でした!初めてのオープンソースプロジェクトは、これで公開されました。結果がどうなるとしても、他者に開かれたかたちで何かを作るということは、コミュニティにとって大きなプレゼントになるのです。あらゆるコミット、コメント、プルリクエストは、あなたの成長の機会となるだけでなく、他者が学ぶ機会にもなるのです。そして、その機会はまさに、あなたの手によって作られているのです。