Electron 10周年記念 🎉
electron/electron
リポジトリへの最初のコミットは、2013年3月13日に行われました1。
10年後、1192人のユニークな貢献者による27,147件以上のコミットを経て、Electronは現在、デスクトップアプリケーションを構築するための最も人気のあるフレームワークの1つとなっています。この節目は、これまでの道のりを祝い、振り返り、そして学んだことを共有する絶好の機会です。
このプロジェクトに時間と労力を捧げて貢献してくれた皆さんがいなければ、今日の私たちはここにいませんでした。ソースコードのコミットは常に最も目に見える貢献ですが、バグを報告し、ユーザーランドモジュールを保守し、ドキュメントと翻訳を提供し、サイバースペース全体でElectronコミュニティに参加してくれた方々の努力も認めなければなりません。すべての貢献は、メンテナである私たちにとって非常に貴重なものです。
ブログ記事の続きに入る前に:ありがとうございます。❤️
どのようにしてここまで来たのか?
Atom Shellは、GitHubのAtomエディタの基盤として構築され、2014年4月にパブリックベータ版でリリースされました。当時利用可能なウェブベースのデスクトップフレームワーク(node-webkitとChromium Embedded Framework)の代替として、ゼロから構築されました。それは画期的な機能を持っていました:Node.jsとChromiumを組み込むことで、ウェブテクノロジーのための強力なデスクトップランタイムを提供しました。
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リリースの公開(リリースWG)
- ChromiumとNode.jsのアップグレード(アップグレードWG)
- パブリックAPI設計の監督(API WG)
- Electronのセキュリティ維持(セキュリティWG)
- ウェブサイト、ドキュメント、ツールの管理(エコシステムWG)
- コミュニティと企業との連携(アウトリーチWG)
- コミュニティモデレーション (コミュニティ&セーフティ WG)
- ビルドインフラ、メンテナーツール、クラウドサービスの維持管理 (インフラストラクチャ WG)
ガバナンスモデルに移行したのとほぼ同時期に、Electron の所有権も GitHub からOpenJS Foundation に移管されました。元の開発コアチームは現在も Microsoft で勤務していますが、Electron のガバナンスを形成するより大規模なコラボレーターグループの一部に過ぎません。2
このモデルは完璧ではありませんが、世界的なパンデミックと続くマクロ経済の逆風の中でもうまく機能してきました。今後、Electron の2番目の10年を乗り切るためのガバナンス憲章の改訂を計画しています。
詳細については、electron/governance リポジトリをご覧ください!
コミュニティ
オープンソースにおけるコミュニティ部分は困難です。特に、アウトリーチチームが「コミュニティマネージャー」と書かれたコートを着た12人のエンジニアの場合にはなおさらです。とは言え、大規模なオープンソースプロジェクトであるということは、多くのユーザーがいることを意味し、彼らのエネルギーをElectronのユーザーランドエコシステム構築に活用することは、プロジェクトの健全性を維持する上で非常に重要です。
コミュニティプレゼンスを向上させるために、私たちはどのような取り組みを行ってきたのでしょうか?
仮想コミュニティの構築
- 2020年、コミュニティDiscordサーバーを立ち上げました。以前はAtomのフォーラムにセクションがありましたが、メンテナとElectron開発者間のディスカッションや一般的なデバッグのヘルプのための場として、よりインフォーマルなメッセージングプラットフォームを持つことにしました。
- 2021年には、@BlackHole1の協力を得て、Electron Chinaユーザーグループを設立しました。このグループは、中国の急成長するテクノロジーシーンからのユーザーのElectron普及に大きく貢献し、彼らが英語圏以外の空間でアイデアを共有し、Electronについて議論するための場を提供してきました。cnpmによるElectronのナイトリーリリースを中国のnpmミラーでサポートしていただいたことにも感謝いたします。
高い認知度を持つオープンソースプログラムへの参加
- 2019年以来、毎年Hacktoberfestを祝っています。HacktoberfestはDigitalOceanが主催する毎年恒例のオープンソースの祭典であり、毎年数十人の熱心な貢献者がオープンソースソフトウェアに貢献しようと参加しています。
- 2020年には、Google Season of Docsの最初のイテレーションに参加し、@bandantonioと協力して、Electronの新規ユーザーチュートリアルフローを改訂しました。
- 2022年には、初めてGoogle Summer of Codeの学生を指導しました。@aryanshridharは、Electron Fiddleのコアバージョン読み込みロジックのrefactorと、バンドラーのwebpackへの移行という素晴らしい作業を行いました。
あらゆるものを自動化!
現在、Electronのガバナンスには約30人のアクティブなメンテナがいます。そのうち半数未満がフルタイムの貢献者であるため、多くの作業があります。すべてを円滑に実行するための秘訣は何でしょうか?私たちのモットーは、「コンピューターは安いが、人間の時間は高価である」ということです。典型的なエンジニアのやり方として、私たちは生活を楽にするための自動化されたサポートツールのスイートを開発しました。
Not Goma
ElectronのコアコードベースはC++コードの巨大なものであり、ビルド時間は常にバグ修正と新機能のリリース速度を制限する要因でした。2020年、GoogleのGoma分散コンパイラサービス用のカスタムElectron固有のバックエンドであるNot Gomaを展開しました。Not Gomaは、承認されたユーザーのマシンからのコンパイルリクエストを処理し、バックエンドの数百のコアにわたってプロセスを分散します。また、コンパイル結果をキャッシュするため、同じファイルをコンパイルする他のユーザーは、事前にコンパイルされた結果をダウンロードするだけで済みます。
Not Gomaの導入以来、メンテナのコンパイル時間は数時間から数分に短縮されました。貢献者がElectronをコンパイルするための最低限の要件は、安定したインターネット接続になりました!
オープンソース貢献者であれば、Electron Build Toolsでデフォルトで使用可能なNot Gomaの読み取り専用キャッシュを試すこともできます。
継続的ファクター認証
継続的ファクター認証 (CFA)は、npmの2要素認証 (2FA) システムを中心とした自動化レイヤーであり、semantic-releaseと組み合わせて、さまざまな@electron/
npmパッケージの安全で自動化されたリリースを管理します。
semantic-releaseはすでにnpmパッケージの公開プロセスを自動化していますが、2要素認証をオフにするか、この制限を回避する秘密トークンを渡す必要があります。
私たちは、任意のCIジョブにnpm 2FAのタイムベースワンタイムパスワード (TOTP) を配信するCFAを構築し、2要素認証の追加セキュリティを維持しながら、semantic-releaseの自動化を活用できるようにしました。
Slack統合フロントエンドとCFAを使用することで、メンテナは、TOTPジェネレーターが手元にあれば、Slackを使用しているデバイスからパッケージの公開を検証できます。
独自のプロジェクトでCFAを試したい場合は、GitHubリポジトリまたはドキュメントをご覧ください!CircleCIをCIプロバイダーとして使用している場合は、便利なorbを使用して、CFAでプロジェクトをすばやくスキャフォールディングすることもできます。
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のリリースサイクルに同期し、8週間ごとにElectronのメジャーバージョンの新リリースを行い、WebプラットフォームとNode.jsの最新かつ最高の機能をフレームワークに適用しながら、エンタープライズグレードのアプリケーションの安定性とセキュリティを維持していきます。
一般的に、今後の取り組みについて具体的な内容が決まった時点で発表します。今後のリリース、機能、および一般的なプロジェクトのアップデートを最新の状態に保ちたい場合は、ブログをお読みいただき、ソーシャルメディアのプロファイル(TwitterとMastodon)をフォローしてください!
脚注
-
これは実際には、2017年にElectronに吸収され、Git履歴がマージされたelectron-archive/brightrayプロジェクトからの最初のコミットです。しかし、誰が数えているのでしょうか?今日は私たちの誕生日なので、私たちがルールを決めることができます! ↩
-
一般的な誤解とは異なり、ElectronはもはやGitHubやMicrosoftが所有しておらず、現在はOpenJS Foundationの一部です。↩