Upgrade to Pro — share decks privately, control downloads, hide ads and more …

How GitHub uses Codespaces

How GitHub uses Codespaces

Tech Stand #9 GitHubにてお話しした際の資料です。
https://standfm.connpass.com/event/256786/

Yuichi Tanaka

August 31, 2022
Tweet

More Decks by Yuichi Tanaka

Other Decks in Programming

Transcript

  1. 2022/08/31
    How GitHub uses Codespaces
    Tech Stand #9
    @yuichielectric
    田中 裕一 (@yuichielectric)
    How GitHub uses
    Codespaces

    View Slide

  2. 2022/08/31
    How GitHub uses Codespaces
    Tech Stand #9
    @yuichielectric
    田中 裕一
    GitHub、シニアソリューションズエンジニア
    個人で「システム運用アンチパターン」
    (オライリー・ジャパン)の翻訳を担当
    @yuichielectric

    View Slide

  3. Codespaces
    クラウド上の開発環境
    妥協のないコーディング体験
    ブラウザから、コーディング、ビルド、テスト、
    デバッグ、デプロイが可能な完全な開発環境に
    アクセス。
    ワークフローをシンプルに
    依存関係やSSHキーを自動でセットアップ。
    あらゆるプロジェクトでコーディングを開始できる
    までの時間を短縮。
    カスタマイズ可能
    dotfileによるエディタの設定やすべてのCodespace
    環境にあらかじめインストールしておくVS Code拡
    張の指定など

    View Slide

  4. {
    "name": "Go",
    "build": {
    "dockerfile": "Dockerfile",
    "args": {
    "VARIANT": "1-bullseye",
    }
    },
    "runArgs": [ "--cap-add=SYS_PTRACE", "--security-opt", "seccomp=unconfined" ],
    "settings": {
    "go.toolsManagement.checkForUpdates": "local",
    "go.useLanguageServer": true,
    "go.gopath": "/go",
    "go.goroot": "/usr/local/go"
    },
    "extensions": [
    "golang.Go"
    ],
    "forwardPorts": [8080],
    "postCreateCommand": "go version",
    "remoteUser": "vscode"
    }
    https://github.com/microsoft/vscode-dev-containers/blob/main/containers/go/.devcontainer/devcontainer.json
    名前
    コンテナの指定
    Visual Studio Codeの設定
    Visual Studio Code拡張
    フォワードするポート
    環境作成後コマンド
    実行ユーザー
    コンテナ実行時パラメータ
    .devcontainer/devcontainer.json

    View Slide

  5. 2022/08/31
    How GitHub uses Codespaces
    Tech Stand #9
    @yuichielectric
    GitHub社内での標準の開発環境
    github/github:
    コミット数100万以上、サイズは
    13GB以上
    Codespaces以前
    各エンジニアのmac上に開発環境を
    構築。すべてスクリプト化されては
    いたものの、環境構築には半日
    かかっていた。
    Codespaces以後
    github/githubの環境を10秒で用意
    ブランチ切り替えの必要なし
    VS Codeユーザー以外からもSSH
    https://github.blog/jp/2021-08-30-githubs-engineering-team-moved-codespaces/

    View Slide

  6. 2022/08/31
    How GitHub uses Codespaces
    Tech Stand #9
    @yuichielectric
    コンテナイメージ
    ベースイメージ用のリポジトリを作
    り、Actionsで、イメージをビルド
    しPackagesにpush
    プリビルド
    github/githubのmainへのマージ
    のたびにCodespaces環境をビルド
    環境
    32コア、64GBメモリのマシン
    サイズのみを使うように設定
    https://docs.github.com/ja/codespaces/prebuilding-your-codespaces/about-github-codespaces-prebuilds
    Codespace環境のビルド

    View Slide

  7. 2022/08/31
    How GitHub uses Codespaces
    Tech Stand #9
    @yuichielectric
    Codespaceのビルド(プリビルドも
    含む)は複数リポジトリにも対応
    関連するリポジトリに対しての
    権限を要求した上で、プリビルド
    環境を構築後に必要なリポジトリ
    を取得してセットアップ
    https://github.blog/changelog/2022-07-28-prebuilding-codespaces-is-now-supported-for-multi-repository-and-monorepo-projects/
    複数リポジトリ

    View Slide

  8. 2022/08/31
    How GitHub uses Codespaces
    Tech Stand #9
    @yuichielectric
    VPNのセットアップをfeaturesを使って共通化。
    プロジェクトごとに必要に応じて利用。
    その他の手段として、ローカルマシンを、Codespaceと
    プライベートリソースへのゲートウェイとして使うことも可能。
    GitHub CLI拡張としてプレビュー公開。
    https://github.com/github/gh-net
    プライベートリソースへのアクセス

    View Slide

  9. 2022/08/31
    How GitHub uses Codespaces
    Tech Stand #9
    @yuichielectric
    Codespaces環境に単機能を追加するプロセスを定義するための仕組み

    ● GitHub CLI
    ● Ruby
    ● SSHサーバ
    独自のfeatureを定義することも可能。
    devcontainers/feature-template
    features

    View Slide

  10. 2022/08/31
    How GitHub uses Codespaces
    Tech Stand #9
    @yuichielectric
    Codespacesの別の側面

    View Slide

  11. 2022/08/31
    How GitHub uses Codespaces
    Tech Stand #9
    @yuichielectric
    ドキュメント担当以外のメンバーが
    GitHubのドキュメントに間違いを
    見つけた場合であっても、
    devcontainer.jsonがあれば、
    Codespace上でドキュメントを修正
    して、プレビューを確認後にPull
    Requestを送るというプロセスが
    容易になる。
    チームの垣根を超えた
    コントリビュート

    View Slide

  12. 2022/08/31
    How GitHub uses Codespaces
    Tech Stand #9
    @yuichielectric
    社内の多くのリポジトリで
    Codespacesの設定をしておくこと
    でチームの壁を超えたコントリ
    ビュートの敷居を低減
    プリビルドを積極的に使うことで迅
    速に開発環境を構築
    CodespacesはGitHub社内での
    標準開発環境
    その過程で生み出された機能を
    Codespacesに組み込み
    まとめ

    View Slide

  13. 2022/08/31
    How GitHub uses Codespaces
    Tech Stand #9
    @yuichielectric
    Thank you

    View Slide