インナーソースの要となるトラステッドコミッターの役割
インナーソースにおけるトラステッドコミッターの主要な役割は、次のようなものになります。
- 品質の確保
- コミュニティの健全性維持
- コミュニティメンバーのレベル向上
- コミュニティへの参入障壁を下げる
- コミュニティのニーズを主張
以降では、トラステッドコミッターの役割の詳細を見ていきましょう。
品質の確保について
品質の確保は、トラステッドコミッターの役割の中でも最も重要な責任の一つです。
インナーソースの仕組みを用いて開発を進めるコミュニティにおいて、トラステッドコミッターはすべての技術関連の意思決定、特に製品の品質に関する意思決定を行う役割を担います。ソフトウェアの品質の高さは、コミュニティが提供するコードのユーザーと、その管理者との間の信頼関係を維持するために不可欠なものです。一つの重大な不具合を含むリリースが、信頼を一瞬にして打ち砕いてしまうこともあります。
品質の確保に向けてトラステッドコミッターがまず行うことは、コミュニティの品質基準をコントリビューターが理解できる形で伝え、実行可能な形にすることです。これにはドキュメントを整備することも含まれますが、品質基準を伝える最も効果的な方法は、例示によるものです。
トラステッドコミッターは、コントリビューターが送付したコードのピアレビューを行います。これは通常、プルリクエストの一部として行われます。プルリクエストは、誰もが改善点の指摘などの目的で行うことができるものです。しかし、最終的にそれを受け入れてマージしたり拒否したりできるのは、トラステッドコミッターだけです。
トラステッドコミッターは、単にすべてのコントリビューションを受け入れるのではなく、定義された品質基準を満たすものだけを受け入れる必要があります。しかし、品質基準を満たすようにコントリビューターのコードを書き直すことは避けるべきです。代わりに、レビューの結果をコントリビューターに例示とともにフィードバックし、コントリビューター自身で修正できるようにサポートします。こうしたサポートによりコントリビューターの成長を促すことで、長期的にはコミュニティの開発速度を向上させるとともに、コミュニティの寿命を延ばすことにも繋がります。
こうした活動を進めていくと、コミュニティがバグを修正やコードのリファクタリングに、予定よりも多く時間がかかる場合があります。こうした時間の確保や、リリース日の移動などの管理面も、トラステッドコミッターは考慮しなければなりません。
トラステッドコミッターが品質の確保に向けて行うことをまとめると、品質基準を定め、プルリクエストに参加してコントリビューターがその品質基準を満たすサポートを行い、必要に応じてスケジュール調整などを行うこととなります。また、これらの活動を行う際に、コードやコミュニティの長期的な健全性を意識して行動する必要があります。
コミュニティの健全性維持
トラステッドコミッターの役割には、技術だけでなくコミュニティに対する責任もあると述べました。インナーソースのプロジェクトとして長期的に成功するためには、コミュニティの健全性維持が不可欠です。
簡単に言うと、健全なコミュニティではコントリビューターがソフトウェア開発にほとんどの時間を費やすことができ、能力を高めることができます。その結果として、コミュニティが継続的に成長することに繋がります。
コントリビューターがコミュニティに参加する理由には共通する課題を解決することなど、明確なものもありますが、それ以外にコミュニティのメンバーと一緒に仕事をすることが楽しく、自分の成長にも繋がる、ということも挙げられます。こうした場を維持することが、コミュニティの健全性維持に繋がります。このためにトラステッドコミッターが行うことには、次のようなものがあります。
- コミュニティの課題を明確にして伝える
- 行動規範を作成して実行する
- コントリビューションを贈り物として扱い、称賛する
- メンタリングを行う(何故改善する必要があるか、どう改善する必要があるか、理由と方向性を示す)
- 双方が定期的にお互いを知り合う機会を提供する
- 紛争を平和的に解決する機会を作る
コミュニティメンバーのレベル向上
コミュニティへの参加を時系列で見ると、いくつかの段階があります。最初の段階は、コミュニティについて何も知らない人達です。それ以降、コミュニティを知っている人、コントリビューションはせずコミュニティで作られるソフトウェアを利用するユーザー、一つ以上のコントリビューションをしているコントリビューター、技術とコミュニティの両方に責任を持つトラステッドコミッターと続きます。
トラステッドコミッターは、コミュニティを維持していくために、それぞれの段階に対して何らかの手を打ち、さらにはコントリビューションする個々の力を高めていく責任があります。つまり、トラステッドコミッターこそが、コミュニティのフォースマルチプライヤーとなります。
まず、トラステッドコミッターは、潜在的なコントリビューターとなるコミュニティを知っている人やユーザーを増やすために、自らのソフトウェアやコミュニティの宣伝を行います。この際は、興味を持ちそうな共通の課題がどのようなものかを意識して伝えることが大切です。共通の課題は、例えば開発ツールや自動化など、自部門や会社全体で役立ちそうなものは、意識しやすいかもしれません。
もしコントリビューターとして活動してくれる人が現れた時には、挑戦的な仕事に取り組むことを奨励し、仕事の完了に向けて指導することで、コントリビューター自身の成長に繋がるメンタリングが重要となります。適切なメンタリングにより、コミュニティメンバーが成長し、コミュニティ内でコントリビューター同士が自律的に問題解決できるようになり、結果として開発スピードやコードの品質、コミュニティの健全性が向上します。
参入障壁を下げる
インナーソースでコントリビューションを求めることは、次のような視点から、オープンソースコミュニティより困難な場合があります。
- インナーソースコミュニティは、潜在的なコントリビューターの数が少ない
- 基本的に勤務時間内にコントリビューションするため時間の制約が大きい
- コントリビューションの内容が目標管理の一部とは限らないため、インナーソースの作業に費やす時間が目標達成を損なう場合がある
最初の二つの視点については、コントリビューターにできるだけスムーズに参加できるよう準備しておくことがとても重要です。そのための最初の取り組みとしては、各コードリポジトリに、README.mdとCONTRIBUTING.mdファイルを用意するという方法があります。
README.mdファイルには、リポジトリに含まれるソフトウェアの解説を記載します。さらに、ライセンス情報、ソフトウェアの取得、構築、テスト、および使用方法について詳細な手順を提供する必要があります。
CONTRIBTING.mdには、コントリビューションする際に気を付けるべきポイントを記載します。例えば、次のような一般的な質問に対する回答を記載しておくと良いでしょう。
- バグレポートや機能リクエストを送付するには、どのようにすれば良いか
- 質問がある時に、誰にどのようにコンタクトすれば良いか
- コーディングスタイル、ブランチ作成、コミットメッセージに関する決まりはどのようなものか
- コントリビューションに対する「完了」の定義は何か
- コントリビューションの際のプロセスはどのようなものか
- コントリビューションが受け入れられた後に、コードに対するサポートとして、何を期待しているか
- 行動規範やコミュニティ運営に関するガイドラインはどのようなものか
これらの文書に加えて、コントリビューターが開発したソフトウェアの実行とテストを簡単かつすぐに行えるような環境やその利用手順を準備することも有効です。
次に、どのようなコントリビューションが必要とされているか、潜在的なコントリビューターがすぐに分かるようにすることが重要です。例えば、コードのコントリビューションだけでなく、ドキュメントの作成、アートワークの作成、イベントの開催など、コード以外のコントリビューションなどがあります。これを簡単に示す方法の一つに、コミュニティのイシュートラッカーで「新人向けタスク」というタグを付けておくという方法があります。
ここまでまとめると、企業にあるインナーソースコミュニティでは、できるだけ多くの人々がコントリビューションできるように、コントリビューションに対する障壁をできるだけ低く保つことがとても重要です。最後の視点については、次の節で説明します。
コミュニティのニーズを主張する
インナーソースの活動を進める上で、時にコミュニティとビジネスユニットの利益が相反することがあります。
トラステッドコミッターは、コードとコミュニティ両方の健全性に責任があります。これは、健全なコミュニティが、健全なコードの前提条件となるからです。そのため、トラステッドコミッターは長期的な視点に立った行動が求められます。
一方で、ビジネスユニットは、当然ながらインナーソースコミュニティにより作成される製品により大きな関心を持ちます。そのため、短期から中期の業績で利益が出ることを好みます。こうしたコミュニティ視点とビジネスユニット視点との間で、トラステッドコミッターには、どのような行動が求められるでしょうか?
まず、トラステッドコミッターには、組織との信頼関係を構築し、経営層からコミュニティの利益と企業内のソフトウェアの長期的な健全性に対する理解を得ることが求められます。例えば、インナーソースのコード品質が十分でない場合、それに関する技術的リスクとコミュニティ関連のリスクを経営層に伝える責任があります。その際、トラステッドコミッターは会社から与えられる裁量の範囲内で活動する必要もあります。
次に、トラステッドコミッターは、コミュニティと個々のコントリビューターの成果に対して、公に成果が認められるようにする必要があります。例えば、コントリビューターのマネージャーに対して、コントリビューションによりプロジェクトとして成果が出ていることを伝える方法があります。コントリビューターは、それぞれ何らかの制約がある中で活動を行っています。しかし、その成果に対する認識が広まらないと、コントリビューターのモチベーションが低下し、コミュニティの健全性を損ねることにもなりかねません。まずは、コントリビューターのマネージャーに対してお礼を伝えるところから始めてみても良いかもしれません。
トラステッドコミッターによる支援が必要となるもう一つのケースは、コントリビューターにコントリビューションする時間や許可が与えられていない場合です。これは、コミュニティがコントリビューターの部外で製品を開発している場合で、彼らの目標と関係がない場合に起こる可能性があります。この場合、トラステッドコミッターはコントリビューターのマネージャーと議論し、コントリビューターがコミュニティに参加できるように、代替案を引き出すなりの働きかけをする必要があります。
まとめると、インナーソースのコミュニティが組織に価値を提供できるようにするために、トラステッドコミッターは、個々のコントリビューターやコミュニティのニーズや成果を組織に対して主張する必要があるということになります。
トラステッドコミッターになるには
トラステッドコミッターの役割は、大変ですがやり甲斐のあるものです。では、どのようにしたらトラステッドコミッターになることができるでしょうか?
これは、どのようにしたら開発チームのリーダーになれますか? という質問に対する答えと似ている部分があります。成果を出し、リーダーとしての資質が認められると、その結果としてリーダーとなることができます。インナーソースコミュニティにおいても、役割は才能や、努力、成果に基づいて決まります。例えば、以下のようなものが基準になるでしょう。
- プロジェクトに関する高い技術的能力を持つ
- プロダクトオーナーやマネージャーと効果的なコミュニケーションがとれる
- コントリビューターをレベルアップさせる意欲と忍耐力がある
- 感情的ならずに意見を受け止められるようになる
- コーディングより、コミュニケーション・メンタリングに注力できる
正式にトラステッドコミッターになるプロセスは、コミュニティごとに異なります。例えば、一人で始めた草の根コミュニティでは、創始者がトラステッドコミッターの役割を担うことがよくあります。コミュニティが成長して大きくなったり、より大きなコミュニティを作ることを目的としてプロジェクトを開始したりする場合には、組織的にトラステッドコミッターとして指名されたり、コミュニティのコントリビューターから指名される場合もあります。なお、トラステッドコミッターの役割は、プロジェクトを成功に導くために多くの時間を必要とするため、その心構えをしておく意味でも自発的に引き受けなければなりません。
組織の視点では、トラステッドコミッターを一人にするか複数にするかを考えておく必要があります。これは、コミュニティによって開発されるソフトウェアのサイズとリスクに依存します。トラステッドコミッターは、技術的な活動以外にも時間が必要なため、その役割を引き受けたい人が十分にいない場合もあります。このため、一部の企業ではトラステッドコミッターを当番制にして、複数のトラステッドコミッターが作業を共有し、当番でないトラステッドコミッターが技術的な作業に専念できるようにしています。複数のトラステッドコミッターがいると、誰かが会社を辞めたり、現在の役割から別の役割に変わったりする場合の技術的継続性に対するリスクを減らすことが可能になります。
まとめると、トラステッドコミッターの役割は、技術的にも組織的にも成果を示すことによって獲得されるものです。トラステッドコミッターとして活動することでコードを書く時間は短くなりますが、フォースマルチプライヤーとして行動することで、最終的にはコミュニティへのコントリビューションを通して、会社に対するトラステッドコミッター自身の価値を高め、さらに自身と会社の両方の成長を加速することができます。