GitHubの法的チートシートの仕組みと、choosealicense.comをローカルにデプロイする理由
GitHubで新しいリポジトリを作成する際、ライセンス選択フォームに出会ったことがあるでしょう。数回クリックするだけで、プロジェクトに正しい著作権と現在の年を含むLICENSEファイルが生成されます。このロジック、簡潔な説明、アイコンで強調された権利情報がすべてオープンなリポジトリで管理されていることを知っている人は少ないでしょう。
このプロジェクトはシンプルなアイデアから生まれました。開発者は法的な微妙な違いを理解することはめったになく、何ページもの法的文書を読む気も起きません。必要なのは的直接的な答えです:そのコードで何ができ、何ができないか。ウェブサイトはこのニーズに応えており、リポジトリ自体がGitHubのライセンスシステムのバックエンドとして機能しています。
このリポジトリが存在する理由
何よりもまず、これは静的なJekyllウェブサイトです。主な目的は、複雑な法的文書を理解しやすいカテゴリに分解することであり、価値判断を加えることではありません。著者は特定のライセンスを強制しません—自分自身の選択のためのツールを提供しています。
ウェブサイトの運営に加えて、リポジトリのコンテンツは定期的にRuby gemのLicenseeにインポートされます。このライブラリはGitHub自体を動かしており、プロジェクト内のライセンスタイプを特定し、リポジトリインターフェースにステータス表示し、GitHub APIを通じてデータを提供します。
ライセンスの内部構造
サイトと統合のすべての魔法は、各ドキュメントの構造化された説明に基づいています。フォルダにはMarkdownファイルが含まれています。各ライセンスにはYAMLヘッダー(フロントマター)と完全な法的テキストがあります。
YAMLヘッダーはメタデータを定義します:
ルールは3つのカテゴリに分類されます:許可、条件、制限。やのような個別のアトミックルールの完全な説明は、別のファイルに保管されています。新しい条件を追加する必要がある場合は、で一度説明し、ライセンスファイルで参照します。
新しいリポジトリを作成する際、GitHubはテンプレートを取得し、組み込み変数を実際の値に置き換えます:
- 作成者の名前
- 現在の年
- リポジトリ名
- プロジェクトへのリンク
自動ビルドと多言語サポート
サイトはJekyllプラグインを通じて、インターフェースの翻訳と簡単な注釈をサポートしています。実際の法的ライセンステキストは、元の文書の法的意味を歪めることを避けるため、意図的に翻訳されていません。
はGitHub Pagesの標準サポートプラグインリストに含まれていないため、デプロイはGitHub Actionsを通じて処理されます。ワークフローはサイトをビルドし、完成した静的バンドルをブランチに公開します。
プロジェクトをローカルで実行する
数分でサイトのローカルコピーをデプロイできます。コンパイラとRubyが必要です。
macOSでは、Homebrewで依存関係をインストールします:
UbuntuまたはDebianでは、標準のパッケージマネージャーで十分です:
その後、リポジトリをサブモジュールと一緒にクローンし、ビルドスクリプトを実行します:
サイトはで確認できます。内のファイルを編集すると、ブラウザで即座に結果を確認できます。
プロジェクトでリポジトリを活用する
プロジェクトのローカルビルドまたはフォークは、さまざまな状況で便利です:
- 内部の法的文書データベースの作成。大企業では、サードパーティコードの使用に関する独自のルールを持つことがよくあります。リポジトリをフォークし、企業の要件を追加して、内部リファレンスガイドとしてデプロイできます。
- CLIユーティリティでのライセンス生成。独自のプロジェクトテンプレートジェネレーターを作成している場合、変数の自動置換を備えた検証済みLICENSEテキストの便利なソースになります。
- 自動コードベース監査。内のルールファイルに基づいて、CI/CDパイプラインでサードパーティの依存関係をチェックするシンプルなリンターを簡単に作成できます。
- 多言語Jekyllサイトの建築を学ぶ。プラグインを使用したカスタムビルドパイプラインは、独自の静的プロジェクトの優れた例になります。
まとめ
このリポジトリは、面倒な法的文書を便利なデータ構造に変換する優れた例です。このプロジェクトは、ユーザーフレンドリーなWebインターフェース、機械可読なメタデータ、自動置換メカニズムを組み合わせています。独自のプロジェクトでライセンスを整理したり、チームのための便利なリファレンスを作成する必要がある場合、このサイトのソースコードは優れた出発点になります。
関連プロジェクト