The Go Blog
コントリビューションワークショップ
イベント概要
by Steve
GopherConのコミュニティデー中、Goチームは2つのワークショップを開催し、参加者がGoプロジェクトへの最初の貢献を行うのを支援しました。Goプロジェクトがこのような試みを行うのは初めてのことでした。約140人の参加者と約35人のボランティアメンターがいました。メンターは、他の人を助けることで温かい気持ちになっただけでなく、非常にスタイリッシュなGo Mentorトラッカーハットも受け取りました。北米、南米、アフリカ、ヨーロッパ、アジア、オーストラリアから、あらゆる年齢層と経験レベルのコントリビューターが参加しました。GopherConでGopherたちが集結した、まさに世界規模の取り組みでした。
ワークショップ開催の理由の一つは、貢献者体験を改善するための強制力として機能させることでした。ワークショップの準備として、貢献者ガイドを書き直し、「トラブルシューティング」セクションを追加し、Goに貢献できる開発環境のセットアッププロセスを自動化するツールgo-contrib-initを構築しました。
ワークショップ自体では、プレゼンテーション「Goへの貢献」と、イベント中に表示されるダッシュボード/スコアボードを開発しました。スコアボードは、集合的なスコアが増加するという共通の目標に向かって全員が協力するように促すように設計されました。参加者は、アカウントの登録、変更リスト(CL、プルリクエストに似ています)の作成、CLの修正、CLの提出などのアクションを実行すると、合計スコアに1、2、または3ポイントを追加しました。
今年GopherConに自宅から参加したBrad Fitzpatrickは、提出されたすべてのCLをレビューする準備ができていました。彼は非常に迅速にレビューしたため、多くの人が彼を自動ボットだと考えました。社内では、私たちは彼を「BradBot」と呼んでいます。主に畏敬の念と少しの嫉妬からです。
影響
ワークショップに参加した人々から(ワークショップ後1週間以内に)合計65のCLが提出されました。このうち44は、Goプロジェクトのどのリポジトリにも以前に貢献したことのないコントリビューターからのものでした。これらの貢献の半分(22)はすでにマージされています。その他多くは、次の1.9リリースに向けて凍結期間中であるため、コードベースが解凍されるのを待っています。CLに加えて、多くの人々がバグレポート、ガーデニングタスク、その他の種類の貢献という形でプロジェクトに貢献しました。
最も一般的な貢献タイプは、ドキュメントで使用されるサンプル関数でした。Goユーザー調査では、ドキュメントに例が著しく不足していることが判明しました。プレゼンテーションでは、ユーザーにお気に入りのパッケージを見つけて例を追加するように依頼しました。Goプロジェクトでは、例はGoファイル内のコードとして(特定の命名規則で)記述され、go docツールはそれらをドキュメントと一緒に表示します。これは、凍結期間中にマージできる、ユーザーにとって非常に重要である、比較的狭いスコープの追加であるため、最初の貢献として最適です。
追加された例の一つは、Goで広く使用されているインターフェースの一つであるStringerの作成です。CL 49270
例に加えて、多くの人が重要なバグ修正に貢献しました。
- CL 48988 は issue #21029 を修正
- CL 49050 は issue #20054 を修正
- CL 49031 は issue #20166 を修正
- CL 49170 は issue #20877 を修正
修正したいバグを念頭に置いて参加し、私たちを驚かせた人もいました。Nikhitaはissue #20786に取り組む準備を整えて参加し、CL 48871を提出しました。その後、彼女はツイートしました。
いくつかの素晴らしい改善が行われただけでなく、最も重要なことは、Goチームのコアメンバーとより広範なコミュニティメンバーとの間の隔たりを縮めることができたことです。Goチームの多くのメンバーは、コミュニティメンバーがGoプロジェクトについて教えてくれたと述べていました。コミュニティの人々(対面でもTwitterでも)は、プロジェクトに参加できることを歓迎されていると感じていると述べていました。
今後
このイベントは、私たちの期待をはるかに超えて成功しました。GoチームマネージャーのSameer Ajmaniは、「コントリビューターワークショップは、Goチームにとって信じられないほど楽しく、教育的でした。ユーザーが私たちのプロセスで難しい側面にぶつかったときは顔をしかめ、ダッシュボードに表示されたときは喜びました。グループスコアが1000に達したときの歓声は最高でした。」と語りました。
私たちは、今後のイベント(ミートアップやカンファレンスなど)でこのワークショップをより簡単に開催できる方法を検討しています。最大の課題は、ユーザーがサポートされていると感じるのに十分なメンターシップを提供することです。アイデアがある場合、またはこのプロセスを支援したい場合は、私に知らせてください。
イベント参加者数名に、以下の体験談を共有するよう依頼しました。
私の貢献体験
by Cassandra
go-contribワークショップのことを聞いたとき、とても興奮しましたが、同時に非常に威圧感を感じました。Goチームのメンバーに勧められて参加することになったので、「えいやっ」と思って参加しました。
部屋に入ると(正直に言うと、遅刻していたので部屋に駆け込みました)、部屋がいっぱいの様子を見て嬉しく思いました。Goopherキャップをかぶっている人を探しました。それが先生の主な目印でした。2つの帽子と3つの帽子なしの人がいる16の丸いテーブルの1つに座りました。画面を立ち上げて、準備完了です...
Jess Frazelleが立ち上がり、プレゼンテーションを開始し、グループにリンクを提供して、簡単にフォローできるようにしました。
ざわめきは、深い底流から響き渡る声のメロディーへと変化していきました。人々はGoでコンピューターをセットアップし、GOPATHが設定されていることを確認するために先に進んでいました...あれ、Gerritって何?
私たちのほとんどは、Gerritについて少し紹介を受けなければなりませんでした。私はそれが何であるか全く知りませんでしたが、幸いなことに便利なスライドがありました。Jessは、GerritがGitHubの代替であり、もう少し高度なコードレビューツールを備えていると説明しました。その後、GitHubとGerritの用語を比較して、プロセスをよりよく理解しました。
よし、今度は**とんでもないGoコントリビューター**になる時だ。
これをさらにエキサイティングにするために、GoチームはGerritのスコアシステムに基づいて、グループとしてどれだけのポイントを獲得できるかを追跡できるゲームをセットアップしました。
自分の名前がボードに表示され、みんなの興奮を聞くのは、うっとりするようでした。それはまた、チームワークの感覚を呼び起こし、包容感と、自分が本当にGoコミュニティの一員であるという感覚につながりました。
約80人の部屋で、わずか1時間で6つのステップでGoに貢献する方法を学ぶことができました。これは偉業です!
思っていたほど難しくなく、全くの初心者でも無理のない範囲でした。Goへの貢献という輝かしいプロセスにおいて、活発で具体的な形でコミュニティ意識と一体感を育むことができました。
個人的には、Goチーム、帽子をかぶったGopherメンター、そして同僚の参加者の皆さんのおかげで、GopherConで最も記憶に残る瞬間の1つとなりました。
私の貢献体験
by Matt
プログラミング言語はいつも私にとって威圧的なものでした。それが世界がコードを書くことを可能にするコードです。その影響を考えると、私よりも賢い人々が取り組むべきでしょう…しかし、その恐れを克服する必要がありました。そこで、私の新しいお気に入りのプログラミング言語に貢献するワークショップに参加する機会が訪れたとき、どのように貢献できるかを見るのが楽しみでした。1ヶ月後、私は今、誰でも(そして誰もが)Goに貢献できる(そして貢献すべきだ)と確信しています。
Goへの貢献をゼロから2つにするための非常に詳細な手順を以下に示します。
セットアップ
GoがGerritを使用していることを考慮して、私はまずそのための環境を設定しました。Jess Frazelleのガイドは、手順を漏らさないための素晴らしい出発点です。
本当の楽しみは、Goリポジトリをクローンするところから始まります。皮肉なことに、Goを$GOPATHの下でハックすることはないので、私はそれを別のワークスペース(~/Develop)に入れました。
cd $DEV # That's my source code folder outside of $GOPATH
git clone --depth 1 https://go.googlesource.com/go
次に、便利なヘルパーツールgo-contrib-initをインストールします。
go get -u golang.org/x/tools/cmd/go-contrib-init
これで、上記でクローンしたgo/フォルダからgo-contrib-initを実行して、貢献する準備ができているかどうかを確認できます。ただし、もしこの記事を読んでいるだけなら、まだ準備はできていません。
次に、Gerritコードレビューに参加できるようにcodereviewをインストールします。
go get -u golang.org/x/review/git-codereview
このパッケージには、通常のgit commitとgit pushのワークフローをそれぞれ置き換えるgit changeとgit mailが含まれています。
よし、インストールは終わった。次に、Gerritアカウントをここで設定し、適切なCLAに署名してください(私はすべてのGoogleプロジェクトの個人用CLAに署名しましたが、自分に合ったオプションを選択してください。署名したすべてのCLAはcla.developers.google.com/clasで確認できます)。
そしてバム。準備万端(Goする)です!しかし、どこに貢献すればいいのでしょうか?
貢献
ワークショップでは、私たちはscratchリポジトリに送られました。これは、ワークフローをマスターするために試行錯誤する安全な場所です。
cd $(go env GOPATH)/src/golang.org/x
git clone --depth 1 [[https://go.googlesource.com/scratch][go.googlesource.com/scratch]]
まず、cdしてgo-contrib-initを実行し、貢献する準備ができていることを確認します。
go-contrib-init
All good. Happy hacking!
そこから、私は自分のGitHubアカウントと同じ名前のフォルダを作成し、git add -uを実行してから、git changeを試しました。それはあなたの作業を追跡するハッシュを持っており、それがあなたが触れてはならない一行です。それ以外は、git commitと全く同じように感じます。コミットメッセージがpackage: descriptionの形式(descriptionは小文字で始まる)と一致したら、git mailを使ってGerritに送信しました。
この時点で覚えておくべき2つの良い点:git changeはgit commit --amendのようにも機能するので、パッチを更新する必要がある場合は、addしてからchangeすることで、すべてが同じパッチにリンクされます。次に、いつでも個人のGerritダッシュボードからパッチをレビューできます。
何度かやり取りした後、私はついにGoに貢献しました!そして、Jaanaが正しければ、絵文字付きの最初の貢献かもしれません✌️。
真剣な貢献
スクラッチリポジトリも楽しいですが、Goのパッケージの奥深くに入り込み、還元する方法はたくさんあります。この時点で、私は利用可能で興味深いものを探すために、多くのパッケージを巡りました。「巡った」というのは、パッケージのリストを見つけようとし、次にgo/src/フォルダの下にあるものを見るためにソースコードを見に行ったということです。
私はregexpパッケージで何ができるか試してみることにしました。おそらく正規表現への愛と恐れからでしょう。ここで私はウェブサイトのパッケージビューに切り替えました(各標準パッケージはhttps://godoc.org/$PACKAGENAME)で見つかることを知っておくと良いでしょう)。そこで、QuoteMetaには他の関数と同じレベルの詳細な例が欠けていることに気づきました(そして、Gerritを使う練習にもなります)。
go/src/regexpを見始めて、どこに例を追加するかを探し始めましたが、すぐに迷子になりました。幸運なことに、その日Francescがいました。彼は、すべての例が実際にはexample_test.goファイル内のインラインテストであり、テストケースの後に「Output」がコメントアウトされ、その後にテストの答えが続く形式であることを教えてくれました。例えば、
func ExampleRegexp_FindString() {
re := regexp.MustCompile("fo.?")
fmt.Printf("%q\n", re.FindString("seafood"))
fmt.Printf("%q\n", re.FindString("meat"))
// Output:
// "foo"
// ""
}
なかなかクールでしょ?Francescの指示に従って、ExampleQuoteMeta関数を追加し、役立つと思ったものをいくつか追加しました。そこからGerritにgit changeとgit mailです!
Steve Franciaから「未解決の問題ではないものを見つけて修正する」という挑戦を受けたので、パッチにQuoteMetaのドキュメント変更をいくつか含めました。追加のスコープがあるため、もう少しオープンな状態が続くと思いますが、これに関してはそれだけの価値があると思います。
すでにあなたの質問が聞こえてきます。「どうやって動作確認したの?」正直に言うと、簡単ではありませんでした。go test example_test.go -run QuoteMeta -vを実行しても、$GOPATHの外で作業しているのでうまくいきません。どうすればよいかわからずに苦労しましたが、Kale BlakenshipがGoでのテストに関する素晴らしい記事を書いてくれました。これは後でブックマークしておきましょう。
私の完了した貢献はこちらで確認できます。私が皆さんに見てほしいのは、貢献の流れにどれほど簡単に入り込めるかということです。私と同じなら、ドキュメントで小さな誤植や不足している例を見つけて、git codereviewワークフローに慣れるのが得意になるでしょう。その後は、未解決の問題、理想的には次のリリース用にタグ付けされたものを見つけて、試してみる準備が整います。何を選んでも、ぜひ挑戦してください。Goチームは、私たち全員が貢献できるようにどれほど気にかけているかを私に証明してくれました。次のgit mailが待ちきれません。
私のメンター経験
by Dmitri
私はコントリビューションワークショップイベントにメンターとして参加するのを楽しみにしていた。イベントには高い期待を抱いており、始まる前から素晴らしいアイデアだと思っていた。
私が初めてGoに貢献したのは2014年5月10日でした。貢献したいと思ってから、実際に最初のCLを送信するまでに約4ヶ月かかったのを覚えています。そのプロセスを理解し、完全にコミットするまでにそれだけの時間が必要でした。当時、私は経験豊富なソフトウェアエンジニアでしたが、Goの貢献プロセスは、私がすでに慣れていた他のすべてのプロセスとは異なり、異質なものに感じられ、そのため威圧的に思えました。しかし、それはよく文書化されていたので、時間を見つけて座って実行するだけのことだとわかっていました。「未知」の要素が、私に試すことをためらわせていました。
数ヶ月が過ぎて、「もう十分だ」と思い、次の週末の丸一日をそのプロセスを解明することに専念することにしました。土曜日一日を一つのこと、つまりGoに最初のCLを送信することに充てました。コントリビューションガイドを開き、一番上からすべての手順に従い始めました。1時間以内に終わりました。最初のCLを送信したのです。私は畏敬の念とショックの両方を感じました。畏敬の念は、ついにGoに貢献し、それが承認されたからです!ショックは、なぜこれをするのにこんなに長く待ったのだろうか、というものでした。コントリビューションガイドの手順に従うのは非常に簡単で、プロセス全体が完全にスムーズに進みました。もし誰かが私に、1時間以内に終わって何も問題は起こらないと教えてくれていたら、もっと早くやったでしょう!
このイベントに参加し、なぜそれが良いアイデアだと思ったのかについて話します。Goに貢献したいと願っていたが、見慣れない、そして長く思えるプロセスに尻込みしていた人たち(私がその4ヶ月間そうだったように)にとって、これはチャンスでした!イベントに参加することで、そのプロセスを解明することに専念するのが簡単なだけでなく、Goチームや親切なボランティアメンターが途中ずっとサポートしてくれるのです。
イベントへの高い期待を抱いていたにもかかわらず、その期待はさらに上回りました。まず、Goチームは本当に準備を整え、イベントをみんなにとってさらに楽しいものにするために多大な投資をしていました。すべての貢献手順を素早く説明する、とても楽しいプレゼンテーションがありました。イベント用にダッシュボードが作成され、成功した各ステップがグローバルスコアへのポイントとして報われました。これにより、非常に協力的なソーシャルイベントになりました!最後に、そして最も重要なことに、Brad FitzpatrickのようなGoチームメンバーが舞台裏で、CLのレビューを迅速に行うのを助けていました!つまり、提出されたCLは迅速にレビューされ、具体的な次のステップが示されたため、誰もが先に進んでより多くを学ぶことができました。
当初、私はこのイベントをやや退屈なものと予想していました。というのも、貢献の手順は極めて簡単だからです。しかし、実際はそうではないことに気づき、Goに関する私の専門知識を使って、予期せぬ場所で立ち往生している人々を助けることができました。結局のところ、現実世界はエッジケースで満ちています。たとえば、ある人は個人のメールと仕事のメールの2つのGitメールを持っていました。仕事のメールのCLAへの署名に遅延があったため、代わりに個人のメールを使用しようとしました。これは、各コミットを正しいメールを使用するように修正する必要があることを意味し、ツールが考慮していなかったことでした。(幸いなことに、貢献ガイドにはこの正確な問題をカバーするトラブルシューティングセクションがあります!)その他、いくつかの微妙な間違いや環境設定の誤りがあり、一部の人々は遭遇しました。Goのインストールが複数あるのは少し珍しかったからです。時には、godocが正しい標準ライブラリの変更を表示するように、GOROOT環境変数を一時的に明示的に設定する必要がありました(私はその言葉を発するとき、Dave Cheneyがいないか肩越しに舌を出しながら確認していました)。
全体として、私は数人の新しいGopherがGoへの最初の貢献をするのを見守りました。彼らはCLを送信し、レビューのフィードバックに対応し、編集を行い、全員が満足するまで繰り返し、最終的に彼らの最初のGo貢献がmasterにマージされるのを見届けました!彼らの顔に喜びが表れているのを見るのは非常にやりがいがありました。なぜなら、最初の貢献をする喜びは私自身も共感できるものだからです。また、彼らを助け、時々彼らが陥った難しい状況を説明できたことも素晴らしかったです。私が知る限り、多くの幸せなGopherがイベントから去っていきました。私自身も含めて!
イベントの写真
写真提供:Sameer Ajmani & Steve Francia
次の記事:Go 1.9がリリースされました
前の記事:コントリビューターサミット
ブログインデックス