• トップ
  • ブログ一覧
  • GitHub CopilotとChatGPTでGoogle for Jobsの求人情報を作ってみた
  • GitHub CopilotとChatGPTでGoogle for Jobsの求人情報を作ってみた

    ハク(エンジニア)ハク(エンジニア)
    2023.07.12

    IT技術

    流れ

    • データ作成

      求人情報を適当に探し、コピーをする

      ChatGPTに貼り付けて、欲しいデータを抜き取ってもらってJSONに変換する

    • プログラム実装

      JSONを読み込み、変数に格納

      Google for Jobs形式に変換

      出力する

    データ作成(ChatGPT)

    • 使用する求人情報

      【企業名】
      株式会社〇〇

      【雇用形態】
      正社員

      【職種】
      サーバーエンジニア

      【仕事内容】
      あいうえおあいうえおあいうえおあいうえおあいうえお

      〜使用言語〜
      PHP、Python、Golang、Ruby

      ~開発業務~
      *あいうえおあいうえおあいうえおあいうえおあいうえお
      *あいうえおあいうえおあいうえおあいうえおあいうえお
      *あいうえおあいうえおあいうえおあいうえおあいうえお

      【給与】
      4,000,000円~6,000,000円

      【勤務時間・曜日】
      9:00 ~ 18:00(休憩1時間)
      *残業月平均20~30時間

      【休暇・休日】
      完全週休2日制
      有給休暇
      年間休日最低120日~

      【勤務地】
      大阪府大阪市北区〇〇町△△丁目✕✕番□□号
      *転勤なし

      アクセス
      地下鉄御堂筋線「〇〇」駅 徒歩5分

      【待遇・福利厚生】
      ・社会保険完備
      ・昇給(年1回)
      ・賞与(年2回)
      ・交通費支給(上限20,000円まで)
      ※試用・研修期間なし

    • 下記ChatGPTに投げる

      【企業名】
      株式会社〇〇

      【雇用形態】
      正社員

      【職種】
      サーバーエンジニア

      【仕事内容】
      あいうえおあいうえおあいうえおあいうえおあいうえお

      〜使用言語〜
      PHP、Python、Golang、Ruby

      ~開発業務~
      *あいうえおあいうえおあいうえおあいうえおあいうえお
      *あいうえおあいうえおあいうえおあいうえおあいうえお
      *あいうえおあいうえおあいうえおあいうえおあいうえお

      【給与】
      4,000,000円~6,000,000円

      【勤務時間・曜日】
      9:00 ~ 18:00(休憩1時間)
      *残業月平均20~30時間

      【休暇・休日】
      完全週休2日制
      有給休暇
      年間休日最低120日~

      【勤務地】
      大阪府大阪市北区〇〇町△△丁目✕✕番□□号
      *転勤なし

      アクセス
      地下鉄御堂筋線「〇〇」駅 徒歩5分

      【待遇・福利厚生】
      ・社会保険完備
      ・昇給(年1回)
      ・賞与(年2回)
      ・交通費支給(上限20,000円まで)
      ※試用・研修期間なし
      ---------------------------------------------------------
      上記求人情報をjsonに変換してください。
      なお、フォーマットは以下となります。

      • title: 職種名
      • description: 仕事の内容(仕事内容の他に勤務時間・曜日、休暇・休日、福利厚生を含んで、html形式で出力してください)
      • employment_type: 雇用形態(※1参照)
      • name: 企業名
      • location: 勤務地
      • salary: 給与(※2参照)
      • salary_type: 給与種別(※3参照)
        ※1: 下記に従い変換してください
        正社員: FULL_TIME
        契約社員: CONTRACTOR
        派遣社員: TEMPORARY
        その他: OTHER
        ※2: 範囲の場合は、salary_minとsalary_maxで分けてください
        ※3: 下記に従い変換してください
        時給: HOUR
        日払い: DAY
        週払い: WEEK
        月給: MONTH
        年収: YEAR
    • すると下記のレスポンスが返ってくる(整形前)

      {
      “title”: “サーバーエンジニア”,
      “description”: “<p><strong>【仕事内容】</strong><br>あいうえおあいうえおあいうえおあいうえおあいうえお</p>\n\n<p><strong>【勤務時間・曜日】</strong><br>9:00 ~ 18:00(休憩1時間)<br>*残業月平均20~30時間</p>\n\n<p><strong>【休暇・休日】</strong><br>完全週休2日制<br>有給休暇<br>年間休日最低120日~</p>\n\n<p><strong>【待遇・福利厚生】</strong><br>・社会保険完備<br>・昇給(年1回)<br>・賞与(年2回)<br>・交通費支給(上限20,000円まで)</p>”,
      “employment_type”: “FULL_TIME”,
      “name”: “株式会社〇〇”,
      “location”: “大阪府大阪市北区〇〇町△△丁目✕✕番□□号”,
      “salary_min”: 4000000,
      “salary_max”: 6000000,
      “salary_type”: “YEAR”
      }

    • 整形後
      1{
      2    "title": "サーバーエンジニア",
      3    "description": "<p><strong>【仕事内容】</strong><br>あいうえおあいうえおあいうえおあいうえおあいうえお</p>\n\n<p><strong>【勤務時間・曜日】</strong><br>9:00 ~ 18:00(休憩1時間)<br>*残業月平均20~30時間</p>\n\n<p><strong>【休暇・休日】</strong><br>完全週休2日制<br>有給休暇<br>年間休日最低120日~</p>\n\n<p><strong>【待遇・福利厚生】</strong><br>・社会保険完備<br>・昇給(年1回)<br>・賞与(年2回)<br>・交通費支給(上限20,000円まで)</p>",
      4    "employment_type": "FULL_TIME",
      5    "name": "株式会社〇〇",
      6    "location": "大阪府大阪市北区〇〇町△△丁目✕✕番□□号",
      7    "salary_min": 4000000,
      8    "salary_max": 6000000,
      9    "salary_type": "YEAR"
      10}

    プログラム実装(Github Copilot)

    • データ作成編のjsonをGoogle for Jobs形式に変換するプログラムを実装
      1# 自動生成START
      2# ソースコード内で必要なモジュールをすべてインポートしてください
      3import datetime
      4import json
      5# 自動生成END
      6
      7
      8# 手動入力START
      9json_str = "{" + \
      10           "    \"title\": \"サーバーエンジニア\"," + \
      11           "    \"description\": \"<p><strong>【仕事内容】</strong><br>あいうえおあいうえおあいうえおあいうえおあいうえお</p>\\n\\n<p><strong>【勤務時間・曜日】</strong><br>9:00 ~ 18:00(休憩1時間)<br>*残業月平均20~30時間</p>\\n\\n<p><strong>【休暇・休日】</strong><br>完全週休2日制<br>有給休暇<br>年間休日最低120日~</p>\\n\\n<p><strong>【待遇・福利厚生】</strong><br>・社会保険完備<br>・昇給(年1回)<br>・賞与(年2回)<br>・交通費支給(上限20,000円まで)</p>\"," + \
      12           "    \"employment_type\": \"FULL_TIME\"," + \
      13           "    \"name\": \"株式会社〇〇\"," + \
      14           "    \"location\": \"大阪府大阪市北区〇〇町△△丁目✕✕番□□号\"," + \
      15           "    \"salary_min\": 4000000," + \
      16           "    \"salary_max\": 6000000," + \
      17           "    \"salary_type\": \"YEAR\"" + \
      18           "}" # ここにjsonテキストを貼り付ける
      19# 手動入力END
      20
      21
      22# 自動生成START
      23# json変数をGoogle for Jobs形式に変換してください
      24data = json.loads(json_str)
      25data["@context"] = "http://schema.org/"
      26data["@type"] = "JobPosting"
      27data["baseSalary"] = {
      28    "@type": "MonetaryAmount",  
      29    "currency": "JPY",  
      30    "value": {  
      31        "@type": "QuantitativeValue",  
      32        "minValue": data["salary_min"],  
      33        "maxValue": data["salary_max"],
      34        "unitText": data["salary_type"]  
      35    }  
      36}  
      37data["datePosted"] = datetime.datetime.now().strftime("%Y-%m-%d")  	
      38data["validThrough"] = (datetime.datetime.strptime(data["datePosted"], "%Y-%m-%d") + 	datetime.timedelta(days=7)) \
      39    .strftime("%Y-%m-%dT00:00")
      40data["jobLocation"] = {
      41    "@type": "Place",
      42    "address": {
      43        "@type": "PostalAddress",
      44        "addressLocality": data["location"]
      45    }
      46}
      47data["hiringOrganization"] = {
      48    "@type": "Organization",
      49    "name": data["name"]
      50}
      51# 自動生成されたコードの間手動で追加START
      52data["identifier"] = {
      53    "@type": "PropertyValue",
      54    "name": data["name"],
      55    "value": "1234567"
      56}
      57# 自動生成されたコードの間手動で追加END
      58del data["salary_min"]
      59del data["salary_max"]
      60del data["salary_type"]
      61del data["name"]
      62del data["location"]
      63# 自動生成END
      64
      65
      66# 手動入力START
      67print(data)
      68# 手動入力END
    • 実行結果(整形前)
      1{'title': 'サーバーエンジニア', 'description': '<p><strong>【仕事内容】</strong><br>あいうえおあいうえおあいうえおあいうえおあいうえお</p>\n\n<p><strong>【勤務時間・曜日】</strong><br>9:00 ~ 18:00(休憩1時間)<br>*残業月平均20~30時間</p>\n\n<p><strong>【休暇・休日】</strong><br>完全週休2日制<br>有給休暇<br>年間休日最低120日~</p>\n\n<p><strong>【待遇・福利厚生】</strong><br>・社会保険完備<br>・昇給(年1回)<br>・賞与(年2回)<br>・交通費支給(上限20,000円まで)</p>', 'employment_type': 'FULL_TIME', '@context': 'http://schema.org/', '@type': 'JobPosting', 'baseSalary': {'@type': 'MonetaryAmount', 'currency': 'JPY', 'value': {'@type': 'QuantitativeValue', 'minValue': 4000000, 'maxValue': 6000000, 'unitText': 'YEAR'}}, 'datePosted': '2023-07-04', 'validThrough': '2023-07-11T00:00', 'jobLocation': {'@type': 'Place', 'address': {'@type': 'PostalAddress', 'addressLocality': '大阪府大阪市北区〇〇町△△丁目✕✕番□□号'}}, 'hiringOrganization': {'@type': 'Organization', 'name': '株式会社〇〇'}, 'identifier': {'@type': 'PropertyValue', 'name': '株式会社〇〇', 'value': '1234567'}}
    • 整形後(表示項目を並び替えてる)
      1{
      2    "@context": "http://schema.org/",
      3    "@type": "JobPosting",
      4    "title": "サーバーエンジニア",
      5    "description": "<p><strong>【仕事内容】</strong><br>あいうえおあいうえおあいうえおあいうえおあいうえお</p>\n\n<p><strong>【勤務時間・曜日】</strong><br>9:00 ~ 18:00(休憩1時間)<br>*残業月平均20~30時間</p>\n\n<p><strong>【休暇・休日】</strong><br>完全週休2日制<br>有給休暇<br>年間休日最低120日~</p>\n\n<p><strong>【待遇・福利厚生】</strong><br>・社会保険完備<br>・昇給(年1回)<br>・賞与(年2回)<br>・交通費支給(上限20,000円まで)</p>",
      6    "identifier": {
      7        "@type": "PropertyValue",
      8        "name": "株式会社〇〇",
      9        "value": "1234567"
      10    },
      11    "datePosted": "2023-07-04",
      12    "validThrough": "2023-07-11T00:00",
      13    "employment_type": "FULL_TIME",
      14    "hiringOrganization": {
      15        "@type": "Organization",
      16        "name": "株式会社〇〇"
      17    },
      18    "jobLocation": {
      19        "@type": "Place",
      20        "address": {
      21            "@type": "PostalAddress",
      22            "addressLocality": "大阪府大阪市北区〇〇町△△丁目✕✕番□□号"
      23        }
      24    },
      25    "baseSalary": {
      26        "@type": "MonetaryAmount",
      27        "currency": "JPY",
      28        "value": {
      29            "@type": "QuantitativeValue",
      30            "minValue": data["salary_min"],  
      31            "maxValue": data["salary_max"],
      32            "unitText": "YEAR"
      33        }
      34    }
      35}

    ところで・・・

    • ChatGPTで直接Google for Jobs形式に変換することができちゃうんだよね・・・
      • なお、結局のところヒューマンチェックは必要になるので、過信しないのが吉
    • 下記をChatGPTに投げる

      【企業名】
      株式会社〇〇

      【雇用形態】
      正社員

      【職種】
      サーバーエンジニア

      【仕事内容】
      あいうえおあいうえおあいうえおあいうえおあいうえお

      〜使用言語〜
      PHP、Python、Golang、Ruby

      ~開発業務~
      *あいうえおあいうえおあいうえおあいうえおあいうえお
      *あいうえおあいうえおあいうえおあいうえおあいうえお
      *あいうえおあいうえおあいうえおあいうえおあいうえお

      【給与】
      4,000,000円~6,000,000円

      【勤務時間・曜日】
      9:00 ~ 18:00(休憩1時間)
      *残業月平均20~30時間

      【休暇・休日】
      完全週休2日制
      有給休暇
      年間休日最低120日~

      【勤務地】
      大阪府大阪市北区〇〇町△△丁目✕✕番□□号
      *転勤なし

      アクセス
      地下鉄御堂筋線「〇〇」駅 徒歩5分

      【待遇・福利厚生】
      ・社会保険完備
      ・昇給(年1回)
      ・賞与(年2回)
      ・交通費支給(上限20,000円まで)
      ※試用・研修期間なし
      ---------------------------------------------------------
      上記求人情報をGoogle for Jobs形式に変換してください

    • すると下記のレスポンスが返ってくる(整形前)

      {
      “@context”: “https://schema.org/”,
      “@type”: “JobPosting”,
      “title”: “サーバーエンジニア”,
      “description”: “あいうえおあいうえおあいうえおあいうえおあいうえお”,
      “employmentType”: “FULL_TIME”,
      “hiringOrganization”: {
      “@type”: “Organization”,
      “name”: “株式会社〇〇”
      },
      “jobLocation”: {
      “@type”: “Place”,
      “address”: {
      “@type”: “PostalAddress”,
      “addressLocality”: “大阪市北区”,
      “streetAddress”: “〇〇町△△丁目✕✕番□□号”
      }
      },
      “baseSalary”: {
      “@type”: “MonetaryAmount”,
      “currency”: “JPY”,
      “value”: {
      “@type”: “QuantitativeValue”,
      “minValue”: 4000000,
      “maxValue”: 6000000,
      “unitText”: “JPY/YEAR”
      }
      },
      “workHours”: “9:00 ~ 18:00(休憩1時間)”,
      “workHoursDescription”: “*残業月平均20~30時間”,
      “jobLocationType”: “SingleLocation”,
      “jobLocationAccessibility”: “Accessible”,
      “qualifications”: “〜使用言語〜\nPHP、Python、Golang、Ruby\n\n~開発業務~\n*あいうえおあいうえおあいうえおあいうえおあいうえお\n*あいうえおあいうえおあいうえおあいうえおあいうえお\n*あいうえおあいうえおあいうえおあいうえおあいうえお”,
      “benefits”: [
      “社会保険完備”,
      “昇給(年1回)”,
      “賞与(年2回)”,
      “交通費支給(上限20,000円まで)”
      ],
      “jobLocationInstructions”: “地下鉄御堂筋線「〇〇」駅 徒歩5分”,
      “jobImmediateStart”: true
      }

    • 整形後
      1{
      2    "@context": "https://schema.org/",
      3    "@type": "JobPosting",
      4    "title": "サーバーエンジニア",
      5    "description": "あいうえおあいうえおあいうえおあいうえおあいうえお",
      6    "employmentType": "FULL_TIME",
      7    "hiringOrganization": {
      8        "@type": "Organization",
      9        "name": "株式会社〇〇"
      10    },
      11    "jobLocation": {
      12        "@type": "Place",
      13        "address": {
      14            "@type": "PostalAddress",
      15            "addressLocality": "大阪市北区",
      16            "streetAddress": "〇〇町△△丁目✕✕番□□号"
      17        }
      18    },
      19    "baseSalary": {
      20        "@type": "MonetaryAmount",
      21        "currency": "JPY",
      22        "value": {
      23            "@type": "QuantitativeValue",
      24            "minValue": 4000000,
      25            "maxValue": 6000000,
      26            "unitText": "JPY/YEAR"
      27        }
      28    },
      29    "workHours": "9:00 ~ 18:00(休憩1時間)",
      30    "workHoursDescription": "*残業月平均20~30時間",
      31    "jobLocationType": "SingleLocation",
      32    "jobLocationAccessibility": "Accessible",
      33    "qualifications": "〜使用言語〜\nPHP、Python、Golang、Ruby\n\n~開発業務~\n*あいうえおあいうえおあいうえおあいうえおあいうえお\n*あいうえおあいうえおあいうえおあいうえおあいうえお\n*あいうえおあいうえおあいうえおあいうえおあいうえお",
      34    "benefits": [
      35        "社会保険完備",
      36        "昇給(年1回)",
      37        "賞与(年2回)",
      38        "交通費支給(上限20,000円まで)"
      39    ],
      40    "jobLocationInstructions": "地下鉄御堂筋線「〇〇」駅 徒歩5分",
      41    "jobImmediateStart": true
      42}
      • 中身が違ったりフォーマットが間違ってたり余計な項目が入ってたり足りない項目があったりするが、手動で修正すればOK
    • 手動で修正後
      1{
      2    "@context": "https://schema.org/",
      3    "@type": "JobPosting",
      4    "title": "サーバーエンジニア",
      5    "description": "<p><strong>【仕事内容】</strong><br>あいうえおあいうえおあいうえおあいうえおあいうえお</p>\n\n<p><strong>【勤務時間・曜日】</strong><br>9:00 ~ 18:00(休憩1時間)<br>*残業月平均20~30時間</p>\n\n<p><strong>【休暇・休日】</strong><br>完全週休2日制<br>有給休暇<br>年間休日最低120日~</p>\n\n<p><strong>【待遇・福利厚生】</strong><br>・社会保険完備<br>・昇給(年1回)<br>・賞与(年2回)<br>・交通費支給(上限20,000円まで)</p>",
      6    "identifier": {
      7        "@type": "PropertyValue",
      8        "name": "株式会社〇〇",
      9        "value": "1234567"
      10    },
      11    "employmentType": "FULL_TIME",
      12    "datePosted": "2023-07-04",
      13    "validThrough": "2023-07-11T00:00",
      14    "hiringOrganization": {
      15        "@type": "Organization",
      16        "name": "株式会社〇〇"
      17    },
      18    "jobLocation": {
      19        "@type": "Place",
      20        "address": {
      21            "@type": "PostalAddress",
      22            "addressLocality": "大阪市北区",
      23            "streetAddress": "〇〇町△△丁目✕✕番□□号"
      24        }
      25    },
      26    "baseSalary": {
      27        "@type": "MonetaryAmount",
      28        "currency": "JPY",
      29        "value": {
      30            "@type": "QuantitativeValue",
      31            "minValue": 4000000,
      32            "maxValue": 6000000,
      33            "unitText": "YEAR"
      34        }
      35    }
      36}
      • 修正内容
        • description: 中身が違うため修正
        • identifier: 項目がないため追加
        • datePosted: 項目がないため追加
        • baseSalary.value.unitText: フォーマットが違うため修正
        • validThrough: 項目がないため追加
        • workHours: 余計な項目のため削除
        • workHoursDescription: 余計な項目のため削除
        • jobLocationType: 余計な項目のため削除
        • jobLocationAccessibility: 余計な項目のため削除
        • qualifications: 余計な項目のため削除
        • benefits: 余計な項目のため削除
        • jobLocationInstructions: 余計な項目のため削除
        • jobImmediateStart: 余計な項目のため削除
    ハク(エンジニア)

    ハク(エンジニア)

    おすすめ記事