[個人開発 12月号] アプリ100個作るまで！#3

### 某企業のAdvent Calendarに参加した

とあるXXXX年X月X日、会社の同期からAdvent Calendarをしないかとお誘いがあった。

![Advent Calendar](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1788291/e73760b7-f61d-1daf-3ed1-b6275fadb3a2.png)

このビッグウェーブ……乗るしかない！！  
そう感じたので参加させていただくことにしました。この瞬間、筆者のHP・MPが全回復し、開発へのモチベーションが爆発的に向上！!!!

クリスマス前ということなので、かなり力を入れて幅広く挑戦してみようと考えました。以下の内容を実践しました。

---

### 自作DBを作ってみた

- #### 1日目

現状ですが、DBもSQLもまともに理解ができていない状態です。なので、Googleで自作DBと検索をして、先人たちがどのようにして自作DB作っていたのかロードマップから入ることにしました。そもそもなぜ、自作DBなのか？業務でDB製品に携わることになったため、より理解を深めるためにDBから作るかもモチベで開発するつもりです。

##### お借りした先人たちの知恵
https://qiita.com/yamoyamoto/items/e86b5d081a42810ba920

https://www.db-book.com/

https://ryogrid.github.io/dbms-jisaku/

DBMS の基礎を勉強するといいらしいので、資料に目を通して、理解を深めることにしました。とりあえず、1日目は資料に目を通して、全体像を把握することで終了しました。

- #### 2日目
色々と実装するにあたって、まずミニマムな構成で作成する必要があるなと思いました。まずは、昨日はSELECT、INSERTのみ対応するなど現実かなと思いました。

本日の学習整理ですが、以下のようにDB概念を整理しました。

クライアント
- ユーザは、SQL文を送信する。こちらがスタートポイント。

パーサー
- クライアントからSQL文を受け取り、解析を実行する。解析後にシステムが理解しやすいしステートメントにする。要素を分解しているイメージですね。

プランナー
- パーサーの実行結果であるステートメントを最適な形で実行するための計画をここで立てる。

カタログ
- データベース全体のメタ情報を保持するところ。テーブル定義、インデックス情報、ストレージ情報など。

エクゼキューター
- プランナーが作成した任意の実行計画に基づき、実際に決めを実行するところ

ストレージ
- データを永続的に保存する箇所
- 実際のデータアクセスを担当し、ディスクからデータの取得または書き込みを行う。

データ
- 各テーブルは複数の「ページ」（固定サイズのデータ​​単位）に分割されています。
- ページには、データがパスポートバッファ形式で保存されています。
- インデックスはJSON形式で格納されており、効率的な検索をサポートします。


全体のながれ
1. SQL の入力: クライアントが SQL を送信します。
2. パースとプランニング: SQL を解析し、最適な実行計画を作成します。
3. ストレージからのデータ取得: ディスクから必要なデータを取得します。
4. 書き込みの実行:書き込みを処理し、条件に合致する結果を生成します。
5. 結果の返却:クライアントに結果を返します。
すみません、やる気なくなりました。難しい。。。。。。　来年やる
---

### Java APIを書いてみた

実務でJava APIのテストを読む機会が増えてきたため、前月にGolangでAPIを実装したものをJava API化して勉強しました。  
**技術スタック**：Spring Boot、MySQL、Dockerを用いてJava API入門を行い、簡易的なユーザー作成APIを実装しました。

とりあえずの感触を掴みつつ、「こんな感じで書くのか」といった基礎的な理解を得ることができました。

#### 実装したJava API
[GitHub リポジトリ - Java API](https://github.com/takuma123-type/java-api-app/tree/main/menta_api)

#### Golang API
[GitHub リポジトリ - Golang API](https://github.com/takuma123-type/go-api-study)

---

### データベーススペシャリスト、応用情報、JSTQBを勉強始めたよ
来年の秋にデータベーススペシャリストを受験する予定なので、以下の講座で学習を進めております。

https://www.udemy.com/course/ouyou_joho/?couponCode=V2JPLETSLEARN
https://www.udemy.com/course/ouyou_pm/?couponCode=V2JPLETSLEARN
https://www.udemy.com/course/db_specialist_pm1/?couponCode=V2JPLETSLEARN
https://www.udemy.com/course/db_specialist_pm2/?couponCode=V2JPLETSLEARN
https://www.udemy.com/course/database_specialist/?couponCode=V2JPLETSLEARN

---

### OKRを考えてみたよ
将来的にどうなりたいのか？かなり考えた結果、以下のように着地しました。

#### 誰として、どうなりたい、その理由
QAエンジニアとして、QAと開発の両方に深い理解を持つエンジニアになりたい、両方のセンスを持ったバランスの良いスーパー人材として、プラットフォームを超えて活躍したいからです。

### 会社目標

#### 半年後
自動テストに精通しており、主体的に自動スクリプトを実装できる状態にあること。

#### 1年後
自立して、何をするべきかわかる状態となり、チームで品質改善活動ができている状態。

#### 3年後
チームの品質改善を多角的な視点でテスト自動化の充実と最適化ができている状態。

#### 5年後
プラットフォームを超えて品質改善活動ができる状態であり、QAと開発で橋渡しの役割を果たせること。

---

### シューティングゲーム開発をしてみたよ

今月、急にゲーム開発をしたくなったので、Unityを使って作成に挑戦しました。ただ、最後にUnityを触ったのは4年前だったため、Udemyを使って再学習を開始しました。

#### 今回利用した学習教材
- [Unity 2Dシューティングゲーム Udemy コース](https://www.udemy.com/course/unity2d-shooting/?couponCode=V2JPLETSLEARN)
- [Unity3D JPチュートリアル - シューティングゲーム Wiki](https://github.com/unity3d-jp-tutorials/2d-shooting-game/wiki/%E3%81%93%E3%81%AE%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB%E3%82%92%E5%A7%8B%E3%82%81%E3%82%8B%E5%89%8D%E3%81%AB)
- [Popii33 シューティングゲーム チュートリアル](https://www.popii33.com/shooting_game1/2/)

#### 詰まった点一覧
- **Textureの画像が背景に表示されない問題**  
  ドラッグ＆ドロップできず2時間経過。原因は、Sprite ModeをSingleに変更する必要がありました。Texture TypeをSpriteに変更するだけではダメでした。初歩的なミスです。

![背景設定エラー](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1788291/ea0ac1db-162c-1cb5-46a5-188e2b990578.png)

- **オブジェクトが後ろに隠れてしまう問題**  
  検索の結果、Order in Layerの数値を上げることで表示順を調整できました。

![表示順設定](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1788291/319f3fa7-76e6-5efc-5c6b-aa6777467623.png)

#### 攻撃が実装できた！いい感じ！
![攻撃実装 GIF](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1788291/40238d7b-4413-f003-a5a9-5ce67c89bba3.gif)

##### 完成！！！！！

![動画完成0002.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1788291/73a94836-1af1-2589-eb17-1ac1b5ef906e.gif)



---

### 1月号予告
- テトリス開発してみた
- Playwrightでテスト書いてみた
- アセンブラ入門してみた
- 今年の抱負を発表
- 自作OS作ってみた
- Java API自動テスト
- LINEチャットボットでゴミの日配信ボット作ってみた