electron/electron
リポジトリへの最初のコミットは、2013年3月13日1でした。

10年と1192人のユニークなコントリビューターによる27,147件以上のコミットを経て、Electronは今日、デスクトップアプリケーションを構築するための最も人気のあるフレームワークの1つになりました。このマイルストーンは、これまでの道のりを祝い、振り返り、その過程で学んだことを共有する絶好の機会です。
プロジェクトに貢献するために時間と労力を費やしてくれた皆さんなしでは、今日ここにいることはなかったでしょう。ソースコードのコミットは常に最も目に見える貢献ですが、バグを報告し、ユーザーランドモジュールを保守し、ドキュメントと翻訳を提供し、サイバースペース全体でElectronコミュニティに参加している人々の努力も認めなければなりません。メンテナーとして、すべての貢献は私たちにとって非常に貴重です。
ブログ記事の続きに進む前に、感謝します。❤️
私たちはどのようにしてここにたどり着いたのか?
Atom Shell は、2014年4月にパブリックベータ版がリリースされたGitHubの Atomエディター のバックボーンとして構築されました。当時利用可能だったWebベースのデスクトップフレームワーク(node-webkitとChromium Embedded Framework)の代替として、ゼロから構築されました。キラー機能がありました。それは、Node.jsとChromiumを埋め込み、Webテクノロジーに強力なデスクトップランタイムを提供することです。
1年以内に、Atom Shell は機能と人気が大幅に向上し始めました。大企業、スタートアップ、個人開発者も同様に、それを使ってアプリを構築し始めていました(初期の採用者には、Slack、GitKraken、WebTorrent などがあります)。そして、プロジェクトは適切に Electron に名前が変更されました。
それ以来、Electron は走り出し、止まることはありませんでした。これは、npmtrends.com の提供による、時間の経過に伴う週ごとのダウンロード数です。

Electron v1 は 2016 年にリリースされ、API の安定性の向上とドキュメントとツールの改善を約束しました。Electron v2 は 2018 年にリリースされ、セマンティックバージョニングが導入され、Electron 開発者がリリースサイクルを簡単に追跡できるようになりました。
Electron v6 までに、Chromium に合わせて、12 週ごとの定期的なメジャーリリースサイクルに移行しました。この決定は、プロジェクトのメンタリティの変化であり、「最新の Chromium バージョンを搭載すること」を、あって嬉しいものから優先事項へと変えました。これにより、アップグレード間の技術的負債が減少し、Electron の更新とセキュリティ保護を維持することが容易になりました。
それ以来、私たちは順調に動き、すべてのChromiumの安定版と同じ日に新しいElectronバージョンをリリースしています。2021年にChromiumがリリーススケジュールを4週間に短縮したときまでに、私たちは肩をすくめて、それに応じてリリースサイクルを8週間に増やすことができました。
私たちは現在、Electron v23(そして今後も増え続ける)を使用しており、クロスプラットフォームのデスクトップアプリケーションを構築するための最高のランタイムを構築することに尽力しています。近年、JavaScript開発者ツールが急増しているにもかかわらず、Electronはデスクトップアプリフレームワークの分野において、安定した、実戦でテスト済みの確固たる存在であり続けています。Electronアプリは今日ではどこにでも存在します。Visual Studio Codeでプログラミングをしたり、Figmaでデザインをしたり、Slackでコミュニケーションをとったり、Notionでメモをとったりすることができます(その他多くのユースケースがあります)。私たちはこの成果を非常に誇りに思っており、それを可能にしてくれたすべての人々に感謝しています。
ここまでの道のりで何を学んだでしょうか?
10年という節目を迎えるまでの道のりは長く、曲がりくねったものでした。持続可能な大規模オープンソースプロジェクトを運営する上で役立った重要な点をいくつか紹介します。
ガバナンスモデルによる分散型意思決定の拡大
私たちが克服しなければならなかった課題の1つは、Electronが最初に人気を博した後、プロジェクトの長期的な方向性をどのように扱うかということでした。企業、国、タイムゾーンに分散した数十人のエンジニアのチームとして、どのように対処すべきでしょうか?
初期の頃、Electronのメンテナーグループは非公式な連携に頼っていました。これは小規模なプロジェクトでは迅速で軽量ですが、より広範なコラボレーションには対応できません。2019年、私たちは異なるワーキンググループが正式な責任領域を持つガバナンスモデルに移行しました。これは、プロセスを合理化し、プロジェクトの所有権の一部を特定のメンテナーに割り当てる上で非常に役立ってきました。各ワーキンググループ(WG)は現在、何を担当しているのでしょうか?
- Electronのリリースを完了させる(Releases WG)
- ChromiumとNode.jsのアップグレード(Upgrades WG)
- パブリックAPIの設計を監督する(API WG)
- Electronのセキュリティを維持する(Security WG)
- ウェブサイト、ドキュメント、ツールを運営する(Ecosystem WG)
- コミュニティおよび企業へのアウトリーチ(Outreach WG)
- コミュニティのモデレーション(Community & Safety WG)
- ビルドインフラストラクチャ、メンテナーツール、クラウドサービスを維持する(Infrastructure WG)
ガバナンスモデルに移行したのとほぼ同時期に、私たちはElectronの所有権をGitHubからOpenJS Foundationに移管しました。元のコアチームは現在もマイクロソフトに在籍していますが、彼らはElectronガバナンスを形成するより大きな協力者グループの一部にすぎません。2
このモデルは完璧ではありませんが、世界的なパンデミックと進行中のマクロ経済の逆風の中で、私たちによく適合してきました。今後は、Electronの20年目を導くために、ガバナンス憲章を刷新する予定です。
オープンソースのコミュニティの部分は難しく、特にアウトリーチチームが「コミュニティマネージャー」と書かれたトレンチコートを着た12人のエンジニアである場合はなおさらです。とはいえ、大規模なオープンソースプロジェクトであるということは、多くのユーザーがいることを意味し、Electronのためにユーザーランドのエコシステムを構築するために彼らのエネルギーを活用することは、プロジェクトの健全性を維持する上で非常に重要です。
コミュニティでの存在感を高めるために、私たちはどのような活動をしてきたのでしょうか?
バーチャルコミュニティの構築
- 2020年、私たちはコミュニティDiscordサーバーを立ち上げました。以前はAtomのフォーラムにセクションがありましたが、メンテナーとElectron開発者間の議論や一般的なデバッグヘルプのためのスペースを設けるために、より非公式なメッセージングプラットフォームを導入することにしました。
- 2021年、私たちは@BlackHole1の協力を得て、Electron Chinaユーザーグループを設立しました。このグループは、中国の急成長する技術シーンからのユーザーのElectronの成長に不可欠な役割を果たしており、アイデアを共同で検討したり、英語圏以外の場所でElectronについて話し合ったりするためのスペースを提供しています。また、npmの中国語ミラーでElectronのナイトリーリリースをサポートしてくれたcnpmにも感謝します。
注目度の高いオープンソースプログラムへの参加
- 私たちは2019年から毎年、Hacktoberfestを祝っています。Hacktoberfestは、DigitalOceanが主催する毎年恒例のオープンソースの祭典であり、毎年、オープンソースソフトウェアに足跡を残そうと熱心な貢献者が多数集まります。
- 2020年、私たちはGoogle Season of Docsの初期の反復に参加し、@bandantonioと協力してElectronの新規ユーザーチュートリアルの流れを再構築しました。
- 2022年、私たちは初めてGoogle Summer of Codeの学生を指導しました。@aryanshridharは、Electron Fiddleのコアバージョン読み込みロジックのリファクタリングと、バンドラーをwebpackに移行するという素晴らしい仕事をしました。
すべてを自動化!
今日、Electronガバナンスには約30人のアクティブなメンテナーがいます。私たちのうち、フルタイムの貢献者は半分以下であり、多くの仕事が残されていることを意味します。すべてをスムーズに稼働させるための私たちの秘訣は何でしょうか?私たちのモットーは、コンピューターは安価であり、人間の時間は高価であるということです。典型的なエンジニアのように、私たちは自分たちの生活を楽にするために、自動化されたサポートツール群を開発しました。
Not Goma
ElectronのコアコードベースはC++コードの巨大な塊であり、ビルド時間は、バグ修正や新機能をどれだけ早くリリースできるかを制限する要因となっていました。2020年、私たちはGoogleのGoma分散コンパイラサービスのためのカスタムのElectron固有のバックエンドであるNot Gomaを導入しました。Not Gomaは、認証されたユーザーのマシンからのコンパイル要求を処理し、バックエンドの数百のコアにプロセスを分散します。また、コンパイル結果をキャッシュするため、同じファイルをコンパイルする他の人は、コンパイル済みの結果をダウンロードするだけで済みます。
Not Gomaの導入以来、メンテナーのコンパイル時間は数時間から数分に短縮されました。安定したインターネット接続が、貢献者がElectronをコンパイルするための最低限の要件となりました!
継続的二要素認証
継続的二要素認証(CFA)は、npmの二要素認証(2FA)システムの周辺の自動化レイヤーであり、semantic-releaseと組み合わせて、さまざまな@electron/
npmパッケージの安全かつ自動化されたリリースを管理します。
semantic-releaseはすでにnpmパッケージの公開プロセスを自動化していますが、二要素認証をオフにしたり、この制限をバイパスする秘密トークンを渡したりする必要があります。
私たちは、semantic-releaseの自動化を活用しながら、二要素認証の追加のセキュリティを維持できるように、npm 2FAのタイムベースワンタイムパスワード(TOTP)を任意のCIジョブに配信するためにCFAを構築しました。
私たちはCFAをSlack統合フロントエンドで使用しており、メンテナーはTOTPジェネレーターを手元に持っていれば、Slackを使用できる任意のデバイスからパッケージの公開を検証できます。
自分のプロジェクトでCFAを試してみたい場合は、GitHubリポジトリまたはドキュメントを確認してください!CircleCIをCIプロバイダーとして使用している場合は、CFAでプロジェクトを迅速に足場を固めるための便利なorbもあります。
Sheriff
Sheriffは、GitHub、Slack、Google Workspace全体での権限の管理を自動化するために私たちが作成したオープンソースツールです。
Sheriffの主な価値提案は、権限管理が透明なプロセスであるべきだということです。上記にリストされたすべてのサービス全体で権限を指定する単一のYAML設定ファイルを使用します。Sheriffを使用すると、リポジトリで共同作成者のステータスを取得したり、新しいメーリングリストを作成したりすることが、PRを承認してマージするのと同じくらい簡単になります。
Sheriffには、Slackに投稿される監査ログもあり、Electron組織内のどこかで不審なアクティビティが発生した場合に管理者に警告します。
…そしてすべてのGitHubボット
GitHubは、豊富なAPI拡張性と、Probotというファーストパーティのボットアプリケーションフレームワークを備えたプラットフォームです。私たちはより創造的な仕事に集中できるように、汚い仕事を代わりに行ってくれる小さなボットのスイートを構築しました。以下にいくつかの例を示します。
- Sudowoodoは、ビルドの開始からGitHubおよびnpmへのリリースアセットのアップロードまで、Electronのリリースプロセスを最初から最後まで自動化します。
- Tropは、GitHub PRラベルに基づいて、以前のリリースブランチへのパッチのcherry-pickを試行することにより、Electronのバックポートプロセスを自動化します。
- Rollerは、ElectronのChromiumとNode.jsの依存関係のローリングアップグレードを自動化します。
- Cationは、electron/electron PRのステータスチェックボットです。
全体として、私たちの小さなボットファミリーは、開発者の生産性を大幅に向上させてくれました!
次は?
プロジェクトとして2回目の10年を迎えるにあたり、Electronの次はどうなるのか?と疑問に思われるかもしれません。
私たちは、Chromiumのリリース頻度に合わせて、Electronの新しいメジャーバージョンを8週間ごとにリリースし、エンタープライズグレードのアプリケーションの安定性とセキュリティを維持しながら、最新かつ最高のWebプラットフォームとNode.jsでフレームワークを最新の状態に保ちます。
通常、今後のイニシアチブに関するニュースは、具体的なものになった時点で発表します。今後のリリース、機能、および一般的なプロジェクトの最新情報を知りたい場合は、ブログを読んだり、ソーシャルメディアプロファイル(TwitterおよびMastodon)をフォローしてください!