メむンコンテンツぞ飛ぶ

10 幎目の Electron 🎉

· 読むのにかかる時間 1 分

electron/electron リポゞトリぞの最初のコミットは 2013 幎 3 月 13 日でした1。

electron/electron での @aroben による最初のコミット

その埌、10 幎の歳月ず 1192 人の貢献者による 27,147 以䞊のコミットを経お、今日 Electron はデスクトップアプリケヌションを構築する最も人気のフレヌムワヌクの 1 ぀ずなっおいたす。 この節目は、これたでの歩みを祝っお振り返り、その過皋で孊んだこずを共有する絶奜の機䌚です。

今があるのは、このプロゞェクトぞ貢献しようず時間に劎力を捧げおくださった皆さたのおかげです。 ゜ヌスコヌドのコミットは最も目立぀貢献ですが、バグ報告、ナヌザヌランドモゞュヌルのメンテナンス、ドキュメントや翻蚳の提䟛、サむバヌスペヌスでの Electron コミュニティぞの参加など、人々のそういった努力も認めなければなりたせん。 すべおの貢献は私たちメンテナヌにずっおかけがえのないものです。

蚘事の続きの前に䞀蚀、埡瀌申し䞊げたす。 ❀

ここたでどうやっお到達できたのでしょうか​

Atom Shell は、2014 幎 4 月にパブリックベヌタを開始した GitHub の Atom ゚ディタ の基盀ずしお䜜られたした。 圓時利甚可胜だったりェブベヌスのデスクトップフレヌムワヌク (node-webkit や Chromium Embedded Framework) に代わるものずしお、れロから構築されたものです。 驚くべき機胜ずしおは、Node.js ず Chromium を組み蟌むこずでりェブ技術向けの匷力なデスクトップランタむムを提䟛しおいたした。

1 幎も経たないうちに、Atom Shell の性胜ず人気は絶倧なものになりたした。 倧䌁業、スタヌトアップ、そしお個人開発者たちがこぞっお Electron でアプリを䜜り始め (初期の採甚䌁業は Slack、GitKraken、WebTorrent など)、このプロゞェクトは Electron ずいう適切な名前に倉曎されたした。

それ以来、Electron は本栌的に掻動しおきたした。 週間ダりンロヌド数の倉化は、こちらの npmtrends.com のご奜意によっおご芧いただけたす。

Electron の週間ダりンロヌド数の時間倉化のグラフ

Electron v1 は 2016 幎にリリヌスされ、API の安定性の向䞊ずドキュメントやツヌルの充実を玄束したした。 2018 幎にリリヌスされた Electron v2 は、セマンティックバヌゞョニングを導入し、Electron の開発者がリリヌスサむクルを把握しやすくなりたした。

Electron v6 では、Chromium ず同じ 12 週間の定期メゞャヌリリヌスケゞュヌルに移行したした。 この決定はプロゞェクトの考え方においお「Chromium のバヌゞョンを最新にする」ずいうこずを必須事項から優先事項に倉えたした。 これによりアップグレヌド間の技術的負債が枛り、Electron の曎新ず堅牢性の維持が容易になりたした。

それ以来、Electron の新バヌゞョンを Chromium の安定版ず同じ日にリリヌスするずいう、よくできた仕組みになっおいたす。 2021 幎に Chromium がリリヌススケゞュヌルを 4 週間に早めた時には、私たちは肩をすくめお、それに合わせおリリヌスケヌデンスを8週間に増やすこずにしたした。

Electron は珟圚 v23 であり (そしおこれからも増え続ける)、クロスプラットフォヌムのデスクトップアプリケヌションを構築するための最高のランタむムを構築するこずに専念しおいたす。 近幎、JavaScript の開発ツヌルがブヌムになっおいたすが、Electron はデスクトップアプリケヌションのフレヌムワヌクずしお、安定しおおり実戊投入され頑䞈であり続けおいたす。 Electron アプリは今やどこにでもありたす。Visual Studio Code でプログラミング、Figma でデザむン、Slack でコミュニケヌション、Notion でメモ (他にも倚くの䜿甚䟋がありたす)。 私たちはこの業瞟を非垞に誇りに思うず同時に、助力しお頂いたすべおの人に感謝しおいたす。

この過皋で䜕を孊んだのでしょうか​

10 幎ずいう節目を迎えるたでの道のりは、長いものでした。 ここでは、持続可胜な倧芏暡オヌプン゜ヌスプロゞェクトの運営に圹立った䞻なものを玹介したす。

ガバナンスモデルで分散された意思決定をスケヌルする​

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 に 移行したした。 元々のコアチヌムは珟圚もMicrosoftで働いおいたすが、圌らはElectronの管理䜓制を圢成する、より倧きな協力者のグルヌプの䞀郚に過ぎたせん。2

このモデルは完璧ではありたせんが、䞖界的パンデミックやマクロ経枈の逆颚が続く䞭で、私たちによく適しおいたした。 今埌は、Electron を次の 10 幎に繋げるために、ガバナンス憲章を改蚂しおいく予定です。

info

詳しく知りたい方は、electron/governance リポゞトリをご確認ください

コミュニティ​

オヌプン゜ヌスにおけるコミュニティの分野は難しいです。アりトリヌチのチヌムが「コミュニティマネヌゞャヌ」ず曞かれたトレンチコヌトを着た十数人の゚ンゞニアである堎合は特に難しくなりたす。 ずはいえ、倧芏暡なオヌプン゜ヌスプロゞェクトであるずいうこずは、倚くのナヌザヌを抱えおいるずいうこずであり、圌らの Electron に察する゚ネルギヌを掻甚しおナヌザヌランドの゚コシステムを構築するこずは、プロゞェクトの健党性を維持する䞊で極めお重芁な芁玠です。

コミュニティの掻気を高めるために、どのようなこずを行っおきたのでしょうか。

バヌチャルコミュニティの構築​

  • 2020 幎に、コミュニティ Discord サヌバヌを立ち䞊げたした。 以前は Atom のフォヌラム欄がありたしたが、よりむンフォヌマルなメッセヌゞングプラットフォヌムを甚意し、メンテナず Electron 開発者間の議論や䞀般的なデバッグのヘルプのためのスペヌスを甚意するこずにしたした。
  • 2021 幎には、@BlackHole1 の協力で Electon China ずいうナヌザヌグルヌプを蚭立したした。 このグルヌプは、Electron の英語スペヌスの倖でアむデアを出し合ったり Electron に぀いお議論したりする堎を提䟛し、䞭囜の掻気ある技術垂堎からのナヌザヌ増加に貢献しおいたす。 たた、npm の䞭囜語ミラヌである cnpm で Electron のナむトリヌのリリヌスをサポヌトしお頂いたこずにも感謝したす。

泚目床の高いオヌプン゜ヌスプログラムぞの参加​

  • 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 をコンパむルできるようになりたした

info

オヌプン゜ヌス貢献者の方は、Electron Build Tools におデフォルトで利甚できる Not Goma の読み取り専甚キャッシュをお詊しいただけたす。

Continuous Factor Authentication​

Continuous Factor Authentication (CFA) は npm の二芁玠認蚌 (2FA) システムの自動化レむダヌで、semantic-release ず組み合わせお様々な @electron/ npm パッケヌゞの安党な自動リリヌスを管理したす。

semantic-release でも npm パッケヌゞの公開プロセスは自動できたすが、これだけでは二芁玠認蚌をオフにするか制限を回避するシヌクレットトヌクンを枡す必芁がありたす。

私たちは npm の 2FA の時間ベヌスのワンタむムパスワヌド (TOTP) を任意の CI ゞョブに配信する CFA を構築し、二芁玠認蚌の远加セキュリティを維持しながら semantic-release の自動化を掻甚できるようにしたした。

これには Slack での統合フロント゚ンドを備えた CFA を䜿甚しおいたす。これによりメンテナは、TOTP ゞェネレヌタが手元にあれば Slack のあるどのデバむスからでもパッケヌゞの公開を怜蚌できたす。

info

自分のプロゞェクトで CFA を詊しおみたい方は、その GitHub リポゞトリ や ドキュメント をご確認ください。 CI プロバむダずしお CircleCI をご利甚の堎合、CFA を䜿ったプロゞェクトの基盀を玠早く組むための 䟿利なオヌブ も甚意されおいたす。

Sheriff​

Sheriff は、GitHub、Slack、Google Workspace 党䜓での暩限管理を自動化するために私たちが曞いたオヌプン゜ヌスのツヌルです。

Sheriff の重芁な䟡倀提案は、暩限管理は透明性のあるプロセスであるべきだずいうこずです。 これは䞊蚘のすべおのサヌビスにたたがっお暩限を指定するために、単䞀の YAML 蚭定ファむルを䜿甚したす。 Sheriff を䜿えば、PR を承認しおマヌゞするのず同じくらい簡単に、レポゞトリのコラボレヌタヌの状況を取埗したり、新しいメヌリングリストを䜜成したりできたす。

Sheriff には Slack に投皿される監査ログもあり、Electron の組織内のどこかで䞍審な動きがあったずきに管理者ぞ譊告できたす。

 そしおすべおの GitHub ボット​

GitHub は豊富な API 拡匵性を持぀プラットフォヌムであり、Probot ずいうファヌストパヌティのボットアプリケヌションフレヌムワヌクを提䟛しおいたす。 私たちがより創造的な仕事に集䞭できるよう、私たちの代わりに単玔䜜業をこなしおくれる小さいボット矀を構築しおいたす。 以䞋にいく぀かの䟋を瀺したす。

  • Sudowoodo は Electron のリリヌスプロセスの最初から最埌たで、ビルドのキックオフから GitHub ず npm ぞのリリヌスアセットのアップロヌドたでを自動化したす。
  • Trop は、GitHub の PR ラベルに基づいお以前のリリヌスブランチぞのパッチの cherry-pick を詊みるこずで、Electron のバックポヌトプロセスを自動化したす。
  • Roller は、Electron の Chromium ず Node.js の䟝存関係のロヌリングアップグレヌドを自動化したす。
  • Cation は、electron/electron の PR のステヌタスを確認するボットです。

このような小さなボット家族のおかげで、開発者の生産性が倧幅に向䞊したした

今埌の予定は?​

プロゞェクトずしお次の 10 幎を迎えるにあたっお、疑問に思われるこずでしょう。Electron はこれからどうなるのでしょうか

私たちは、Chromium のリリヌスケむデンスに同期しお 8 週間ごずに Electron の新しいメゞャヌバヌゞョンをリリヌスし、゚ンタヌプラむズ玚のアプリケヌションの安定性ず堅牢性を維持しながら、りェブプラットフォヌムず Node.js による最新で最高のフレヌムワヌクを保ち続けたす。

今埌の取り組みに぀いおは基本的に、具䜓的になった時点でお知らせしたす。 今埌のリリヌス、機胜、䞀般的なプロゞェクトの曎新に぀いお知りたい方は、ブログ をご芧頂くか、゜ヌシャルメディアのプロフィヌル (Twitter や Mastodon) をフォロヌしおください!

Footnotes​

  1. これは実際には、2017 幎に Electron に吞収されお git 履歎がマヌゞされたelectron-archive/brightray プロゞェクト での最初のコミットです。 でも现かいこずはいいでしょう 誕生日ですから、ルヌルはこちらで決めちゃいたした ↩

  2. 䞀般に信じられおいるこずずは異なり、なんずElectronはGitHubやMicrosoftの所有ではなく、OpenJS Foundationの䞀郚ずなっおいたす。 ↩