- JAVA
NoClassDefFoundErrorの直し方|ClassNotFoundとの違い
java.lang.NoClassDefFoundError は、「コンパイルしたときにはあったクラスが、実行するときに使えない」ときのエラーです。 原因は大きく2つに分かれます。メッセージの形を見ると、どちらかがすぐ分かります。
| メッセージの形 | 何が起きたか | 最初に見るところ |
|---|---|---|
NoClassDefFoundError: com/example/Greeter(Caused by: ClassNotFoundException) |
クラスファイルが見つからない | 実行時のクラスパスに jar があるか |
NoClassDefFoundError: Could not initialize class Config |
クラスはあるが、static 初期化が前に失敗した | 最初に出た ExceptionInInitializerError |
NoClassDefFoundError: com/example/Greeter (wrong name: …) |
ファイル名と中身のクラス名が違う | パッケージ・大文字小文字・置き場所 |
NoClassDefFoundError: Base(defineClass の中で発生) |
親クラス・インターフェースが見つからない | 継承元の jar があるか |
ClassNotFoundException との違い:ClassNotFoundException は、Class.forName("…") のように文字列でクラス名を渡して探したときの例外です。NoClassDefFoundError は、new Greeter() のようにコードに書いた参照を JVM が解決できなかったときのエラーです。見つからない原因は同じでも、呼び方で出るものが変わります。
確認環境:OpenJDK 1.8.0_504・11.0.32.1・17.0.20.1・21.0.10・25.0.4.1(Linux)で、下に載せたプログラムを同じクラスファイル(--release 8 でコンパイル)のまま動かして、メッセージを比べました。jdeps・-Xlog:class+load は JDK 17・21 で動かしました。Maven のスコープの説明は Maven のドキュメントで確認しています(確認日 2026年10月13日)。
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「NoClassDefFoundErrorの直し方|ClassNotFoundとの違い」
ClassNotFoundException との違いを実行して比べる
クラスパスに com.example.Greeter が無い状態で、同じクラスを2つの方法で読んだ結果です(5つの版で同じ結果でした)。
public class Forname {
public static void main(String[] args) throws Exception {
try { Class.forName("com.example.Greeter"); } catch (Throwable t) { System.out.println("forName: " + t); }
try { Object o = new com.example.Greeter(); } catch (Throwable t) { System.out.println("new: " + t + " / cause=" + t.getCause()); }
}
}
forName: java.lang.ClassNotFoundException: com.example.Greeter
new: java.lang.NoClassDefFoundError: com/example/Greeter / cause=java.lang.ClassNotFoundException: com.example.Greeter
| 項目 | NoClassDefFoundError | ClassNotFoundException |
|---|---|---|
| 種類 | Error(LinkageError の子) |
チェック例外(Exception の子) |
| 出る場面 | new・メソッド呼び出し・継承などで JVM がクラスを解決するとき |
Class.forName・ClassLoader.loadClass に文字列を渡したとき |
| 名前の書き方 | com/example/Greeter(スラッシュ区切り) |
com.example.Greeter(ドット区切り) |
| コンパイル時 | そのクラスはあった | 文字列なので、コンパイル時には調べられない |
| 中に入っている原因 | ClassNotFoundException、または初期化の失敗 |
なし(自分が原因) |
API ドキュメントでは、NoClassDefFoundError は「探していたクラスの定義は、実行中のクラスをコンパイルしたときにはあったが、もう見つからない」ときに投げられると説明されています。メッセージがスラッシュ区切りなら、コードに書いた参照が原因と読めます。ClassNotFoundException 側の原因と対処は、関連記事「Java ClassNotFoundExceptionの原因と対処 違いも解説」で扱っています。
なお、起動時にメインクラス自体が見つからないときは、このエラーではなく Error: Could not find or load main class と出ます。こちらは関連記事「Could not find or load main classの原因と直し方」で扱っています。
原因一覧(メッセージ原文つき)
Java 21 で再現したメッセージです。
| 原因 | メッセージ(先頭行) | 直し方 |
|---|---|---|
| 実行時に jar が無い | NoClassDefFoundError: com/example/Greeter |
実行時のクラスパスに jar を足す |
| jar が前の版で、新しいクラスが無い | NoClassDefFoundError: com/example/Formatter |
コンパイル時と同じ版の jar にそろえる |
| static 初期化が失敗した(2回目以降) | NoClassDefFoundError: Could not initialize class Config |
1回目の ExceptionInInitializerError の原因を直す |
| ファイル名と中身のクラス名が違う | NoClassDefFoundError: com/example/Greeter (wrong name: com/example/Formatter) |
パッケージ・大文字小文字・置き場所を直す |
| 親クラスが無い | NoClassDefFoundError: Base |
継承元のクラスを含む jar を足す |
クラスパスの区切りが ; のまま(Linux) |
NoClassDefFoundError: com/example/Greeter |
Linux・macOS は : で区切る |
ワイルドカードを *.jar と書いた |
NoClassDefFoundError: com/example/Greeter |
libs/* と書く |
| Java 11 以降で JAXB を使った | NoClassDefFoundError: javax/xml/bind/DatatypeConverter |
JAXB の jar を足すか、java.util.Base64 に置き換える |
requires static のモジュールが解決されていない |
NoClassDefFoundError: com/example/Greeter |
--add-modules で足す |
以下、順に再現の手順と直し方です。
原因1:実行時のクラスパスに jar が無い
再現
app.jar(com.app.Main)は lib1.jar の com.example.Greeter を使います。コンパイルは lib1.jar を付けて通り、実行では付け忘れた状態です。
package com.app;
import com.example.Greeter;
public class Main {
public static void main(String[] args) {
System.out.println("start");
if (args.length > 0 && args[0].equals("v2")) {
System.out.println(new Greeter().hello("RJC", 2)); // lib2.jar で追加されたメソッド
} else if (args.length > 0 && args[0].equals("fmt")) {
System.out.println(com.example.Formatter.fmt("x")); // lib2.jar で追加されたクラス
} else {
System.out.println(new Greeter().hello("RJC")); // 11行目
}
}
}
$ java -cp app.jar com.app.Main
start
Exception in thread "main" java.lang.NoClassDefFoundError: com/example/Greeter
at com.app.Main.main(Main.java:11)
Caused by: java.lang.ClassNotFoundException: com.example.Greeter
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526)
... 1 more
start が出てからエラーになっている点に注目します。 JVM は、クラスを「初めて使う行」まで読みに行きません。そのため、起動は成功し、めったに通らない処理(エラー処理・月末のバッチなど)で初めて落ちることがあります。
よくある場面
| 場面 | 何が起きているか |
|---|---|
Maven の provided・test スコープ |
ドキュメントでは、provided は「コンパイルとテストのクラスパスには入るが、実行時のクラスパスには入らない」。test はテストだけ |
Gradle の compileOnly |
コンパイルだけに使う依存。実行時には入らない |
| fat jar(全部入り jar)にしていない | ドキュメントでは、-jar を使うとその jar がユーザークラスの読み込み元になり、-cp などほかのクラスパス指定は無視される |
起動スクリプトが -cp を上書き |
環境変数 CLASSPATH は、-cp を付けると無視される |
| IDE では動き、サーバーでは動かない | IDE はビルド設定のクラスパスを自動で付けている |
jar の作り方と Class-Path の書き方は、関連記事「Java jarファイルの作成と実行方法|クラスパス指定とMain-Class」で扱っています。Maven のスコープの指定は、関連記事「Mavenコマンド一覧|pom.xml書き方とよく使うオプション」で扱っています。
足りないクラスを事前に見つける:jdeps
JDK に付いている jdeps で、jar が参照しているのに見つからないクラスを一覧にできます。Java 21 の結果です。
$ jdeps --missing-deps -cp lib1.jar app.jar
app.jar -> not found
com.app.Main -> com.example.Formatter not found
not found の行が、実行時に NoClassDefFoundError になりうるクラスです。 本番に出す前に、CI でこのコマンドを動かすと、jar の付け忘れを早く見つけられます。
原因2:static 初期化の失敗(Could not initialize class)
1回目と2回目でエラーが変わる
クラスの static フィールドの初期化(static 初期化子)で例外が出ると、1回目は ExceptionInInitializerError、2回目以降は NoClassDefFoundError: Could not initialize class になります。 クラスファイルはちゃんとあるのに「NoClassDefFound」と出るので、迷いやすい形です。
public class Config {
static final int PORT = Integer.parseInt(System.getProperty("app.port", "abc"));
static int port() { return PORT; }
}
public class Static {
public static void main(String[] args) {
for (int i = 1; i <= 2; i++) {
try {
System.out.println(Config.port());
} catch (Throwable t) {
System.out.println("--- " + i + " ---");
t.printStackTrace(System.out);
}
}
}
}
Java 21 の出力です。
--- 1 ---
java.lang.ExceptionInInitializerError
at Static.main(Static.java:5)
Caused by: java.lang.NumberFormatException: For input string: "abc"
at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:67)
at java.base/java.lang.Integer.parseInt(Integer.java:662)
at java.base/java.lang.Integer.parseInt(Integer.java:778)
at Config.<clinit>(Config.java:2)
... 1 more
--- 2 ---
java.lang.NoClassDefFoundError: Could not initialize class Config
at Static.main(Static.java:5)
Caused by: java.lang.ExceptionInInitializerError: Exception java.lang.NumberFormatException: For input string: "abc" [in thread "main"]
at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:67)
at java.base/java.lang.Integer.parseInt(Integer.java:662)
at java.base/java.lang.Integer.parseInt(Integer.java:778)
at Config.<clinit>(Config.java:2)
... 1 more
<clinit> は static 初期化を表す、JVM の中での名前です。一度初期化に失敗したクラスは、そのクラスローダーの中では二度と使えません。 アプリを再起動するまで、Config を使うたびに Could not initialize class が出続けます。
版ごとの違い:Java 17 以降は最初の原因が付く
同じプログラムの2回目のエラーを5つの版で比べました。
| 版 | 2回目のメッセージ | 最初の原因 |
|---|---|---|
| OpenJDK 1.8.0_504 | Could not initialize class Config |
付かない |
| OpenJDK 11.0.32.1 | Could not initialize class Config |
付かない |
| OpenJDK 17.0.20.1 | Could not initialize class Config |
Caused by: java.lang.ExceptionInInitializerError: Exception java.lang.NumberFormatException: For input string: "abc" [in thread "main"] |
| OpenJDK 21.0.10 | 同上 | 同上 |
| OpenJDK 25.0.4.1 | 同上 | 同上 |
OpenJDK のバグ管理(JDK-8048190「NoClassDefFoundError omits original ExceptionInInitializerError」)では、JVM が最初の失敗を覚えておき、後の NoClassDefFoundError の原因として付けるように変えたと説明されています。バックポート先として 17.0.7 が挙がっています。Java 8・11 では、2回目のログだけを見ても原因が分かりません。 ログを最初までさかのぼり、最初の ExceptionInInitializerError を探します。
別のスレッドで失敗していた場合
最初の失敗が別スレッドだと、メインのログには出ないことがあります。worker-1 スレッドで先に Config を使い、そのあと main で使った結果です。
# Java 11
worker-1 failed: java.lang.ExceptionInInitializerError
Exception in thread "main" java.lang.NoClassDefFoundError: Could not initialize class Config
at Thr.main(Thr.java:6)
# Java 21
worker-1 failed: java.lang.ExceptionInInitializerError
Exception in thread "main" java.lang.NoClassDefFoundError: Could not initialize class Config
at Thr.main(Thr.java:6)
Caused by: java.lang.ExceptionInInitializerError: Exception java.lang.NumberFormatException: For input string: "abc" [in thread "worker-1"]
[in thread "worker-1"] は、最初に失敗したスレッドの名前です。 スレッドプールの中で例外が握りつぶされていても、Java 17 以降ならここから探す場所が分かります。
直し方
- static 初期化で、設定ファイルの読み込み・数値変換・外部接続など失敗しうる処理をしない。必要になったときに読むメソッドに移す
- どうしても static で行うなら、失敗したときに分かりやすいメッセージで例外を投げ、ログに残す
- 「Could not initialize class」が出たら、同じクラス名の
ExceptionInInitializerErrorをログの先頭から探す
static の基本は、関連記事「Java staticとは|static変数・メソッドの使い方とエラー例」で扱っています。
原因3:wrong name(パッケージ・大文字小文字・置き場所)
com/example/Greeter.class というファイルの中身が、別のクラス(com.example.Formatter)だった状態を作って確かめました。
$ java -cp app.jar:wn com.app.Main
start
Exception in thread "main" java.lang.NoClassDefFoundError: com/example/Greeter (wrong name: com/example/Formatter)
at java.base/java.lang.ClassLoader.defineClass1(Native Method)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1027)
...
(wrong name: …) の後ろが、ファイルの中に書かれていた本当のクラス名です。 Java 8 と 21 で同じ文面でした。次のようなときに起きます。
| 状況 | 例 |
|---|---|
| パッケージ宣言とディレクトリが合っていない | package com.example; のクラスを classes/Greeter.class に置いた |
| クラスパスの起点がずれている | -cp out とすべきところを -cp out/com/example にした |
| 大文字と小文字の違い | 大文字小文字を区別しないファイルシステムで、greeter.class として Greeter を探した |
パッケージとディレクトリの対応は、関連記事「Javaのpackageとimportの使い方|クラスパスの通し方」で扱っています。
原因4:親クラス・インターフェースが無い
Sub extends Base で、Base.class だけが無い状態です。Java 21 の結果です。
start
Exception in thread "main" java.lang.NoClassDefFoundError: Base
at java.base/java.lang.ClassLoader.defineClass1(Native Method)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1027)
...
at UseSub.main(UseSub.java:1)
Caused by: java.lang.ClassNotFoundException: Base
コードに書いたのは new Sub() なのに、エラーには Base と出ます。 スタックトレースに defineClass があれば、「クラスを読み込む途中で、その親を探して失敗した」と読めます。ライブラリ A が、別のライブラリ B のクラスを継承しているときに、B を入れ忘れると起きます。
原因5:クラスパスの書き方(: と ;・ワイルドカード)
java コマンドのドキュメントでは、クラスパスの区切りは「Windows ではセミコロン(;)、それ以外ではコロン(:)」です。Windows 用の起動スクリプトを Linux にそのまま持ってきた状態を再現しました。
$ java -cp "app.jar:lib1.jar;lib2.jar" com.app.Main
start
Exception in thread "main" java.lang.NoClassDefFoundError: com/example/Greeter
at com.app.Main.main(Main.java:11)
Linux では lib1.jar;lib2.jar が1つのファイル名として扱われ、そのファイルは無いので、黙って無視されます。クラスパスにある存在しない場所は、エラーにも警告にもなりません。
ワイルドカードも同じです。ドキュメントでは、「* だけを名前にした要素」が、そのディレクトリの .jar 全部に展開されます。
| 書き方 | 結果(Java 21) |
|---|---|
-cp "app.jar:libs/*" |
動いた(libs の jar が全部入る) |
-cp "app.jar:libs/*.jar" |
NoClassDefFoundError: com/example/Greeter |
-cp app.jar:libs/*.jar(クォートなし、zsh) |
シェルが先に展開しようとして no matches found |
Windows:-cp "app.jar;libs\*" |
ドキュメント上の正しい形 |
ワイルドカードは * だけ、そしてクォートで囲むのが、ドキュメントどおりの書き方です。展開される jar の順番は決まっていない、とドキュメントにあります。同じクラスが2つの jar にあると、次の原因6の問題が起きます。
原因6:jar の版違い(NoSuchMethodError との関係)
lib1.jar(前の版)には Greeter だけ、lib2.jar(新しい版)には Greeter.hello(String, int) と Formatter クラスが追加されています。app.jar は lib2.jar でコンパイルし、実行時に lib1.jar を付けた結果です。
| 使ったもの | 実行時に前の版の jar だと | 意味 |
|---|---|---|
| 新しい版で追加されたクラス | NoClassDefFoundError: com/example/Formatter |
クラスごと無い |
| 新しい版で追加されたメソッド | NoSuchMethodError |
クラスはあるが、メソッドが無い |
| 新しい版で追加されたフィールド | NoSuchFieldError |
クラスはあるが、フィールドが無い |
どれも「コンパイル時と実行時で jar の版が違う」ことが原因です。 NoSuchMethodError のメッセージは、Java 8 と 11 以降で書き方が変わりました。
| 版 | メッセージ |
|---|---|
| Java 8 | NoSuchMethodError: com.example.Greeter.hello(Ljava/lang/String;I)Ljava/lang/String; |
| Java 11・17・21・25 | NoSuchMethodError: 'java.lang.String com.example.Greeter.hello(java.lang.String, int)' |
Java 8 の (Ljava/lang/String;I)Ljava/lang/String; は、JVM の中での型の書き方(ディスクリプタ)です。L…; はクラス、I は int を表し、括弧の後ろが戻り値の型です。
両方の jar が入っているとき
lib1.jar と lib2.jar の両方をクラスパスに入れても、前に書いたほうが使われます。
$ java -Xlog:class+load -cp app.jar:lib1.jar:lib2.jar com.app.Main v2
[0.086s][info][class,load] com.example.Greeter source: file:/…/lib1.jar
start
Exception in thread "main" java.lang.NoSuchMethodError: 'java.lang.String com.example.Greeter.hello(java.lang.String, int)'
-Xlog:class+load(Java 8 では -verbose:class)で、クラスをどの jar から読んだかが分かります。 同じライブラリの2つの版が入っていないかは、Maven なら mvn dependency:tree、Gradle なら gradle dependencies で依存の木を見て確かめます。Maven のドキュメントでは、木の中に同じものの版が複数あると「プロジェクトに近いほうの版」が選ばれます。そのため、意図しない版が選ばれることがあります。
| Java 8 の出力 | Java 21 の出力 |
|---|---|
[Loaded com.example.Greeter from file:/…/lib1.jar] |
[0.086s][info][class,load] com.example.Greeter source: file:/…/lib1.jar |
原因7:Java 11 で消えたクラス(javax.xml.bind など)
Java 8 でコンパイルして動いていたプログラムを、そのまま Java 11 以降で動かした結果です。
public class Jaxb {
public static void main(String[] args) {
System.out.println(javax.xml.bind.DatatypeConverter.printHexBinary(new byte[]{1, 2, (byte)0xAB}));
}
}
| 版 | 結果 |
|---|---|
| Java 8 | 0102AB |
| Java 11・21・25 | NoClassDefFoundError: javax/xml/bind/DatatypeConverter(Caused by: ClassNotFoundException) |
JEP 320 で、Java 11 から JAXB(java.xml.bind)・JAX-WS(java.xml.ws)・CORBA など9つのモジュールが JDK から外されました。JEP 320 では、JAXB を使い続けるなら単体の jar をクラスパスに足す、DatatypeConverter を Base64 のために使っていたなら Java 8 からある java.util.Base64 に置き換える、と案内されています。
Java の版を上げたら javax/xml/bind・javax/annotation・javax/activation などの NoClassDefFoundError を疑います。 クラスファイルの版が新しすぎるときは別のエラー(UnsupportedClassVersionError)になります。こちらは関連記事「UnsupportedClassVersionErrorの直し方|版の対応表」で扱っています。
原因8:モジュール(JPMS)の場合
Java 9 からのモジュール(module-info.java を持つ jar)では、必要なモジュールが見つからないと、起動の時点で止まります。 NoClassDefFoundError ではなく、次のメッセージになります(Java 21)。
Error occurred during initialization of boot layer
java.lang.module.FindException: Module lib not found, required by app
モジュールで NoClassDefFoundError になりやすいのは、requires static(コンパイル時だけ必須) の場合です。
module app { requires static lib; }
$ java -p mods -m app/com.app.Main
start
Exception in thread "main" java.lang.NoClassDefFoundError: com/example/Greeter
at app/com.app.Main.main(Main.java:5)
Caused by: java.lang.ClassNotFoundException: com.example.Greeter
$ java -p mods --add-modules lib -m app/com.app.Main
start
Hello, RJC
lib はモジュールパス(-p mods)に置いてありますが、requires static は実行時に自動では読み込まれません。--add-modules lib で読み込む対象に足すと動きました。 スタックトレースの app/com.app.Main の app/ は、そのクラスが入っているモジュール名です。
| 状況 | 出るもの |
|---|---|
requires lib で lib が無い |
起動時に FindException: Module lib not found, required by app |
requires static lib で lib が解決されない |
使った行で NoClassDefFoundError |
lib をクラスパス(-cp)にだけ置いた |
requires lib なら起動時に FindException(名前付きモジュールはクラスパスを見ない) |
調べる順番(チェックリスト)
- メッセージの形を見る:
Could not initialize classなら原因2、wrong nameなら原因3、それ以外は「見つからない」 Caused byを見る:ClassNotFoundExceptionならクラスパスの問題、ExceptionInInitializerErrorなら初期化の問題- どの jar に入っているはずかを調べる:
jar tf lib.jar | grep Greeter - 実行時のクラスパスを見る:起動コマンド・起動スクリプト・
MANIFEST.MFのClass-Path - どこから読まれたかを見る:
-Xlog:class+load(Java 8 は-verbose:class) - 足りないものを一覧にする:
jdeps --missing-deps -cp 依存jar 自分のjar
よくある質問
Q. catch (Exception e) で受け止められません。
A. NoClassDefFoundError は Error の子クラスで、Exception の子ではないためです。受け止めるには catch (NoClassDefFoundError e) か catch (Throwable t) と書きます。ただし、多くは構成の誤りなので、受け止めて処理を続けるより、起動の時点で気づける形にするほうが原因が残りません。例外の種類の関係は、関連記事「Java 例外一覧|種類・原因・対処の早見表と使い分け」で扱っています。
Q. 再起動すると直り、しばらくするとまた出ます。
A. static 初期化が、外部の状態(DB 接続・設定サーバー・ファイル)しだいで失敗している可能性があります。最初の1回だけが ExceptionInInitializerError で、あとは Could not initialize class が続くので、ログの最初の失敗を探します。
Q. 手元では動き、サーバーでだけ出ます。
A. 実行時のクラスパスが違うことが多いです。両方で -Xlog:class+load を付けて動かし、クラスがどの jar から読まれたかを比べます。
まとめ
- コンパイル時にはあったクラスが、実行時に使えないときのエラー
ClassNotFoundExceptionは文字列で探したとき、NoClassDefFoundErrorはコードの参照を解決するときに出るCould not initialize classは、クラスはあるが static 初期化が前に失敗した印。Java 17 以降は最初の原因がCaused byに付くwrong nameはパッケージと置き場所の食い違い。defineClassの中なら親クラスが無い- Linux のクラスパスは
:区切り、ワイルドカードはlibs/* - jar の版違いは、クラスなら
NoClassDefFoundError、メソッドならNoSuchMethodError - 調べる道具は
jar tf・-Xlog:class+load・jdeps --missing-deps
参考・出典
確認日はいずれも 2026年10月13日です。
- Java SE 21 API「NoClassDefFoundError」:https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/NoClassDefFoundError.html
- Java SE 21 API「ExceptionInInitializerError」:https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/ExceptionInInitializerError.html
- Java SE 21「The java Command」:https://docs.oracle.com/en/java/javase/21/docs/specs/man/java.html
- OpenJDK「JDK-8048190 NoClassDefFoundError omits original ExceptionInInitializerError」:https://bugs.openjdk.org/browse/JDK-8048190
- OpenJDK「JEP 320: Remove the Java EE and CORBA Modules」:https://openjdk.org/jeps/320
- Apache Maven「Introduction to the Dependency Mechanism」:https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「NoClassDefFoundErrorの直し方|ClassNotFoundとの違い」
株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。
WE ARE HIRING
RJCで一緒に開発しながら、
成長を楽しみませんか?
RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!
- 127日年間休日
- 12時間平均残業時間
- 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!
ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。