
GitHub CopilotとChatGPTでGoogle for Jobsの求人情報を作ってみた
2023.07.14
流れ
- データ作成
求人情報を適当に探し、コピーをする
↓
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”
} - 整形後12345678910{"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"}
プログラム実装(Github Copilot)
- データ作成編のjsonをGoogle for Jobs形式に変換するプログラムを実装1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768# 自動生成START# ソースコード内で必要なモジュールをすべてインポートしてくださいimport datetimeimport json# 自動生成END# 手動入力STARTjson_str = "{" + \" \"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\"" + \"}" # ここにjsonテキストを貼り付ける# 手動入力END# 自動生成START# json変数をGoogle for Jobs形式に変換してくださいdata = json.loads(json_str)data["@context"] = "http://schema.org/"data["@type"] = "JobPosting"data["baseSalary"] = {"@type": "MonetaryAmount","currency": "JPY","value": {"@type": "QuantitativeValue","minValue": data["salary_min"],"maxValue": data["salary_max"],"unitText": data["salary_type"]}}data["datePosted"] = datetime.datetime.now().strftime("%Y-%m-%d")data["validThrough"] = (datetime.datetime.strptime(data["datePosted"], "%Y-%m-%d") + datetime.timedelta(days=7)) \.strftime("%Y-%m-%dT00:00")data["jobLocation"] = {"@type": "Place","address": {"@type": "PostalAddress","addressLocality": data["location"]}}data["hiringOrganization"] = {"@type": "Organization","name": data["name"]}# 自動生成されたコードの間手動で追加STARTdata["identifier"] = {"@type": "PropertyValue","name": data["name"],"value": "1234567"}# 自動生成されたコードの間手動で追加ENDdel data["salary_min"]del data["salary_max"]del data["salary_type"]del data["name"]del data["location"]# 自動生成END# 手動入力STARTprint(data)# 手動入力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'}}
- 整形後(表示項目を並び替えてる)1234567891011121314151617181920212223242526272829303132333435{"@context": "http://schema.org/","@type": "JobPosting","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>","identifier": {"@type": "PropertyValue","name": "株式会社〇〇","value": "1234567"},"datePosted": "2023-07-04","validThrough": "2023-07-11T00:00","employment_type": "FULL_TIME","hiringOrganization": {"@type": "Organization","name": "株式会社〇〇"},"jobLocation": {"@type": "Place","address": {"@type": "PostalAddress","addressLocality": "大阪府大阪市北区〇〇町△△丁目✕✕番□□号"}},"baseSalary": {"@type": "MonetaryAmount","currency": "JPY","value": {"@type": "QuantitativeValue","minValue": data["salary_min"],"maxValue": data["salary_max"],"unitText": "YEAR"}}}
ところで・・・
- 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
} - 整形後123456789101112131415161718192021222324252627282930313233343536373839404142{"@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}
- 中身が違ったりフォーマットが間違ってたり余計な項目が入ってたり足りない項目があったりするが、手動で修正すればOK
- 手動で修正後123456789101112131415161718192021222324252627282930313233343536{"@context": "https://schema.org/","@type": "JobPosting","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>","identifier": {"@type": "PropertyValue","name": "株式会社〇〇","value": "1234567"},"employmentType": "FULL_TIME","datePosted": "2023-07-04","validThrough": "2023-07-11T00:00","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": "YEAR"}}}
- 修正内容
- description: 中身が違うため修正
- identifier: 項目がないため追加
- datePosted: 項目がないため追加
- baseSalary.value.unitText: フォーマットが違うため修正
- validThrough: 項目がないため追加
- workHours: 余計な項目のため削除
- workHoursDescription: 余計な項目のため削除
- jobLocationType: 余計な項目のため削除
- jobLocationAccessibility: 余計な項目のため削除
- qualifications: 余計な項目のため削除
- benefits: 余計な項目のため削除
- jobLocationInstructions: 余計な項目のため削除
- jobImmediateStart: 余計な項目のため削除
- 修正内容
書いた人はこんな人

- お酒が友達のバックエンドエンジニアです。
インフラとお友達になりたい…。
最近暑いので水分補給と酔分補給を怠らないようにしましょう。
IT技術7月 12, 2023GitHub CopilotとChatGPTでGoogle for Jobsの求人情報を作ってみた
IT技術7月 10, 2023GitHub Copilotを使ってみた
IT技術6月 16, 2023【macOS】LocalStack+terraformでEC2+RDSを立ててみた