S3 の静的ウェブサイトホスティングは、「ブロックパブリックアクセスを緩める → 読み取りを許可するバケットポリシーを付ける → インデックスドキュメントを指定する → ファイルを置く」の4つがそろうと表示されます。 403 はたいてい前の2つ(公開の許可)、404 は後ろの2つ(ウェブサイト設定とファイルの場所)のどこかが欠けているときに返ります。

この記事では、バケット作成から公開までを AWS CLI のコマンドだけで通し、設定を確かめるコマンドとその出力を載せます。後半では 403 と 404 の原因を早見表にまとめ、リダイレクトの JSON 例、リージョンごとのエンドポイントの書式も一覧にします。

確認環境:Linux、AWS CLI 1.46.1。AWS の API をローカルで再現するツール(moto 5.2.3)で実行しています。掲載するコマンドは実際の AWS でそのまま使える形です。ウェブサイトエンドポイントが返す HTTP の応答(403・404・リダイレクト)は、AWS の公式ドキュメントの記載にもとづいています。

設定コマンドと 403・404 の早見表

設定の流れです。上から順に実行します。

順番 やること コマンド 確かめるコマンド
1 バケットを作る aws s3 mb aws s3api get-bucket-location
2 ブロックパブリックアクセスを緩める aws s3api put-public-access-block aws s3api get-public-access-block
3 読み取りを許可するポリシーを付ける aws s3api put-bucket-policy aws s3api get-bucket-policy
4 ウェブサイトホスティングを有効にする aws s3 website または aws s3api put-bucket-website aws s3api get-bucket-website
5 ファイルを置く aws s3 sync aws s3 ls --recursive

エラーが出たときの最初の切り分けです(くわしい表は後半にあります)。

応答 まず疑うところ 確かめるコマンド
403 Forbidden ブロックパブリックアクセス、バケットポリシー get-public-access-block、get-bucket-policy
404 Not Found ウェブサイト設定、インデックスドキュメント、キーの階層 get-bucket-website、aws s3 ls --recursive
XML のエラーが表示される REST エンドポイントの URL を開いている URL に s3-website が入っているかを見る

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「S3静的ウェブサイトホスティングをAWS CLIで設定|403・404の原因」

公開するファイルを用意する

次の構成のフォルダ site を作ります。

site/
├── index.html
├── error.html
├── assets/
│   └── style.css
└── blog/
    └── index.html

site/index.html:

<!doctype html>
<html lang="ja"><head><meta charset="utf-8"><title>Example Site</title>
<link rel="stylesheet" href="/assets/style.css"></head>
<body><h1>Hello from S3</h1><p><a href="/blog/">Blog</a></p></body></html>

site/error.html:

<!doctype html>
<html lang="ja"><head><meta charset="utf-8"><title>Not Found</title></head>
<body><h1>ページが見つかりません</h1><p><a href="/">トップへ戻る</a></p></body></html>

site/blog/index.html:

<!doctype html>
<html lang="ja"><head><meta charset="utf-8"><title>Blog</title></head>
<body><h1>Blog</h1></body></html>

site/assets/style.css:

body { font-family: sans-serif; }

手順1:バケットを作る

aws s3 mb s3://example-site-bucket --region ap-northeast-1
make_bucket: example-site-bucket

バケット名は全世界で重複できないので、実際には自分用の名前に置き換えます。リージョンはあとでエンドポイントの URL に使うので、確かめておきます。

aws s3api get-bucket-location --bucket example-site-bucket
{
    "LocationConstraint": "ap-northeast-1"
}

この時点では、ウェブサイト設定もバケットポリシーもありません。確認コマンドは次のように「設定がない」ことを知らせます。この2つのメッセージは、あとの切り分けでも目印になります。

aws s3api get-bucket-website --bucket example-site-bucket
An error occurred (NoSuchWebsiteConfiguration) when calling the GetBucketWebsite operation: The specified bucket does not have a website configuration
aws s3api get-bucket-policy --bucket example-site-bucket
An error occurred (NoSuchBucketPolicy) when calling the GetBucketPolicy operation: The bucket policy does not exist

手順2:ブロックパブリックアクセスを緩める(put-public-access-block)

ブロックパブリックアクセスは、バケットがうっかり公開されるのを防ぐ4つの設定です。公式ドキュメントのとおり、新しいバケットは既定で公開を許可しません。

設定 true のときの動き ポリシーで公開するとき
BlockPublicAcls 公開 ACL を付ける操作を拒否する true のままでよい
IgnorePublicAcls 付いている公開 ACL を無視する true のままでよい
BlockPublicPolicy 公開を許可するバケットポリシーの設定を拒否する false にする
RestrictPublicBuckets 公開ポリシーのあるバケットへのアクセスを、AWS のサービスとアカウント内の利用者に限る false にする

バケットポリシーで公開する場合、緩めるのはポリシーに関する2つだけで足ります。ACL に関する2つは true のまま残します。

pab-off.json:

{
  "BlockPublicAcls": true,
  "IgnorePublicAcls": true,
  "BlockPublicPolicy": false,
  "RestrictPublicBuckets": false
}
aws s3api put-public-access-block --bucket example-site-bucket \
  --public-access-block-configuration file://pab-off.json

aws s3api get-public-access-block --bucket example-site-bucket
{
    "PublicAccessBlockConfiguration": {
        "BlockPublicAcls": true,
        "IgnorePublicAcls": true,
        "BlockPublicPolicy": false,
        "RestrictPublicBuckets": false
    }
}

この手順を飛ばして先にバケットポリシーを付けようとすると、BlockPublicPolicy によって put-bucket-policy が拒否されます。 順番は「緩める → ポリシー」です。

ブロックパブリックアクセスはアカウント単位でも設定でき、バケットとアカウントで設定が違うときは厳しいほうが使われます。バケット側を false にしても 403 が続くときは、アカウント単位の設定も見ます。

手順3:読み取りを許可するバケットポリシーを付ける(put-bucket-policy)

だれでもオブジェクトを読めるようにするポリシーです。

public-read.json:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "PublicReadGetObject",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::example-site-bucket/*"
    }
  ]
}
aws s3api put-bucket-policy --bucket example-site-bucket --policy file://public-read.json

aws s3api get-bucket-policy --bucket example-site-bucket --query Policy --output text
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "PublicReadGetObject",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::example-site-bucket/*"
    }
  ]
}

見るところは2つです。

  • Resource の末尾が /* になっているか。s3:GetObject はオブジェクトに対する操作なので、バケットの ARN(arn:aws:s3:::example-site-bucket)だけでは対象になりません
  • バケット名が自分のものになっているか。ほかの記事から写したままだと、別のバケットを指してしまいます

get-bucket-policy は Policy を1つの文字列で返すので、--query Policy --output text を付けると JSON として読みやすくなります。

手順4:ウェブサイトホスティングを有効にする

aws s3 website で設定する

インデックスドキュメント(フォルダの URL を開いたときに返すファイル)とエラードキュメントを指定します。

aws s3 website s3://example-site-bucket/ \
  --index-document index.html --error-document error.html

aws s3api get-bucket-website --bucket example-site-bucket
{
    "IndexDocument": {
        "Suffix": "index.html"
    },
    "ErrorDocument": {
        "Key": "error.html"
    }
}

aws s3 website は成功しても何も表示しないので、get-bucket-website で設定が入ったことを確かめます。

put-bucket-website の JSON で設定する

同じ設定を JSON で書くと次のようになります。リダイレクトのルールを足すときはこちらを使います。

website.json:

{
  "IndexDocument": { "Suffix": "index.html" },
  "ErrorDocument": { "Key": "error.html" }
}
aws s3api put-bucket-website --bucket example-site-bucket \
  --website-configuration file://website.json

Suffix という名前のとおり、インデックスドキュメントはフォルダごとに探されます。/blog/ を開くと blog/index.html が返ります。公式ドキュメントによると、名前は大文字と小文字を区別し、index.html と設定したら Index.html は対象になりません。

手順5:ファイルをアップロードする(sync)

aws s3 sync site/ s3://example-site-bucket/ --delete
upload: site/blog/index.html to s3://example-site-bucket/blog/index.html
upload: site/error.html to s3://example-site-bucket/error.html
upload: site/assets/style.css to s3://example-site-bucket/assets/style.css
upload: site/index.html to s3://example-site-bucket/index.html

--delete は、手元にないファイルをバケットからも消すオプションです。置いた結果を確かめます。

aws s3 ls s3://example-site-bucket/ --recursive
2026-10-05 15:46:14         34 assets/style.css
2026-10-05 15:46:14        121 blog/index.html
2026-10-05 15:46:14        196 error.html
2026-10-05 15:46:14        219 index.html

index.html がバケットの直下にあることが大事です。ブラウザが HTML として表示するには Content-Type も必要で、aws s3 sync は拡張子から自動で付けます。

aws s3api head-object --bucket example-site-bucket --key index.html \
  --query '[ContentType,ContentLength]' --output text
aws s3api head-object --bucket example-site-bucket --key assets/style.css \
  --query ContentType
text/html   219
"text/css"

キーの階層がずれる例

コピー先にフォルダ名を付けると、キーが1階層深くなります。--dryrun で、どこに置かれるかを先に見られます。

aws s3 sync site s3://example-site-bucket/site --dryrun
(dryrun) upload: site/assets/style.css to s3://example-site-bucket/site/assets/style.css
(dryrun) upload: site/blog/index.html to s3://example-site-bucket/site/blog/index.html
(dryrun) upload: site/error.html to s3://example-site-bucket/site/error.html
(dryrun) upload: site/index.html to s3://example-site-bucket/site/index.html

この形で置くと、index.html のキーは site/index.html になり、サイトのトップ(/)にはインデックスドキュメントが見つからなくなります。フォルダそのものではなく、フォルダの中身をバケットの直下に置くのがポイントです。

ウェブサイトエンドポイントの URL を組み立てる

公開された URL は、REST API 用の URL とは別の「ウェブサイトエンドポイント」です。書式はリージョンによって2種類あります。

書式 形
ハイフン区切り http://バケット名.s3-website-リージョン.amazonaws.com
ドット区切り http://バケット名.s3-website.リージョン.amazonaws.com

AWS の一般リファレンス(S3 のエンドポイント一覧)によると、ハイフン区切りは次の9リージョンで、それ以外はドット区切りです。

書式 リージョン
ハイフン区切り us-east-1、us-west-1、us-west-2、ap-southeast-1、ap-southeast-2、ap-northeast-1、eu-west-1、sa-east-1、us-gov-west-1
ドット区切り 上記以外(us-east-2、ap-northeast-2、ap-northeast-3、ap-south-1、ca-central-1、eu-central-1、eu-west-2、eu-west-3、eu-north-1 など)

日本のリージョンで見ると、東京と大阪で書式が違います。

リージョン ウェブサイトエンドポイント
東京(ap-northeast-1) s3-website-ap-northeast-1.amazonaws.com
大阪(ap-northeast-3) s3-website.ap-northeast-3.amazonaws.com
バージニア北部(us-east-1) s3-website-us-east-1.amazonaws.com
オハイオ(us-east-2) s3-website.us-east-2.amazonaws.com
シンガポール(ap-southeast-1) s3-website-ap-southeast-1.amazonaws.com
ソウル(ap-northeast-2) s3-website.ap-northeast-2.amazonaws.com
フランクフルト(eu-central-1) s3-website.eu-central-1.amazonaws.com
アイルランド(eu-west-1) s3-website-eu-west-1.amazonaws.com

バケットのリージョンから URL を組み立てるスクリプトです。

website-url.sh:

#!/usr/bin/env bash
# 使い方: ./website-url.sh バケット名
set -euo pipefail
BUCKET="$1"
REGION=$(aws s3api get-bucket-location --bucket "$BUCKET" \
  --query LocationConstraint --output text)
# us-east-1 のバケットは LocationConstraint が空で返る
[ "$REGION" = "None" ] && REGION="us-east-1"
case "$REGION" in
  us-east-1|us-west-1|us-west-2|ap-southeast-1|ap-southeast-2|ap-northeast-1|eu-west-1|sa-east-1|us-gov-west-1)
    SEP="-" ;;
  *)
    SEP="." ;;
esac
echo "http://${BUCKET}.s3-website${SEP}${REGION}.amazonaws.com"

東京・大阪・バージニア北部に作ったバケットで実行した結果です。

chmod +x website-url.sh
./website-url.sh example-site-bucket
./website-url.sh example-site-osaka
./website-url.sh example-site-virginia
http://example-site-bucket.s3-website-ap-northeast-1.amazonaws.com
http://example-site-osaka.s3-website.ap-northeast-3.amazonaws.com
http://example-site-virginia.s3-website-us-east-1.amazonaws.com

出てきた URL をブラウザで開くと、index.html が表示されます。

REST エンドポイントとの違い

https://バケット名.s3.ap-northeast-1.amazonaws.com/ のような REST API 用の URL は、ウェブサイトとしての動きをしません。公式ドキュメントの比較表の要点です。

比べる点 REST API エンドポイント ウェブサイトエンドポイント
ホスト名 s3.リージョン s3-website-リージョン または s3-website.リージョン
ルート(/)へのリクエスト オブジェクトキーの一覧を返す インデックスドキュメントを返す
エラーの形式 XML HTML
リダイレクト 対象外 オブジェクト単位・バケット単位で使える
受け付ける操作 バケットとオブジェクトのすべての操作 オブジェクトへの GET と HEAD のみ
公開範囲 公開・非公開の両方 公開されているコンテンツのみ
HTTPS 使える 使えない(HTTP のみ)

XML のエラーが表示されたら、開いているのは REST エンドポイントです。 URL のホスト名に s3-website が入っているかを見てください。HTTPS で配信したいときは、公式ドキュメントが案内しているとおり、CloudFront などを S3 の前に置きます。

403・404 の原因と直し方の早見表

403 Forbidden が返るとき

症状・原因 確認コマンド 直し方
ブロックパブリックアクセスが有効のまま aws s3api get-public-access-block --bucket バケット名 で BlockPublicPolicy と RestrictPublicBuckets を見る 2つを false にする(手順2)。アカウント単位の設定も見る
バケットポリシーがない aws s3api get-bucket-policy --bucket バケット名 が NoSuchBucketPolicy になる 読み取りを許可するポリシーを付ける(手順3)
ポリシーの Resource に /* がない get-bucket-policy の Resource を見る arn:aws:s3:::バケット名/* に直す
ポリシーのバケット名が違う get-bucket-policy の Resource を見る 自分のバケット名に直す
別の Statement に Deny がある get-bucket-policy で "Effect": "Deny" を探す 明示的な拒否は許可より優先されるので、条件を見直す
オブジェクトの所有者がバケットの所有者と違う aws s3api get-bucket-ownership-controls --bucket バケット名 バケットポリシーはバケット所有者のオブジェクトにだけ効く。オブジェクト所有権を「バケット所有者の強制」にして置き直す
存在しないパスなのに 404 ではなく 403 になる aws s3 ls s3://バケット名/キー でキーの有無を見る 公開側に一覧の権限(s3:ListBucket)がないと、存在しないオブジェクトへの応答が 403 になる。キーの名前(大文字と小文字)と置き場所を直す
リクエスタ支払いが有効 aws s3api get-bucket-request-payment --bucket バケット名 匿名のリクエストは拒否されるので、公開するなら無効にする

最後の2行は、AWS のナレッジセンターに載っている原因です。「ポリシーは合っているのに特定の URL だけ 403」というときは、ファイルが存在しない可能性を先に確かめると近道です。

404 Not Found が返るとき

症状・原因 確認コマンド 直し方
ウェブサイトホスティングが有効になっていない aws s3api get-bucket-website --bucket バケット名 が NoSuchWebsiteConfiguration になる aws s3 website で設定する(手順4)
インデックスドキュメントが置かれていない aws s3 ls s3://バケット名/index.html バケットの直下に index.html を置く
インデックスドキュメントの名前が設定と違う get-bucket-website の Suffix と、aws s3 ls のファイル名を比べる 大文字と小文字まで一致させる
キーの階層が1つ深い(フォルダごと置いた) aws s3 ls s3://バケット名/ --recursive フォルダの中身を直下に置き直す。そのままにするなら URL にフォルダ名を付ける
サブフォルダに index.html がない aws s3 ls s3://バケット名/blog/ 階層ごとに同じ名前のインデックスドキュメントを置く
URL のバケット名やキーが違う aws s3 ls でバケット名とキーを見る URL を直す

そのほかの応答

公式ドキュメントに載っている、ウェブサイトエンドポイントの応答コードです。

応答 返るとき
301 Moved Permanently バケット名のないウェブサイトエンドポイントを直接開いたとき
302 Found /blog のように末尾のスラッシュがない URL で、blog/index.html が見つかったとき(/blog/ へ移動する)
400 バケットのリージョンと違うリージョンのエンドポイントを開いたとき
403 Forbidden リクエストされたオブジェクトが公開されていないとき
404 Not Found キーがない、インデックスドキュメントがない、バケットがない、ウェブサイトとして設定されていないとき

エラードキュメントが返されるのは 4XX 系のエラーのときだけです。ブラウザによっては、独自のエラー画面が優先されることがあります。

リダイレクトとエラードキュメントの JSON 例

条件つきのリダイレクト(RoutingRules)

RoutingRules を使うと、キーの先頭やエラーコードを条件にしてリダイレクトできます。ルールは1つの設定に 50 個まで書けます。

website-rules.json:

{
  "IndexDocument": { "Suffix": "index.html" },
  "ErrorDocument": { "Key": "error.html" },
  "RoutingRules": [
    {
      "Condition": { "KeyPrefixEquals": "docs/" },
      "Redirect": { "ReplaceKeyPrefixWith": "blog/", "HttpRedirectCode": "301" }
    },
    {
      "Condition": { "HttpErrorCodeReturnedEquals": "404", "KeyPrefixEquals": "images/" },
      "Redirect": { "ReplaceKeyWith": "error.html" }
    }
  ]
}

1つ目は docs/ で始まる URL を blog/ に付け替えるルール、2つ目は images/ 以下で 404 になったときに error.html へ送るルールです。

aws s3api put-bucket-website --bucket example-site-bucket \
  --website-configuration file://website-rules.json

aws s3api get-bucket-website --bucket example-site-bucket
{
    "IndexDocument": {
        "Suffix": "index.html"
    },
    "ErrorDocument": {
        "Key": "error.html"
    },
    "RoutingRules": [
        {
            "Condition": {
                "KeyPrefixEquals": "docs/"
            },
            "Redirect": {
                "HttpRedirectCode": "301",
                "ReplaceKeyPrefixWith": "blog/"
            }
        },
        {
            "Condition": {
                "HttpErrorCodeReturnedEquals": "404",
                "KeyPrefixEquals": "images/"
            },
            "Redirect": {
                "ReplaceKeyWith": "error.html"
            }
        }
    ]
}

Condition と Redirect に書ける項目です。

場所 項目 意味
Condition KeyPrefixEquals キーがこの文字列で始まるとき
Condition HttpErrorCodeReturnedEquals この HTTP エラーコードになったとき
Redirect ReplaceKeyPrefixWith 条件の先頭部分をこの文字列に置き換える
Redirect ReplaceKeyWith キー全体をこの文字列に置き換える
Redirect HostName 別のホストへ送る
Redirect Protocol http か https
Redirect HttpRedirectCode 応答に使うリダイレクトのコード

put-bucket-website は設定全体を置き換えます。RoutingRules だけを書いた JSON を送ると、インデックスドキュメントの指定がなくなるので、毎回すべての項目を書きます。

すべてのリクエストを別のホストへ送る(RedirectAllRequestsTo)

バケットをまるごと別のドメインへの転送専用にする設定です。このときは IndexDocument などを書きません。

website-redirect-all.json:

{
  "RedirectAllRequestsTo": { "HostName": "www.example.com", "Protocol": "https" }
}
aws s3api put-bucket-website --bucket example-site-bucket \
  --website-configuration file://website-redirect-all.json

aws s3api get-bucket-website --bucket example-site-bucket
{
    "RedirectAllRequestsTo": {
        "HostName": "www.example.com",
        "Protocol": "https"
    }
}

オブジェクト単位のリダイレクト(--website-redirect)

1つのオブジェクトだけを転送したいときは、アップロード時に --website-redirect を付けます。オブジェクトのメタデータ(x-amz-website-redirect-location)に転送先が記録されます。

aws s3 cp site/index.html s3://example-site-bucket/old.html --website-redirect /blog/

aws s3api head-object --bucket example-site-bucket --key old.html \
  --query WebsiteRedirectLocation
"/blog/"

転送先には、同じバケット内のキー(/ で始める)か、外部の URL を書けます。この転送が働くのはウェブサイトエンドポイントだけです。

公開をやめるとき

ウェブサイト設定とポリシーを削除すれば、公開は止まります。削除後の確認コマンドは、手順1で見た「設定がない」メッセージに戻ります。

aws s3api delete-bucket-website --bucket example-site-bucket
aws s3api get-bucket-website --bucket example-site-bucket
An error occurred (NoSuchWebsiteConfiguration) when calling the GetBucketWebsite operation: The specified bucket does not have a website configuration
aws s3api delete-bucket-policy --bucket example-site-bucket
aws s3api get-bucket-policy --bucket example-site-bucket
An error occurred (NoSuchBucketPolicy) when calling the GetBucketPolicy operation: The bucket policy does not exist

バケットごと片付けるときは aws s3 rb --force で、中のオブジェクトと一緒に削除できます。

aws s3 rb s3://example-site-bucket --force
delete: s3://example-site-bucket/assets/style.css
delete: s3://example-site-bucket/error.html
delete: s3://example-site-bucket/blog/index.html
delete: s3://example-site-bucket/index.html
delete: s3://example-site-bucket/old.html
remove_bucket: example-site-bucket

よくある質問

Q. ブロックパブリックアクセスは4つとも false にする必要がありますか?

A. バケットポリシーで公開する場合は、BlockPublicPolicy と RestrictPublicBuckets の2つを false にすれば足ります。ACL に関する2つは true のままにしておけます。

Q. HTTPS で公開できますか?

A. ウェブサイトエンドポイントは HTTP のみです。HTTPS で配信するときは、CloudFront を S3 の前に置く構成が公式ドキュメントで案内されています。その構成ではブロックパブリックアクセスを緩めずに済みます。

Q. エラードキュメントを設定したのに、存在しない URL で 403 が出ます。

A. 公開側に s3:ListBucket がないと、存在しないオブジェクトへの応答が 403 になります。エラードキュメントは 4XX 系のエラーで返されるので、error.html がバケットに置かれていて、読み取りの対象になっているかを aws s3 ls と get-bucket-policy で確かめます。

Q. aws s3 website と put-bucket-website はどう使い分けますか?

A. インデックスドキュメントとエラードキュメントだけなら aws s3 website が手軽です。RoutingRules や RedirectAllRequestsTo を使うときは、JSON を渡す put-bucket-website にします。

まとめ

  • 設定は ブロックパブリックアクセス → バケットポリシー → ウェブサイト設定 → sync の順に進める
  • 確認は get-public-access-block・get-bucket-policy・get-bucket-website の3つ。設定がないときは NoSuchBucketPolicy、NoSuchWebsiteConfiguration で知らせてくれる
  • 403 は公開の許可(ブロックパブリックアクセス、ポリシーの Resource の /*)を見る
  • 404 はウェブサイト設定とファイルの場所(インデックスドキュメント、キーの階層)を見る
  • URL は s3-website を含むウェブサイトエンドポイントを使う。東京はハイフン区切り、大阪はドット区切り
  • リダイレクトは RoutingRules・RedirectAllRequestsTo・--website-redirect の3通り
  • ウェブサイトエンドポイントは HTTP のみ。HTTPS には CloudFront を組み合わせる

参考・出典

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「S3静的ウェブサイトホスティングをAWS CLIで設定|403・404の原因」

株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。

WE ARE HIRING

RJCで一緒に開発しながら、
成長を楽しみませんか?

RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!

  • 127日年間休日
  • 12時間平均残業時間
  • 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!

ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。

ABOUT RJC RJCがどんな会社か知る 考え方、研修、働き方、福利厚生、社員の前職まで。RJCのことが丸わかり! RJC丸わかりページへ JOB DESCRIPTION 仕事内容・待遇を見てみる 仕事内容、給与・待遇、選考の流れ。経験者も未経験も!応募前に知りたいこと、まとめました! 募集要項を見る ENTRY エントリーする エントリーは1〜2分・履歴書不要です。まずは話を聞いてみたい、という方でも歓迎です! エントリーフォームへ

RJCで一緒に開発しながら、 成長を楽しみませんか?