Technology

GitHub APIで社会・市民分野のオープンソース参加課題を一覧化

この記事のポイント

  1. 実現したこと

    社会的インパクトやcivic techのオープンソースプロジェクトから、参加候補となるラベル付き課題を一覧で探せる。

  2. 実現の仕組み

    登録したリポジトリのパスと抽出対象ラベルを使ってGitHub APIを照会し、表示用JSONを生成する。

  3. 得られた結果

    取得した課題情報がgenerated.jsonとなり、静的サイトの表示データとして読み込まれる。

  4. 従来との違い

    一般のオープンソースを横断する掲載範囲から、社会的インパクトやcivic techに関わり、文書と更新条件を満たすリポジトリへ対象を絞った。

社会的インパクトやcivic techのリポジトリから参加課題を抽出し静的サイト用データへ変換する流れを表した編集イラスト
AI生成画像

登録した社会的インパクトやcivic techのリポジトリからラベル付き課題を取得し、静的サイト用のJSONへ変換する。参加者は分野と掲載条件で選ばれたオープンソースの貢献候補を一覧から探せる。

社会や市民生活に関わる参加課題を集約

GitHubが公開するオープンソースサイトのFor Good First Issueは、社会的インパクトまたはcivic techに関わるプロジェクトを掲載対象とする。各プロジェクトから、Help WantedまたはGood First Issueのラベルが付いた課題を集め、参加候補として一覧表示する。

対象分野と課題ラベルを組み合わせることで、利用者は社会や市民生活に関係する貢献先を同じ場所で探せる。For Good First Issueは、こうしたプロジェクトへ貢献する際の参加障壁を下げることを目的としている。

分野と参加文書で掲載対象を選別

掲載候補は、社会的インパクトまたはcivic techに関わり、取り組む持続可能な開発目標をリポジトリの説明に記載する必要がある。初心者向けのラベルを付けることも望ましい条件とされている。

参加前に必要な情報については、詳細な設定手順を含むREADME.mdと、参加指針を含むCONTRIBUTING.mdが求められる。保守状況の条件は直近1カ月未満の更新であり、分野への適合だけでなく、参加準備と継続的な活動も選別に使われる。

登録パスとラベルから表示用JSONを生成

掲載するリポジトリのパスは、登録ファイルのhappycommits.jsonへ追加する。このファイルにはリポジトリごとの抽出対象ラベルも定義され、取得した課題を絞り込む条件になる。

生成スクリプトのgenerate.tsは、登録済みリポジトリについてGitHub APIへ問い合わせ、取得した課題情報からgenerated.jsonを生成する。生成処理の時点で掲載条件を満たさないリポジトリは、happycommits.jsonから自動的に削除される。

生成済みデータを静的サイトへ接続

静的サイトは、生成されたgenerated.jsonを表示データとして読み込む。サイト本体はNext.js、React、TypeScriptで構成され、APIからの取得処理とブラウザ上の一覧表示が生成済みJSONを介して分離されている。

この構成では、ウェブページを表示するたびに課題を直接取得するのではなく、事前に生成したデータを入力として利用する。リポジトリに含まれるgenerated.jsonはダミーデータとしても使えるため、最新情報を取得しなくても表示部分を動かせる。

認証トークンで課題データを更新

最新の課題情報を取得する場合は、有効なGitHub Personal Access Tokenを環境変数GH_PERSONAL_ACCESS_TOKENに設定し、npm run prebuildを実行する。この処理がGitHub APIへの問い合わせと表示用データの生成を担う。

ローカル開発では、npm installで依存関係を導入した後、npm run devで開発サーバーを起動する。最新データが必要な場合と、同梱されたダミーデータで表示を確認する場合を分けて作業できる。