シンボリックリンクとは、別のファイルやディレクトリの「場所(パス)」を中身として持つ特別なファイルで、ln -s 元のパス リンク名 で作成します。 Windowsのショートカットに近い仕組みで、設定ファイルの共有、バージョンの切り替え、長いパスへの近道などに使われます。

この記事では、ln -s の基本から、オプション一覧(-s -f -n -r -v -T -b)、相対パスの基準が「リンクを置く場所」になる落とし穴とその直し方、ハードリンクとの違い、安全な削除方法、リンク切れの一括検出、リリースディレクトリの切り替えまでを扱います。すべて Ubuntu 24.04.4 LTS / GNU coreutils 9.4(ln 9.4)で実行した結果 をそのまま載せています。

シンボリックリンク操作の早見表

やりたいこと コマンド ポイント
リンクを作る ln -s 元 リンク名 元は「リンクから見た」パスで書く
相対パスを自動で計算して作る ln -sr 元 リンク名 今いる場所からのパスで書けば、正しい相対パスに変換される
既存のリンクを上書きする ln -sf 元 リンク名 ファイルへのリンクの差し替え向け
ディレクトリへのリンクを差し替える ln -sfn 元 リンク名 -n がないとリンク先ディレクトリの中に作られる
作った内容を表示する ln -sv 元 リンク名 'リンク' -> '元' と表示される
上書き前にバックアップ ln -sb 元 リンク名 古いリンクが リンク名~ で残る
まとめて1つのフォルダに作る ln -s -t ディレクトリ 元1 元2 複数ファイルを一度にリンク
リンク先を確認する ls -l リンク / readlink リンク readlink はリンクの中身だけを表示
最終的な実体のパスを知る readlink -f リンク / realpath リンク リンクが何段つながっていても最後までたどる
リンク先が存在するか判定 readlink -e リンク 存在しなければ何も出さず終了コード1
リンクだけを削除する rm リンク / unlink リンク 末尾に / を付けない
リンク切れを探す find . -xtype l リンク先がないリンクを一覧表示
ハードリンクを作る ln 元 リンク名 同じinodeを指す別名。ディレクトリは不可
ディレクトリを安全に切り替える ln -sfn 新版 current coreutils 9.4では一時名で作って置き換え

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

(記載例)出典:株式会社RJC「Linuxシンボリックリンクln -sの使い方|作成・削除・確認一覧」

ln -s の基本の書き方

書式は ln -s 元(リンク先) リンク名 です。 順番は cp や mv と同じで「元 → 先」と覚えると迷いません。

echo hello > target.txt
ln -s target.txt link1
ls -l link1
lrwxrwxrwx 1 root root 10 Oct  2 00:19 link1 -> target.txt

ls -l の見方は次のとおりです。

表示 意味
先頭の l シンボリックリンクであること
rwxrwxrwx リンク自体の権限(常にこの表示。実際の権限はリンク先で判定)
10 リンク自体のサイズ。target.txt という10文字のパスを持っているだけ
-> target.txt リンクが持っているパス(リンク先)

リンク自体のサイズが「パスの文字数」になっていることから、シンボリックリンクがデータそのものではなく、パスを記録したファイルだとわかります。

lnコマンドのオプション一覧(実行結果つき)

よく使うのは -s -f -n -r の4つで、ディレクトリへのリンクを差し替えるときは -sfn の組み合わせが基本です。 以下は ln --help(coreutils 9.4)で確認した主なオプションです。

オプション 長い形式 働き
-s --symbolic ハードリンクではなくシンボリックリンクを作る
-f --force 同じ名前があれば削除してから作る
-n --no-dereference リンク名がディレクトリへのリンクでも、たどらず普通のファイルとして扱う
-r --relative -s と一緒に使い、リンクの置き場所から見た相対パスで作る
-v --verbose 作ったリンクを表示する
-T --no-target-directory リンク名を常に普通のファイルとして扱う(ディレクトリの中に作らない)
-b --backup 相当 上書きされるファイルを ~ 付きで残す
-S --suffix=SUFFIX バックアップの接尾辞を変える
-t --target-directory=DIR リンクを作るディレクトリを先に指定する
-i --interactive 上書き前に確認する
-L / -P --logical / --physical ハードリンク作成時、元がシンボリックリンクならたどるか/リンク自体にするか

-f:既にあるリンクを上書きする

同じ名前で作ろうとすると File exists になります。-f を付けると既存のものを置き換えます。

ln -s target.txt link1
ln -sf target.txt link1
ls -l link1
ln: failed to create symbolic link 'link1': File exists
lrwxrwxrwx 1 root root 10 Oct  2 00:19 link1 -> target.txt

-v:作った内容を表示する

ln -sv target.txt link2
'link2' -> 'target.txt'

-n:ディレクトリへのリンクを差し替える

ディレクトリを指すリンクを -sf だけで差し替えると、リンクがたどられて「リンク先ディレクトリの中」に新しいリンクができます。 実際に試した結果です。

mkdir -p d1 d2
ln -s d1 dl        # dl -> d1
ln -sf d2 dl       # d2 に差し替えたつもり
ls -l dl
ls -l d1
lrwxrwxrwx 1 root root 2 Oct  2 00:19 dl -> d1
total 0
lrwxrwxrwx 1 root root 2 Oct  2 00:19 d2 -> d2

dl は d1 のままで、d1 の中に d2 -> d2 という自分自身を指すリンクができました。このリンクを開くと次のエラーになります。

ls: cannot access '.../d1/d2/': Too many levels of symbolic links

-n を付けると、リンク名をたどらずにリンクそのものを置き換えます。

ln -sfn d2 dl
ls -l dl
lrwxrwxrwx 1 root root 2 Oct  2 00:19 dl -> d2

-T:ディレクトリの中に作らないことを明示する

-T はリンク名を常に「ファイル名」として扱います。-f なしで -T を付けると、既にある場合は中に作らずエラーで止まるので、意図しない場所への作成を防げます。

ln -sT d2 dl
ln -sfT d2 dl2
ls -l dl2
ln: failed to create symbolic link 'dl': File exists
lrwxrwxrwx 1 root root 2 Oct  2 00:19 dl2 -> d2

-b:上書き前に古いリンクを残す

ln -sb target.txt link2
ls -l link2 link2~
lrwxrwxrwx 1 root root 10 Oct  2 00:19 link2 -> target.txt
lrwxrwxrwx 1 root root 10 Oct  2 00:19 link2~ -> target.txt

接尾辞は --suffix=.bak のように変えられます。なお、ディレクトリを指すリンクに -b を使うときも -n が必要です(付けないと、上の -sf と同じくリンク先ディレクトリの中に作られます)。

-t:複数ファイルのリンクを1つのフォルダにまとめて作る

mkdir bin2
ln -sv -t bin2 ../app/config/app.conf ../releases/v1.0.0/VERSION
'bin2/app.conf' -> '../app/config/app.conf'
'bin2/VERSION' -> '../releases/v1.0.0/VERSION'

相対パスの落とし穴と -r での直し方

シンボリックリンクに書いた相対パスは、コマンドを実行した場所ではなく「リンクが置かれたディレクトリ」を基準に解釈されます。 ここが一番つまずきやすい点です。

直す前:コマンドを打った場所から書いてしまう

次の構成で、data/ に app/config/app.conf へのリンクを作るとします。

/tmp/t110demo
├── app/config/app.conf
└── data/
cd /tmp/t110demo
ln -s app/config/app.conf data/
ls -l data
cat data/app.conf
lrwxrwxrwx 1 root root 19 Oct  2 00:20 app.conf -> app/config/app.conf
cat: data/app.conf: No such file or directory

リンクは data/app/config/app.conf を探しに行くため、存在しないファイルを指す リンク切れ になります。作成時にはエラーが出ないので気づきにくい点に注意しましょう。

直した後:-r を付ける、または「リンクから見た」パスで書く

-r を付けると、今いる場所から書いたパスを、リンクの置き場所から見た相対パスに自動で変換してくれます。

ln -sr app/config/app.conf data/ok.conf
ls -l data/ok.conf
ln -s ../app/config/app.conf data/ok2.conf
cat data/ok2.conf
lrwxrwxrwx 1 root root 22 Oct  2 00:20 data/ok.conf -> ../app/config/app.conf
port=8080

最初の失敗例と別名で作っているのは、同じ名前だと File exists になるためです。直すときは ln -sfr で上書きします。

絶対パスと相対パスのどちらを選ぶか

絶対パスはリンクを動かしても切れにくく、相対パスはフォルダ全体を丸ごと動かしても切れにくい、という違いがあります。リンクを sub/ に移動して確かめました。

ln -s /tmp/t110demo/releases/v1.1.0 abs
ln -s releases/v1.1.0 rel
mkdir sub; mv abs rel sub/
ls sub/abs/ sub/rel/
ls: cannot access 'sub/rel/': No such file or directory
sub/abs/:
VERSION
書き方 リンクだけ別の場所へ移動 元とリンクを含むフォルダごと移動・コピー 向いている使い方
絶対パス そのまま使える 古い場所を指し続ける /usr/local/bin からツールへのリンクなど
相対パス 切れることがある そのまま使える リポジトリ内、配布するアーカイブ内のリンク

シンボリックリンクとハードリンクの違い

ハードリンクは同じデータ(inode)に付けた2つ目の名前、シンボリックリンクはパスを記録した別ファイルです。 inodeとは、ファイルのデータの場所や権限などを管理する番号付きの管理情報です。

ls -li と stat で比べる

echo memo > original.txt
ln original.txt hard.txt        # ハードリンク
ln -s original.txt soft.txt     # シンボリックリンク
ls -li original.txt hard.txt soft.txt
stat -c '%n inode=%i links=%h size=%s type=%F' original.txt hard.txt soft.txt
stat -L -c '%n inode=%i' soft.txt
1059110 -rw-r--r-- 2 root root  5 Oct  2 00:19 hard.txt
1059110 -rw-r--r-- 2 root root  5 Oct  2 00:19 original.txt
1059112 lrwxrwxrwx 1 root root 12 Oct  2 00:19 soft.txt -> original.txt
original.txt inode=1059110 links=2 size=5 type=regular file
hard.txt inode=1059110 links=2 size=5 type=regular file
soft.txt inode=1059112 links=1 size=12 type=symbolic link
soft.txt inode=1059110
  • hard.txt と original.txt は 同じinode番号(1059110) で、リンク数が 2 になっています。
  • soft.txt は 別のinode(1059112) を持ち、サイズは original.txt の12文字分です。
  • stat -L を付けるとリンクをたどるので、たどった先のinode(1059110)が表示されます。

元のファイルを消すとどうなるか

rm original.txt
ls -li hard.txt soft.txt
cat hard.txt
cat soft.txt
1059110 -rw-r--r-- 1 root root  5 Oct  2 00:19 hard.txt
1059112 lrwxrwxrwx 1 root root 12 Oct  2 00:19 soft.txt -> original.txt
memo
cat: soft.txt: No such file or directory

ハードリンクはリンク数が1に減るだけで中身は読めます。シンボリックリンクはリンク切れになります。 データはリンク数が0になったときに初めて消えます。

ディレクトリと別のファイルシステム

mkdir dir
ln dir dirhard
ln -s dir dirsoft
ln hard.txt /dev/shm/t110hard      # /dev/shm は tmpfs(別のファイルシステム)
ln -s "$PWD/hard.txt" /dev/shm/t110soft
cat /dev/shm/t110soft
ln: dir: hard link not allowed for directory
ln: failed to create hard link '/dev/shm/t110hard' => 'hard.txt': Invalid cross-device link
memo

比較表

項目 シンボリックリンク(ln -s) ハードリンク(ln)
正体 パスを記録した別のファイル 同じinodeに付けた別名
inode番号 元と異なる 元と同じ
ls -l の表示 先頭 l、-> 元 が付く 普通のファイルと同じ(リンク数が増える)
サイズ パスの文字数 元と同じ
元を削除した後 リンク切れ(No such file or directory) そのまま読める
ディレクトリ 作れる 作れない(hard link not allowed for directory)
別のファイルシステム 作れる 作れない(Invalid cross-device link)
存在しないパス 作れる(リンク切れになる) 作れない
主な用途 設定の共有、バージョン切り替え、近道 バックアップの重複排除、同じデータに複数の名前

迷ったらシンボリックリンクを選ぶのが一般的です。ハードリンクは「どちらが元か」が見た目で区別できないため、意図して使う場面に限るとわかりやすくなります。

シンボリックリンクを確認する方法

中身(記録されたパス)だけを見るなら readlink、最終的な実体のパスを知るなら readlink -f か realpath を使います。 リンクが2段つながった状態で比べました。

ln -s app/config/app.conf current.conf
ln -s current.conf chain.conf
readlink chain.conf
readlink -f chain.conf
realpath chain.conf
realpath -s chain.conf
readlink app/config/app.conf; echo "exit=$?"
current.conf
/tmp/t110demo/app/config/app.conf
/tmp/t110demo/app/config/app.conf
/tmp/t110demo/chain.conf
exit=1
コマンド 表示されるもの リンクでないとき
readlink リンク 1段だけたどったパス(記録された文字列) 何も出さず終了コード1
readlink -f リンク 最後までたどった絶対パス(最後の要素がなくても表示) 自分の絶対パス
readlink -e リンク 最後までたどった絶対パス(すべて存在するときだけ) 自分の絶対パス
realpath リンク readlink -f とほぼ同じ 自分の絶対パス
realpath -s リンク リンクをたどらない絶対パス 自分の絶対パス
file リンク symbolic link to ... / broken symbolic link to ... ファイルの種類
ls -l リンク リンク -> 元 普通の一覧

リンク切れを判定する

readlink -f と realpath はリンク先が無くてもパスを表示して終了コード0を返します。存在まで確かめたいときは readlink -e を使います。

ln -s nothing.txt dead.conf
readlink -f dead.conf; echo "exit=$?"
readlink -e dead.conf; echo "exit=$?"
file chain.conf dead.conf
/tmp/t110demo/nothing.txt
exit=0
exit=1
chain.conf: symbolic link to current.conf
dead.conf:  broken symbolic link to nothing.txt

シェルスクリプトでは次のように書けます。

if [ -L dead.conf ] && [ ! -e dead.conf ]; then
  echo "dead.conf はリンク切れです"
fi

-L は「リンクかどうか」、-e は「リンクをたどった先が存在するか」を調べるので、組み合わせるとリンク切れだけを判定できます。

リンク切れを一括で探す:find -xtype l

find . -xtype l で、リンク先が存在しないシンボリックリンクだけを一覧できます。 -printf を使うとリンク先も一緒に表示できます。

find . -xtype l
find . -xtype l -printf '%p -> %l\n'
./dead.conf
./dead.conf -> nothing.txt

まとめて消すときは、まず一覧を確認してから find . -xtype l -delete を実行すると安心です。

シンボリックリンクを削除する方法

リンクだけを消すには rm リンク名 か unlink リンク名 を使います。リンク先のファイルやディレクトリは消えません。

unlink chain.conf
ls -l chain.conf
ls: cannot access 'chain.conf': No such file or directory
コマンド 対象 特徴
rm リンク リンク本体 複数指定や -i(確認)が使える
unlink リンク リンク本体 1つだけ。オプションなしでシンプル
rmdir リンク 使えない Not a directory になる
rm -r リンク/ リンク先ディレクトリの中身 下の例を参照

末尾スラッシュ付きの rm でリンク先の中身が消える例

ディレクトリへのリンクを rm -r リンク/ のように末尾 / 付きで消すと、リンクはたどられ、リンク先ディレクトリの中身が削除されます。 作業用フォルダで確かめた結果です。

mkdir photos; touch photos/a.jpg photos/b.jpg
ln -s photos photolink
rm photolink/
rm -r photolink/
ls -la photos photolink
rm: cannot remove 'photolink/': Is a directory
rm: cannot remove 'photolink/': Not a directory
lrwxrwxrwx 1 root root    6 Oct  2 00:19 photolink -> photos

photos:
total 8
drwxr-xr-x 2 root root 4096 Oct  2 00:19 .
drwxr-xr-x 5 root root 4096 Oct  2 00:19 ..

rm -r photolink/ は「Not a directory」と表示しますが、その前に photos の中の a.jpg と b.jpg は削除されています。 リンク自体は残ったままです。-f を付けた rm -rf ではメッセージも出ません。

mkdir p2; touch p2/x.jpg; ln -s p2 p2link
rm -rf p2link/; echo "exit=$?"
exit=0

このとき p2/x.jpg も消え、p2link は残っていました。リンクを消すときはタブ補完で付いた末尾の / を外し、rm photolink または unlink photolink と書くのが確実です。unlink photolink/ は Not a directory で止まるので、リンク削除専用として使うと安心です。

ln -sfn でバージョンを切り替える(リリースディレクトリ方式)

リリースごとにディレクトリを分け、current というリンクの向きを変えて切り替える方法を「リリースディレクトリ方式」と呼びます。 戻すときもリンクを付け替えるだけなので、短時間で切り替えられます。

flowchart LR
    C[current] -->|ln -sfn| B[releases/v1.1.0]
    C -.切り戻し.-> A[releases/v1.0.0]
mkdir -p releases/v1.0.0 releases/v1.1.0
echo v1.0.0 > releases/v1.0.0/VERSION
echo v1.1.0 > releases/v1.1.0/VERSION

ln -sfn releases/v1.0.0 current
cat current/VERSION
ln -sfn releases/v1.1.0 current
ls -l current
cat current/VERSION
v1.0.0
lrwxrwxrwx 1 root root 15 Oct  2 00:20 current -> releases/v1.1.0
v1.1.0

-n を付けないとどうなるか

ln -sf releases/v1.1.0 current     # current は v1.0.0 を指している状態
ls -l current releases/v1.0.0/
cat current/VERSION
lrwxrwxrwx 1 root root   15 Oct  2 00:20 current -> releases/v1.0.0

releases/v1.0.0/:
total 4
-rw-r--r-- 1 root root  7 Oct  2 00:20 VERSION
lrwxrwxrwx 1 root root 15 Oct  2 00:20 v1.1.0 -> releases/v1.1.0
v1.0.0

current は切り替わらず、旧版ディレクトリの中にリンクが増えるだけです。切り替え用のスクリプトでは -sfn をセットで書きましょう。

切り替えは途中状態にならないか

coreutils 9.4 の ln -sfn が何をしているかを strace で確認しました。

strace -e trace=symlinkat,renameat ln -sfn releases/v1.1.0 current
symlinkat("releases/v1.1.0", AT_FDCWD, "current") = -1 EEXIST (File exists)
symlinkat("releases/v1.1.0", AT_FDCWD, "Cu9Qa2JJ") = 0
renameat(AT_FDCWD, "Cu9Qa2JJ", AT_FDCWD, "current") = 0

一時的な名前で新しいリンクを作り、renameat で置き換えています。 そのため current が一瞬なくなる状態にはなりません。古い coreutils や別の環境でも同じ動きを確実にしたい場合は、自分で一時名を作って mv -T で置き換える書き方があります。

ln -s releases/v1.0.0 current.tmp && mv -T current.tmp current
ls -l current
lrwxrwxrwx 1 root root 15 Oct  2 00:20 current -> releases/v1.0.0

切り替えスクリプトの雛形

#!/usr/bin/env bash
set -euo pipefail

base=/opt/myapp                 # 例:アプリの置き場所
new="releases/$1"               # 例:./switch.sh v1.1.0

cd "$base"
[ -d "$new" ] || { echo "not found: $new" >&2; exit 1; }

echo "before: $(readlink current || echo none)"
ln -sfn "$new" current
echo "after : $(readlink current)"

よくあるエラーと対処

エラー文 原因 対処
ln: failed to create symbolic link 'X': File exists 同じ名前がある 上書きするなら -f(ディレクトリへのリンクなら -sfn)
Too many levels of symbolic links リンクが自分自身や互いを指してループしている ls -l でループを確認し、unlink して作り直す
No such file or directory(リンクを開いたとき) リンク切れ。多くは相対パスの基準違い readlink で中身を確認し、ln -sfr で作り直す
hard link not allowed for directory ディレクトリにハードリンクを作ろうとした ln -s を使う
Invalid cross-device link 別のファイルシステムにハードリンクを作ろうとした ln -s を使う
rm: cannot remove 'X/': Is a directory 末尾に / が付いている / を外して rm X
Permission denied リンクを置くディレクトリに書き込み権限がない 置き場所の権限を確認(リンク自体の rwxrwxrwx は関係しない)

Too many levels of symbolic links を再現する

mkdir loop
ln -s a loop/b
ln -s b loop/a
cat loop/a
ls -l loop
cat: loop/a: Too many levels of symbolic links
lrwxrwxrwx 1 root root 1 Oct  2 00:19 a -> b
lrwxrwxrwx 1 root root 1 Oct  2 00:19 b -> a

a → b → a と循環しているため、たどる回数の上限に達してエラーになります。-n なしの ln -sf でディレクトリ内に自己参照リンクができるケース(オプションの章の d2 -> d2)も同じエラーになります。

ほかのコマンドはリンクをどう扱うか

多くのコマンドは既定でリンクをたどりますが、cp や tar はオプションで扱いが変わります。 cp の例です。

cp current.conf c1
cp -P current.conf c2
ls -l c1 c2
-rw-r--r-- 1 root root 10 Oct  2 00:20 c1
lrwxrwxrwx 1 root root 19 Oct  2 00:20 c2 -> app/config/app.conf
コマンド リンクをたどる リンクのまま扱う
cp 既定(ファイル指定時)、-L -P、-a(-d を含む)
ls -L 既定
stat -L 既定
find -L 既定(-P)
tar -h(--dereference) 既定
chmod 既定(リンク先の権限が変わる) Linuxではリンク自体の権限は変えられない
chown 既定 -h

よくある質問

Q. ln -s の引数はどちらが先ですか? A. ln -s 元(リンク先) リンク名 の順です。 cp 元 先 と同じ並びです。逆にすると、存在しないパスを指すリンクができることがあるので、作った直後に ls -l で -> の向きを確認すると確実です。

Q. シンボリックリンクを削除すると元のファイルも消えますか? A. rm リンク名 や unlink リンク名 ではリンクだけが消え、元のファイルは残ります。 ただしディレクトリへのリンクに rm -r リンク名/ と末尾 / を付けると、リンク先の中身が削除されます。

Q. ハードリンクとシンボリックリンクはどちらを使えばよいですか? A. ディレクトリや別のディスクを指したい、どこを指しているか見てわかるようにしたい場合はシンボリックリンクを使います。同じデータに複数の名前を付け、どれを消しても残したい場合はハードリンクが向いています。

Q. リンクを作ったのに No such file or directory になります。 A. 相対パスがリンクの置き場所を基準に解釈されていることが多いです。readlink リンク名 で記録されたパスを確認し、ln -sfr 元 リンク名 で作り直すと、正しい相対パスに変換されます。

まとめ

  • ln -s 元 リンク名 で作成。リンクはパスを記録した小さなファイルで、サイズはパスの文字数
  • 相対パスはリンクの置き場所が基準。迷ったら ln -sr で自動変換する
  • ディレクトリへのリンクの差し替えは ln -sfn。-n がないとリンク先の中に作られる
  • ハードリンクは同じinodeの別名。元を消しても読めるが、ディレクトリと別ファイルシステムには作れない
  • 確認は readlink(1段)/readlink -f・realpath(最後まで)/readlink -e(存在確認つき)
  • 削除は末尾 / なしで rm か unlink。リンク切れは find . -xtype l で一括検出
  • coreutils 9.4 の ln -sfn は一時名で作って置き換えるため、リリースディレクトリの切り替えに使いやすい

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

(記載例)出典:株式会社RJC「Linuxシンボリックリンクln -sの使い方|作成・削除・確認一覧」

株式会社RJCでは、Linuxのファイル操作の基本を仲間と学び合っています。こうした知識を共有しながら、日々技術を磨いています。

株式会社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で一緒に開発しながら、 成長を楽しみませんか?