diff --git a/src/Site/Test/LibAuth.php b/src/Site/Test/LibAuth.php
new file mode 100644
index 0000000..40386d1
--- /dev/null
+++ b/src/Site/Test/LibAuth.php
@@ -0,0 +1,223 @@
+ true,
+ 'verboseOutput' => true
+]);
+
+$test->describe('ユーザー登録', function($test): void {
+ $test->it('アカウントを作成出来るはず', function($test): void {
+ $user = "admin1234";
+ $pass = "testTEST1234!#$%@[]:;";
+ $passVerify = "testTEST1234!#$%@[]:;";
+ $email = "test@076.co.jp";
+
+ $auth = new Auth();
+ $res = $auth->mkUser($user, $pass, $passVerify, $email);
+
+ $expect = true;
+
+ $test->assertNotNull($res);
+ $test->assertEquals($res->isSuccess, $expect);
+ });
+
+ $test->it('空フィールドでアカウントを作成出来ないはず', function($test): void {
+ $user = "";
+ $pass = "testTEST1234!#$%@[]:;";
+ $passVerify = "testTEST1234!#$%@[]:;";
+ $email = "test@076.ne.jp";
+
+ $auth = new Auth();
+ $res = $auth->mkUser($user, $pass, $passVerify, $email);
+
+ $expect = 'エラー:ユーザー名をご入力下さい。'.'
';
+
+ $test->assertNotNull($res);
+ $test->assertEquals($res->message, $expect);
+
+ $user = "admin5678";
+ $pass = "";
+ $res = $auth->mkUser($user, $pass, $passVerify, $email);
+
+ $expect = 'エラー:パスワードをご入力下さい。'.'
';
+
+ $test->assertNotNull($res);
+ $test->assertEquals($res->message, $expect);
+
+ $pass = "testTEST1234!#$%@[]:;";
+ $email = "";
+ $res = $auth->mkUser($user, $pass, $passVerify, $email);
+
+ $expect = 'エラー:メールアドレスをご入力下さい。'.'
';
+
+ $test->assertNotNull($res);
+ $test->assertEquals($res->message, $expect);
+ });
+
+ $test->it('既にユーザー名やメールアドレスが存在するアカウントを作成出来ないはず', function($test): void {
+ $user = "admin1234";
+ $pass = "testTEST1234!#$%@[]:;";
+ $passVerify = "testTEST1234!#$%@[]:;";
+ $email = "test@076.ne.jp";
+
+ $auth = new Auth();
+ $res = $auth->mkUser($user, $pass, $passVerify, $email);
+
+ $expect = 'ユーザー「admin1234」は既に存在します。'.'
';
+
+ $test->assertNotNull($res);
+ $test->assertEquals($res->message, $expect);
+
+ $user = "admin5678";
+ $email = "test@076.co.jp";
+ $res = $auth->mkUser($user, $pass, $passVerify, $email);
+
+ $expect = 'ユーザー「test@076.co.jp」は既に存在します。'.'
';
+
+ $test->assertNotNull($res);
+ $test->assertEquals($res->message, $expect);
+ });
+
+ $test->it('一致しない、短い、又は不安なパスワードでアカウントを作成出来ないはず', function($test): void {
+ $user = "admin5678";
+ $pass = "testtest1234!#$%@[]:;";
+ $passVerify = "testTEST1234!#$%@[]:;";
+ $email = "test@076.ne.jp";
+
+ $auth = new Auth();
+ $res = $auth->mkUser($user, $pass, $passVerify, $email);
+
+ $expect = 'エラー:パスワードは一致していません。'.'
';
+
+ $test->assertNotNull($res);
+ $test->assertEquals($res->message, $expect);
+
+ $pass = "testTEST1234";
+ $passVerify = "testTEST1234";
+ $res = $auth->mkUser($user, $pass, $passVerify, $email);
+
+ $expect = 'エラー:パスワードは20以上をご入力下さい。'.'
';
+
+ $test->assertNotNull($res);
+ $test->assertEquals($res->message, $expect);
+
+ $pass = "testTEST1234testTEST";
+ $passVerify = "testTEST1234testTEST";
+ $res = $auth->mkUser($user, $pass, $passVerify, $email);
+
+ $expect = 'エラー:パスワードは2つ以上の大文字、2つ以上の小文字、2つ以上の数字、及び2つ以上の特別文字を含む事が必須です。'.'
';
+
+ $test->assertNotNull($res);
+ $test->assertEquals($res->message, $expect);
+ });
+
+ $test->it('不正なメールアドレスでアカウントを作成出来ないはず', function($test): void {
+ $user = "admin5678";
+ $pass = "testTEST1234!#$%@[]:;";
+ $passVerify = "testTEST1234!#$%@[]:;";
+ $email = "test@076.niggerballs";
+
+ $auth = new Auth();
+ $res = $auth->mkUser($user, $pass, $passVerify, $email);
+
+ $expect = 'エラー:メールアドレスは不正です。'.'
';
+
+ $test->assertNotNull($res);
+ $test->assertEquals($res->message, $expect);
+
+ $email = "test@076";
+ $res = $auth->mkUser($user, $pass, $passVerify, $email);
+
+ $expect = 'エラー:メールアドレスは不正です。'.'
';
+
+ $test->assertNotNull($res);
+ $test->assertEquals($res->message, $expect);
+ });
+
+ // ユーザーの削除
+ $users = scandir(ROOT.'/data/user');
+ $userFile = '';
+ foreach ($users as $u) {
+ if (str_contains($u, 'admin1234')) {
+ $userFile = $u;
+ break;
+ }
+ }
+ unlink(ROOT.'/data/user/'.$userFile);
+ rmdir(ROOT.'/public/static/user/admin1234');
+});
+
+// TODO: CLIからクッキーを設定出来ないから、「Site\Lib\Auth::getUserData(): Return value must be of type stdClass, null returned」って発生する・・・
+// $test->describe('ログインとログアウト', function($test): void {
+// $user = "admin1234";
+// $pass = "testTEST1234!#$%@[]:;";
+// $passVerify = "testTEST1234!#$%@[]:;";
+// $email = "test@076.co.jp";
+
+// $auth = new Auth();
+// $res = $auth->mkUser($user, $pass, $passVerify, $email);
+// unset($auth);
+
+// $test->it('正しい認証情報でログイン出来るはず', function($test) use ($user, $pass): void {
+// $auth = new Auth();
+// $res = $auth->setToken($user, $pass);
+
+// $test->assertTrue($res->isSuccess);
+// $test->assertEquals('ログイン成功', $res->message);
+
+// $auth2 = new Auth();
+// $usr = $auth2->getLoggedInUser();
+
+// $test->assertNotNull($usr);
+// $test->assertEquals($user, $usr->username);
+// });
+
+// $test->it('間違ったパスワードでログイン出来ないはず', function($test) use ($user): void {
+// $auth = new Auth();
+// $res = $auth->setToken($user, 'fuseipassword');
+
+// $test->assertFalse($res->isSuccess);
+// $test->assertEquals('ユーザー名又はパスワードが一致していません', $res->message);
+// });
+
+// $test->it('存在しないユーザーでログイン出来ないはず', function($test) use ($pass): void {
+// $auth = new Auth();
+// $res = $auth->setToken('fumeiuser', $pass);
+
+// $test->assertFalse($res->isSuccess);
+// $test->assertEquals('ユーザー名又はパスワードが一致していません', $res->message);
+// });
+
+// $test->it('ログアウト出来るはず', function($test) use ($user, $pass): void {
+// $auth = new Auth();
+// $auth->setToken($user, $pass);
+
+// $res = $auth->logout();
+
+// $test->assertTrue($res->isSuccess);
+// $test->assertEquals('ログイン成功', $res->message);
+
+// $auth2 = new Auth();
+// $usr = $auth2->getLoggedInUser();
+
+// $test->assertNull($usr);
+// });
+
+// // ユーザーの削除
+// $users = scandir(ROOT.'/data/user');
+// $userFile = '';
+// foreach ($users as $u) {
+// if (str_contains($u, 'admin1234')) {
+// $userFile = $u;
+// break;
+// }
+// }
+// unlink(ROOT.'/data/user/'.$userFile);
+// rmdir(ROOT.'/public/static/user/admin1234');
+// });
\ No newline at end of file
diff --git a/tester.php b/tester.php
index b2e81ee..87dc5ea 100644
--- a/tester.php
+++ b/tester.php
@@ -1,8 +1,12 @@