GitHub Desktopのビルド環境作成について - yasuking0304/desktop GitHub Wiki

This site is only available in Japanese.


開発動作環境

Windows版

Windows 10(22H2)以降 64bitのみ 最低RAM 8GB以上

MacOS版

MacOS Gig Sur以降 最低RAM 8GB以上

Linux版

Arch Linuxとその派生、Debianとその派生、Ubuntu22以降 64bitのみ 最低RAM 8GB以上

node.jsのインストール

※注意 2024年1月現在、node.js(最新版)はバージョン21で、GiHub Desktop 開発環境は3.3.7 beta 2からバージョン20までが対象になり、反面バージョン18未満は非対象になった。

このため、node.jsを最低でもバージョン18にアップグレード、もしくはバージョン21のLTS版を導入している場合ダウングレードが必要となる。

一番簡単なのは、npmからnをインストールして任意のnode.jsを導入する方法。以下にコマンドを記載しておく(macとLinuxで有効)。

sudo npm install -g n
n ls-remote
sudo n 18.19.0

Windowsでは n が使えないので、公式ページからLTS版をダウンロードするか、下記ページを開き、x64 msiインストーラを選択してダウンロードして、実行

https://nodejs.org/download/release/v18.19.0/

Visual Studio Code、GitHub Desktop のインストール

VS Codeの拡張機能のおすすめは以下の通り

  • Japanese Language Pack for Visual Studio Code
  • Markdown Preview Mermaid Support
  • ESLint
  • Sort lines

Yarnのインストール

npmからのインストールが簡単だと思う

sudo npm yarn install -g

なお、Macで

xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at:

のようなエラーが出た場合、xcodeのバージョンが古いので最新にする必要がある(xcodeの新規インストールは2~3時間かかる場合もあるので注意)

xcode-select --install

このリポジトリをGitHub Desktopを使ってクローンする

  • Windows/Macの場合
     <> Code ▼ボタンをクリックし、開いたメニューから"Open GitHub Desktop"を選択

WS000010

  • Linuxの場合
     1. <> Code ▼ボタンをクリックし、開いたメニューから HTTPS - "https://github.com/yasuking0304/desktop.git" 右横のコピーボタンをクリック
     2. GitHub Desktop を開き、 メニューから Clone Reposiory を選択し、表示されたダイアログのテキストボックスに Ctrl + V でペーストする

WS000017

i18nextとJSONファイル作成のためi8next-parserをインストールする

yarn add i8next
yarn add --dev i8next-parser

VSCode でこのフォルダを開く

VSCodeの左上のペインを右クリックしてnpmスクリプトを実行できるようにしておく

WS000009

ターミナルを開いてyarn を実行する

10分くらい何やらインストールを始めるので、ひたすら待つ

ビルドしてみる

NPMスクリプトから、build:prodを実行する(言語だけの修正ならdevを使う必要はない) WS000011

Core i3、RAM 8M、普通の3.5インチハードディスクで 4分50秒くらい時間がかかる。

Core i5、RAM 16M、SSDでも4分20秒 かかるので、それほど環境に拘る必要はない。

とはいえ、RAM 4M ではビルドに失敗する。

動かす

NPMスクリプトから、start:prodを実行する(Macの場合、成果物を直接実行してもcliが実行されずメニューが日本語化されないので特に注意)

WS000012

既知の問題

【現象1】

Mac でビルドすると、メニューが英語のまま

【備考】

理由はこちら

https://github.com/yasuking0304/SetEnv-Lang-MacOS

【現象2】

独自ビルドしたアプリでサインインできない問題

設定画面→ダイアログからサインインしてブラウザが開いた後、応答がない。

ダイアログ上のキャンセルボタンは機能しないがダイアログ右上の×ボタンは効く。

【手順】

メニュー ファイル → オプション → アカウント でサインアウトして再度サインインする

【備考】

具体的にはここで止まっている

app\src\lib\stores\sign-in-store.ts

  public async authenticateWithBrowser(): Promise<void> {
    const currentState = this.state

    if (!currentState || currentState.kind !== SignInStep.Authentication) {
      const stepText = currentState ? currentState.kind : 'null'
      return fatalError(
        `Sign in step '${stepText}' not compatible with browser authentication`
      )
    }

    this.setState({ ...currentState, loading: true })

    let account: Account
    try {
      log.info('[SignInStore] initializing OAuth flow')
      account = await askUserToOAuth(currentState.endpoint) /// ← ここで止まる
      log.info('[SignInStore] account resolved')

【原因】

ベータ版でビルドしたアプリは、GitHubには「GitHub Desktop」ではなく「The GitHub Desktop Development App」として認識される。

具体的には自分のGitHubページの Settings → 左ペインの「Integrations」下にある Applications → 「Authorized OAuth Apps」タブで確認できる。

build:prodでビルドしても、 app -> package.json -> vesion にtestの文字が含まれていたり、未知のバージョンの場合、GitHubサーバーにはDevelopmentで認識される。 cap_2023_12_31

この場合、headerは x-github-desktop-auth ではなく x-github-desktop-dev-auth で応答しないといけない。

これは昔からGitHub Desktopをコミュニティビルドする人には避けて通れない問題なので本家のissueで説明済み。

https://github.com/desktop/desktop/issues/11410#issuecomment-1872924345

なお、コミュニティビルドでは、意図して x-github-desktop-dev-auth に改変している。

具体的には app -> src -> main-process -> main.ts の 105行目を変更している。

【現象3】

Linux上でコミュニティビルド版を使用したのち、Debianのストア版(バージョン3.2.5-linux)を使用すると設定が吹っ飛ぶ

【備考】

理由は、Electronのバージョンが22.0から上がり、LocalStorageの互換性が過去互換しか維持されておらず、新しい設定を古いバージョンでは読み込めずリセットされる。

経緯はこちら https://github.com/yasuking0304/desktop/issues/17

shiftkeyさんはこの現象に気づいていたためか、Linux Fork版はしばらくElectronのバージョンを上げていなかったが、マルチランゲージ版はWin/Mac版とほぼ同一ソースで動作させることを目的にしていたためElectronのバージョンは上げている。

対応策はない。

⚠️ **GitHub.com Fallback** ⚠️