オープンソース プロジェクトの構築
以下のセクションに沿って、CircleCI 上でのオープンソース プロジェクトのビルドに関するヒントとベスト プラクティスについて説明します。
概要
オープンソース コミュニティをサポートする目的で、GitHub または Bitbucket 上の組織には、オープンソース プロジェクト用に 1 週間あたり 100,000 クレジットが無料で提供されます。 このクレジットは Linux の Medium リソースで使用可能です。 各組織で最大 4 件のジョブを同時実行できます。
メモ: macOS 上のオープンソース プロジェクトをビルドする場合は、これらの追加コンテナを有効にする方法について billing@circleci.com にお問い合わせください。
セキュリティ
オープンソースは開放型の活動であり、機密情報を「開放」しないように注意が必要です。
- リポジトリをパブリックにすると、CircleCI プロジェクトとそのビルド ログもパブリックになります。 表示対象として選択する情報に注意してください。
- CircleCI アプリケーション内に設定される環境変数は、一般には公開されず、明示的に有効にされない限りフォークされた PR に共有されることもありません。
オープンソース プロジェクトの機能と設定
以下の機能と設定は、オープンソース プロジェクトにおいて特に便利です。
プライベート環境変数
多くのプロジェクトでは、API トークン、SSH キー、またはパスワードが必要です。 プライベート環境変数を使用すると、プロジェクトがパブリックの場合でもシークレットを安全に格納できます。 詳細については、「プロジェクト内で環境変数を設定する」を参照してください。
プル リクエストのみをビルドする
CircleCI はデフォルトですべてのブランチのすべてのコミットをビルドします。 この動作は、オープンソース プロジェクトで使用するには活動的すぎることがあり、場合によってはプライベート プロジェクトよりもきわめて多くのコミットが存在することになります。 この設定を変更するには、プロジェクトの [Advanced Settings (詳細設定)] に移動して、[Only build pull requests (プル リクエストのみビルド)] オプションをオンに設定します。
メモ: このオプションが有効であっても、CircleCI はプロジェクトのデフォルトのブランチからはすべてのコミットをビルドします。
フォークされたリポジトリからプル リクエストをビルドする
多くのオープンソース プロジェクトは、フォークされたリポジトリから PR を受け入れます。 これらの PR をビルドすると、手動で変更をレビューする前にバグを捕捉することができるので、効果的な方法と言えます。
CircleCI はデフォルトで、フォークされたリポジトリからの PR をビルドしません。 この設定を変更するには、プロジェクトの [Advanced Settings (詳細設定)] に移動して、[Build forked pull requests (フォークされたプル リクエストをビルド)] オプションをオンに設定します。
フォークされたプル リクエストからのビルドにシークレットを渡す
制限を設定していないビルドを親リポジトリ内で実行することは、場合によっては危険です。 プロジェクトにはしばしば機密情報が含まれていますが、ビルドをトリガーするコードをプッシュするユーザーならだれでも、この情報を自由に入手できます。
オープンソース プロジェクトの場合、CircleCI のデフォルトでは、フォークされた PR からのビルドにシークレットを渡さず、以下の 4 種類の構成データを隠します。
-
アプリケーションを通して設定される環境変数
-
ビルド中に任意のホストにアクセスするために CircleCI に追加した、パスフレーズのないプライベート SSH キー
-
AWS 権限および設定ファイル
メモ: シークレットを必要とするオープンソース プロジェクトのフォークされた PR ビルドは、この設定を有効にしない限り CircleCI 上で正しく動作しません。
プロジェクトをフォークし、PR をオープンする任意のユーザーとシークレットを共有しても問題がない場合は、[Pass secrets to builds from forked pull requests (フォークされたプル リクエストからのビルドにシークレットを渡す)] オプションを有効にできます。 プロジェクトの [Advanced Settings (詳細設定)] で [Pass secrets to builds from forked pull requests (フォークされたプル リクエストからビルドにシークレットを渡す)] オプションをオンに設定します。
キャッシュ
キャッシュは、PR の GitHub リポジトリに基づいて分離されます。 CircleCI は、フォーク PR の生成元の GitHub リポジトリ ID を使用してキャッシュを識別します。
- 同じフォーク リポジトリからの PR は、キャッシュを共有します (前述のように、これには master リポジトリ内の PR と master によるキャッシュの共有が含まれます)。
- それぞれ異なるフォーク リポジトリ内にある 2 つの PR は、別々のキャッシュを持ちます。
現在、キャッシュの自動入力は行われていません。この最適化がまだ優先順位リストの上位に入っていないためです。
オープンソース プロジェクトの例
CircleCI 上でビルドされたさまざまな規模のプロジェクトを以下にいくつかご紹介します。
- React - Facebook の JavaScript ベースの React は、CircleCI (および他の CI ツール) でビルドされています。
- React Native - JavaScript と React を使用してネイティブ モバイル アプリケーションをビルドします。
- Flow - JavaScript に静的な型指定を追加して、開発者の生産性とコードの品質を向上させます。
- Relay - データ駆動型の React アプリケーションをビルドするための JavaScript フレームワーク。
- Vue - Vue.js は、Web 上で UI をビルドするための漸進的な JavaScript フレームワークであり、段階的に採用できます。
- Storybook - 対話型 UI コンポーネントの開発とテストを行います (React、React Native、Vue、Angular、Ember)。
- Electron - JavaScript、HTML、および CSS でクロスプラットフォームのデスクトップ アプリケーションをビルドします。
- Angular - ブラウザーおよびデスクトップ Web アプリケーションをビルドするためのフレームワーク。
- Apollo - GraphQL 用の柔軟なオープンソース ツールをビルドしているコミュニティ。
- PyTorch - データ操作および機械学習のプラットフォーム。
- Calypso - WordPress.com を活用するための次世代 Web アプリケーション。
- fastlane - Android および iOS 用の自動ビルド ツール。
- Yarn - npm に代わるツール。
関連項目
「パブリック リポジトリの例」では、パブリックおよびオープンソースのプロジェクト構成に関する各種のリンクが、CircleCI の機能とプログラミング言語ごとに紹介されています。