たいきゅんの日記

公務員試験失敗から這い上がれ!気ままに更新ブログ

Jestに入門してみた(環境構築 - 最初のテストまで)

こんにちは!

今回はJest入門についてアウトプットしていこうと思います。

会社の新規プロジェクトでNuxtを使用することとなり、Jestをテストフレームワークとして導入しているので、そのキャッチアップの記事になります。

 

Jestとは

公式ドキュメント

 

JestはJavaScriptのテスティングフレームワークの一つです。

JavaScriptフレームワーク(Vue React等)、やシンタックスシュガー(TypeScript)等javaScriptを使用したものは基本使えるものとなっています。

npmかyarnがあれば簡単に導入することが可能です。

特徴として一番はスナップショット機能なのではないかと思っています。フロントエンドのテスト初心者の私にとって、この機能は画期的でした。。

 

環境構築

今回は、Vue3+Docker環境にJestを導入する方法をご紹介します。

Dockerfile docker-compose.ymlの説明は割愛します。

 

バージョン情報

docker Version:           20.10.17 
docker-compose version 1.29.2

 

Dockerfile

FROM node:17-alpine3.14

WORKDIR /var/www/html

RUN apk update && \
npm install -g npm && \
npm install -g @vue/cli

EXPOSE 8080

 

docker-compose.yml

version: '3.8'

services:
vue:
build: ./docker/vue/
tty: true
volumes:
- ./vue:/var/www/html
- 8080:8080

 

tree

├── docker
│   └── vue
│       └── Dockerfile
├── vue
| (略)
|
├── docker-compose.yml

 

こちらの設定で実行すればコンテナが立ち上がるはずです。

docker-compose up -d

 

コンテナが立ち上がったら、Vueプロジェクトの作成をしていきます。

vue create .

 

今回はカレントディレクトリにソースを置きたいので上記コマンドを実行します。プロジェクト名を付けたい方は自由に命名してもらって構いません。

 

ここからプロジェクトを作成していく上でJest関連のものをかいつまんで説明します。

 

Manuallyを選択

? Please pick a preset: (Use arrow keys)
❯ Default ([Vue 3] babel, eslint) 
  Default ([Vue 2] babel, eslint) 
  Manually select features 

 

Unit Testingを選択

? Please pick a preset: Manually select features
? Check the features needed for your project: (Press <space> to select,  to t
oggle all, <i> to invert selection, and <enter> to proceed)
 ◉ Babel
 ◯ TypeScript
 ◯ Progressive Web App (PWA) Support
 ◯ Router
 ◯ Vuex
 ◯ CSS Pre-processors
 ◉ Linter / Formatter
❯◉ Unit Testing
 ◯ E2E Testing

 

テストフレームワークの選択>Jestを選択

? Please pick a preset: Manually select features
? Check the features needed for your project: Babel, Linter, Unit
? Choose a version of Vue.js that you want to start the project with 3.x
? Pick a linter / formatter config: Basic
? Pick additional lint features: Lint on save
? Pick a unit testing solution: (Use arrow keys)
❯ Jest 
  Mocha + Chai 

In dedicated config filesを選択

? Please pick a preset: Manually select features
? Check the features needed for your project: Babel, Linter, Unit
? Choose a version of Vue.js that you want to start the project with 3.x
? Pick a linter / formatter config: Basic
? Pick additional lint features: Lint on save
? Pick a unit testing solution: Jest
? Where do you prefer placing config for Babel, ESLint, etc.? (Use arrow keys)
❯ In dedicated config files 
  In package.json 

 

この4点は注意して後はご自分の好みにカスタマイズして、プロジェクトを作成していください。

自動的にJestが入ったProjectが作成されると思います。

 

テストファイル

プロジェクト作成されるとtests/unitというディレクトリが自動生成されていると思います。この配下にテストを記述していきます。

tests/unit配下には予めexample.spec.jsというファイルが生成されており、サンプルが自動で用意されています。サンプルのようにテストファイルは.spec.js(あるいは.spec.ts)という拡張子を設定する必要があります。

 

テスト実行コマンド

今回はnpmを使用して環境を構築しているので下記コマンドで実行できます。

npm run test

上記コマンドをコンテナに入った状態で実行すればテストが実行されるはずです。

 

簡単なテストの実行

それでは簡単な足し算のテストを実行してみましょう。

test('one + one', () => {
expect(1 + 1).toBe(2);
});

 

上記を記載した後テストを実行してみてください。

中身は書いてある通りなのですが、こちらは「1+1の結果は2である」というテストです。

テストの実行にはtestメソッドあるいはitメソッドを使用します。

第一引数には、テストの概要の説明を記述し、第二引数に関数形式でテストを記述していきます。テストの概要はテスト実行時のログに出力されます。

今回のテストではexpectとtoBeを使用しております。意味の通り、expectで実行したい式等を記述し、toBeで予想される結果を記述します。今回はそれぞれ式と結果の数値を設定してみました。

このようにシンプルで分かりやすいのがJestのいい所です。

 

今回は以上になります。

次回以降もう少し深掘りしていこうと思います。

最後まで読んで頂きありがとうございました!!

Nuxt.js入門

こんにちは。

業務でNuxtを使用するので、その入門として調べたことをアウトプットしてみます。

入門として、フォルダ構成・パス・Vuexについて簡単にまとめてみます。

 

1. Nuxt.jsとは

Nuxt.jsはVue.jsのフレームワークのことです。Nuxt独自の概念もありますが基本的にはVue.jsの知識がそのまま使えるので、Vueができればそう参入障壁も高くないように思えます。

Nuxtのメリットをいくつか挙げると、以下のものがあります。

 

1. SSRができる

2. PWAモジュールが使用できる

3. head要素の取得が容易にできる

4. ルーティングを自動設定してくれる

5. TSとの互換性

 

他にもありますが、Vue.jsをさらに強化したもので非常にサクサクと開発できるフレームワークです。

 

2. Nuxtのフォルダー構成

Nuxtプロジェクトを作成すると自動で必要なフォルダ、ファイルを作成してくれます。その種類と中身は下記の通りです。

.git gitが使用するもの
.nuxt Nuxt.jsのアプリケーションが生成されている。デフォルトでは作成されず、npm run dev実行時に生成される
assets アプリケーションで使うスタイルシートJavaScriptファイルなどを配置
components コンポーネントファイルをまとめるフォルダ
layouts レイアウトファイルを配置するフォルダ
middleware ミドルウェアが配置されているフォルダ
node_modules プロジェクトで使用するパッケージ類がまとめられたフォルダ
pages 各ページ用のファイルをまとめるフォルダ
plugins プラグインのプログラムを配置するフォルダ
static イメージファイルなどを保管するフォルダ
store データを管理するためのファイルを用意するフォルダ
.editorconfig エディター設定情報
nuct_config.json Nuxt.jsの設定ファイル
package.json

パッケージ管理ファイル

 

この中でも最初はpages store assets staticフォルダをよく使用します。

 

3. デフォルトページの表示とパス

Nuxtプロジェクトを立ち上げると下記のように表示されるはずです。

Nuxtトップページ

こちらのページがどこから読み込まれるのかですが、こちらはpages/index.vueが元に表示されています。各ページのコンテンツはpagesフォルダーにまとめられており、ファイル名がそのままアドレスのパスになります。

例えば/a/a というアドレスのページを作成したいときは、pages/a/a.vueファイルを作成すれば、Nuxtがルーティングしてくれます。Vueの場合は、自身でルーターを設定する必要がありましたが、その必要がないのでNuxtは便利です。

そのためrouter-linkもタグを書くだけでaタグを作成できます。

 

(例)

<router-link to="/other">Go to other</router-link>

 

4. パラメーターの取得

ID等をGETで送信する場合にパラメーターをどのように取得するのかです。

例えば、http://〇〇/abc/パラメーターで値を送信したいときはpagesフォルダー内にabcというフォルダーを作成し、そこに_〇〇.vueという名前でファイルを用意します。xyzという名前でパラメータを受け取りたい場合は、_xyz.vueファイルを作成します。

パラメーターは$routeという変数のparamsプロパティ内にまとめられています。例えばxyzという名前でパラメータを送った場合は、下記で取り出すことができます。

 

this.$route.params.xyz

まとめると/id/passで値を取得したい時、/hanako/1 と送信するとid=hanako pass=1をthis.$route.paramsで取得することができる。

 

5. Vuex

nuxtにおけるVuexの利用方法は

 

1. storeフォルダにスクリプトを用意します。そしてstoreフォルダ内のスクリプトにより変数や必要な処理を用意します。

2. $storeを利用します。$storeにはVuexのオブジェクトが保管されており、この中から値などを取り出すことができます。

 

(例)

store/index.js

// Vuexという名前でオブジェクトを作成する
import Vuex from 'vuex';

const createStore = () => {
// Vuex.Storeというオブジェクトを作成する関数を定義。Vuex.StoreオブジェクトにVuexの情報をまとめて管理
return new Vuex.Store({
// state=Storeに保管する値を用意するために必要。componentのdataに似たもの。
state: function(){
return {
message: 'This is store message!',
};
},
})
}
// export 他のファイルでimportすることでcreateStore関数が使用できるようになる(特別な記述は不要)
export default createStore;

$storeの呼び出し(例ではmessageの中身を出力)

<p>{{$store.state.message}}</p>

 

5. mutation

コンポーネント側で$store.stateの値を直接書き換える操作は推奨されていない。そのため$store.stateの値操作を行いたいときは、ストア側で値の操作を行う。この操作にはミューテーションという機能を使う。

const createStore = () => {
    return new Vuex.Store({
        state: function(){
            return {
                message: 'This is store message!',
                counter: 0,
            };
        },
        mutations:{
            count(state) {
                                // カウントアップするmutation
                state.counter++;
            },
            reset(state) {
                                // リセットを実行するmitation
                state.counter = 0;
            }
        },
    })
}

 

ミューテーションの機能をコンポーネント側から呼び出すにはcommitメソッドを使用します。commitメソッドでは名前を指定する必要がある。

 

<div class="link" 
  v-on:click="$store.commit('count')"
 v-on:click.alt="$store.commit('reset')">
 <a>Clicked:{{$store.state.counter}}</a>
</div>

(例)

clickで$storeに設定されているmutationのcount関数を呼び出す。

click.altで$storeに設定されているmutationのreset関数を呼び出す。

 

ざっとですが以上になります。

axiosとか、CompositionAPI、その他Nuxtの機能は別記事にてまとめてみたいと思います!!

最後まで読んでいただきありがとうございました!!

php-fpmについてざっと理解する!

こんにちは。

今回はPHP fpmについてまとめてみます。

1年以上PHP開発はしているものの、Vagrantかつインフラ周りを触ってなかったため、PHP-fpmとかそもそもPHPについて詳しく知っていませんでした。Dockerでphp環境を作る際、PHP fpmを使用したので、この機会に調べまとめてみました。

 

1. モジュール版PHPCGIPHP

PHPにはモジュール版PHPCGIPHPの二種類が存在します。

いくつかの違いがありますが、大きな違いとしてモジュール版PHPwebサーバー上で動作、CGIPHPアプリケーションサーバ上で動作します。そのため「NginxをプロキシしてPHPを起動したい」場合は、CGIPHPを使用する必要があります。

 

2. PHPfpmとは

PHP標準のアプリケーションサーバのこと。fpmはFastCGI Process Manager の略です。PHP5.4.0からサポートされています。

大雑把に理解するならば、「高負荷サイトにおいてパフォーマンスを発揮するためのPHPの一種」であると捉えてもらえればと思います。

 

3. fpmとは

fpm(FastCGI Progress Manager)とはPHPFastCGI実装の一つで主に高負荷サイトで有用な追加機能したものになります。

例えば、xさんとyさんが一つのwebサーバーを共有している時、通常処理を実行すると同じプロセスで実行することになります。しかしCGI版だと別ユーザーとして実行されているので、お互いの干渉を防ぐことができます。そのためセキュリティのリスクや他のユーザーへの干渉が及ぶ危険性が低いものになっている。

一方で別プロセスで実行するため処理速度は落ちてしまうデメリットがあります。

 

4. FastCGIとは

CGIはCommon Gateway Interfaceのこと。これはwebサーバーがブラウザからの要求に応じてプログラムを動作させる仕組みのことです。

 

FastCGICGIを改良したものとなっています。

 

具体的には、CGIと比較し、処理速度の高速化負荷の軽減が期待できます。

CGIではブラウザからの要求に応じて起動したプログラムは、処理が終わり次第プログラム自体も終了します。そのためリクエストが何回も繰り返された場合、いちいち起動・終了を繰り返すことに非効率です。

しかしFastCGIの場合一度起動したプログラムは、一定時間メモリ上で起動したままの状態にしておくことができます。そのためリクエストが繰り返されても、プログラムの起動・終了が一回で済むため、CGIに比べ効率的と言えます。

 

以上になります。

まとめると、php-fpmはモジュール版PHPに比べて効率良く処理を行い、セキュリティ対策や高負荷サイトへの対応もしたPHPであるといった所でしょうか。これくらい理解しておけばひとまず基礎は抑えられたのではと思います。

最後まで読んでいただきありがとうございました!!

 

Laravel+Nginx+PostgreSQLのDocker環境を作成する-コンテナ立ち上げからlaravelのトップページを開くまで-

こんにちは。たいきゅんです。

今回はLaravel+Nginx+PostgreSQLのDocker環境を作成する-コンテナ立ち上げまで-の続きの記事になります。

コンテナを立ち上げるまでは完了していることを前提に、composerを使ってLaravelをインストールし、DBと接続するまでの設定を書いていきます。

 

1. laravelのインストール

 

phpコンテナ(サービス名はappで設定)したコンテナに入ります。

docker-compose exec app bash

WORKDIRで設定したとおり、下記のような表示になると思います。

root@b0b05f381054:/var/www/app# 

 

ここでcomposerを使ってLaravelをインストールします。

composer create-project laravel/laravel .

今回はカレントディレクトリにlaravelをインストールしたかったので、.で設定しました。プロジェクト名を別途設定したい場合は、プロジェクト名を設定して上記コマンドを実行してください。

 

2. 画面の確認

 

Laravelのダウンロードが完了したら、localhost:80にアクセスして下記画面が表示されるか確認しましょう。

Lravelトップページ

確認されなかったら、ログを見てエラー解決してください。

 

3.データベース接続を行う。

DBコンテナと接続を行います。

PostgreSQLコンテナと接続するために、1でダウンロードしたLaravelプロジェクト内にある、.envファイルを編集します。

 

.env(変更後)

...
...
DB_CONNECTION=pgsql
DB_HOST=db
DB_PORT=5432
DB_DATABASE=test
DB_USERNAME=admin
DB_PASSWORD=password
...
...

 

.envファイルに上記項目があるので設定を変更しましょう。

 

DB_CONNECTION: DBMSの設定。今回はPostgreSQLなのでpgsqlと記載

DB_HOST:DBコンテナ名。今回はdbと設定。

DB_PORT: docker-compose.ymlで設定したportを設定

DB_DATABASE: docker-compose.ymlで設定した初期データベース名を設定

DB_USERNAME: docker-compose.ymlで設定したデータベースユーザー名を設定

DB_PASSPORD: docker-compose.ymlで設定したパスワードを設定

 

今回はPostgreSQLで実行しますが、MySQLコンテナにしたい場合も基本的に同じで、

DB_CONNECTIONや、imageをMySQLに沿ったものに設定すればできると思います。

 

こちらを変更したらマイグレーションを実行します

php artisan migrate

コマンド実行後、エラーが出てなかったらDB接続ができていることになります。

マイグレーションができなかったら、設定関連のミスだと思うので、.envファイルとdocker-compose.ymlを中心に確認してみてください。

 

マイグレーションができたら環境構築が完了です。

 

以上になります。

質問等ございましたら、ご連絡頂ければ分かる範囲でお答えします!!

間違っていたらして頂けますと幸いですmm。

 

最後まで読んで頂きありがとうございました!!

 

Laravel+Nginx+PostgreSQLのDocker環境を作成する-コンテナ立ち上げまで-

 

こんにちは。たいきゅんです。

 

転職して最初の案件が新規案件で、当たり前のようにDockerを使うことになりました。

そこで改めてDockerの基礎について学習したのでまとめてみます。

 

最低限の設定で動くようにしてみています。

内容は初心者レベルですので、ポートフォリオ作成でDockerを使いたいという方は参考にして頂けると幸いです。

設定を細かく書く形ですので、基礎理解を深めたい方向けになっております。

また今回はコンテナの立ち上げまでをまとめております。次回の記事で以後の設定も記載します。

 

1. 今回作成する環境の要件

今回はLaravel環境を作成してみました。作成するコンテナは以下の3つです。

 

  1. Laravelコンテナ(PHP fpm)
  2. nginxコンテナ(プロキシ)
  3. PostgreSQLコンテナ

 

(PHP-fpmについては別途記事を作成してますのでそちらを参考に)

バージョンは基本的に記事作成時(20228月時点)の最新版で作成してます。

 

Nginx 1.23.1

Laravel Framework 9.25.1

PostgreSQL 14.4

 

2. フォルダ構造と実際に作成したDockerfile・docker-compose.yml

 

フォルダ構成は今回下記の形を使ってみました。

docker-compose.ymlを修正してお好みの形に編集して頂ければと思います。

 

.tree

.
├── docker
│   ├── laravel
│   │   ├── Dockerfile
│   │   └── settings
│   │   └── php.ini
│   ├── nginx
│   ├── Dockerfile
│   └── settings
│   └── default.conf
├── docker-compose.yml

 

docker/laravel/Dockerfile

FROM php:8.0-fpm

COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
COPY ./settings/php.ini /usr/local/etc/php/php.ini

RUN apt-get update && apt-get install -y libpq-dev nodejs git zip unzip \
&& docker-php-ext-install pdo_pgsql

RUN pecl install xdebug \
&& docker-php-ext-enable xdebug

WORKDIR /var/www/app

 

docker/nginx/Dockerfile

FROM nginx:1.23.1-alpine

COPY ./settings/default.conf /etc/nginx/conf.d/default.conf

 

docker-compose.yml

version: '3.8'
services:
app:
build: ./docker/laravel
volumes:
- ./laravel:/var/www/app
- 9000:9000

nginx:
build: ./docker/nginx
- 80:80
volumes:
- ./laravel:/var/www/app
db:
image: postgres:latest
environment:
TZ: Asia/Tokyo
POSTGRES_DB: test
POSTGRES_USER: admin
POSTGRES_PASSWORD: password
- 5432:5432

volumes:
postgres_data:
driver: local
 
3. それぞれの設定項目の説明
 
それぞれのファイルの設定項目をまとめます。
1. docker/laravel/Dockerfile
FROM php:8.0-fpm
php-fpmの8.0をイメージに設定しています。
 
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
composerインストールの部分です。
composerの設定箇所は決まっているので、上記で問題ないはずです。
 
COPY ./settings/php.ini /usr/local/etc/php/php.ini
php.iniファイルをdocker環境にセットしています。
php.iniではxdebugを実行するための設定を記載しました。(本記事では割愛)
 
RUN apt-get update && apt-get install -y libpq-dev nodejs git zip unzip \
&& docker-php-ext-install pdo_pg
必要な機能を諸々apt-get installしています。

今回は、laravelで必要になるnode、postgresqlとの接続に必要なlibpq-dev pdo_pg 、composer実行時に必要なzip,unzip,gitを選択しています。

 
RUN pecl install xdebug \
&& docker-php-ext-enable xdebug
xdebugのインストールと実行できるように設定
 
WORKDIR /var/www/app
今回は/var/www/appにlaravelをダウンロードしたいため、WORKDIRを設定しました。
これがあると、laravelコンテナに入った際の最初の作業位置が/var/www/appになります
 
2. docker/nginx/Dockerfile
FROM nginx:1.23.1-alpine
作成当時の最新バージョンを設定。
 
COPY ./settings/default.conf /etc/nginx/conf.d/default.conf
動かすことだけ考えると、default.confの設定のみで十分なので/settings/default.confファイルをCOPYする形にしました。
 
3. docker-compose.yml
 
Laravelコンテナ
services:
app:
build: ./docker/laravel
volumes:
- ./laravel:/var/www/app
- 9000:9000
 
buildセクションで、buildに使用するDockerfileを指定しています。
またvolumeセクションで、laravelフォルダと、コンテナ内の/var/www/appがvolumeするように設定しています。
portsはなくても確か動きますが、明示したかったため設定しました。今回はphp-fpmデフォルトの9000番を設定してます。
 
nginxコンテナ
nginx:
build: ./docker/nginx
- 80:80
volumes:
- ./laravel:/var/www/app
 
buildセクションで、buildに使用するDockerfileを指定しています。
プロキシ設定するため、volumeセクションでlaravelコンテナと同様の設定をしています。
portsはなlaravelコンテナ同様、明示したかったためnginxデフォルトの80番を設定してます。
 
dbコンテナ
db:
image: postgres:latest
environment:
TZ: Asia/Tokyo
POSTGRES_DB: test
POSTGRES_USER: admin
POSTGRES_PASSWORD: password
- 5432:5432

volumes:
postgres_data:
driver: local
 
imageセクションで、PostgreSQLの最新版をimageに設定しています。
TZは時間設定のための設定です。
POSTGRS_DBはデータベース作成時に自動で作成されるdb名を設定しています。今回はtestというデータベースを作成する形にしてみました。
POSTGRS_USERは、データベース作成時に自動で作成されるユーザー名を設定しています。今回はadminユーザーを作成する形にしてみました。
POSTGRS_PASSPORDデータベース作成時に自動で作成されるユーザーのパスワードの設定しています。今回はpasspordというパスワードを設定してみました。
 
volumesで、データの永続化の設定をしています。
この記述がないと、DBに登録したデータがコンテナを停止させると同時に消えてしまいますので注意してください。
 
4. nginx.confの設定
今回はnginxをプロキシサーバーとして使用したいため、その設定が必要です。そのためにはnginxコンテナに設定を書かないといけないのですが、それを今回はnginx.confファイルに記載しました。こちらを紹介します
 
docker/nginx/settings/default.conf
server {
listen 80;
root /var/www/app/public;
index index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}

location ~ \.php$ {
fastcgi_pass app:9000;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
}
 
それぞれ説明していきます
listen 80;
root /var/www/app/public;
index index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
listen: 80番ポートをlistenさせます。
root: ルートフォルダを設定します。laravelの場合は、publicがルートフォルダになるので、コンテナ内でのパス(/var/www/app/public)を設定しました。
index: 最初に読み込むファイルを設定します。laravelの場合は、public/index.phpを最初に読み込む必要があるので、そちらを設定します。
location: ファイルの振り分けの設定をしています。urlの設定があれば、そのURLにプロキシし、なければindex.php?$query_string....という形でプロキシするという設定にしています。
 
location ~ \.php$ {
fastcgi_pass app:9000;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
php-fpmの設定が必要なので、頭文字にfstcgiとついています。
pass: phpコンテナのパスを設定します。ここは、コンテナ名:ポート名と設定します。
param: サーバーに渡すパラメーターを設定します。詳細は省略しますが、上記設定でパラメータを渡すことができました。
include: パラメーターをincludeできるように設定しています
 
参考

PHP FastCGI の例 | NGINX

 

4. docker-compose コマンドで立ち上げ

設定が完了したら、docker-composeコマンドでコンテナを立ち上げられるはずです。

長くなったのでDB設定や、laravelのダウンロードは次回以降記載します。

 

今回の記事は以上となります。

LaravelのインストールとDB接続は次の記事に記載しておりますので是非参考にしてください。

最後まで読んで頂きありがとうございました!!

 

達人に学ぶSQL徹底指南書 第2版 初級者で終わりたくないあなたへ

 

 

こんにちは。たいきゅんです。

今回は私がエンジニアになって初めて本気で読んだ技術書についてまとめていこうと思います。

是非最後までお付き合いください。

 

今回読んだ技術書はこちらになります。

 

今回は以下の4点でまとめていきます。

 

1.なぜこの本を読みたいと思ったのか?
2.特に勉強になったこと

3.本書をお奨めしたい人

4.まとめ

 

1.なぜこの本を読みたいと思ったのか?

 

3点あります。

 

1点目は、DB周りの知識はあるに越したことないし、普通のエンジニアのDB知識や経験が私にはないなと強く実感しました。これは転職活動の経験で学んだことです。こちらを補うために学習したいと考えていました。

 

2点目は、突き抜けたエンジニアに将来なるために、DBの知識は必要不可欠と考えたからです。簡単なSQLの知識というものは、その場で分からないものをググっていけばなんとなくついていくものです。(私がそうでした。)しかしそれだとその場凌ぎのエンジニアになってしまうと危機感も感じておりました。将来突き抜けるにはこのままじゃダメだなと考えるようになりました。

 

3点目は、技術トレンドはどんどん変わっていくけど、SQLやDBって開発言語ほどトレンドが変わっていくものではないし、深く学習することによるコスパが高いなとも考えるようにななったからです。近年NoSQLが流行っていますが、DBMSがなくなるってことは中々想像し難いですし。

 

以上の理由からDBの体系的な学習をしようと決心し、書籍を探していました。その中で私のようなエンジニア歴1年目のエンジニアが読んでおくと良いオススメとして多く紹介されていたため、こちらをチョイスしてみました。

 


2.特に勉強になったこと

 

一番勉強になったのはCASE式に関するセクションです。

実務であまりCASE式を書く機会が多くなかったのですが、本書を読み進めていくうちに「こんなに良くできたものなのか!!」と感動させられました。

正直実務で使いこなすにはまだまだですが、絶対に自分のものにしてSQLをゴリゴリ書いていこうと思います。

 

3.本書をお奨めしたい人

 

是非私のようなエンジニア歴1年前後の人が読んでおくべき書籍だと思います。

技術書と聞くと難しいイメージを持ちがちですが、内容自体はその場凌ぎでやってきた私でも理解できましたし、今まで何となくだったところが明確になったり、微量ながらDBの知識がついたりと、発見の多い一冊だと思います。

3年目とかでこの書籍のSQLが書けないとなるとちょっと厳しい気もしたので、出来る方は不要ですが、「SQLに自信がなく、基礎から学び直したい」と考えている方には最適な一冊なのではと思いました。

 

4.まとめ

 

この書籍を通して、自身のDBの知識不足を痛感させられましたし、逆にDBに強くなればもっと世界が広がり、自身の武器にもなるとも感じました。今年はDBに強くなることをテーマに、残りの半年も頑張っていこうと決心がつきました。またもう一冊買って6月もDB学習してきたいと思います。

最後まで読んで頂き、ありがとうございました。

 

 

 

転職サイトについてまとめてみる

こんにちは。たいきゅんです。

今回は、私が転職活動時に使用していた転職サイトとその感想についてまとめてみようと思います。

 

①転職活動時の私のスペック

初めに転職活動をしていた時の私の簡単なスペック紹介です。

 

都内受託系webIT勤務

エンジニア経験:1年2ヶ月

開発言語:PHP

ポートフォリオ:Go,Vue,Firebaseを使用して作成

qiita.com

 

②使用した転職サイト

私は主に以下の3つを使って転職活動を行いました。最終的には転職ドラフト経由で転職しました。

 

・Green

www.green-japan.com

 

Wantedly

www.wantedly.com

 

・転職ドラフト

job-draft.jp

 

③それぞれのメリット・デメリット

それぞれのサイトの詳細については、ググってもらうとして私が感じたメリット・デメリットを書いていこうと思います。

 

(1) Green

 

メリット

・掲載社数・スカウトの数が多い

スカウトを受ける数は、3つの中で一番多かったです。広く認知されていることもあったさすがとしか言えないですね。

 

・十分な情報量

企業側の情報がフォーマットに沿って最低限表示されているので、Greenのページ+コーポレートサイトを確認すれば、大体の情報を掴むことができました。

サクッと進めることができ効率的にできたのはよかったなと思います。

 

デメリット

・UXが微妙

たまにバグっぽい表示になったり、通知が多かったりとその点残念でした。

UXで残念に感じたのはGreenだけだったので、もう少し改善して欲しいです。

ただ転職活動に影響が出るような部分では特に感じなかったので、転職活動に支障はないと思います。

 

・選別が大変

通知がどんどんくるので優秀な方ほど煩わしく感じてしまうかもしれません。

またエンジニア転職を希望しているのに、全く違う業種からのスカウトが来たときはちょっとな…と思いました。

スカウトを送る側にも制限をかけて、業界違いからの連絡は来ないようになったらなと個人的に思いました。

 

(2) Wantedly

 

メリット

・シンプルで洗練されている

転職活動以外にも社会人同士が繋がるSNSみたいな形で機能しているアプリで機能が複雑になりがちかと思いきや、割とシンプルに洗練されていてすごいなと思います。

Wantedlyについては転職活動以外でも使用できるので、人脈拡大に使用したりするのもいいかもしれません。

 

デメリット

・プレミア会員じゃないとまずスカウトはこない。

転職活動専用サイトではないため、無料会員だとまず連絡は来ないです。

そのため転職活動をする際は絶対にプレミアム会員となり企業側にアピールできる状態になる必要があります。

唯一お金をかける必要が生じてしまっているのですが、専門サイトではないので仕方ないですね。

 

(3) 転職ドラフト

 

メリット

・他の求職者の情報から自身の立ち位置を確認できる

他のサイトにはない一番のメリットがこれです。

匿名ですが高年収でスカウトを受けている人のスペックを確認することができ、「どういった人材が転職市場で評価され、自身は今どの位置にいるのか」を客観視することができます。

自身のキャリア形成の参考にもなるし、モチベーションになります。

 

・名だたる有名企業が参加している

ITメガベンチャーで有名な企業であったり大きなスタートアップ企業であったり有名な企業からスカウトを受けるチャンスがあります。

 

・レジュメの審査が厳しく洗練されている。

名だたる企業からのスカウトのチャンスがあるため、求職者側の選別も厳格に行われます。未経験では恐らく通過できないでしょうし、経験者でもモダンでない技術を使っていると弾かれます。現に私もポートフォリオの作成でGo言語等を触ってない時期に書いたら、レジュメの審査に普通に落ちました。笑

 

・年収提示型である

スカウトされる際、年収も同時に提示されます。これが便利で最終面接まで進んだのに年収が低かった等のトラブルを回避できます。

 

デメリット

・ドラフトされるハードルが高い

時期にもよりますが、ハイレベルのドラフトというのが前提になってくるためドラフトを一回も受けずに終わってしまう可能性もあります。

 

以上です。

ざっとまとめてみましたが、個人的には転職ドラフトが新しく求職者にとってメリットの多いサイトなのかなと思いました。

年収提示型である点、エンジニア転職のみである点等、Webエンジニア転職に使うサービスとしての最適解の一つなのではと思いました。

今後も新しいサービスはどんどん公開されていくと思うので、出たらとりあえず使ってみるのスタンスでどんどん便利を享受していきましょう。

最後まで読んで頂きありがとうございました。