コミュニティは難しいです。構築も維持も成長も困難です。しかし、コミュニティを構築することは、私のキャリアの中で最もやりがいのあることの 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 Actions を使用すると、スケジュールまたはオンデマンドで自動タスクを実行でき、GitHub Pages を使用するとコミュニティ Web サイトを無料でホストできます。
私にとって、GitHub でコミュニティを構築することの最も重要な利点の 1 つは、完全な透明性とオープンなコミュニケーションです。すべて[1]は公開されているため、誰が何にアクセスできるかを心配する必要はありません。これは、誰でもコミュニティに貢献でき、何が起こっているかを見ることができることを意味します。これは、信頼を築き、誰もが受け入れられるコミュニティを構築するのに最適です。
BarcelonaJS や CDC などのコミュニティでの私の目的は、開発者が共有してつながるための無料でオープンなスペースを作成することでした。そして、「無料」こそが透明性をもたらすのです。以前、私は金銭的な寄付には常に手を出していませんでした。スポンサーになりたい企業があれば、会場に直接食べ物や飲み物を注文することもできますが、私はそれを仲介しません。 Open Collectiveのおかげで、これははるかに簡単になり、財政的な寄付を受け入れ、コミュニティに対して透明にすることができるようになりました。これらは、たとえば、ドメインの支払い、食べ物や飲み物の購入、広告キャンペーンの実行などに使用されます。
[1] もちろん、内部オーガナイザーのディスカッションなどのためにプライベート リポジトリを作成することもできます。
GitHub は Meetup のようなコミュニティ/イベント プラットフォームではないため、いくつかの注意事項があります。私は、問題を「イベント」または「トーク提案」として扱い、GitHub 問題フォームを送信の構造化に使用することに慣れてきました。しかし、これは理想的ではなく、初心者が「トークを送信するには課題を作成する」ことを理解するのに時間がかかります。日付や地図上の場所などを選択して、数百人に簡単な電子メール通知をトリガーする「快適な機能」はありません。
この概念全体は、GitHub と IssueOps を中心に進化するため、主に開発者とエンジニアに焦点を当てています。私のこれまでの経験を理解していただくために、私が構築に協力したコミュニティとカンファレンスをいくつか紹介します。
これらを構築する間、私は主催者の作業を楽にする一連のツール、ワークフロー、自動化に継続的に取り組んできました。これは非常に困難で、報われないことが多い仕事であるためです。ここでは、GitHub 上にパブリック コミュニティを構築する方法についての私のオープン コミュニティ コンセプトを示します。
最初のステップは、GitHub 組織をセットアップし、2 つのリポジトリを作成することです。
名前は明らかです。イベント リポジトリには新しいイベントを作成するためのテンプレートがあり、トーク リポジトリにはトークの提案を送信するためのテンプレートがあります。トークをイベントにリンクして議題を作成することができ、コミュニティからの参加を得ることができた場合 (覚えておいてください: それは難しいです!)、👍 や ❤️ などのコメントやリアクションをトークへの投票に使用できます。
GitHub プロジェクトを使用して、提案、スケジュール、発表のフェーズを通じてイベントのライフサイクルを管理することもできます。
キプロスでは、島内のさまざまな地域にラベルを追加しましたが、最も重要なのは「承認済み」ラベルが必要であるということです。すべての新しい問題は「イベント」ラベルで作成されますが、「トリアージ」権限を持つ人 (主催者チーム) のみがイベントを「承認」できます。これは、スパムを回避し、イベントに関連性があることを確認するために重要です。
組織、問題のあるリポジトリ、および構造が整備されたので、自動化するときが来ました。
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 アプリだけです。機能の一部は次のとおりです。
iCal
カレンダー イベントの標準です。これを購読としてカレンダーに追加するだけで、コミュニティ イベントの最新情報を入手できます。 github ファイルへのリダイレクトを作成したので、ユーザーは簡単なリンク ( https://calendar.cdc.cy ) でカレンダーを購読できます。
すべてが「プラグ アンド プレイ」なので、好きなアクションを選択でき、それらをワークフローに組み込むのは比較的簡単です。たとえば、キプロス開発者コミュニティのワークフローを確認してください。
GitEvents を使い始めたいがサポートが必要な場合は、 Discord サーバーまでご連絡ください。GitEvents は進行中の作業であり、特に他のプラットフォームとの統合などでやるべきことが常にたくさんあります。お手伝いしたい場合は、連絡する。
Issue Form は、GitHub ではまだあまり知られていない機能です。通常の Markdown テンプレートの代わりに、 YAML ファイルをフォーム構成で提供できます。
これは構造化された入力を取得するのに非常に優れていますが、「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 サイトで使用できるようになりました。
最新のhttps://cdc.cy Web サイトを使用して、Issues、 README.md
ファイル、および構造化された JSON データで可能なことの境界を探索し、押し広げたいと考えました。その結果にはかなり満足しています。
README.md
または.json
ファイルから取得されます。誰でも編集でき、CMS やアカウントなどは必要ありませんevents
ラベル付きの問題) に基づいています。
これらの機能はすべて、 GraphQL APIを介して、ボディ パーサーで Markdown ファイルを解析することで実現できました。
私はこのコンセプトにしばらく取り組んできましたが、今でも時々形を変えています。ただし、BerlinJS から採用した基本的なアイデアは変わっていません。
これらすべてを構築するには多くの時間とエネルギーがかかり、足りないものがまだたくさんありますが、時間がありません。
これがあなたとあなたのコミュニティに役立つと考え、パズルを組み立てる作業に参加したい場合は、 gitevents Discord サーバー、 GitHub ディスカッション、またはGitHub Issuesのいずれかに直接連絡してください。
キプロスまたはバルセロナにお住まいの場合は、地元の開発者グループに参加してサポートしてください。