

# 自分の経験年数に合うNaukriの求人を探す方法

Naukriの経験年数設定で検索を絞り込みます。その後、各求人に実際に記載された年数範囲と、その他の条件を読みます。両方を読んで初めて、条件に合う可能性がある求人と判断してください。フィルターで表示されたからといって、企業が応募を認めるとは限りません。

Actorは、公開データを収集するホスティング型プログラムです。ここで使うActorは[Naukri Jobs Scraper](https://apify.com/chronometrica/naukri-jobs-scraper)です。Naukriの公開ページを読み取ります。Naukriへのログインは使いません。Apifyから起動します。APIは、あるプログラムが別のプログラムに処理を依頼するための仕組みです。このActorにはApifyのAPIを通じてアクセスします。Naukriの公式APIではありません。インドのすべての求人を網羅するものでもありません。企業の非公開データベースでもありません。

Taskは、入力設定を保存したものです。現在のTaskは[Naukri Jobs by Experience Level Dataset](https://apify.com/chronometrica/naukri-jobs-scraper/examples/naukri-jobs-by-experience-level-dataset)です。Taskが行うのは検索の開始だけです。Actorは取得元のレコードを保存します。この記事で説明する確認作業は、あなた自身が行います。Actorは、あなたが条件に合うかどうかを判断しません。応募も送信しません。

1行は、保存された1件の求人レコードです。「条件に合う可能性がある」とは、そのレコードがここで実施できる確認を通過したという意味です。面接を受けられるという意味ではありません。

キャリアの初期段階にある人は、自分の経験年数が応募先の職種に合うか悩むことがあります。公開されている例として、[データサイエンス課程を卒業したばかりの人からの質問](https://www.reddit.com/r/FresherTechJobsIndia/comments/1ncge8k/recent_data_science_graduate_seeking_advice/)があります。この記事で扱うのは、経験年数の範囲を確認する手順だけです。新しいスキルの習得は別の課題です。

## ステップ1. 経験年数の数え方を書く

経験年数について確認したいことを1文で書きます。関連業務で実際に積んだ経験年数を明記してください。関連業務の経験年数とは、応募先の仕事に生かせる業務に従事した年数です。

インターンシップをどう数えるかを書きます。プロジェクトをどう数えるかを書きます。パートタイムの仕事をどう数えるかを書きます。勤務期間が重なる仕事をどう数えるかを書きます。企業がそのように指定していない限り、重なる期間を足し合わせて経験年数を長くしないでください。企業が数え方を示している場合は、その方法に従います。

この確認で扱うのは、条件への適合を判断する手順の1つです。スキル習得のための総合的な計画ではありません。

自分で明記した経験年数は、そのまま表に使います。検索欄に入力できるのは0から30までの整数です。後で示す架空例では、検索値を1とします。表では1.0を使います。自分の経験年数が整数でない場合も、条件に合わせるために表の年数を変えないでください。

## ステップ2. 小規模な検索を始める

職種の系統を1つ選びます。希望するインド国内の求人市場を選びます。掲載時期の範囲を短く設定します。

現在のActorは、次の入力を受け付けます。`searchTerm`には、1行につき1つの検索語句を入力します。最初の確認では1行だけ使ってください。`location`は省略できます。`maxItems`は、検索全体でActorが保存できる最大行数です。`maxItems`を省略すると、保存件数の上限がなくなります。必ず保存件数の上限を設定してください。`postedWithinDays`は文字列です。指定できる値は"0"、"1"、"3"、"7"、"15"、"30"です。"0"は、掲載時期を問わないという意味です。`experienceYears`は0から30までの整数です。0を指定すると、未経験者向けの検索設定になります。ここでの未経験者とは、取得元のサイトで経験年数なしとする設定を指します。`sortBy`にはrelevanceまたはdateを指定できます。`searchDepth`にはstandard、extended、deepを指定できます。standardは、最初の確認を狭い範囲で行う設定です。この方法ではstandardを使います。検索範囲をそれ以上広げる必要はありません。Actorは`excludeCompanies`も受け付けます。今回の確認では、このフィールドを経験年数の判断には使いません。

保存済みのTaskは、software engineerを検索します。設定は`experienceYears`が5、`postedWithinDays`が"7"、`sortBy`がdate、`searchDepth`がstandardです。都市は設定されていません。`maxItems`も設定されていません。職種を自分の希望する職種に置き換えます。その都市の求人市場に絞りたい場合だけ、都市を追加してください。5を自分の経験年数に対応する整数に置き換えます。`maxItems`を2に設定してください。

最初の確認には、次のような入力を使います。職種、都市、経験年数は仮の値です。自分の値を入力してください。都市で絞り込まない場合は、`location`を削除します。未経験者向けの設定には0を使います。

```json
{
  "searchTerm": "your role",
  "location": "your city",
  "maxItems": 2,
  "postedWithinDays": "7",
  "experienceYears": 1,
  "sortBy": "date",
  "searchDepth": "standard"
}
```

ステップ2. 小規模な検索を始める

`postedWithinDays`の値を囲む引用符は残してください。Actorが受け付けるのは文字列であり、引用符のない数値ではありません。

検証した検索例では、別の入力を使いました。検索語句はsoftware engineerの1つです。都市は指定しませんでした。`postedWithinDays`は"0"、`maxItems`は2、`sortBy`はrelevance、`searchDepth`はstandardでした。`experienceYears`は設定しませんでした。異なる2つのNaukri求人IDが保存されました。職名、企業名、勤務地が含まれていました。各レコードには、Naukriの求人ページに直接つながる`jobUrl`がありました。各`sourceUrl`は、指定した検索条件と一致していました。取得元はnaukri.comでした。各レコードに`observedAt`がありました。両方のレコードに`descriptionText`がありました。`experienceRaw`のテキストにも、0-5と0-2という年数範囲が含まれていました。検索は成功しました。2行を保存しました。1ページをリクエストしました。20件の求人を確認しました。失敗したリクエストはありませんでした。ブロックされたリクエストもありませんでした。停止理由は`max_items_reached`でした。これは、保存件数の上限に達したという意味です。この2行は、条件に合う求人のすべてではありません。この例では`experienceYears`を送信していません。経験年数のフィルターによって取得されるレコードが変わったことは示していません。未経験者が条件に合うことも証明していません。

## ステップ3. 検索結果を読む

経験年数を確認する前に、結果に関する注記を読みます。送信したフィルターを記録してください。保存件数の上限も記録します。検索が停止した理由も記録します。

結果が空の場合、その検索ではレコードが保存されなかったという意味です。求人が存在しないことの証明にはなりません。ブロックされた結果は、リクエストが失敗したか、ブロックされたことを意味します。この取得できなかった部分を、確認済みのゼロ件として扱わないでください。上限に達した結果は、保存件数の上限に達したことを意味します。検証した例も上限に達していました。確認の対象は保存されたレコードだけにしてください。すべての求人を含むデータとは呼ばないでください。

経験年数のフィルターは、取得元が返す内容を絞り込むことがあります。ただし、各条件を読む作業の代わりにはなりません。未経験者向けの検索でも、広い年数範囲が表示されることがあります。求人の本文は引き続き読む必要があります。

次のフィールドが確認に役立ちます。一部のフィールドは含まれていない場合があります。

`schemaVersion`は、レコードの構造を示します。経験年数の判定結果ではありません。`jobId`は、取得元の求人IDです。`title`、`companyName`、`location`は、求人の職名、企業名、勤務地を示します。`experienceRaw`は、取得元にあった経験年数のテキストです。`experienceMinYears`と`experienceMaxYears`は、テキストを解析して得た数値です。解析とは、プログラムがテキストを数値に変換することです。`skills`には、取得元に表示されている場合にスキルが列挙されます。スキルを点数に換算しないでください。`descriptionText`は、Actorが保存した求人説明のテキストです。このフィールドがあるだけでは、すべての条件を取得できたとはいえません。企業の説明全文ではない場合もあります。`postedAt`と`postedAtRaw`は、取得元に表示された日付のテキストです。`observedAt`は、Actorがそのレコードを記録した時刻です。これらの日時は、求人が引き続き募集されていることを保証しません。`jobUrl`は、求人ページへの直接リンクです。`sourceUrl`は、指定した検索条件の検索ページです。`searchTerm`と`searchLocation`は、何を検索するよう指定したかを示します。希望する職種と求人市場に一致しているか確認してください。`pageNumber`と`rankOnPage`は、その検索での掲載位置を示します。採用される可能性ではありません。`status`と`statusReason`は、保存されたレコードの状態を示します。通常の公開求人ではないレコードは除外してください。`source`は、読むつもりだった公開ページを指している必要があります。

日付と経験年数は、取得元に表示されていた情報です。採用の保証ではありません。

## ステップ4. 原文を数値と並べて保存する

`experienceRaw`を、解析して得た2つの数値と並べて保存します。保存された求人説明を読みます。その後、公開されている求人ページを読みます。

5つの場合を区別します。上下限のある範囲には、0-2年のように下限と上限があります。下限だけを示す表現は、"1+"のように最低年数だけを指定します。上限だけを示す表現は、最高年数だけを指定します。値が欠けている場合は、経験年数の根拠となる情報がないということです。矛盾がある場合は、原文と解析して得た数値が一致していません。

欠けている下限や上限を0で埋めないでください。解析して得た数値に、企業のすべての条件が反映されていると思い込まないでください。

## ステップ5. 年数範囲の条件を判定する

数値による判定は、原文と解析して得た数値が一致する場合だけ行います。

上下限のある範囲では、min <= 自分の経験年数 <= maxを判定します。下限と同じ年数は範囲内です。上限と同じ年数も範囲内です。条件を満たした場合のラベルは`numeric_range_match`です。このラベルは、自分の経験年数が上下限のある範囲内に収まっていることだけを示します。企業が応募を認めるという意味ではありません。

下限だけを示す表現では、自分の経験年数 >= minだけを判定します。原文にその条件が示されている場合だけ、この判定を行ってください。上限がnullの場合は、上限の数値が解析で得られなかったという意味です。nullは0ではありません。

上限だけを示す表現では、自分の経験年数 <= maxだけを判定します。原文にその条件が示されている場合だけ、この判定を行ってください。根拠なく下限を0にしないでください。

表現が不明確な場合のラベルは`needs_review`です。原文と解析して得た数値が矛盾する場合も、ラベルは`needs_review`です。数値が負の場合は、その範囲を使わないでください。minがmaxより大きい場合は、上下限が逆転しています。逆転した範囲を、条件への適合を判断するデータとして使わないでください。minが5、maxが2のように逆転した組み合わせは、条件を満たせる判定ではありません。

## ステップ6. 記載されている他の条件を加える

次に、求人に記載されている、経験に関する他の条件を読みます。特定の業務での経験年数を求める条件もあります。資格を求める場合もあります。特定の職種での最低経験年数を定めている場合もあります。

2つのラベルを区別してください。`numeric_range_match`は、数値の判定だけを意味します。`employer_requirements_checked`は、追加条件を読んだことを意味します。

追加の各記述を分類します。「必須」は、企業が必ず必要だと示している条件です。「歓迎」は、企業があると望ましいと示している条件です。「不明」は、本文からどちらか判断できない場合です。すべての記述を必須条件として扱わないでください。

0-5年の範囲内でも、必須の業務経験が足りない場合があります。必須資格を持っていない場合もあります。歓迎条件としての年数範囲なら、外れていても必ず応募対象外になるとは限りません。分類をメモに書いてください。数値が合うことは、企業が応募を認めることではありません。

## ステップ7. 6件の架空求人から表を作る

実際に取得したレコードで表を作ります。実際の求人IDと`jobUrl`を使ってください。原文、解析して得た数値、自分の経験年数、年数範囲の判定、その他の根拠情報、確認結果、次の対応を記録します。判断できていないレコードも表に残します。採用される可能性を推測してレコードを順位付けしないでください。この表には、独自の非公開スコアを入れません。

以下の6件の求人は、この記事のために作った架空のものです。学習用のレコードです。Actorの出力ではありません。実在するNaukriの求人ではありません。実際にアクセスできるURLもありません。この結果を、製品を実行して得た結果として扱わないでください。

この架空例の学習者には、関連業務の経験が1.0年あります。この数値は、その人がすでに書いた数え方に従っています。検索欄には整数の1を使います。以下の判定では1.0を使います。

J1の原文は"0-2 years"で、minは0、maxは2です。原文と数値が一致しています。判定式は0 <= 1.0 <= 2です。1.0は両端の間にあるため、この式は成り立ちます。年数範囲の判定は`numeric_range_match`です。この架空例では、J1に満たせない追加条件はありません。J1は、条件に合う可能性がある求人として残せます。実際のレコードでは、保存されたテキストが不完全な場合があるため、公開中のページを読む必要があります。

J2の原文は"2-4 years"で、minは2、maxは4です。原文と数値が一致しています。判定式は2 <= 1.0 <= 4です。1.0は2を下回るため、この式は成り立ちません。年数範囲の判定は`below_range`です。J2は、条件に合う可能性がある求人ではありません。ちょうど2.0年なら下限と一致し、判定を通過します。この学習者には2.0年の経験はありません。

J3の原文は"0-5 years"で、minは0、maxは5です。原文と数値が一致しています。判定式は0 <= 1.0 <= 5です。この式は成り立ちます。年数範囲の判定は`numeric_range_match`です。ただし、求人説明では関連分野での経験2年も必須としています。関連分野での経験年数とは、指定された種類の業務に従事した年数です。この架空例では、この条件を歓迎条件ではなく必須条件としています。学習者の経験は1.0年で、2年を下回ります。必須条件を満たしていません。J3は、条件に合う可能性がある求人ではありません。数値の範囲には引き続き合っていますが、追加条件は満たしていません。

J4の原文は"1+ years"で、minは1、maxはnullです。プラス記号のある表現は下限を示します。上下限のある範囲ではありません。判定式は1.0 >= 1です。この式は成り立ちます。年数範囲の判定は、下限条件に適合です。上限のnullは0ではありません。maxを0と書くと、1 <= 1.0 <= 0という成り立たない判定式になり、本来は下限条件に合う求人を除外してしまいます。そのようにしないでください。

J5には経験年数のテキストがありません。下限もありません。上限もありません。判定は不明です。不明は0ではありません。0と0を書き込むと、根拠のない判定式を作ることになります。未経験者が、偶然にも条件に完全に合うように見えるかもしれません。経験1.0年の人が、偶然にも範囲を下回るように見えるかもしれません。根拠となる情報がないため、判定は行いません。J5は未解決のまま残します。

J6の原文は"3-5 years"ですが、解析して得た数値はminが0、maxが5です。これらは一致していません。解析結果の0-5を信じると、1.0は数値の条件に合うように見えます。原文の3-5を信じると、1.0は範囲を下回ります。2つの判定が食い違います。判定は`needs_review`です。J6は条件に合う求人とはしません。都合のよい範囲を選ばないでください。

| 求人 | 原文の年数範囲 | 解析した下限 | 解析した上限 | 応募者の経験年数 | 年数範囲の判定 | その他の条件 | 確認結果 | 次の対応 |
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
| J1 | 0-2 years | 0 | 2 | 1.0 | numeric_range_match | この架空例ではなし | 条件に合う可能性あり | 応募前に公開中の求人ページを読む |
| J2 | 2-4 years | 2 | 4 | 1.0 | below_range | この架空例ではなし | 条件に合わない | この数値では候補に加えない |
| J3 | 0-5 years | 0 | 5 | 1.0 | numeric_range_match | 必須：関連分野での経験2年 | 条件を満たさない | 数値の確認メモは残すが、条件に合う求人とはしない |
| J4 | 1+ years | 1 | null | 1.0 | 下限条件に適合 | この架空例ではなし | 条件に合う可能性あり | 応募前に公開中の求人ページを読む |
| J5 | 記載なし | 値なし | 値なし | 1.0 | 不明 | 根拠となる情報なし | 未解決 | 取得元のページを自分で読む |
| J6 | 3-5 years | 0 | 5 | 1.0 | 矛盾あり | 原文と解析して得た数値が一致しない | needs_review | どちらの範囲も選ばない |

確認した求人は6件です。J1とJ3は、原文と数値が一致する上下限付きの範囲で、1.0は両方の範囲内にあります。つまり、上下限のある数値範囲に合う求人は2件です。J4は、下限条件への適合が確認できた1件です。J2は範囲を下回ります。J5とJ6は未解決です。J5が未解決なのは、経験年数の根拠となる情報がすべて欠けているためです。J6が未解決なのは、原文と解析して得た数値が一致しないためです。

追加の必須条件を確認すると、J3は候補から外れます。J1とJ4が、条件に合う可能性のある求人として残ります。この架空例では6件中2件です。6件中2件というのは、この架空の確認作業で得た結果です。企業が応募を認める求人の割合ではありません。Naukriの求人全体でも同じ割合になると期待できるものではありません。

同じ架空例でも、経験0年の場合は新たに判定する必要があります。経験1年の判定結果を使い回さないでください。経験0年でも、J1は0 <= 0 <= 2のため、引き続き条件に合います。J2は引き続き2年を下回ります。J3は0 <= 0 <= 5のため、引き続き上下限のある数値範囲に合います。ただし、必須の関連分野での経験2年は、引き続き満たしません。J4は、0が>= 1を満たさないため、条件に合いません。J5は引き続き不明です。J6も引き続き矛盾があります。この同じ架空例で経験0年の場合、条件に合う可能性がある求人として残るのはJ1だけです。J4は経験1.0年なら条件に合う可能性がありましたが、経験0年ではその可能性はありません。

## ステップ8. 応募前に1件の求人を読む

条件に合う可能性がある求人を、自分で確認します。求人ページで、企業の現在の応募手順を読んでください。[自分の経験を裏付ける情報を、1件ずつ求人の条件と照合します](/ja/articles/%E6%B1%82%E4%BA%BA-%E3%82%B9%E3%82%AD%E3%83%AB%E7%85%A7%E5%90%88-%E5%80%99%E8%A3%9C%E3%81%AE%E7%B5%9E%E3%82%8A%E8%BE%BC%E3%81%BF/)。複数の職種を見て学習すべきことを選ぶ作業は、別に行ってください。

この記事で作るのは、年数範囲を確認した求人のリストまでです。給与は推定しません。スキルを採点しません。面接も保証しません。

## 次に行うこと

[Naukri Jobs Scraper](https://apify.com/chronometrica/naukri-jobs-scraper)を開き、[Naukri Jobs by Experience Level Dataset](https://apify.com/chronometrica/naukri-jobs-scraper/examples/naukri-jobs-by-experience-level-dataset)のTaskから始めます。職種、求人市場、経験年数を変更します。maxItemsを2に設定してください。取得された求人を1件開きます。経験年数の原文と、企業の条件を読みます。読み終えてから、その求人を条件に合う可能性がある求人のリストに加えてください。

## 出典と参考資料

- [Naukri Jobs Scraper](https://apify.com/chronometrica/naukri-jobs-scraper)
- [Naukri Jobs by Experience Level Dataset](https://apify.com/chronometrica/naukri-jobs-scraper/examples/naukri-jobs-by-experience-level-dataset)
- [データサイエンス課程を卒業したばかりの人からの相談](https://www.reddit.com/r/FresherTechJobsIndia/comments/1ncge8k/recent_data_science_graduate_seeking_advice/)