MS_GitHubFoundationsPracticeExam - NetDevInfraWGinOSSConsortium/NetDevInfraWiki GitHub Wiki

GitHub Foundations模擬試験

概要

  • 以下、模擬試験をやって、説明できるようにしておくべきトピックを列挙。

  • 先ずは、https://ghcertified.com/practice_tests/ から

    • 問題数を指定してスタート。
    • 全問空送り+採点後に個別にチェックしても良い。
  • LinkedIn ラーニングは評価で無償利用できそうではあるが
    「なんかアレ」(支払い情報登録などがあり)なのでチェックしなかった。

詳細

基本

Git、GitHub

  • Git

    • commit とはスナップショット成り(断定)♨

    • DVCS の D(分散)とはローカルコピー成り(断定)♨

    • ブランチも同時作業に寄与する機能ではあるが分散ではない

    • ブランチしたらマージする必要がある。

    • Git で新しいブランチを 1 行で作成する方法

      git checkout -b ブランチ名
      git switch -c ブランチ名
      
  • GitHub

    • 最も成功した Git ホスティング・サービス
    • Git リポジトリに対するコラボレーションを支援するプラットフォーム

Markdown

  • シンプルな記法を使って文書を記述できる軽量マークアップ言語
  • マークアップをシンプルに削ぎ落としたと言う事でマークダウンと命名
  • 入力支援に「書式設定ツールバー」や「スラッシュ コマンド」がある。
  • 実は、GitHub Flavored Markdown (GFM) と言う拡張仕様らしい。
  • チェックリストを作成するには - [ ] and - [x] などの GFM 拡張仕様を使う。

ファイル

リポジトリの表示方法をカスタマイズするファイル

  • README.md

    • リポジトリのプロフィールを記載する
    • 優先順位:.github ディレクトリ、ルートディレクトリ、.docs ディレクトリ
    • (置き場は異なるがユーザの GitHub プロフィールを記載する場合にも使用される)
  • CODEOWNERS.md:コードベースの特定の領域または全体を担当する個人またはチームを定義

  • LICENSE.md:パブリック・リポジトリで OSS の場合、ライセンスを設定する。

  • CITATION.cff:ユーザーがソフトウェアを正しく引用できるようにする。

  • その他:CONTRIBUTING.md、CODE_OF_CONDUCT.md、SECURITY.md、SUPPORT.md、FUNDING.yml

移行メモ(ディレクトリ名): 元ページの「.docs ディレクトリ」は
GitHub の仕様上は docs(先頭のドットなし)である
(優先順位は .github → ルート → docs)。
ハンズオン側では正しく docs
書かれているため、そちらが正しい。

移行メモ(拡張子): CODEOWNERSLICENSE
元ページでは .md 付きで書かれているが、
GitHub が認識するのは 拡張子なしの CODEOWNERS / LICENSE
LICENSELICENSE.md / LICENSE.txt も可、
CODEOWNERS は拡張子なしのみ)である。
元ページの表記のまま残すが、試験でも実務でも注意が要る。

ドキュメント

  • リポジトリに紐付く

    • Wiki:リポジトリの Wiki(Markdown)
    • GitHub Pages:静的 HTML のホスティング
  • アカウントに紐付く

    • Gist
      • 小さなコード スニペットを他のユーザーと簡単に共有
      • パブリックからプライベートには変更できない。
      • プライベートはアクセス許可ではなく検索にヒットするか / しないか。

スター、フォロー、ウォッチ

  • スターをつける:評価したり、お気に入りとして保存する。

    • ユーザ:できない
    • リポジトリ:後で簡単に見つけられるようにまとめられる。
      他のユーザーに知らせる方法にもなる。
  • フォロー、ウォッチする:エコシステム内での繋がりを深める。

    • ユーザーをフォロー:個人のダッシュボードに、
      ユーザーの公開アクティビティに関する通知が届く
    • プロジェクトをウォッチ:個人のダッシュボードに、
      プロジェクトの公開アクティビティに関する通知が届く

検索

  • 各種、エンティティの検索を行うことができる。

  • 以下のようなフィルタを使用する(ガチで覚えなくても消去法でイケる)。

    • リポジトリの例

      in:name docker stars:>100 is:public
      
    • イシューの例

      is:issue is:open label:test "fix"
      

テンプレート系

  • リポジトリ・テンプレート

    • 既存のリポジトリからリポジトリテンプレートを作成
    • リポジトリテンプレートから新しいリポジトリを作成
  • イシュー・テンプレート+Form

  • プルリクエスト・テンプレート

  • プロジェクト・テンプレート

    • 新しいプロジェクト・テンプレートを作成
    • 管理者または書き込み権限を使用して、
      既存のプロジェクトをテンプレートとしてコピー
    • 組織のメンバーに推奨テンプレートを設定
  • コメント(返信)テンプレート

    • 返信テンプレート

      • イシュー・プルリクエストのコメントのテンプレート
      • リポジトリ設定で作成、編集、削除
    • 保存した返信

      • イシュー・プルリクエストで再利用できるコメント
      • アカウント設定で作成、編集、削除
  • コミットメッセージテンプレート(Git)

  • GitHub Actions テンプレート

  • Codespaces テンプレート

Flow

  • Git Flow:大規模なプロジェクトや複雑な開発プロセスに適している。

    • Main → Develop → Feature → Develop → Release → Develop → Main
    • Main → Hotfix → Main & Develop
    • (ブランチは作業場の意味でリリースするのは Release ではなく Main になる)
  • GitHub Flow:GitHub が推奨するシンプルで軽量なワークフロー

    • Main ブランチは常にデプロイ可能な状態に保つ。
    • 新しいブランチを作成して、作業を進める。
    • 作業が完了したらプルリクエストを作成してレビューを依頼
    • コードレビューを経て、問題がなければ Main ブランチにマージ

エンティティ

設定

  • ピン留め
    お気に入りとかフォロー / ウォッチとは別。

    • プロフィールページにリポジトリや Gist を最大 6 つまで固定表示
    • イシューリストの上部にイシューを最大 3 つまで固定表示
  • メタデータ

    • エンティティへの Label、Milestone の割当はサイドバーのメタデータから
    • Label:任意の分類 Label を付与できる。
    • Milestone:残作業の把握、PJ フェーズへの関連付け。

settings 系

settings:各種のエンティティにある settings から設定できる。

移行メモ(未記述): 元ページではこの節に空の箇条書き
- が 3 つ)が置かれているだけで、内容が書かれていない。
該当の設定は、下記「リポジトリ」の「タブ」や、
ハンズオン
「共通項 > Settings」(個人 Account / Repository /
Organization / Enterprise の 4 レベル)に記述がある。

リポジトリ

  • コード、ファイル、各ファイルの改訂履歴を保存できる場所

  • リポジトリの検出可能性を高める
    (解り易い名前、トピック、README.md 等のマークダウン ドキュメント)

  • 可視性オプション(プライベート、パブリック、内部(エンタープライズのみ))

  • タブ

    • settings:Issue、Wiki、Project などの設定を行う(無効化が可能)。
    • Insights:
      • リポジトリのアクティビティ(≒ コード変更)に関するグラフや視覚化
      • アクティビティの概要も含まれる(コード変更に関係あるモノ?)
      • カンバセーションは含まれる(ディスカッションは含まれない)
      • イシューのリストと言う選択肢はイシューのリストを見れば良いので無い。
      • fork については、コード変更に直接関係ないので含まれない。

移行メモ(誤字・括弧): 「コード変更関係あるモノ?」を
「コード変更関係あるモノ?」に修正し、
「検出可能性を高める(…マークダウン ドキュメント」の
閉じ括弧の欠落を補った。

イシュー

Issue(問題)

プルリクエスト

  • プルをリクエストすると見せかけて実際はフェッチ&マージしている(笑)

  • ブランチ元のブランチ(base)がブランチ先のブランチ(compare)をマージする

  • 4 つの状態(Draft、Open、Merged、Closed)

  • 3 つのレビューの状態(Comment、Request Changes、Approve)

  • 2 つのプルリクエストをイシューにリンクする方法(メタデータ、イシュー番号)

  • キーワードでプルリクエストとイシューの Merged、Closed を連動させる。

  • ブランチ保護ルールでプルリクのマージ前にステータスチェック(例:2 つの承認)を強制

    • main ブランチのブランチ保護ルールを作成する
    • ブランチ保護ルールでは、マージ前にプルリクエストを要求する
    • ブランチ保護ルールでは、プルリクエストをマージする前に
      少なくとも 2 つの承認が必要。

    展開保護ルールというのは、Actions 関連の機能らしい。

補足(デプロイ保護ルール): 「展開保護ルール」は
Deployment protection rules の訳で、推測どおり
GitHub Actions
Environment(環境)に付けるルールである。
「本番環境へのデプロイは特定のレビュアーの承認が要る」
「デプロイ前に待機時間を置く」といった制御を行うもので、
ブランチ保護(マージの制御)とは対象が異なる。

ディスカッション

  • イシューとは異なり、コード修正に直接関係せず追跡する必要がない会話が対象

  • コミュニティ フォーラム(会話、質問、お知らせ、アイデア共有)

  • 3 つのアクション(ピン留め、別のリポジトリに転送、イシューに変換)

  • イシューに変換

    • 正確には「ディスカッションからイシューを作成」
    • ディスカッションは残るがリンクなどはない。

機能

コラボレーション

  • GitHub のフォーク

    • 語源は Linux のフォークで親から子(プロセス)を作成する的な。
    • 自アカウントに存在する他のユーザーのリポジトリを個人用にコピー
    • ローカルへのクローンではなく自アカウントへのクローン的な
    • GitHub 上で元のリポジトリとの連携が自動で管理される。
      (手動のクローン&プッシュでは連携機能は利用できない)
  • 組織のメンバーと外部の共同作業者

    • 共同作業者は組織に属さないがリポジトリ レベルの書き込みアクセス権を
      付与されたユーザー
    • メンバーは組織に属し、より広範なアクセス権と役割を持つ場合がある。
    • 共同作業者は個人アカウントのプライベートリポジトリにも招待可能。
  • エンティティ(イシュー、プルリクエスト)への人の割当は
    サイドバーのメタデータから行う。

  • オープンソースは誰でも検査、変更、拡張できるソースコード付きのソフトウェア。

  • インナーソースはオープンソースの開発手法や文化を企業や組織の内部で活用する手法

プロジェクト

  • イシューやプルリクエスト

    • をプロジェクトに追加する方法:個別、自動、一括
    • とプロジェクトとの同期は双方向で自動的に行われる。
    • の 3 つのビューア:テーブル / スプレッドシート、
      カンバン / タスクボード、ロードマップ
  • フィールド

    • テキスト、数値、日付フィールド
    • イテレーション フィールド
    • カスタム フィールド
  • 自動化オプション

    • Project workflows:組み込みの簡易自動化ワークフロー
    • GitHub Actions:柔軟性高いカスタマイズが可能な強力なツール
    • GitHub GraphQL API:プロジェクトデータを CRUD する WebAPI
  • Close and delete(Close してもデータは保持され Archive などはない)

  • Insights:プロジェクトの現在のステータスと履歴の進行状況を視覚化

  • Classic → 現在

    • エクスペリエンスに比べて多くの新機能と改善点を提供
    • 双方向の同期、3 つのビューア、カスタム フィールド

エディタ系

比較的簡素な開発環境(VS Code 系)、もしくは、エディタ

  • Codespaces

    • リポジトリ専用に設定された事前構成済みの開発環境。

    • 必要に応じて VM が作成される。マシンタイプを選択できる。

    • VM を占有するが、環境は Docker の仮想化コンテナで提供される。

    • ライフサイクルが重要(作成、再構築、停止、削除)

      • 再構築:コンテナ構成に加えた変更を実装
      • 切断しても再接続可能、コミットされていない変更は保存される。
    • ディープリンク:新しい Codespace を特定の構成で作成できるリンク

    • カスタマイズ

      • 表示名
      • OS またはベース イメージ、シェルの構成
      • VS Code のインターフェース設定
    • 構成ファイル

      • .devcontainer ディレクトリ以下に配置する。
      • Dockerfile(OS またはベース イメージ、シェルの構成)
      • devcontainer.json(使用する Dockerfile や設定を指定)
      • .vscode/settings.json
  • github.dev editor

セキュリティ系

  • Dependabot:リポジトリ内の依存関係の脆弱性をチェック

  • CodeQL:コードを分析しコード内の脆弱性とエラーを特定

  • シークレットスキャン:機密データが誤って公開されるのを防ぐために、
    リポジトリで既知の秘密形式を検索する機能。

サブシステム的な

GitHub Actions

  • GitHub の CI/CD プラットフォーム

  • プルリクエストをマージする前に自動テストを実行する

  • サポートする有効なトリガーイベント
    (コミットがプッシュされた、プルリクエストが開かれたなど)

    • リポジトリ関連のイベント

      • push: リポジトリに変更がプッシュ
      • pull_request: プルリクエストが作成、更新、マージ
      • release: リリースが公開、作成、削除
    • その他

      • CRON 式のスケジュールイベント
      • Web フックイベント
      • 手動でトリガー
      • 外部システムからのカスタムイベントでトリガー
      • イシュー・コメント関連
      • コードスキャン関連
      • ラベル・マイルストーン関連
      • 環境・セキュリティ関連

GitHub Copilot

オートコンプリート形式の提案を提供する AI ペア プログラマー

  • GitHub Copilot サブスクリプションをアクティブ化

  • サポートされている IDE のいずれかでセットアップし、コーディングを開始

  • プラン

    • GitHub Copilot for Individuals

      • Free:一部の機能への限定的なアクセス
        (学生、教師、人気 OSS のメンテナ向け)
      • Pro:すべての Copilot 機能に完全にアクセスできる。
    • GitHub Copilot for Business
      組織や企業のポリシーを制御できる。

      • Free:30 日間の無料試用版
      • Team:組織・企業アカウントでサブスクリプションを購入
    • GitHub Copilot Enterprise

      • GitHub Enterprise Cloud 上で利用できる。
      • Copilot Business +追加の AI 機能を提供

GitHub Desktop、GitHub Mobile

  • GitHub Desktop

    • Git & GitHub の GUI 版のクライアントツール
    • Actions、Copilot などのサブシステム系の操作はできない。
  • GitHub Mobile

    • GitHub の GUI 版のクライアントツール
    • Git クライアントではない点に注意
    • 主にコラボレーション系の操作が可能

GitHub Marketplace

販売するツールを公開するマーケット

  • 公開されている GitHub Actions

GitHub Sponsors program

オープンソースプロジェクトの開発者を経済的に支援

アカウント、プラン、役割、権限

アカウント

  • 個人アカウント:1 人のユーザーのみに設定できる。
  • 組織アカウント:複数の所有者とメンバーを設定できる。
  • 企業アカウント:大規模な企業や組織向けに設計されたアカウント。

プラン

  • どのプランでもパブリック・リポジトリは無制限に作成可能

  • Free:個人・組織アカウントの両方に共通

  • Pro:個人アカウントの有料プラン

  • Team:組織アカウントの有料プラン

  • Enterprise:企業アカウントの有料プラン

    • SAML 認証

    • GitHub Actions などの使用量ベースの製品に対する使用可能量の追加。

    • 追加オプション:GitHub Advanced Security、GitHub Premium Support、
      GitHub Copilot Enterprise。

    • デプロイ オプション:GitHub Enterprise Cloud と
      GitHub Enterprise Server の両方にアクセス可能

      • GitHub Enterprise Cloud:追加機能提供のための追加クラウド・インスタンス
      • GitHub Enterprise Server:オンプレにデプロイするハイブリッド・クラウド

移行メモ(見出し): 元ページの見出しは「ブラン」だったが、
内容から「プラン」の誤字と解して修正した。

ロール

  • リポジトリレベルのロール

    • 読み取り (Read): プロジェクトの表示やディスカッションが可能。
    • 書き込み (Write): プロジェクトへの積極的な貢献が可能。
    • トリアージ (Triage): Issue や Pull Request の管理が可能。
    • 保守 (Maintain): リポジトリの管理が可能だが、機密操作は不可。
    • 管理者 (Admin): フルアクセス権を持ち、
      セキュリティ管理やリポジトリ削除が可能。
    • 個人アカウントの場合は、管理者・共同作業者(=書き込み)の
      権限レベルのみ。
  • 組織レベルのロール

    • オーナー (Owner): 組織全体を管理する権限を持つ特権ユーザー。
    • メンバー (Member): デフォルトのユーザーで、基本的な操作が可能。
    • モデレーター (Moderators):(企業・組織の所有者、)組織レベルのモデレーター
    • 支払いマネージャー (Billing managers):
      (企業・組織の所有者、)組織レベルの請求管理者
    • セキュリティマネージャー (Security managers):
      (企業・組織の所有者、)組織レベルのセキュリティ管理者
      (セキュリティ関連機能の ON/OFF)
    • GitHub アプリマネージャー (GitHub App managers):
      組織が所有する GitHub App 登録の設定を管理
    • 外部協力者 (Outside collaborators):外部の共同作業者を追加する場合のロール

    ※ モデレーター:一般的に、議論や会話の進行を円滑に進める役割を担う人とされる。

  • チームレベルのロール

    • メンテナー (Maintainer): チームの管理
      (メンバーの追加・削除や子チームの作成)が可能。

組織階層

3 つの組織階層

  • チーム
  • 組織
  • 企業

認証

2FA

  • TOTP、セキュリティキー(FIDO)、
    パスキー(FIDO2 / WebAuthn)、
    テキストメッセージ(SMS)、GitHub Mobile
  • 2FA は、すべての GitHub ユーザーに対して推奨される設定。

補足(2FA は既に必須化された): GitHub は 2023 年から
github.com にコードを寄稿するすべてのユーザーに 2FA を段階的に必須化し、
2024 年 1 月に完了している。
「推奨」ではなく「必須」が現状である。
また SMS は中間者攻撃に弱いため、TOTP かパスキーが推奨される。

SSO

  • エンタープライズ管理ユーザー (EMU:Enterprise Managed Users) は
    GitHub Enterprise Cloud が GitHub アカウントを外部 IdP と連携する機能
  • ID 連携には SAML
    (Security Assertion Markup Language) をプロトコルとして使用し、
    外部 IdP で認証&連携
  • 一部の IdP (Azure AD, Okta) では
    SCIM (System for Cross-domain Identity Management) に対応

補足(EMU と SAML SSO は別物): 試験でも紛らわしいところなので整理する。

SAML SSO EMU
アカウント 各自の 個人 GitHub アカウントに組織を紐付ける 企業が 専用アカウントを発行・所有する
退職時 組織から外れるがアカウントは本人のもの アカウントごと無効化できる
外部への公開 パブリック リポジトリに参加できる 原則、企業の外に出られない

どちらも GitHub Enterprise Cloud の機能だが、
EMU は一度有効にすると後戻りできない(別 Enterprise の作成が要る)。

その他

  • 個人アクセストークン (PAT) は、WebAPI とか CLI 用

参考

LinkedIn ラーニング

その他ネット情報

補足(「ダンプ」サイトの扱い): 上記のうち
「Dumps」を掲げるサイトは、実際の試験問題を流出させたもの
売っている場合がある。
これは試験の受験規約(NDA)違反にあたり、
発覚すると資格の取消や受験禁止の対象になる。
出題範囲の確認には
学習ガイドPDF
公式の模擬試験を使うのが安全である。

本 Wiki 内


Tags: .NET開発, 構成管理ツール, CI, BI/AI

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