求人の基本(v3)

Job リソースは、求人の投稿(「求人情報」とも呼ばれます)を表します。求人は、求人の責務を負う雇用側のエンティティである Company に属します。

求人は create、update、delete の各メソッドを使用して操作でき、求人にアクセスするには list メソッドと get メソッドを使用します。変更が Cloud Talent Solution のインデックスに反映されるまで最大 5 分かかります。

求人はサービス アカウントの適用範囲に含まれます。特定のサービス アカウントの認証情報を使用して認証された検索リクエストのみが、求人のコンテンツへのアクセスに使用できます。

トラブルシューティングや優先順位付けを容易にするため、Cloud Talent Solution の求人インデックスをお客様自身の求人インデックスに同期し、Cloud Talent Solution によって生成された name とお客様のシステム内の固有の求人 ID の関連性を維持してください。求人が変更されたりお客様のシステムに導入されたりすると、適切な CRUD 呼び出しがリアルタイムで Cloud Talent Solution に送信され、それらの変更が直ちに反映されます。Cloud Talent Solution のインデックスを既存の求人取り込みパイプラインに追加する必要があります。

ジョブの作成

求人を作成するには、クイックスタート: 会社と求人の作成ガイドをご覧ください。

Java

Cloud Talent Solution クライアントのインストールと作成の詳細については、Cloud Talent Solution クライアント ライブラリをご覧ください。


/** Create a job. */
public static Job createJob(Job jobToBeCreated) throws IOException {
  try {
    CreateJobRequest createJobRequest = new CreateJobRequest().setJob(jobToBeCreated);

    Job jobCreated =
        talentSolutionClient
            .projects()
            .jobs()
            .create(DEFAULT_PROJECT_ID, createJobRequest)
            .execute();
    System.out.println("Job created: " + jobCreated);
    return jobCreated;
  } catch (IOException e) {
    System.out.println("Got exception while creating job");
    throw e;
  }
}

Python

Cloud Talent Solution クライアントのインストールと作成の詳細については、Cloud Talent Solution クライアント ライブラリをご覧ください。

def create_job(client_service, job_to_be_created):
    try:
        request = {"job": job_to_be_created}
        job_created = (
            client_service.projects()
            .jobs()
            .create(parent=parent, body=request)
            .execute()
        )
        print("Job created: %s" % job_created)
        return job_created
    except Error as e:
        print("Got exception while creating job")
        raise e

Go

Cloud Talent Solution クライアントのインストールと作成の詳細については、Cloud Talent Solution クライアント ライブラリをご覧ください。


// createJob create a job as given.
func createJob(w io.Writer, projectID string, jobToCreate *talent.Job) (*talent.Job, error) {
	ctx := context.Background()

	client, err := google.DefaultClient(ctx, talent.CloudPlatformScope)
	if err != nil {
		return nil, fmt.Errorf("google.DefaultClient: %w", err)
	}
	// Create the jobs service client.
	service, err := talent.New(client)
	if err != nil {
		return nil, fmt.Errorf("talent.New: %w", err)
	}

	parent := "projects/" + projectID
	req := &talent.CreateJobRequest{
		Job: jobToCreate,
	}
	job, err := service.Projects.Jobs.Create(parent, req).Do()
	if err != nil {
		return nil, fmt.Errorf("Failed to create job %q, Err: %w", jobToCreate.RequisitionId, err)
	}
	return job, err
}

必須項目

以下は求人の作成と更新時に必須の項目です。

  • companyName: 求人を載せている、会社のリソース名(例: projects/[PROJECT_ID]/companies/[COMPANY_ID])。

  • requisitionId: クライアントが求人を識別するために割り当てた要求 ID(投稿 ID とも呼ばれる)。これは、クライアントがクライアントの識別と求人のトラッキングに使用するためのフィールドです。最大許容文字数は 225 文字(半角相当)です。

    求人情報の一意性は、requisitionIDcompanyName、求人のロケールの組み合わせで決まります。こうした属性の特定のキーを使用して求人を作成すると、そのキーは Cloud Talent Solution のインデックスに保存され、この求人が削除されるまでそれと同じ項目を含む他の求人は作成できません。

  • title: 求人の職種(「ソフトウェア エンジニア」など)。最大許容文字数は 500 文字(半角相当)です。

    役職が標準のものでないために検索結果に漏れが生じる問題を修正するために、Cloud Talent Solution では求人に指定されているすべてのフィールドを利用してその求人のコンテキストを理解し、その求人の「クリーンな」役職を内部に保存します。検索リクエストがこのサービスに送信されると、検索のクエリもクリーンになり、オントロジーを利用して、クリーンになったクエリが関連するクリーンな求人にマッピングされます。

  • description: 求人の説明。通常、これには複数の段落で説明された会社の情報や関連情報が含まれます。求人オブジェクトには、responsibilities や qualifications などの求人の特性について個別にフィールドが用意されています。これらの個別の求人項目の使用をおすすめします。

    この項目は、HTML 入力を受け入れ、サニタイズし、太字、斜体、順序付きリスト、順序なしリストなどのマークアップ タグを受け入れます。 最大許容文字数は 100,000 文字です。

次のいずれかです。

  • applicationInfo.uris[]: アプリケーション ページの URL。

  • applicationInfo.emails[]: 履歴書または応募の送信先のメールアドレス。

  • applicationInfo.instruction: 「アプリケーションをメールで送信」のようなアプリケーションの手順。このフィールドは、HTML 入力を受け入れてサニタイズし、太字、斜体、順序付きリスト、順序なしリストなどのマークアップ タグを受け入れます。最大許容文字数は 3,000 文字(半角相当)です。

よく使用される項目

  • postingExpireTime: 求人の投稿の有効期限(タイムスタンプに基づく日時)。この時刻に達すると、求人は期限切れとして示され、検索結果に表示されなくなります。 この日付は UTC タイムゾーンで 2100/12/31 より前でなければなりません。 無効な日付(過去の日付など)は無視されます。 求人のデフォルトの期限日は、求人の作成日から UTC タイムゾーンで 30 日後です。

    求人が期限切れになっても、GET 演算子を使用すると、期限切れ後 60 日以内であればその求人のコンテンツを取得できます。この 60 日の期限を過ぎると、GET オペレーションでは求人が返されなくなります。

  • addresses[]: 求人の勤務地。通勤時間による求人検索など、より的確な API 結果を得るために、勤務地の正式な住所を入力することをおすすめします。最大許容文字数は 500 文字(半角相当)です。addresses[] に関する詳細については、下記のベスト プラクティスセクションをご覧ください。

  • promotionValue: 値を 0 より大きくすると、この求人が「注目の求人」として定義されます。この求人はタイプ FEATURED_JOBS の求人検索でのみ返されます。値が大きいほど、返される注目の求人の検索結果でより上位に表示されます。詳細については、注目の求人をご覧ください。

カスタム フィールド

  • customAttributes: このフィールドには、求人に関するカスタムデータを保存するためのカスタム属性が最大 100 個保存されます。こうしたフィールドは求人検索リクエストの jobQuery フィールドを指定する検索リクエストを使用してフィルタできます。また、いずれのフィールドも会社の keywordSearchableJobCustomAttributes 属性に設定できるため、keywordSearchableJobCustomAttributes 内のいずれかのフィールド内に完全一致がある検索語を指定すると、その一致を含むすべての求人が返されます。

求人の更新

fieldMask なしで求人を更新します。

Java

Cloud Talent Solution クライアントのインストールと作成の詳細については、Cloud Talent Solution クライアント ライブラリをご覧ください。


/** Update a job. */
public static Job updateJob(String jobName, Job jobToBeUpdated) throws IOException {
  try {
    UpdateJobRequest updateJobRequest = new UpdateJobRequest().setJob(jobToBeUpdated);
    Job jobUpdated =
        talentSolutionClient.projects().jobs().patch(jobName, updateJobRequest).execute();
    System.out.println("Job updated: " + jobUpdated);
    return jobUpdated;
  } catch (IOException e) {
    System.out.println("Got exception while updating job");
    throw e;
  }
}

Python

Cloud Talent Solution クライアントのインストールと作成の詳細については、Cloud Talent Solution クライアント ライブラリをご覧ください。

def update_job(client_service, job_name, job_to_be_updated):
    try:
        request = {"job": job_to_be_updated}
        job_updated = (
            client_service.projects()
            .jobs()
            .patch(name=job_name, body=request)
            .execute()
        )
        print("Job updated: %s" % job_updated)
        return job_updated
    except Error as e:
        print("Got exception while updating job")
        raise e

Go

Cloud Talent Solution クライアントのインストールと作成の詳細については、Cloud Talent Solution クライアント ライブラリをご覧ください。


// updateJob update a job with all fields except name.
func updateJob(w io.Writer, jobName string, jobToUpdate *talent.Job) (*talent.Job, error) {
	ctx := context.Background()

	client, err := google.DefaultClient(ctx, talent.CloudPlatformScope)
	if err != nil {
		return nil, fmt.Errorf("google.DefaultClient: %w", err)
	}
	// Create the jobs service client.
	service, err := talent.New(client)
	if err != nil {
		return nil, fmt.Errorf("talent.New: %w", err)
	}

	req := &talent.UpdateJobRequest{
		Job: jobToUpdate,
	}
	job, err := service.Projects.Jobs.Patch(jobName, req).Do()
	if err != nil {
		return nil, fmt.Errorf("Failed to update job %s: %w", jobName, err)
	}

	return job, err
}

fieldMask ありで求人を更新します。

Java

Cloud Talent Solution クライアントのインストールと作成の詳細については、Cloud Talent Solution クライアント ライブラリをご覧ください。


/** Update a job. */
public static Job updateJobWithFieldMask(String jobName, String fieldMask, Job jobToBeUpdated)
    throws IOException {
  try {
    UpdateJobRequest updateJobRequest =
        new UpdateJobRequest().setUpdateMask(fieldMask).setJob(jobToBeUpdated);
    Job jobUpdated =
        talentSolutionClient.projects().jobs().patch(jobName, updateJobRequest).execute();
    System.out.println("Job updated: " + jobUpdated);
    return jobUpdated;
  } catch (IOException e) {
    System.out.println("Got exception while updating job");
    throw e;
  }
}

Python

Cloud Talent Solution クライアントのインストールと作成の詳細については、Cloud Talent Solution クライアント ライブラリをご覧ください。

def update_job_with_field_mask(client_service, job_name, job_to_be_updated, field_mask):
    try:
        request = {"job": job_to_be_updated, "update_mask": field_mask}
        job_updated = (
            client_service.projects()
            .jobs()
            .patch(name=job_name, body=request)
            .execute()
        )
        print("Job updated: %s" % job_updated)
        return job_updated
    except Error as e:
        print("Got exception while updating job with field mask")
        raise e

Go

Cloud Talent Solution クライアントのインストールと作成の詳細については、Cloud Talent Solution クライアント ライブラリをご覧ください。


// updateJobWithMask updates a job by name with specific fields.
// mask is a comma separated list top-level fields of talent.Job.
func updateJobWithMask(w io.Writer, jobName string, mask string, jobToUpdate *talent.Job) (*talent.Job, error) {
	ctx := context.Background()

	client, err := google.DefaultClient(ctx, talent.CloudPlatformScope)
	if err != nil {
		return nil, fmt.Errorf("google.DefaultClient: %w", err)
	}
	// Create the jobs service client.
	service, err := talent.New(client)
	if err != nil {
		return nil, fmt.Errorf("talent.New: %w", err)
	}

	req := &talent.UpdateJobRequest{
		Job:        jobToUpdate,
		UpdateMask: mask,
	}
	job, err := service.Projects.Jobs.Patch(jobName, req).Do()
	if err != nil {
		log.Fatalf("Failed to update job %s with field mask %s, Err: %v", jobName, mask, err)
	}

	return job, err
}

ベスト プラクティス

場所の項目

可能な限り、addresses[] フィールドに求人の住所を入力することをおすすめします。こうすると場所の検出と関連性の確認がしやすくなります。番地までの住所がわからなくても、できるだけ多くの情報を入力してください。 住所は国レベルまでサポートされています。 「太平洋岸北西部」などの地域の指定はサポートされません。

Cloud Talent Solution は、addresses[] フィールド内のデータを使用して、derivedInfo.locations[] フィールド(出力のみ)に住所を自動入力します。正式な住所が入力されない場合、このサービスは他のヒントとなる情報(会社名など)を使用して、求人の投稿用により詳細な住所を推測できるかどうかを判断します。

たとえば、ソフトウェア求人の場所が Mountain View と指定されていて、求人に関連付けられている会社が Google であれば、このサービスは会社オブジェクトを調べて headquartersAddress フィールドにより詳細な住所が示されているか、そしてその住所が求人の投稿と同じ市区町村であるかを確認します。その場合、このサービスは求人がその住所にあると「推測」して derivedInfo.locations[] フィールドに入力します。

会社の住所データがない場合、このサービスは独自に所有する知識と求人 / 会社情報を組み合わせて derivedInfo.locations[] フィールドに渡します。

derivedInfo.locations[] の値は推測によるベスト エフォートの値であるため、求人の住所を表示するときは、derivedInfo.locations[] データまたは addresses フィールドを使用するようにしてください。

1 つの求人の投稿に関連付けられる場所は 50 か所までです。1 つの求人にこれより多い場所が存在する場合、その求人を複数の求人に分割してそれぞれ固有の requisitionId(「ReqA」、「ReqA-1」、「ReqA-2」など)を指定します。同じ requisitionIdcompanyNamelanguageCode を持つ求人は複数存在できません。元の requisitionId を保存する必要がある場合は、CustomAttribute を使用して保存します。検索しやすくするために、同じ求人の中で、相互の距離が最も近い場所をグループ化することをおすすめします。

サポートされている住所

Google Maps Geocoding API で認識される住所(formattedAddress フィールド内)であれば、どれでも Cloud Talent Solution で使用できます。認識されない住所を使用して求人の作成や検索を行うと、サービスから 400 エラーが返されます。

会社の住所が Google Maps Geocoding API の一覧に正しく表示されていない場合は、バグを報告して修正を依頼してください。修正が有効になるまで最大 5 日かかります。

住所のオートコンプリート機能

Cloud Talent Solution では、場所のオートコンプリートの候補は表示されません。 Google Maps Places API などの位置情報サービスを使用して、オートコンプリートの候補を入力してください。

都道府県(州)全体の求人、全国の求人、在宅の求人

Job リソースの postingRegion 項目を使用して、都道府県(州)全体の求人、全国の求人、在宅の求人を指定できます。

  • ADMINISTRATIVE_AREANATION の求人は、検索の場所が求人の投稿の都道府県(州)内または国内に存在する場合に返されます。たとえば、ADMINISTRATIVE_AREA の求人の場所が「WA, USA」であれば、検索の LocationFilter に「Seattle」が指定されている場合にその求人が返されます。

  • TELECOMMUTE の求人は場所に関連する検索で返されますが、場所への関連性は低いとみなされます。この求人を検索対象にするには、検索の LocationFiltertelecommutePreference フラグを TELECOMMUTE_ALLOWED に設定します。