paint-brush
GitHub とオープン コミュニティを構築する技術by@patrickheneise
188

GitHub とオープン コミュニティを構築する技術

Patrick Heneise11m2023/12/20
Read on Terminal Reader

この記事では、オープンなコミュニティを構築する方法についての私の経験とアイデアを共有します。私はこのコンセプトと、コミュニティの自動化のために物事を組み合わせるツールに取り組んできました。これがあなたとあなたのコミュニティの作業を容易にするのに役立つことを願っています。
featured image - GitHub とオープン コミュニティを構築する技術
Patrick Heneise HackerNoon profile picture
0-item
1-item
2-item

コミュニティは難しいです。構築も維持も成長も困難です。しかし、コミュニティを構築することは、私のキャリアの中で最もやりがいのあることの 1 つでした。なぜなら、私は非常に多くの素晴らしい人々に会い、自分の快適ゾーンから学習し、物事を行うことを余儀なくされたからです。


10 年以上前、ベルリンで開催された初めての小規模なテクノロジー カンファレンス CouchConf に参加したことを思い出します。幸運なことに、同時期にBerlinJS Meetupが開催されており、私はコミュニティと人々に感動しました。彼らは Web サイト用に GitHub リポジトリをセットアップしており、トークは GitHub Issue として送信されます。プロセスのシンプルさと透明性に驚いたので、リポジトリをフォークして数週間後に BarcelonaJS を設立しました。これが私自身のオーガナイザーとしての旅の始まりでした。


定期的で非常にイライラする経験のちょっとした逸話: 素晴らしいイベントをまとめるために、準備、連絡、講演者を見つけて招待し、日付と会場を見つけて確保し、食べ物や飲み物についてスポンサーと話し合うことに何時間も費やしました。そして、時間が来ると、あなたはそこに一人で座っているか、あるいは来るだろうと思っていた人の一部と一緒にそこに座っていることになります。なぜなら、Meetup には「150 人が参加希望を表明しました」と書かれているからです。まれに天気が悪かっただけですが、その後人々と話をすると、次のようなことを聞くことがよくありました。


これはすごいですね、行ってみたかったのですが、知りませんでした!


このフレーズは、私がコミュニティ ツールとして GitHub を検討し始める動機となったものです。GitHub は自動化のための最も素晴らしいプラットフォームの 1 つであり、それが主催者として行う必要があることです。Eventbrite でイベントを公開するために、すべてを自動化する必要があります。 Meetup、Twitter、Facebook、Telegram Groups、WhatsApp、電子メール、カレンダーなどなど、イベントの 2 週間前、1 週間前、3 日前、1 日前、1 時間前に実行して、後で誰も言うことができないようにします。 :「これは知りませんでした。」結局のところ、これは自分自身のためではなく、コミュニティのためにやっているからです。


旅行中に、何千人ものメンバーがいる Meetup の Node.js および JavaScript コミュニティに遭遇しましたが、今後のイベントや最近のイベントは 1 つもありませんでした。これにはさまざまな理由が考えられますが、多くの場合、主催者に時間がなかったり、別のことに移り、運営を継続する後継者を見つけるのが難しいことが原因です。 Meetup やその他のプラットフォームは、コミュニティやイベントを見つけるのに最適ですが、主催者が活動しなくなった場合にメンバーがコミュニティに連絡を取り、コミュニティを引き継いだり復活させたりするのが困難になります。


開発者として、私は GitHub に多くの時間を費やしており、ツールやワークフローに精通しているため、GitHub をコミュニティ プラットフォームとして使用する方法を模索し始めました。

コミュニティ構築に GitHub を使用する利点

オープンソースとオープンコミュニティ

まず最も明白な利点は、GitHub 上のパブリック リポジトリがオープン ソースであることです。これは、すべてのコンテンツ、問題、ディスカッションが公開されており、誰でもフォーク、コピー、再利用できることを意味します。これは、コミュニティが放棄された場合でも、誰でもフォークして作業を継続できることを意味するため、コミュニティにとっては素晴らしいことです。また、新しいコミュニティを開始したい場合は、既存のコミュニティをフォークしてニーズに合わせて調整できることも意味します。


GitHub にはユーザー/チーム/組織の管理機能が組み込まれているため、自分で何かを構築する必要はありません。誰かを組織に招待したり、組織の異なる権限を持つチームを追加したりするのは簡単です。


私たちのほとんどは GitHub の使い方を知っており、毎日サイトにアクセスしているため、データベース管理、コンテンツ管理、その他のツールのために追加のサイトをブックマークする必要はありません。 GitHub Actions を使用すると、スケジュールまたはオンデマンドで自動タスクを実行でき、GitHub Pages を使用するとコミュニティ Web サイトを無料でホストできます。

公共性と透明性を重視した構築

私にとって、GitHub でコミュニティを構築することの最も重要な利点の 1 つは、完全な透明性とオープンなコミュニケーションです。すべて[1]は公開されているため、誰が何にアクセスできるかを心配する必要はありません。これは、誰でもコミュニティに貢献でき、何が起こっているかを見ることができることを意味します。これは、信頼を築き、誰もが受け入れられるコミュニティを構築するのに最適です。


BarcelonaJS や CDC などのコミュニティでの私の目的は、開発者が共有してつながるための無料でオープンなスペースを作成することでした。そして、「無料」こそが透明性をもたらすのです。以前、私は金銭的な寄付には常に手を出していませんでした。スポンサーになりたい企業があれば、会場に直接食べ物や飲み物を注文することもできますが、私はそれを仲介しません。 Open Collectiveのおかげで、これははるかに簡単になり、財政的な寄付を受け入れ、コミュニティに対して透明にすることができるようになりました。これらは、たとえば、ドメインの支払い、食べ物や飲み物の購入、広告キャンペーンの実行などに使用されます。


[1] もちろん、内部オーガナイザーのディスカッションなどのためにプライベート リポジトリを作成することもできます。

欠点と注意点

GitHub は Meetup のようなコミュニティ/イベント プラットフォームではないため、いくつかの注意事項があります。私は、問題を「イベント」または「トーク提案」として扱い、GitHub 問題フォームを送信の構造化に使用することに慣れてきました。しかし、これは理想的ではなく、初心者が「トークを送信するには課題を作成する」ことを理解するのに時間がかかります。日付や地図上の場所などを選択して、数百人に簡単な電子メール通知をトリガーする「快適な機能」はありません。

オープン(開発者)コミュニティ

この概念全体は、GitHub と IssueOps を中心に進化するため、主に開発者とエンジニアに焦点を当てています。私のこれまでの経験を理解していただくために、私が構築に協力したコミュニティとカンファレンスをいくつか紹介します。


  • バルセロナJS 、2012 - 2018
  • ハッカーズ & ファウンダーズ バルセロナ、2012 ~ 2015
  • Node.js バルセロナ ミートアップ グループ、2012 ~ 2018
  • カウチベース バルセロナ ミートアップ、2012 ~ 2015
  • NodeConf バルセロナ、2015、2016、2017
  • 地中海JS、2015
  • キプロスJS 2018 - 2021
  • キプロス開発者コミュニティ2020 - 現在


これらを構築する間、私は主催者の作業を楽にする一連のツール、ワークフロー、自動化に継続的に取り組んできました。これは非常に困難で、報われないことが多い仕事であるためです。ここでは、GitHub 上にパブリック コミュニティを構築する方法についての私のオープン コミュニティ コンセプトを示します。

ラベルと構造

最初のステップは、GitHub 組織をセットアップし、2 つのリポジトリを作成することです。

  1. イベント
  2. 話す


名前は明らかです。イベント リポジトリには新しいイベントを作成するためのテンプレートがあり、トーク リポジトリにはトークの提案を送信するためのテンプレートがあります。トークをイベントにリンクして議題を作成することができ、コミュニティからの参加を得ることができた場合 (覚えておいてください: それは難しいです!)、👍 や ❤️ などのコメントやリアクションをトークへの投票に使用できます。


GitHub プロジェクトを使用して、提案、スケジュール、発表のフェーズを通じてイベントのライフサイクルを管理することもできます。

GitHub プロジェクト ビュー


キプロスでは、島内のさまざまな地域にラベルを追加しましたが、最も重要なのは「承認済み」ラベルが必要であるということです。すべての新しい問題は「イベント」ラベルで作成されますが、「トリアージ」権限を持つ人 (主催者チーム) のみがイベントを「承認」できます。これは、スパムを回避し、イベントに関連性があることを確認するために重要です。

GitHub イベントラベル


組織、問題のあるリポジトリ、および構造が整備されたので、自動化するときが来ました。

Gitイベント

GitHub のGitEvents / GitEvents ははるか昔 (2014 年) に遡り、London Node User Group (LNUG) と Barccelona Node.js Group の間のコラボレーション「ハック ウィークエンド」としてgitupという名前で始まりました。当時、GitHub Actions は存在せず、問題に対して Webhook を使用して、Meetup.com データに基づいて GitHub でホストされている Web サイトの構造化データを構築しようとしました。セットアップが面倒だったので、プロジェクトはしばらく放棄されました。


現在、 GitEvents は、問題のワークフローを自動化するための単純な GitHub アクションのセットです。ミートアップやイベントのための「Git Ops」。必要なのは、GitHub 組織と GitHub アプリだけです。機能の一部は次のとおりです。


  • 包括的な組織: GitHub リポジトリ、問題、ディスカッションとのやり取りにより、ユーザーを GitHub 組織に招待し、「コミュニティ メンバー」チームに追加するワークフローがトリガーされます。権限は一般公開と同じですが、ちょっとした「成長とエンゲージメントのハック」として、問題ですべてのコミュニティ メンバーを @ メンションできるようになります。これはお知らせには最適ですが、乱用すべきではありません。乱用しないと、すぐにメンバーを失ってしまいます。
  • 問題テンプレート: GitEvents をすぐに使い始めることができるように、イベント、トーク、行動規範の返信などのシンプルなテンプレートのセットをまとめました。
  • Broadcast : マーケティングやメンバーへのメール送信/ツイート/ブルースカイ送信、Discord、EventBrite、Meetup などでのイベントの作成/更新などの一般的なタスクを自動化する再利用可能な GitHub ワークフローです。
  • ICS : イベント用の iCal ファイルを生成する GitHub アクションです。 iCalカレンダー イベントの標準です。これを購読としてカレンダーに追加するだけで、コミュニティ イベントの最新情報を入手できます。 github ファイルへのリダイレクトを作成したので、ユーザーは簡単なリンク ( https://calendar.cdc.cy ) でカレンダーを購読できます。


すべてが「プラグ アンド プレイ」なので、好きなアクションを選択でき、それらをワークフローに組み込むのは比較的簡単です。たとえば、キプロス開発者コミュニティのワークフローを確認してください。


GitEvents を使い始めたいがサポートが必要な場合は、 Discord サーバーまでご連絡ください。GitEvents は進行中の作業であり、特に他のプラットフォームとの統合などでやるべきことが常にたくさんあります。お手伝いしたい場合は、連絡する。

GitHub 発行フォーム

Issue Form は、GitHub ではまだあまり知られていない機能です。通常の Markdown テンプレートの代わりに、 YAML ファイルをフォーム構成で提供できます

GitHub 発行フォーム


これは構造化された入力を取得するのに非常に優れていますが、「Issue」として保存すると、データは単なる Markdown であるため、意味的には役に立ちません。マイルストーン、マークダウンヘッダー、ラベルなどを試して、日付、場所などのセマンティック情報を課題に追加しましたが、何もうまくいきませんでした。そこで私はGitHub Issue Forms Body Parserの構築を開始しました。これは、フォームを通じて作成された問題を解析して日付、リンク、画像、リストなどを抽出し、構造化された JSON データに変換するのに役立ちます。これは、Discord、EventBrite、Meetup などの他のプラットフォームに直接渡したり、メールやツイートなどで使用したりできます。


Issue Forms Body Parser は、Markdown テキストを解析するためのライブラリとしてnpmでも利用できますREADME.mdファイル全体を解析して Web サイトのデータを構造化できることに気づいたのはつい最近のことです。


 query ($organization: String!, $repository: String!) { repository(owner: $organization, name: $repository) { id name object(expression: "main:README.md") { ... on Blob { text } } } }


これは、リポジトリのmainブランチからファイル コンテンツを取得するためのクエリであり、それを「ボディ パーサー」に渡すことができます。

const structuredData = await bodyParser(readmeFile()?.repository.object.text)


コミュニティの説明の別のコピーを保持する代わりに、 README.mdファイルからAboutセクションを取得して Web サイトで使用できるようになりました。

グラフQL API

最新のhttps://cdc.cy Web サイトを使用して、Issues、 README.mdファイル、および構造化された JSON データで可能なことの境界を探索し、押し広げたいと考えました。その結果にはかなり満足しています。


  • Web サイトのコンテンツのほとんどは、GitHub 上のREADME.mdまたは.jsonファイルから取得されます。誰でも編集でき、CMS やアカウントなどは必要ありません
  • 今後のイベントと過去のイベントは、GitHub の問題 (イベント リポジトリにある承認済みおよびeventsラベル付きの問題) に基づいています。
  • オーガナイザーは GitHub チームメンバーから取得されます
  • 「共通の場所」ファイルからの適切な場所データを使用してイベントに注釈を付けたり、強化したりできます
  • 講演者プロフィールは完全に GitHub ユーザー プロフィールに基づいており、アバター、プロフィール (readme)、場所などを取得して、美しい講演者プロフィール ページを構築できます。
  • 「組織のメンバー数」、「過去/今後のイベントの数」などのいくつかの統計を表示できます。


これらの機能はすべて、 GraphQL APIを介して、ボディ パーサーで Markdown ファイルを解析することで実現できました。

概要と展望

私はこのコンセプトにしばらく取り組んできましたが、今でも時々形を変えています。ただし、BerlinJS から採用した基本的なアイデアは変わっていません。


  • オープンコミュニティ: すべてが公開され、透明性があり、誰でも歓迎されます (行動規範に従っている限り)。
  • イベントと講演/提案はリポジトリ内の課題です
  • ラベルは構造化と自動化に役立ちます


これらすべてを構築するには多くの時間とエネルギーがかかり、足りないものがまだたくさんありますが、時間がありません。

  • スケジュールやリマインダーなどの電子メールの適切な統合。
  • EventBrite統合を完了する
  • Meetup統合を追加
  • WhatsApp/Telegram/Slack 統合を追加
  • 問題処理と自動コメントを改善します (行動規範のリマインダー、フォローアップのリマインダーなど)。


これがあなたとあなたのコミュニティに役立つと考え、パズルを組み立てる作業に参加したい場合は、 gitevents Discord サーバーGitHub ディスカッション、またはGitHub Issuesのいずれかに直接連絡してください。


キプロスまたはバルセロナにお住まいの場合は、地元の開発者グループに参加してサポートしてください。

ランダムオーガナイザーの個人的な経験からの考え、ヒント、コツ

  • 会場: 会社のオフィスを会場として選ぶのは簡単ですが、多くの欠点があります。オフィスに人を置くと、人を操作するのは簡単です(当社の素敵な場所を見てください。カクテルバーもあります!)。会社にはあなたとは異なる動機(採用、マーケティングなど)があることを忘れないでください。場合によっては、競合他社のオフィスへの訪問が許可されないなどの紛争が発生することもあります。可能であれば、私は「中立的な」コワーキング スペースやイベント スペースを好みます。Open Collective のおかげで、誰にとっても公平な (採用/マーケティングなど) ルールで会場の費用を支払うスポンサーシップを得ることができます。
  • リマインダー: 私たちは皆忙しいので、物事を忘れがちです。誰もがあなたほどイベントに熱心で、やる気があり、やる気があるわけではありません。そのため、定期的にリマインドすることで人々の関心を維持し、習慣を築くのに役立ちます。リマインダーの適切な頻度を見つけて、やりすぎてスパムを送信しないようにしてください。人によって効果のあるメディアが異なるため、できるだけ多くのメディアを取り上げるようにしています。
  • 希少性 「開催の 1 週間前にイベントを発表し、座席数を制限した方が、100 名以上の収容人数で 1 か月前に発表するよりも効果的であることに気づきました。」 – Dmitry Zaets、BarcelonaJs
  • 特典: 「景品は楽しいものです。カンファレンスやその他のチケットを配ることは、参加すると素晴らしい特典になります。」 – Dmitry Zaets、BarcelonaJs
  • 一貫性: 「最初から現実的なスケジュールを立ててください。月次ミーティングであろうと四半期ごとのカンファレンスであろうと、一貫性が重要です。ロードマップを作成し、責任を割り当て、計画を忠実に守ります。これは聴衆の関心を維持するだけでなく、構築にも役立ちます」信頼できるコミュニティです。」 –フェデリコ・ランパッゾ、CDC.cy
  • 講演者を見つける: 「洞察を共有してくれるかもしれない専門家に遠慮せずにアプローチしてください。メンバーの多くは、共有する価値のある興味深い話を持っているはずです! それは、コミュニティだけでなく彼らにとっても豊かな経験になる可能性があります。イベントの写真、ビデオ、音声記録の撮影は貴重であり、講演者の講演キャリアを助けるだけでなく、イベントの認知度を高めるのにも役立ちます。」 –フェデリコ・ランパッゾ、CDC.cy