JavaScript Primerを読んだ感想

はじめに

 JavaScriptの学習として「JavaScript Primer」を読んだので、感想をまとめました。

良かったところ

基本文法の解説が豊富

 条件分岐や配列など、他のプログラミング言語と共通するものから、アロー関数など、JavaScript独自の文法まで幅広く解説されており、基本文法については本書を理解できれば、JavaScriptをかなり使いこなせるようになると感じました。また、実例としてどのように利用されることが多いかの解説がある点も良かったです。

ユースケースで理解を深められる

 応用編として、具体的なユースケースをもとに基礎文法で学んだ内容の理解をさらに深められたところが良かったです。

学んだところ

基本文法

 JavaScriptの基本的な文法(他のプログラミング言語と共通するもの)と、JavaScript独自の文法を実例を交えて学びました。

this

 thisは使う場面によって参照先が異なる変数であり、関数においてthisを使った場合にはグローバルオブジェクト、メソッドでは呼び出し元のオブジェクト、コンストラクタではインスタンス、callメソッドおよびapplyメソッドでは引数で指定したオブジェクトが参照されることを学びました。

非同期処理

 複数の処理を並行して行う非同期処理の方法について学びました。Promiseを扱っての非同期処理の概要を理解した上で、Async Functionを扱っての非同期処理の概要を解説するという流れがとても分かりやすかったです。

難しかったところ

Todoアプリの作成

 直接DOMを更新させるのではなく、クラスやコールバック関数を使って、Todoリストが更新された時にイベントを発生させて表示を更新させるところが、急にレベルが上がったと感じました。まだ完全に理解することができていないので、よく復習します。

Everyday Rails - RSpecによるRailsテスト入門を読んだ感想

はじめに

 RSpecの学習として「Everyday Rails - RSpecによるRailsテスト入門」を読んだので、感想をまとめました。

良かったところ

環境構築が容易

 本書ではRSpecを学ぶためのアプリケーションが用意されており、Githubからcloneするだけで、スムーズに学習に取り組むことができます。

テスト技法のベストプラクティスを学ぶことができる

 著者の考えから、どのようなテストを実施することがベストなのかを、これからテスト技法を学び始める人にもわかりやすく説明されているところが良かったです。

学んだところ

モデルに対するテストの実施方法

 本書はアプリケーションのコアとなるモデルのテスト方法の説明から始まります。RSpecの基本的な文法およびバリデーション/インスタンスメソッド/クラスメソッドとスコープのテスト方法を学びました。

テストデータの作成方法

 Factory Botを使ってテストデータを作成する方法を学びました。シーケンスを使ってユニークなデータを⽣成したり、コールバックを使ってテストデータ作成前後にアクションを追加できたりと複雑な処理もできる強みがありますが、テスト中に予期しないデー タが作成されたり、無駄にテストが遅くなったりする原因にもなり得ることから、使用する際は十分に気をつける必要もあることも理解しました。

コントローラに対するテストの実施方法

 認可されたユーザー/認可されていないユーザー/ゲストユーザーそれぞれのアクションが正常に動作するかのテスト方法について学ぶことができました。また、コントローラのテストは最近ではあまり重要視されておらず、モデルのテストか、より⾼いレベルの統合テストと置き換えることが推奨されているようです。

システムスペック(統合テスト)の実施方法

 モデルとコントローラが一つのシステムとして正常に動作するかをテストする方法について学びました。また、システムスペックにてCapybaraを使うことで、click_link、fill_in、visitといったメソッドが使用でき、ユーザーがブラウザ上で行う操作に近いテストを実施できることを学びました。

リクエストスペックの実施方法

 リクエストスペックにてAPIテストの実施方法について学びました。またコントローラスペックのアクション部分を具体的なルーティング名の指定にすることでリクエストスペックに置き換えができることを学びました。

テストコードのリファクタリング方法

 DRY原則を守るためのリファクタリング方法を学びました。また、可読性やメンテナンス性を考慮してリファクタリングをする重要性も学びました。

テストのスピードを上げる方法

 テスト実行速度を上げる方法だけでなく、テストを作成する時間も早くする方法を学びました。

テスト駆動開発について

 新機能をテストから書き始め、アプリにどのような振る舞いを持たせることでテストが通るかを考えながら実装していく流れを学ぶことができました。

難しかったところ

テスト独自の構文であるところ

 RSpecRubyRailsの構文と異なるテストコードとしての構文で記述する必要があるので、慣れが必要であると感じた。

現場で使える Ruby on Rails 5速習実践ガイドを読んだ感想

はじめに

 Railsの学習として「現場で使える Ruby on Rails 5速習実践ガイド」を読んだので、感想をまとめました。

良かったところ

 タスク管理アプリを作成しながらRailsの基礎と、アプリ開発でよく実装される機能の作成方法を学ぶことができたところが良かったと感じました。
 また、テストを実施することの重要性や、複数人で開発を行う際に、開発現場で必要となる実践的な知識を学べたところも良かったです。

学んだこと

MVC

 MVCとはRailsが採用しているソフトウェアをどのような構造にするかについての考え方のパターンの1つです。
 アプリケーションはさまざまな処理によって構成されますが、UIの部分はアプリケーション固有のデータや処理の扱いとは性質が異なり、両者を混ぜて記述するとコードが複雑化して保守性が悪くなってしまいます。そのため、UIに関わる部分(View)、アプリケーション固有のデータや処理の扱いの部分(Model)、モデルやビューを統合的に制御する部分(Controller)の3つに役割を分け、管理しやすくすることがMVCの目的です。

コントローラ

コントローラはユーザーが操作するブラウザなどのクライアントからリクエストを受け、適切なレスポンスを作成するための制御を行う部分です。
 Railsでコントローラを作成する場合、RESTfulに則ったCRUD(Create,Read,Update,Delete)のアクションを設計します。CRUDはよくある機能のため、下記のようにパターン化された設計があります。

HTTPメソッド アクション名 機能名
GET index 一覧表示
GET show 詳細表示
GET new 新規登録画面
POST create 登録
GET edit 編集画面
PATCH/PUT update 更新
DELETE destroy 削除

モデル

 モデルはデータとデータに関わるビジネスロジック(アプリケーション特有の処理)をオブジェクトとして実装したものです。Railsの場合、データベースのテーブル毎にモデルが用意され、リクエストで呼び出されたアクションは、モデルを介してデータベースとやり取りを行い、データを取得したり新しいデータを格納したりします。

ビュー

 ビューはブラウザに表示する画面、すなわちHTMLなどの中身を実際に組み立てる部分です。コントローラからモデルのオブジェクトなどを受け取り、画面表示に利用しています。

アプリケーションでよく実装される機能の作成方法

 本書ではシンプルなCRUD機能を備えるタスク管理アプリケーションを実用的なものにするために、以下の機能の実装方法を学ぶことができました。実際に自分でアプリ開発をするときに、全体の流れを把握するために本書が参考になると思いました。

  • ログイン機能
  • 確認画面の作成方法
  • 検索機能の作成方法
  • ソート機能の作成方法
  • メイラーの作成方法
  • 画像ファイルの添付機能の作成方法
  • csvファイルのインポート/エクスポート方法
  • ページネーションの作成方法
  • 非同期処理/定期実行の方法

難しかったこと

 本書はHTML/CSS、Bootstrap、Rubyの知識があることを前提として解説されているので、全体的に難易度は高めであったと感じました。
 また、覚えることのボリュームも多く、プログラミング初学者は本書を1周読んだだけでは概要を理解できても、実際にアプリケーションを作る際に読み直し、知識を定着させていく必要があると思いました。

まとめ

 本書はRailsを使ったアプリケーション開発の流れを理解するにはとても良い本であったと感じました。ただ、Rails5対応の内容となっているため、思わぬところでエラーが出る場合がある点は注意が必要と感じました。

達人に学ぶDB設計 徹底指南書を読んだ感想


はじめに

 DB設計の学習として「達人に学ぶDB設計 徹底指南書」を読んだので、感想をまとめました。

良かったところ

 本書は論理設計と物理設計の知識に加え、DB設計がシステムの品質を左右する重要な要素であることを理解できたことが良かったと感じました。
 また、各章の先頭に記載されている「学習のポイント」と、抑えるべき重要な箇所についてまとめられている「勘どころ」は要点が簡潔にまとめられており、とてもわかりやすいと感じました。

学んだこと

正規化がもたらすデメリットについて

 本書を読む前は、論理設計におけるテーブルの正規化に関し、正規化を繰り返すことでデータの冗長性がなくなり、更新時の不整合を防ぐことができるメリットの部分しか理解していませんでしたが、正規化によるデメリットを学ぶことができました。
 正規化を繰り返すことにより、テーブルの数が増えるため、データの検索時にテーブルの結合処理を行う必要があります。しかし、SQLによる結合処理はシステムに高い負荷をかける処理であるため、システムのパフォーマンスが落ちるというデメリットがあると学びました。そのため、パフォーマンス向上のためにあえて正規化を低次なものに留める設計が採用されることがあります。
 しかし正規化は可能な限り高次にすることが大原則のため、実務における論理設計では、正規化と検索SQLのパフォーマンスには強いトレードオフの関係があることを考慮し、非正規化をしなければならないケースを慎重に判断できるようになる必要があります。 

論理設計のバッドノウハウとグレーノウハウについて

 著者が開発現場で遭遇してきたバッドノウハウ(内容は下記参照)から、DB設計をするにあたり避けなければならないことを学ぶことができました。
 また、節度ある利用に留める限り有効に作用するが、無闇に使うことを避けるべきグレーノウハウ(内容は下記参照)から、メリットとデメリットを併せ持つ技術は扱いに注意する必要があることを学びました。

バッドノウハウ

  • 非スカラ値(値に配列型を利用すること)
  • ダブルミーニング(列が途中で値の意味が変わること)
  • 単一参照テーブル(あらゆるタイプマスタテーブルを一つのテーブルにまとめること)
  • テーブル分割(レコード単位または列単位でテーブルを分割すること)
  • 主キーや外部キーに可変長文字列を使うこと
  • 可変長文字列と固定長文字列を混同させること
  • ダブルマスタ(同じ役割を果たすマスタテーブルが2つ存在すること)

グレーノウハウ

  • 代理キー(主キーが決められない場合などに「代理」として新しく追加するキー)
  • 列持ちテーブル(配列型を使わずに配列の表現をする論理設計)
  • アドホックな集計キー
  • 多段ビュー

難しかったこと

 木構造の内容がかなり難しくあまり理解ができませんでした。木構造の論理設計を行う機会がきたときに再度読み直したいと思います。

まとめ

 本書ではDB設計方法の詳細だけでなく、SQLのパフォーマンス問題についても多く記入されており、DB設計によって生じる様々なトレードオフを考えることの重要性も学ぶことができました。実務でDB設計に携わる機会がある人は必読であると感じました。

スッキリわかるSQL入門を読んだ感想


はじめに

SQLの学習として「スッキリわかるSQL入門」を読んだので、感想をまとめました。

良かったところ

 本書はSQLとデータベースの基礎を会話形式で解説しています。それに加え、イラストや図を使った解説もあったので、SQLの知識がProgateを1周した程度の私でも内容の理解がしやすいと感じました。
 また、PCやモバイル端末のブラウザだけでSQL文の作成ができる「dokoQL」のおかげで、環境構築をせずに気軽に学習ができる点も良かったと感じました。

学んだこと

 本書で学んだことの概要をまとめました。

1.DML(Data Manipulation Language)
 -データ操作言語-

 DMLとはデータの検索や追加、更新、削除などを行う命令のことです。 ほとんどのデータ操作はSELECT文、INSERT文、UPDATE文、DELETE文で実現することができ、これらは四大命令と言われています。

・SELECT文

 SELECT文はテーブルから目的のデータを検索して取得することができます。

SELECT 列名
FROM テーブル名

・INSERT文

 INSERT文はテーブルに新しいデータを追加することができます。

INSERT INTO テーブル名 (列名1,列名2,...)
VALUES (値1,値2,...)

・UPDATE文

 UPDATE文はすでにテーブルに存在するデータを更新することができます。

UPDATE テーブル名
SET 列名1=値1,列名2=値2,...

・DELETE文

 DELETE文はすでにテーブルに存在するデータを削除することができます。 (DELETE文はWHERE句で操作する行の絞り込みを行わない場合、全ての行が対象になるため注意。WHERE句については後述参照。)

DELETE FROM テーブル名
WHERE 条件式


2.WHERE句による操作する行の絞り込み

 SQLを用いてイメージ通りにデータ操作を行うためには「どの行を対象として、どのように操作するか」を指定する必要があります。  SQL文の中でWHERE句を使うことにより、処理対象となる行の絞り込みができます。

SELECT文、UPDATE文、DELETE文の記述
WHERE 条件式


3.SELECT文の検索結果の加工

 SELECT文で抽出した検索結果は、さまざまな形に加工することができます。

・DISTINCT

 検索結果から重複行を除外できます。

SELECT DISTINCT 列名
FROM テーブル名

・ORDER BY

 検索結果の順序を並べ替えることができます。 並び順は昇順にする場合はASC、降順にする場合はDESCを指定します。(初期値は昇順)

SELECT 列名
FROM テーブル名
ORDER BY 列名 並び順

・OFFSET-FETCH

 検索結果から件数を限定して取得することができます。 また、ORDER BYと併用することで検索結果の並び順を指定することができます。

SELECT 列名
FROM テーブル名
ORDER BY 列名 並び順
OFFSET 先頭から除外する行数 ROWS
FETCH NEXT 取得行数 ROWS ONLY

・UNION -和集合-

 検索結果に他の検索結果を足し合わせることができます。

SELECT文1
UNION
SELECT文2

・EXCEPT -差集合-

 検索結果から他の検索結果を差し引くことができます。

SELECT文1
EXCEPT
SELECT文2

・INTERSECT -積集合-

 検索結果と他の検索結果で重複する部分を取得することができます。

SELECT文1
INTERSECT
SELECT文2


4.検索結果の集計とグループ化

 SELECT文で抽出した検索結果をひとまとめにして集計をすることができます。

・集計関数

 集計関数は検索対象の全てに対して集計処理を行うことができます。

SELECT
SUM(列名) 合計
MAX(列名) 最大値
MIN(列名) 最小値
AVG(列名) 平均値
FROM テーブル名

・GROUP BY

 集計関数の処理前に指定した基準で検索結果をグループ化することができます。

SELECT グループ化の基準列名,集計関数
FROM テーブル名
(WHERE 条件式)
GROUP BY グループ化の基準列名


5.副問い合わせ(サブクエリ)

 SQL文の中に別のSELECT文を記述することができます。副問い合わせは()で括って記述され、内側にあるSELECT文から外側へと処理がされていきます。

SELECT 列名
FROMテーブル名
WHERE 条件=(SELECT ...)


6.複数テーブルの結合

 データベースは複数テーブルに分けてデータ管理を行い、格納されたデータを結合させ、同時に取り出すことで、表計算ソフトにはできない高度なデータ操作を実現することができます。人間にとっては複数のテーブルに分けられているより、1つのテーブルにまとまっている方がわかりやすいと感じます。しかし、コンピュータにとっては、複数テーブルに分けることにより、テーブル修正時の処理対象が少なくなるので、データを安全、確実、高速で取り扱いやすくなります。

・JOIN句/ON句

 テーブルAとテーブルBを結合させることができます。

SELECT 列名
FROM テーブルA
JOIN テーブルB
ON テーブルAとテーブルBの結合条件


7.トランザクション

 トランザクションとは1つ以上のSQL文をひとかたまりとして扱うように処理をすることです。トランザクションの指定をすることで、急にコンピュータの電源が落ち、SQLによる処理が途中で中断されてしまったとしても、トランザクションで指定したSQLについては「全ての実行が完了している」か「1つも実行されていない」かのどちらかの状態になるように制御することができます。
 トランザクションを使うための指示として、BEGIN(トランザクションの開始の指示。この指示以降のSQL文を1つのトランザクションとする。)と、COMMIT(終了の指示。この指示までを1つのトランザクションとし、変更を確定する。)を使用します。

BEGIN
処理1
処理2
COMMIT


8.テーブルの作成方法

・CREATE TABLE文

 CREATE TABLE文はテーブルの作成ができます。 また、DEFAULTキーワードを指定することで、デフォルト値の設定ができます。

CREATE TABLE テーブル名(
列名1 列名1の型名 DEFAULT デフォルト値,
列名2 列名2の型名 DEFAULT デフォルト値,...
)

DROP TABLE文

 DROP TABLE文はテーブルそのものの削除ができます。

DROP TABLE テーブル名

・ALTER TABLE文

 ALTER TABLE文はテーブル定義の内容を変更することができます。

・列の追加
ALTER TABLE テーブル名 ADD 列名 型
・列の削除
ALTER TABLE テーブル名 DROP 列名 型

・制約

 テーブルの作成時は、テーブルに異常な値が格納されないよう列定義の後ろに制約を指定することができます。 制約の種類として、NULLの格納を許可しないNOT NULL制約、列の内容の重複を許可しないUNIQUE制約、列に格納されつ値が妥当であるかを判定するCHECK制約、主キーの役割を担う列として付ける主キー制約、データの更新や削除によって外部キーによる参照整合性(外部キーで別テーブルの行を参照しているにもかかわらず、その行が存在しない状態のこと)が崩れることを防ぐ外部キー制約があります。

9.インデックス

 データベースで指定した列に対して作成した索引情報をインデックスと言います。インデックスが存在する列に対する列の検索は高速処理ができます。しかし、インデックスを乱用すると、内容の書き換えの際のオーバーヘッドが増加するので注意が必要です。

・CREATE INDEX文

 CREATE INDEX文はインデックスを作成することができます。

CREATE INDEX インデックス名 ON テーブル名(列名)

DROP INDEX文

 DROP INDEX文はインデックスを作成することができます。

DROP INDEX インデックス名


難しかったこと

 各章末に練習問題がついているのですが、インプットとアウトプットの難易度に乖離があり、大まかに理解したつもりで取り組むと分からない問題が多々ありました。難問に挑むのは腰が重くなりがちですが、インプットした内容についての理解を深めることができたので、めんどくさがらずにやることが重要だと感じました。

まとめ

 本書はSQLの構文を学ぶための最初の1冊としてお勧めできると感じました。

プロを目指す人のためのRuby入門を読んだ感想


はじめに

 Rubyの学習として「プロを目指す人のためのRuby入門」を読んだので、感想をまとめました。

本書の良かったところ

とにかく説明が丁寧でわかりやすい

 著者の伊藤淳一さんが「分厚いが非常にわかりやすい技術書」を目指していると言っている通り、丁寧かつ著者の言葉で噛み砕いた説明がされているため、本書からRubyを本格的に学び始めた私でも読み進めるのが苦になることは全くありませんでした。これからRubyを始めようと思っている人におすすめの技術書であると感じました。

よく使われる表現/おすすめしない表現が紹介されている

 「1つのことをRubyで実現するために、様々な方法がある中でどれを使うのがいいの?」と思う場面で、 「この方法を使うようにするのが良いでしょう」や、「特別な理由がない限りこうしたコードを書くことは避けましょう」など、実際に使われることが多い表現を明記してくれているので、開発の現場で使われている表現をしっかり学ぶことができました。

各章を順番に読み進めていくことで着実に知識を習得できる

 本書全体の構成として、簡単な内容から難しい内容へと進んでいくため、頭から読み進めていけば開発の現場で必要とされるRuby関連の知識を基礎から一通り学ぶことができます。
 また、例題がある章の構成として、「例題を解くために必要な内容」→「例題」→「例題には使われなかった高度な内容」と段階を踏んで難易度が上がっていくため、着実に知識を習得することができました。Rubyの入門書として非常に考えられた構成であると感じました。

学んだこと

 各章で学んだことを簡単にまとめました。

第1章 本書を読み進める前に

 第1章ではRubyの概要と環境のセットアップ方法を学ぶことができました。
 また、わざわざrubyファイルを作成するほどでもないちょっとしたコードの動作確認をする方法として、irbというREPL(Read-eval-print loop、対話型評価環境)を使うことで、動作結果をターミナル上で直接確認できるのは便利だと感じました。

第2章 Rubyの基礎を理解する

 第2章ではRubyで文字列、数値、真偽値、条件分岐、メソッドを扱う方法を学ぶことができました。
 また、その他の基礎知識として、「Rubyの変数にはオブジェクトそのものではなく、オブジェクトへの参照が格納されているという概念」、「組み込みライブラリではない標準ライブラリやgemを使うためには、requirerequire_relativeで明示的にライブラリを読み込む必要があること」、「ターミナルへの出力する時に使うputsメソッド、printメソッド、pメソッド、ppメソッドはそれぞれ挙動が違う」などが個人的に印象に残りました。

第3章 テストを自動化する

 第3章ではテストを自動化することの重要性を学ぶことができました。
 テストコードと聞くと初学者の私は「プログラムを作るより難しそう」と感じました。しかし、Rubyにはテスト用のフレームワークが複数あり、今回学んだMinitestは特別なセットアップは不要、かつ簡単な検証メソッドでプログラムのテストを行うことができたので、テストコードに対する心理的なハードルが低くなりました。
 プログラムの実行結果を目視で何度も確認するよりも、テストコードによる検証を行った方が正確であり、自分の作ったプログラムにバグがないと自信を持って言える根拠にもなると感じました。

第4章 配列や繰り返し処理を理解する

 第4章では配列、ブロック、繰り返し処理を扱う方法を学ぶことができました。
 また、例題ではテストコードを使いながらリファクタリングを行っていくテスト駆動開発の開発サイクルを体験することができました。最終的に例題のプログラムを1行で実装できたので、プログラミングは奥が深いと感じました。  この章の内容はRubyにおいて使用頻度がとても高いので、曖昧な理解である所は本書を読み返して定着させる必要があると感じました。

第5章 ハッシュやシンボルを理解する

 第5章ではハッシュとシンボルを扱う方法を学ぶことができました。
 ハッシュのキーがシンボルになる場合はシンボル:値でハッシュを作成できるが、シンボル単体では:シンボルであるため、表記の違いに慣れるのが大変だと感じました。
 また、「ハッシュの説明」→「シンボルの説明」→「ハッシュのキーにシンボルをよく使う」という流れは内容の理解がしやすく感じました。

第6章 正規表現を理解する

 第6章では正規表現の便利さを学ぶことができました。
 初めて正規表現を見た時は呪文にしか見えませんでしたが、それぞれのメタ文字には意味があり、複数のメタ文字を組み合わせることでパターンを作成しているということがわかりました。

第7章 クラスの作成を理解する

 第7章ではオブジェクト指向プログラミングの基礎を学ぶことができました。
 各章の中でも第7章が一番ボリュームがあり、クラスの定義/継承方法、様々な種類の変数、メソッドの可視性と重要かつ必要な知識がかなり多かったですが、それぞれの説明がとてもわかりやすく書かれていたので、クラスに関しては本書の内容のみでしっかり理解ができると感じました。  

第8章 モジュールを理解する

 第8章ではモジュールを扱う方法を学ぶことができました。
 モジュールはインスタンスを作成する必要がないメソッドを実装する場合に使うものとわかりましたが、小規模のプログラムでは使用機会が少ないそうなので、必要になったときに苦戦しそうな予感がしました。

第9章 例外処理を理解する

 第9章では例外処理を扱う方法を学ぶことができました。
 例外はrescueを使うことで処理を続行できるが、プログラムとしては正常ではない状態であるため、無闇に使用せず、原因の調査と改善をすることが重要であると理解しました。
 また、resucueを使う場合は、後で原因調査ができるようfull_messageを使ってログを残すというのも勉強になりました。

第10章 yieldとProcを理解する

 第10章ではyieldProclambdaを扱う方法を学びました。
 ブロックやProcオブジェクトを引数として渡すことができるというのをなんとなく理解できましたが、慣れるまで使いこなすのは難しそうと感じました。

第11章 パターンマッチを理解する

 第11章ではRuby3.0で導入されたパターンマッチを扱う方法学びました。
 配列やハッシュを条件分岐する際は、case文よりもパターンマッチの方が簡潔に書くことができるため、積極的に使いたいと思います。

第12章 Rubyデバッグ技法を身につける

 第12章ではデバッグ技法について学びました。
 バックトレースの読み方とよく発生する例外クラスとその原因を学んだことで、エラー内容をより理解できるようになったと感じました。
 また、バックトレースの読み方の理解だけでなく、プログラムの途中経過を確認し、どこでおかしな挙動をしているかの特定ができるようにデバッガを使いこなせるようになりたいと思いました。  

第13章 Rubyに関するその他のトピック

 第13章では本書には書ききれなかったRubyの関連技術をざっくり学ぶことができました。個人的にはBundlerを使ってgemの管理をする内容と、「素のRuby」と「Railsの中のRuby」で考え方が異なることが印象に残りました。
 Bundlerを使うことでgemを一つずつインストールする必要はなくなり、バージョン管理もできてしまうのでとても便利であると感じました。
 また、Railsではrequirerequire_relativeを書く機会がなくなるなど、RubyRailsで考え方が異なるものがあるので、Rubyの知識とRailsの知識はしっかり切り分けることを意識して学習を進めていきます。

まとめ

 本書は非常にボリュームがありますが、わかりやすい説明と途中で挫折しないような工夫がされているので、Rubyを学びたいと考えている人には迷わずお勧めできる本であると感じました。今後、本書を何度も読み返しながらRubyの知識をしっかりと定着させていきたいです。

学生の頃から憧れて入社した大手電機メーカーからWebエンジニアへ転職を目指そうと決めた理由

自己紹介

御高覧いただきありがとうございます!
mutsukiといいます。
趣味は音楽鑑賞(特に邦楽ロックバンド)/マンガ/アニメです。
今年29歳で、妻、11ヶ月の長男と3人で姫路に暮らしてます。
この度、Webエンジニアへの転職を目指すことをきっかけに、
情報発信の習慣付けを目的としたブログを開設しました。

エンジニアを目指そうと思った理由

理系大学院を卒業後、学生の頃から憧れていた大手電機メーカーに就職。
自動車部品の品質保証部に配属され、今年で5年目になります。

昨年末、コロナ疑惑で1週間自宅待機となった際に、
ふと現在の自分の仕事について見つめ直してみたところ、
以下の理由から将来に不安を持ちました。

1.技術職としてのスキルや知識が身についていない

入社後、私は客先対応業務を担当しているのですが、
主な仕事は客先へ送付する資料作成がメインであり、
技術的なスキルや知識が身に付きにくい業務でした。
「とりあえず目の前の仕事をこなしていれば、それなりに技術的な知識も増えるだろう」と
ただただ資料作成をしていた結果、客先対応能力だけが身に付き、
技術職として必要な知識がほとんど身についていない状態になっていました。
このまま今の仕事を続けていても、成長できないことが予想できてしまいました。

2.自分が興味を持っていることを仕事にできていない

学生時代は仕事としてやりたいことが特にありませんでした。
大学入学当初から、「とりあえず大手企業に就職できれば、
安定してそれなりの給料をもらえるから生活に困らない」
「多くの人が使う製品の製造に携われるメーカーなら仕事のやりがいもあるし、
やりたい仕事も見つかるだろう」と考えていました。
しかし、いざ自動車業界で働き始め、機械系や電気系の勉強をしたところ、
あまり興味を持つことができませんでした。
今後のキャリアを考えた結果、このまま興味のないことをダラダラと続けていける気が
しなくなりました。

これらのことから、今の自分が何を仕事にしたいのかを考え直したところ、
進化を続ける情報社会に貢献できる技術力を備えたエンジニアになりたいと思いました。

エンジニアの中でweb業界を選択した理由

エンジニアの中でもweb業界を選択した理由はかなり浅いですが、
多くの人が使うWebサイト・Webアプリの作成が面白そうと思ったからです。
(あと東京に住みたいからです。(小声))

Happiness Chain入会した理由

未経験からWebエンジニアに転職するためにはどうすればいいか情報収集をした結果、
未経験からの転職はハードルが高く、独学で転職ができる気がしなかったため、
プログラミングスクールへの入会を決めました。
多くのスクールの中でHappiness Chainに入会した理由は以下の4つです。

1.学べる知識

Webエンジニアとして必要なモダンな技術を幅広く学ぶことができるため。

2.学習期間

仕事、育児、家事をこなしながらプログラミング学習を進めようと思った時にネックだったのが学習時間の確保でした。
多くのスクールが卒業までの期間が短く、短期間で長時間の学習をする必要があるが、
Happines Chainでは学習期間のリミットがなく、自分のペースで学習を進めることができるため。

3.料金が安い

他のプログラミングスクールに比べ、非常に料金が安いです。

4.ゆうだいさんのTwitter

Twitterでいいことしか言わないインフルエンサーが多い中で、
ゆうだいさんは現実的で共感できる意見を多く発信していたので、
入会の後押しになりました。

最後に

TwitterInstagramで滅多に投稿をしない僕がブログを始めるなんて思ってもいませんでしたが、
エンジニアを目指し始めたことをきっかけに、今後も続けていければと思います。
また、日記だけでなく、Qiitaでの技術的な発信ができるよう、
プログラミング学習を進めていきます。
最後まで御高覧いただきありがとうございました。