達人に学ぶDB設計徹底指南書 感想記事

こんにちは。Web開発の学習の一環で「達人に学ぶDB設計 徹底指南書」を読みましたので、こちらの感想をまとめたいと思います。

 

ざっくり感想

この書籍は、タイトルにある通りDB設計の基礎と設計の知識について幅広く触れており、実務に生かせそうなノウハウや考え方に触れることができる内容となっております。

論理設計と物理設計、どちらの要素にも触れていますが、その重要性から論理設計について特に詳しく解説されていました。

私は本書を読む前に、まずは基礎として「スッキリわかるSQL入門」(感想記事) を学習していました。こちらの書籍でもDB設計の基礎は学ぶことができます。
その上で、本書を読んで特に私が印象に残った学習項目は、以下の内容です。

  • 物理設計の基礎(RAID等ストレージの冗長構成例、バックアップ設計、リカバリ設計)
  • 正規化を行う欠点と、あえて非正規化を行うノウハウ
  • インデックス設計のノウハウ
  • 論理設計のバッドノウハウ、グレーノウハウ
  • 木構造を用いた論理設計

本書でも、DB設計の基礎を解説しつつ、さらに一方踏み込んで実務レベルのノウハウについて解説をする内容にも触れております。実務でDBを触る際にあらかじめ知っておくべき内容を多く含んでおりました。

 

本書の印象的なワードとして、頻繁にトレードオフという言葉が登場します。何かを得るには何かを捨てなければならないという趣旨の言葉ですね。

本書で紹介されていたDBの「トレードオフ」の例として、正規化はデータの整合性を保つために重要である一方で、SQLを実行する際にテーブルの結合(JOIN)が必要となるため、検索のパフォーマンスが落ちる、という事象が挙げられていました。

正規化は可能な限り高次にするべきであるということは大前提の上で、それでもなお検索のパフォーマンス向上のために非正規化を行うこともある、と筆者は述べています。

正規化は論理設計を行う上では必ず取り組まなければならないと思っていたので、この内容は意外に感じました。

一方で非正規化を行うと、当然更新のパフォーマンス低下やデータのリアルタイム性の低下、改修コストの増大がデメリットとして発生するので、その塩梅も考慮しながら非正規化を検討する必要があります。難しいですね、、

この他にも「トレードオフ」の関係にある2者のメリット・デメリットを双方考慮しながらDB設計を行う必要性を本書では紹介されており、DB設計の難しさ、そして奥深さを感じました。

 

この本の良かった点

この本はDB設計のバッドノウハウについて具体例を交えて紹介されており、これがためになる内容でした。

DB設計における避けるべき内容についてだけではなく、どうしてその設計がダメなのか、その設計手法ではどこに問題が生じるのか、詳しく解説がされているので、DB設計初心者でも理解がしやすかったです。

解説を読むと当たり前と思いつつ、油断するとついやってしまいそうなバッドノウハウも紹介されており、気をつけようと思いました。。

バッドノウハウの例として紹介されている単一参照テーブル (※コード値などのエンティティに複数種類の意味合いを持たせて管理しているテーブル) は、業務上のACCESSで目撃したことがあるので、複雑な気持ちになりました😇

また、メリットとデメリットが混在するグレーノウハウについても同様に紹介されております。例として配列型のデータを表現するために添字の数だけ列を作る「列持ちテーブル」などが挙げられていました。

1見使ってはいけなさそうな内容でも、デメリットを理解した上で運用が視野に入るノウハウもあるところがDB設計の難しさであると思いました。
(コーディングなど他の技術要素においても同様の難しさはあると思いますが)

 

この本の難しかった点

本書ではデータベースのパフォーマンス向上のためにB-treeインデックスに関する設計方針の紹介がされている部分がありましたが、正直この部分は実際のDBMSを触らないとイメージが湧きにくいという印象を受けました。 

他にも論理設計のモデル例として木構造を扱う手法について紹介されていましたが、こちらも概要はわかったもののピンとこない部分ではありました。

実際にDBMSでインデックスを設定するという場面等、本書で紹介されていた手法を活用する場面に出会ったときに、本書をもう一度読み返したいと思います。

 

まとめ

要所要所では難しいと感じる部分がありつつも、実例を交えて丁寧にノウハウを紹介しているので、DB設計初心者の私でも趣旨を理解しやすい内容でした。

本書では最初にソフトウェア開発についてDOA(データ中心アプローチ)が主流であることを説明されており、「データベースを制するものがシステムを制す」と筆者は言い切っています。 
DB設計がその後のシステム開発に影響を受ける事例もいろいろ紹介されており、その設計をよく考えて行う重要性を本書を通して学びました。

本書を通してDB設計の重要性、そして思想を知ることができたのは良かったと思います!

 

JavaScript Primer 迷わないための入門書 読了感想記事

私はRubyRailsを中心に先日まで学習を進めていましたが、これに加えてJavascriptの学習を始めました。

その学習のために「JavaScript Primer 迷わないための入門書」を読んだため、こちらの感想をまとめたいと思います。

読了感想

無知の知

現在は私はエンジニアではなく情シス部門で働いています。実は本業の方で業務改善のためのツール制作やローコードアプリを組む過程でJavascriptには少しだけ触れておりました。

1年前にハッカソンイベントに参加しアプリ制作した時もノリと勢いでJavascriptを使用した経験もあるので、基礎は大まかには抑えているつもりでしたが…

本書を読んで、全体の10%ほどしか理解できていなかったのだと思い知らされました。

本書はJavascriptの言語仕様を決めているECMAScriptに基づき、枝葉の部分まで深くJavascriptの技術について解説されています。

変数の扱いやスコープ、条件分岐や繰り返し、オブジェクトや文字列の処理などなど基本的な内容の学習もありますが、その他の部分で理解が今までできていなかった分野も大量に含まれていて、「知らないことを知った」状態になっています😇

今回新たに学んだ(かつ 難しいと感じた)内容は以下の通りです。

map,filter,reduceなどの高階関数、その他配列操作の技術等

  • mapなどの概念はRubyにも登場したのでなんとなくの使用イメージはわかるのですが、Javascriptにも同じような考え方や記法があることを知りました。
  • また、メソッドチェーン(配列加工を繋げるワザ)や、配列加工において破壊的な方法と非破壊的な方法の両方があることを学びました。

非同期処理

  • Promiseを始めとした、Javascriptの非同期処理についても詳しく本書で解説がありました。ただ非同期処理の仕組みについて説明されているだけではなく、.catch()を使ったエラーハンドリングやasync/awaitを用いてコードを直感的にわかりやすく実装する方法まで触れてあります。
  • この非同期処理の仕組みがとても難しくて、理解に時間がかかりました。。本書後半のgithubプロフィールのAPI取得ハンズオンを実践したり、他の技術記事を読んで、「APIからのデータなど時間が一定かかる処理に対して、待ち合わせをしたり、エラー処理を適切に行う」ために主に活用するのだと理解しました。
  • 正直、非同期処理については理解がまだまだ怪しい部分があるのですが、ひとまず概念的なものはこの本を通して学習ができたのではないかと思います。

モジュール

  • 恥ずかしながら今まではJavascriptを単体のスプリクトファイルで運用することがほとんどだったので、本書を通してモジュールをinport/exportする仕組みをようやく理解しました。
  • 後半のハンズオン部分で複数のjsファイルをモジュールを通して扱うやり方について色々書かれており、この実践でようやく運用方法がわかってきました。

他にも山ほど知らないことが書かれており、1周取り組んだのみでは理解しきれない部分がありました。。が、良い学習にはなりました。

良かったところ

この本はJavascriptの技術の枝葉の部分や、裏側の処理・動きの部分までとにかく細かく触れています。 今Javascriptで使われている技術(主にES2015)だけではなく、それ以前の手法についても説明があり、ES2015で新たにアップデート技術の導入経緯について詳しく解説されています。 本書の内容を十分に理解すればJavascriptの原理を理解して十分に扱うことができるのではないかと思います。(それが難しいのですが、、)

また、書籍版が出ていますが、電子版はこれだけ充実していて無料なのもありがたいですね。電子版であることを活かしてブラウザ上でコードをすぐに試す機能が付いていたり、検索機能が載っているのも良い点です。

難しかったところ

上記の通りですが、本書を通して新たに学んだ部分(特に非同期処理)はどれも難しく感じました。また、とにかく枝葉の部分まで解説されているので分量も多く、なかなか読了に至るまでが大変でした。

Rubyチェリー本でお馴染みの伊藤先生は、難しい内容が技術書に出てきた時は「頭の中にインデックスを作る」のをお勧めしていますが、今回もそのような読み方で読みました。

実際にこの後Javascriptを使ったアプリ制作時に迷った時に、また本書に戻りたいと思います。

「Everyday Rails - RSpecによるRailsテスト入門」読了感想

只今、Railsのテストで使用するフレームワークであるRSpecについて学習中で、本日「Everyday Rails - RSpecによるRailsテスト入門」を読み終えたので、こちらの感想をまとめたいと思います。

本書の内容

この本ではRSpecを使用した様々なテストを、プロジェクト管理アプリを題材に学習する内容になっています。最初はRSpecのセットアップをする手順から始まり、単体テストにあたるモデルスペック、システムテストに該当するシステムスペック、そして結合テストに該当するリクエストスペックに関する解説がされています。

CapybaraやFactoryBotなどの周辺gemの説明や、DRYを実現するためのノウハウ、その他のテスト技法、TDD駆動開発の実践方法など多岐にわたって説明がされていました。

RSpecについてようやく学習を始められたばかりのひよっこですが、本書で解説されている内容のうち、特にRSpecを実践する上で重要そうな部分をまとめたいと思います。

RSpecの基本的な構文

  • RSpecでは基本的には以下の構文を組み合わせてテストを設計していきます。
    • describe :テストの対象、項目をコメント記述します。
    • context :テストにおいて仮定する状況をコメント記述します。
    • itcontextに対して、実行する動作をコメント記述します。こちらの中に実際の動作内容もコードで記述していきます。さらに、expectで期待される動作もコード記述します。 この実行が上手くいくかどうかでテスト判定します。
    • before :テストに必要なテストデータを設定するためのコードを記述します。これはテストの各ブロック内で、テストが実行される前に実行される部分となります。

これらを組み合わせて、以下のような構文を作っていきます。

describe "(機能項目)", type :(テストの種類 :request :modelなど)  do
  describe "(テスト項目)" do
    context "hogeの場合" do
      before do
        (テストデータ設定処理)
      end

      it "hugaをする" do
        (hugaする内容の処理)
        expect(hugaしたら期待される結果)
      end
    end
  end
end
  • 実際はこの中に複数のcontextbeforeitを含めてテストを作成していきます。

マッチャ(matcher)

  • 期待値と実際の値を比較して、その結果を返すオブジェクトです。
  • 上記テストのexpectの部分で、ある処理に対して期待される値が返されるかどうかを判定します
  • マッチャの例
  • eq :期待値と実際の値が等しいがどうか判定する
  • be :等号と合わせて使用し、期待値と実際の値の大小関係が成り立つかどうか判定する時に使う
  • be_valid :モデルの有効性を判定する
  • be_empty :対象の配列が空であるか判定する
  • include :対象の配列に要素が含まれているか判定する

  • …他にも山ほどマッチャはありますが、割愛します。上記はよく使用する模様です。

Factory Bot

  • beforeで毎度テストデータを設定するのは手間でDRYに反します。Factory Bot (gem)を使うことで、テストデータのテンプレートを事前に作っておくことができます。
  • テンプレートをFactory Botで作っておいて、テストでは(例えば異常系のデータを使うために)一部属性だけオーバーライドする、といった活用もできます。
  • サンプルデータを手軽にセットアップできるので便利ですが、必要ない呼び出しを多用しているとテストの遅延につながるので、呼び出しは最小限にするよう注意する必要があります。

モデルスペック

  • モデルに対して単体テストを行うのに使用します
  • 基本的なバリテーションの設定のほか、モデルに定義しているインスタンスメソッドに対してテストを行うことができます

システムスペック

  • システムテストに当たる内容で、WebアプリのUIからの操作を試験実行して、エラーの発生を検査します。
  • CapybaraというE2E用のフレームワークを使用します。
  • visit で特定のパスに移動、click_lickで特定のリンクをクリックし、fill_inでフォームに特定のワードを入力、click_buttonで特定のボタンを押した時に、期待される効果が得られるかどうか…といったことをテストします。
    • これらの操作に使用するvisitなどのメソッドはCapybaraによって提供されています。
  • Launchyというgemを導入し、save_and_open_pageをテストで呼び出すと、そのタイミングのHTMLをブラウザに表示することができます。 テスト中に画面がどんな状態になっているのか確認したいときに使います。

リクエストスペック

  • 結合テストに当たる内容で、エンドポイントに対してget,post,delete,patchのリクエストを行った時に想定通りのレスポンスが返ってくるかどうか検証します。
  • コントローラースペックはコントローラー個々の動作をテストするのに対して、リクエストスペックはアプリケーション全体の連携をAPIリクエストを通してテストする内容となっています。
    • ちなみにコントローラースペックはRails5以降は非推奨とされています。

・・・他にも枝葉の部分で様々な内容が本書で触れられていますが、特に重要なポイントは以上の内容でした。

本書の良かったところ

実践形式でRSpecを学ぶことができる

本書はサンプルアプリケーションに対して実際にRSpecを実行することができるので、テストが成功または失敗をする様子など実機で確認することができます。 サンプルアプリケーションは訳者の(チェリー本でお馴染み)伊藤さんがgithubで上げており、サクッとcloneして手に入れることができます。

また、チャプターごとにブランチが切られているので、各チャプターごとにサンプルアプリのコードをセッティングすることができて、すぐに各章テストを試すことができます。これはありがたかったですね。

RSpecは独特な構文を持っているので、読むだけでは正直イメージが湧きにくいです… サンプルアプリで試しながら進めることができるのは良いと思います。

さらに、日本語版独自のアップデートとして、サンプルアプリケーションがRails7.1に対応されており(原著は5.1)、そのほかのgemなどの説明も2024年1月地点の内容にアップデートされています。これも良いポイントだと思います。

本書の難しかったところ

本書が難しい、というより、RSpec自体が独特な構文やメソッドが多く、マッチャやそのほかの文法など、すぐに覚えるのは困難であると感じました。 後半に書かれている、例えばモックやスタブなどの枝葉の部分は、現地点では活用のイメージがなかなか出てこないですね。。

本書だけではRSpecの使い方を全部理解するのは難しかったので、「現場で使えるRuby on Rails 5 速習実践ガイド」のRSpec解説部分を読み直して理解を深めました。

また、訳者の伊藤さんがQiitaに上げている「使えるRSpec入門」がわかりやすかったので、こちらも併用して読みました。

RSpecは正直理解に時間がかかりましたが、この後先日製作したXクローンに実際にRSpecを組み込む実践を行い、Railsのテストのイメージを掴んでいきたいと思います。

現場で使えるRuby on Rails5 速習実践ガイド 感想記事

こんにちは。Web開発の学習の一環「現場で使えるRuby on Rails5 速習実践ガイド」を、読んだので、その感想を書きます。

この本はRailsによるWebアプリケーションの基本的な作り方から、自動テストやGemの活用、複数人における開発の進め方、Railsの長期運用の考え方など、実践的な内容を学習することができます。

この書籍で学ぶ具体的な内容は以下の通りです。

  • Railsを実践するために必要なRuby前提知識(ざっくり駆け足)
  • Railsの環境構築
  • シンプルなCRUD機能を持ったアプリ制作
  • バリテーション、ログイン機能、等々よく実装する機能の制作
  • RSpecによるテスト実践
  • RailsにおけるRESTfulの考え方、セキュリティ対策等、Railsの全体像理解
  • 検索、ソート機能、ファイルアップロード、メール等、Rails開発の応用実践
  • RailsにおけるJSの活用方法
  • Railsにおける共同開発のノウハウ、注意点
  • Railsを長期運用するためのノウハウ、設計面のノウハウ

以上、非常に多岐にわたる内容でした。

Rubyについては本当に必要最低限の内容しか触れていないので、事前に別の書籍で学習はした方が良いと感じました。
またRailsも1から解説はされていますが、完全初見だとイメージが湧きにくい部分も多いと思うので、progateあたりで外観を掴んでいた方が読みやすいかと思います。

 

この本では「Taskleaf」というタスク管理webアプリを作るという想定で、Railsについて学ぶ内容となっております。
ただ読むだけでは習得は難しいため、今回は実際にコードを書きながら学習を行いました。途中何度か詰まりかける部分もありましたが(後述)、最終的に完成したので自信につながりました!


この本の良かった点、微妙な点についてまとめたいと思います。

 

この本の良かった点① 実際に1つのアプリを組み立てながら学べる

前述した通り、タスク管理アプリを作り上げるという内容がこの本の一つの軸になっています。
最初は最低限のCRUDを持った機能から学び、その後ログイン、バリテーション、検索、画像投稿、メールなどなど、色々な機能をアップデートという形で付け加えていきます。

初心者向けのプログラミングの学習本の中には、いろいろなアプリの作成を書籍内で行う本もあります。
この本は1つのアプリ制作に特化しているので、「最低限の機能から作り、アップデートによって機能付加をしていく」実践的なアプリ制作のイメージがわかりやすい内容となっておりました。

ProgateやUdemyでRailsについてさらっと学んではいますが、CRUDの実装の部分から理解が怪しい部分もあったため、実際にアプリを作り、その動作の仕組みの解説を読むことで、より理解が深まったのでは無いかと思います。
gem等を活用した応用的な機能の付加方法も丁寧に解説があったので、今後実務で同じような機能を実装したい時に本書を参考にしたいと思います。

 

この本の良かった点②  チームにおけるRails開発のノウハウも学べる

この書籍はチームにおけるRails開発のノウハウも同時に学ぶことができます。

Gitによる基本的なバージョン管理から、Railsのコードレビューの観点、チーム開発におけるマイグレーションの注意点等にも触れています。

また、Railsを長期運用する際に考慮するべき点として、バージョンアップとの向き合い方や、Railsプロジェクト全体の設計の考え方(MVCの役割分担遵守やコードの共通化等々)も応用編として学習できます。

Railsの初心者向けの教材では、どうしても個人開発を想定した内容であることが多いです。
そのような中で、複数人で開発を行うための注意点を学ぶことができる教材は、これから実務への参加を考える身としては重要な内容であると感じました。

一方で正直に言うと最後の学習項目「Railsアプリケーションと長く付き合うために」は実務未経験の私には難解な部分も多かったです。。(moduleのmix-in等、共通化の考え方の部分が特に難しかったです。)

ここの項目は実際に業務でチーム開発を行うときに改めて見返したいと思います。

 

この本の惜しかった点:    2018年発売

上記のようにRailsの実践的な内容を学べる本書ですが、発売は2018年であるため、扱っているRailsのバージョンは5.2です。Rubyのバージョンも2.X時代でした。

したがって、Rails6や7で変更された点は今後別途学習が必要ではないかと感じております。

 

また、今でこそDockerによる仮想化環境の活用が一般的ですが、2018年は現在ほどメジャーではなかったのか(真偽不明)本書ではさらっと1ページ紹介するに留まっております。
本書を購入する際はDocker周りはほぼ情報が無いということは念頭においた方が良いです。

私の場合は、Taskleafのアプリ制作についてDockerを活用した環境構築を試みたのですが、バージョンの互換性等で案の定苦戦してしまいました。 
最終的には、Qiita等色々調べつつ試行錯誤し、Dockerによる構築ができました。結果的には良い学習になったのでは無いかと思います。

TaskleafにRSpecを導入する学習項目があるのですが、ここのコンテナ化が特に苦戦しました。
結論を書くとdocker-composeにceleniumによるchromeの環境を用意してあげることで、テストが実行できるようになったのですが、RSpecの実行には仮想ブラウザを使用する必要があると言うことに気づくのに時間を要してしまいました。

こちらの記事が参考になりました。感謝。。

 

少し話が脱線してしまいましたが、発売が6年前ということで、ここ5年で変化した情報は別途追う必要があるのは念頭に入れる必要があります!

まとめ

450ページとなかなかボリュームがある内容でしたが、Railsについて実践的に学ぶことができる内容で、理解がより深まりました。
この後、実際にRailsを用いたWebアプリ制作に別途取り掛かるのですが、本書を参考にしながら頑張ってみたいと思います。

Happiness Chain 入会1年振り返り

こんにちは。RailsをベースとしたWeb開発について学習を継続しているヒエです。

 

私はとある業界の情シス(兼社内IT新規企画)を普段行っているのですが、
「他社にシステム外注するのも良いけど、思い描いた企画に対して自らの手で動くものを作りたい」
という思いが強くなり、Web開発をイチから学ぶことを決意しました。

そこで、去年7月にWebエンジニア養成スクールであるHappness Chainに入会し、早いもので1年が経過しました。*1

私は現地点まで、

このタイミングで、この1年間の反省点・良かった点・これからの抱負についてまとめたいと思います。

 

まずは反省点から。

反省点

1.目標の学習時間に遥か届かず

自身の中で、スクールに入ってから1年間で学習時間1000hを目指しておりました。

実際のところは、現地点では646hと、目標の2/3のペースに留まっております。

また、学習のペースも当初想定より時間がかかっており、ようやく現在Railsの制作課題に取り組むところです。

スクールに入った当初は「この程度は理論上はできるはず」ということで、平日2h、休日5hを目標に取り組んでいたのですが、主に仕事等の体力・精神的な負担から十分に勉強時間を確保できない日が多かったです。

…というのは言い訳で、自身より忙しそうな境遇にありながら3-4倍のペースで突き進むスクール生が多数居るので、自身も頑張らなくては、と思います。

また学習時間だけではなく、学習の質にも課題があると感じています。

学習中エラー等で詰まると、学習以外のことを考えたりスマホをいじってしまう癖があります。学習としての質が薄いときがあるため、ここは改善したい所です。

質と量の両方をこなさなければ、新しく学ぶ技術の習得は難しいので、今後はさらにこの2つの要素を改善したいですね。

 

2.アプトプットがあまり出来ず

Web学習に伴い、書籍の感想記事や、いくつか学習した内容に関する記事は10件弱は挙げましたが、個人的にはもう少し外に発信をした方が良かった、と思っています。

この1年で痛感したのですが、そもそも自分はアウトプットがあまり得意では無いようです! 
書籍の感想を書くだけの作業に、異様なまでに時間がかかってしまっております。
Xの投稿も億劫になってしまう時がありますね。

この記事を書く作業にも、実は言えないほどの時間を要しております、、

おそらく、自身が考えていることを言語化するスキルがまだ十分に身についていないのでしょう。
これからは文章として表に発信する機会をさらに増やすことで、このスキルを身につけていく必要があると感じております。

 

次に良かった点です。

良かった点

1. 1年間学習を継続できた

反省点①といきなり矛盾しそうな内容ですね。

私はこれまで、社会人になってから仕事以外の時間を使って1年間という長期にわたって学習を継続したことはありませんでした。

一応、基本情報や応用情報を取得するときに3か月ほど対策の学習を行いましたが、これほどコンスタントに勉強を続けたのは初めてです。

正直途中で業務が多忙になった時に、折れそうになったことも何度かありましたが、Happiness Chainで日々自分以上に努力をしている方や、転職の成功報告に励まされて現在まで継続をしております。

目標の学習時間には遠く及んでおらず、ここは改善が必要ですが、それでも諦めずに今まで継続できた自分は認めてあげたいと思います。

今後仮にWebエンジニアの業界に転職ができたとしても、自習は継続する必要があります。
仕事が終わった後に机に向かう習慣が出来たのは、自分の中で良い変化だと思います。

 

2. ハッカソンに参加し、最終ステージまで残った

去年秋ごろに、同じくWeb開発について学習中の同僚に情報を貰い、とあるハッカソンにチームで参加しました。

本名と社名を背負ってハッカソンに参加したので、具体的な応募作品についてはこちらでは明言ができないのですが、結果的にハッカソン最終ステージ*3に残ることができました。

受賞は逃しましたが、人生初ハッカソン参加で一定の結果を残せた点は良かったです。

このハッカソンイベントは進め方が少し特殊で、

コンテストを行いアプリのモックアップの企画をプレゼン (この地点で最優秀賞は決定)
コンテストで最終ステージに残ったグループは、一般ユーザーが使用できる形になるように約4か月でアプリ開発を行い、完成を目指す
アプリ開発後、その成果発表のプレゼンを行う

といった流れになっております。

①が去年秋に行われ、最終ステージまで残ったので、③のアプリ開発・プレゼンもチームで実施しました。

この開発には私と同僚の2人で参加し、最終的には、マップの位置情報に紐づいた写真・コメント投稿の仕組みや、会員登録・ログイン機能を実装することができました。

2人ともWeb開発の初心者なので、実装に苦しんだことも多々ありましたが、最終的に動くものが完成して良かったと思います。

(一方、正直に言うとリファクタリングの余地は盛大にあるので、今後Javascriptを再学習したときにもう一度コードを見直したい…!)


また、Githubによる共同開発だけではなく、Github Actionによる簡易的なCI/CDを取り入れた開発を実施することができました!

どうしても1人でWeb開発の学習を継続していると、「共同作業」の経験が疎かになってしまいます。
このタイミングで思い切ってチームでハッカソンに参加したことは良い経験になったのではないかと思います。


Web開発とは関係のない余談ですが、ハッカソンのイベントで、私は企画のプレゼンも行いました。
このプレゼン、上記①で実施したときは死ぬほど緊張してしまいました、、、
人前で話す経験はゼロではなかったのですが、審査員を前にすると驚くほどうまく言葉が出てこなかったのです。

これには反省して、③の成果発表のプレゼンの際には1週間かけて何度もプレゼンの練習をしました。
その結果、以前よりは緊張せず人前で話すことができました。

このような発表に緊張しないためには、メンタルの強化以前に、十分な事前準備が重要であると痛感しました。。

 

これからの抱負

1. さらなる学習のペースアップ

学習のペースがここ1年、満足できる水準では無かったと痛感しております。

今後は当初目標の平日2h、休日5hを目標に学習を継続したいと思います。

集中力の低下から学習の質が落ちてしまっている面もありました。
とくに家では安心感から集中が途切れる傾向があるため、例えば学習をカフェで行うなど、環境を変えることで改善をしたいと思います。

ポモドーロを実践して学習にメリハリも付けたいですね。

このペースを維持しながら、今年中には転職の見通しを立てたい…と思います。

残された時間は少ないですが、ここでギアを上げて頑張りたいと思います。

 

2. アウトプットの強化

前述したように、アウトプットがあまり出来ていないという反省があります。

今後は、月に少なくとも2回は、ちょっとした内容でもブログとしてアウトプットを行いたいと思います。

どうしても一方的な学習のみでは技術の定着は難しいと感じているので、学んだことを文章としてまとめることで自分のものにしていきたいですね。

今後、Railsを用いたWebアプリを2つ制作する予定なのですが、絶対にどこかで詰まることがあるかと思うので、その詰まった記録でも残しておきたいと思います。

 

まとめ

正直に言うと、想定ペースが維持できていないこの1年間の学習も、仕事や家事と並行するのは大変だと感じております。

一方で、特にRubyJavascriptのコードを試行錯誤しながら書いているとき、いつもよりも深く熱中している自分自身に最近気づきました。

Web開発の技術を本業に生かす道のりは厳しいですが、そこに面白さを感じている自分もいるので、諦めたくは無いと思います。 

これからも頑張ります!

 

*1:正確には1年と1か月が経とうとしております

*2:後述のハッカソン参加のために最低限の自習を実施

*3:倍率4倍くらい

スッキリわかるSQL入門 第4版 感想記事

こんにちは。Web開発の学習の一環で「スッキリわかるSQL入門 第4版」を読み、付属のドリルにも取り込んだので、こちらの感想をまとめたいと思います。

 

この書籍はSQL入門」と名前がついておりますが、SQLの文法について学ぶだけではなく、テーブルの正規化や、ER図の作図等、最終的にデータベースの設計の部分までカバーしております。

 

また、章末、巻末には練習問題のドリルが付属しております。
練習問題を解く際は、「dokoQL」という専用のWebアプリを用いて実際に練習用のデータベースに対してSQL文を投げることができるのも特徴です。

 

学習カリキュラム、練習問題、総じてボリュームが多く、本全ての内容に取り組もうとすると結構気合が必要な内容となっております・・・!

以下、本書の特によかった点を簡単にまとめます。

 

この本の良かった点

1. SQL入門と言いつつ、データベース設計のノウハウまでカバー

まず、この本の主題はもちろんSQLであるため、SQLって何?という方でも、基本的な要素から学習できるようになっています。

筆者はSQLの基本的な文法は覚えていましたが、各種関数(LENGTH,TRIM,SUBSTRING,COALESCE等々…)や、結合(JOIN)の活用に関する知識は怪しかったので、これを機に理解を深めることができました。

また、トランザクション、インデックス作成、バックアップなどデータベースの運用に欠かせない知識についても、知らないポイントが多かったため、本書を一通り学習したことで重要な点を抑えることができました。

 

そして、chapter12ではSQLの枠を超えて、テーブル設計の手法についてしっかり触れています。
顧客の要件を整理するところから始め、概念設計、論理設計、物理設計を経てDDLDBMSの各種設定に落とし込む手順やコツについて本書は触れており、理解を深めることができました。

「家計簿アプリの制作」を題材に、要件を整理して設計する流れをイラストを交えて紹介されていたので、初心者の私でもわかりやすい内容になっておりました。

 

私の現職は社内情シスですが、顧客の要望をヒアリングした上でシステムの要件を検討する機会もあるため、本書で紹介されていた論理設計の考え方は今の業務にも活かせそうです。
論理設計を検討する際の考え方として、「顧客の理想・要件を起点とする設計の流れ」に注目するトップダウン・アプローチ」と「顧客の今の現実(現在運用しているデータ)を起点とする設計の流れ」に注目するボトムアップ・アプローチ」の両者を本書では紹介されていました。

今後は、この両方の視点を忘れずに要件の整理を実践してみたいと思いました!

 

2. 実践webアプリ付きドリルでしっかり鍛えられる (尚かなり大変)

前述の通り、本書専用のwebアプリ「dokoQL」を使って、実際のテーブルを対象にSQLを使用する練習ができます。
巻末のドリルでは、3つのシチュエーションのDBを対象に設問の指示内容のSQLを記述する問題集が用意されているのですが、なんと、合計で215問あります。

正直全てをこなすのはきつかったです!!

しかし、本書で紹介されているDMLのほぼ全てを活用することになるので、嫌でもSQL記述に慣れることになります笑

かなりの時間はかかりましたが、progateで以前学習した時の比にならないくらいSQLを書きまくったので、SQLの理解は深まったのではないかと思います。

dokoQLにてSQL記述にミスがある場合は当然エラーが起きるのですが、そのエラーに対する対処も含めて、良い勉強になりました。

 

また、終盤は正規化の練習や、要件をもとにER図を書く練習問題も多数用意されています。

私はER図の作成は未経験で、テーブルの正規化の考え方やリレーションシップの多重度の検討は難しく感じました。しかしデータベース設計はシステムの根幹にあたる要素なので、念入りに学習をしました。

以上のように、ただの読み物では終わらず実践形式の練習問題も多数用意されており、とても鍛えられる内容となっております。

 

余談ですがER図の作図は、draw.ioを活用しました。

ER図用のテンプレートがあらかじめ用意されている上に、githubと簡単に連携ができるので、作図が捗りました。今後もこれは活用したいと思います。

 

この本の惜しかった点

ボリュームが絶大で分かりやすく、練習問題も充実している本書ですが、惜しいと感じた点もあるので触れておきます。

先ほど紹介したDokoQLは、一つのテーブルに対してSQLの上限実行数が100回まで設定されています。これを超えるとSQL実行履歴の全リセットが必要です。

巻末のドリルは一つの題材につき70-75問問題が用意されているのですが、難しい問題で試行錯誤をしていると終盤どうしても100回の上限に到達してしまいます。

問題の途中にはUPDATE文やINSERT文も用意されており、後半の問題には更新されたデータの抽出を前提とする問題も含まれているため、100回到達後にリセットされた場合、過去に更新したSQLももう一度実行が必要になります。
(抽出結果を気にしなければ無視しても進めることはできますが)

 

少々手間だったので、上限数200回くらいに伸ばして欲しいなと思いました。
とはいえ、無料特典で用意されているアプリなので、提供されているだけでもありがたいとは思います!

 

まとめ

とにかく練習問題の物量が大変でしたが、SQLからデータベース設計までしっかりと学習ができる本でした!

付録として、各DBMS製品の機能互換性についても本書では紹介されています。
今後もデータベースの運用で困ったときに読み返す本になりそうです。

「プロを目指す人のためのRuby入門」感想記事

こんにちは。Web開発の学習の一環で「プロを目指す人のためのRuby入門」を読んだので、こちらの感想をまとめたいと思います。

 

「プロを目指す人のためのRuby入門」、いわゆるチェリー本は、プログラミングを学び始めた人のための入門本ではなく、実務レベルでも活用できるほどのノウハウが詰め込められています。
・配列

・繰り返し

・クラス

といったプログラミングの入門書では必ず詰め込まれている内容だけではなく、

・自動テスト

正規表現

・モジュール

・yield,Proc

・パターンマッチ

などなど、一方踏み込んだ内容やRuby特有の技術について網羅的に説明がされております。

このように学ぶ分野も多いので、本の総ページは551ページ。読破するのは正直大変でした!
ただ、おかげでRuby全体の外観は掴めたのではないかと思います。

現在参加しているスクール(Happiness Chain)にはRubyの課題(コードレビュー付き)が複数用意されているのですが、課題で詰まった時にこの本はとても参考になりました。

他の言語でも言えることかもしれませんが、ただ本のコードを写経するだけではなく、実際に自分自身でコードを一旦書いてみて、つまづいた時に本を改めて読み直すと技術を定着させやすいなと感じました。

 

この本の良かった点

1. 実践形式で取り組む例題

この本は各項に必ず例題が用意されているのですが、この例題の解説は、いきなり正解のコードが書かれているのではなく、

・最低限の機能実装を行う

・機能の要件を一旦満たすコードを記述

・最後にリファクタリングを行う

以上のステップを必ず踏んでいます。実際にコードを組み立てていく流れで書いているので、学んだ技術を実務で活用するときのイメージが湧きやすいと感じました。
また、例題ではMinitestを利用したテスト駆動開発が取り入れられています。まずは1つのテストが失敗するのを確認した後、テストがパスする仮実装を組み、最後にリファクタリングするサイクルを行うという実践的な内容になっております。
今後コードを書くときもこのテスト駆動の考え方は取り入れたいと思いました。

 

2. よく使う/使うのは望ましくない(あまり使わない) 技術が本の中で明示されている

この本はただRubyの技術を羅列しているのではなく、「これは使用頻度が高い」「これは使うのは望ましくない」ということがよく明示されている印象です。

特に「これは書いてしまいそうだが実は望ましくない書き方」についても詳しく解説が載っており、参考になりました。

たとえばif文の条件で == true や == false 等を書いてしまいそうですが、実際は!や?が活用できるので不要、といったこともしっかりコラムとして説明されております。

現場の目線から実務に相応しいコードの書き方を指南してくれる内容が多かったので、勉強になりました。

 

この本の難しかった点

前述の通り、本書はRubyの技術を網羅的に触れているので、情報量も多く、応用的な部分は理解するのが難しい部分も多いです。

正直、モジュールやyield,Procは、なんとなくの概念はわかったものの、本書を読んだだけではまだ活用は難しそうです、、

本書序盤の筆者コラムに、「本書を最後まで読み切るコツ」として、「難しい部分は頭の中にインデックス(索引」)を作るつもりで読んでくださいね」と書いてあったので、全部をいきなり理解しようとはせず、項目によってはキーワードを一旦覚えるようにしました。

 

本書には掲載されていないのですが、「著者自身が語る「プロを目指す人のためのRuby入門」の効果的な読み方 」という動画があります。

この動画は本書を読む前に見ておいた方がいいです! 分量の多く難しい部分のどの部分は念入りに学習した方が良いか筆者自身が説明しているので、参考になると思います。
この動画でも難しい部分はざっと読むことを推奨しております。

 

まとめ

本書は網羅的で実践的なので、前述したように現在所属しているスクールのRuby課題に挑む際にも参考になりました。Rubyの技術に対する理解もより深まりました。

まだ全ての技術を理解できてはいないのですが、今後もわからないことがあるたびに読み返す本になるのではないかと思います。
これからも本書にお世話になります!