実績(フリー・オール・エクスペリメント)

GitLab 15.10からachievements というフラグで導入されました。デフォルトでは無効です。

フラグ: セルフマネジメントのGitLabでは、デフォルトではこの機能は利用できません。利用可能にするには、管理者がachievementsという機能フラグを有効にします。この機能はまだ本番環境では使用できません。

実績は、GitLabでのユーザーのアクティビティに対して報酬を与える方法です。名前空間のメンテナーやオーナーとして、特定の貢献に対してカスタム実績を作成することができ、あなたの基準に基づいてユーザーに授与したり取り消したりすることができます。

ユーザーとして、自分のプロフィール上で様々なプロジェクトやグループに貢献したことを強調するために実績を集めることができます。実績は名前、説明、アバターで構成されます。

Achievements on user profile page

実績はユーザーの所有物とみなされます。実績は、実績を作成した名前空間の表示設定に関係なく表示されます。

この機能は実験です。予定されている作業の詳細については、エピック9429を参照してください。あなたのユースケースについて、エピックにコメントを残してください。

実績の種類

プログラム上では、実績を作成、授与、取り消し、削除する方法は1つだけです。

実際には、授与される実績を区別することができます:

  • 一度だけ与えられるものと、取り消せないものです。例えば、「最初の貢献がマージされた」という実績です。
  • 一度で取り消し可能。例えば、「Coreチームメンバー」の実績。
  • 複数回。例えば、「今月の貢献者」。

ユーザーの実績を見る

ユーザーの実績はプロフィールページで確認できます。

前提条件:

  • ユーザープロファイルは公開されている必要があります。

ユーザーの業績を見るには:

  1. ユーザーのプロフィールページにアクセスしてください。
  2. ユーザーのアバターの下に、実績が表示されます。
  3. 実績の詳細を表示するには、実績の上にカーソルを置いてください。以下の情報が表示されます:

    • 実績の名前
    • 業績の説明
    • ユーザーが実績を獲得した日付
    • ユーザーがネームスペースのメンバである場合、またはネームスペースが公開されている場合は、実績を授与したネームスペース。

ユーザーの実績のリストを取得するには、user GraphQL タイプをクエリします。

query {
  user(username: "<username>") {
    userAchievements {
      nodes {
        achievement {
          name
          description
          avatarUrl
          namespace {
            fullPath
            name
          }
        }
      }
    }
  }
}

実績の作成

特定の貢献者に贈られるカスタム実績を作成できます。

前提条件:

  • ネームスペースのメンテナーまたはオーナーのロールを持っている必要があります。

アチーブメントを作成するには、achievementsCreate GraphQL mutationを呼び出します。

mutation achievementsCreate($file: Upload!) {
  achievementsCreate(
    input: {
      namespaceId: "gid://gitlab/Namespace/<namespace id>",
      name: "<name>",
      description: "<description>",
      avatar: $file}
  ) {
    errors
    achievement {
      id
      name
      description
      avatarUrl
    }
  }
}

アバターファイルを提供するには、curlを使用してミューテーションを呼び出します:

curl "https://gitlab.com/api/graphql" \
  -H "Authorization: Bearer <your-pat-token>" \
  -H "Content-Type: multipart/form-data" \
  -F operations='{ "query": "mutation ($file: Upload!) { achievementsCreate(input: { namespaceId: \"gid://gitlab/Namespace/<namespace-id>\", name: \"<name>\", description: \"<description>\", avatar: $file }) { achievement { id name description avatarUrl } } }", "variables": { "file": null } }' \
  -F map='{ "0": ["variables.file"] }' \
  -F 0='@/path/to/your/file.jpg'

成功すると、アチーブメントIDが返されます:

{"data":{"achievementsCreate":{"achievement":{"id":"gid://gitlab/Achievements::Achievement/1","name":"<name>","description":"<description>","avatarUrl":"https://gitlab.com/uploads/-/system/achievements/achievement/avatar/1/file.jpg"}}}}

実績の更新

アチーブメントの名前、説明、アバターはいつでも変更できます。

前提条件:

  • ネームスペースのメンテナーまたはオーナーのロールを持っている必要があります。

実績を更新するには、achievementsUpdate GraphQL mutationを呼び出します。

mutation achievementsUpdate($file: Upload!) {
  achievementsUpdate(
    input: {
      achievementId: "gid://gitlab/Achievements::Achievement/<achievement id>",
      name: "<new name>",
      description: "<new description>",
      avatar: $file}
  ) {
    errors
    achievement {
      id
      name
      description
      avatarUrl
    }
  }
}

実績の授与

貢献したユーザーを表彰することができます。ユーザーがアチーブメントを授与されると、Eメールで通知が届きます。

前提条件:

  • ネームスペースのメンテナーまたはオーナーのロールを持っている必要があります。

ユーザーに業績を授与するには、achievementsAward GraphQL mutationを呼び出します。

mutation {
  achievementsAward(input: {
    achievementId: "gid://gitlab/Achievements::Achievement/<achievement id>",
    userId: "gid://gitlab/User/<user id>" }) {
    userAchievement {
      id
      achievement {
        id
        name
      }
      user {
        id
        username
      }
    }
    errors
  }
}

実績の取り消し

ユーザーが受賞基準を満たさなくなったと判断した場合、ユーザーの業績を取り消すことができます。

前提条件:

  • ネームスペースのメンテナーまたはオーナーのロールを持っている必要があります。

実績を取り消すには、achievementsRevoke GraphQL mutationを呼び出します。

mutation {
  achievementsRevoke(input: {
    userAchievementId: "gid://gitlab/Achievements::UserAchievement/<user achievement id>" }) {
    userAchievement {
      id
      achievement {
        id
        name
      }
      user {
        id
        username
      }
      revokedAt
    }
    errors
  }
}

受賞した実績の削除

誤ってユーザーにアチーブメントを授与してしまった場合、そのアチーブメントを削除することができます。

前提条件:

  • ネームスペースのオーナー・ロールを持っている必要があります。

授与された業績を削除するには、userAchievementsDelete GraphQL mutationを呼び出します。

mutation {
  userAchievementsDelete(input: {
    userAchievementId: "gid://gitlab/Achievements::UserAchievement/<user achievement id>" }) {
    userAchievement {
      id
      achievement {
        id
        name
      }
      user {
        id
        username
      }
    }
    errors
  }
}

実績の削除

アチーブメントが不要になった場合、削除することができます。これにより、その達成に関連するすべての受賞済みインスタンスと失効したインスタンスが削除されます。

前提条件:

  • ネームスペースのメンテナーまたはオーナーのロールを持っている必要があります。

実績を削除するには、achievementsDelete GraphQL mutationを呼び出します。

mutation {
  achievementsDelete(input: {
    achievementId: "gid://gitlab/Achievements::Achievement/<achievement id>" }) {
    achievement {
      id
      name
    }
    errors
  }
}

実績の非表示

プロフィールに実績を表示したくない場合は、非表示にすることができます。そのためには

  1. 左のサイドバーで、自分のアバターを選択してください。
  2. プロフィールの編集を選択します。
  3. メイン設定セクションで、プロフィールに実績を表示するチェックボックスをオフにします。
  4. プロフィール設定の更新を選択します。