まちん

主にAndroidアプリを作ってます。

ネクストスキル週次ゼミ(6月のゼミまとめ)

6 月のネクストスキルの週次ゼミのまとめです。

6 月に学んだこと

第 1 週

Web フロントエンドエコシステムについて学びました。

  • ブラウザ上での JavaScript の動作
    • DOM について、JavaScript による DOM 操作
  • 混乱しがちなキーワードの整理
    • Node.js, npm, webpack, Babel
  • フレームワークやその他エコシステム
    • コンポーネント指向
    • Redux, Router
    • CSR, SSR, SSG
    • 開発環境
      • VS Code, ESLint, Prettier
    • テスト
      • Jest, Cypress, Puppetter
    • 解析ツール
      • GA, Light house, Sentry
    • 発展
      • GraphQL, WebAssenbly

最近はフレームワークが勝手にやってくれるのかもしれないですが、Webpack はよくわかっていなかったので、知ることができてよかったです。

第 2 週

RDB の基礎知識について学びました。

  • なぜ RDB を使うのか
    • RDB, NoSQL など DB の種類
    • RDB の機能(メリット、デメリット)
      • トランザクション、制約、SQL
  • DB 設計の第一歩
    • データ設計の流れ
      • 概念設計(テーブルと主要なカラム)
      • 論理設計(ER 図)
      • 物理設計(制約や index など)
    • 正規化、制約、主キー
  • 知っておくべき RDB の機能
    • SQL
      • 宣言的プログラミング
    • RDB のチューニング
      • index
    • トランザクション
    • 排他制御
      • 楽観ロック、悲観ロック
    • その他機能
      • ビュー、マテリアライズビュー、ストアプロシージャ、トリガー

基本は DB サーバ 1 つにつき、論理 DB1 つだと思っていましたが、コストメリット的に DB サーバ 1 つで、複数アプリに対して、論理 DB を分けて利用する選択肢もあるとのことでした。アプリの特性、コスト、パフォーマンス、可用性などの要件によって取捨選択するのが大事だと思いました。

第 3 週

ソフトウェアテストの基本について学びました。

  • ソフトウェアテストとは何か、どんな種類があるのか
    • ソフトウェテストの定義(wiki)
    • テストの種類
      • V 字モデル
        • ユニットテスト、結合テスト、総合テスト、受入テスト
      • 非機能テスト
        • 負荷、継続稼働、侵入、脆弱性診断、リストア、DR
      • Web フロント
        • UI 自動テスト、E2E テスト、サポート端末、ブラウザテスト
      • モバイル
        • UI 自動テスト、サポート端末テスト、ランダムテスト
  • 開発にテストを組み込む
    • テストをどう楽にするか
      • 自動化という観点
      • 第一歩としての「実装, 単体テスト」
    • CI
    • 環境の違いによる注意点
  • テストコードの記述と、より高度なテスト
    • ruby での TDD デモ
    • cypress のデモ
    • テストピラミット
    • インフラのテスト
      • ServerSpec
      • AWSSpec
    • 本番サービスのテスト
      • A/B テスト、アルファ、ベータテスト
    • 本番での機能、非機能テスト
      • カナリアリリース、ダークカナリア、カオスエンジニアリング

どこまでテストするかを、要件定義の段階で決めたほうがいいというのはその通りだと思いました。 なんとなくテストしてしまうと、テストによる評価がブレてしまうし、要件定義の漏れも出しやすいと思います。

また、ソフトウェアテストの「信頼度成長曲線」の話が出てきましたが、バグは常にあるものだし、発見されるバグが少ないからといって良いというわけではないということは、常に念頭に置いておいたほうがいいと思いました。

ユニットテストにおいて、テストが書きにくい状況は、分岐が多いとか、依存するコンポーネントやオブジェクトが多いなど、考えるべきことが多いときなので、コンポーネントやクラスを小さく分割し、それぞれでテストをするようにすると、結局設計もドメインモデルなどに近づいて行くのかなと感じました。

結局長い、記述量が多いということは、それだけ情報量が多いので、考えやすくするためには、小さくする、分割していくというのは、何にでも通用する基本的な考え方だと思いました。

第 4 週

一歩進んだプログラミング技法について学びました。

  • プログラムが動く仕組みの復習
    • CPU によるマシン語の実行
  • マルチスレッドによる並行処理入門
    • 並行(concurrent)と並列(pararel)
    • プロセスとスレッド
      • Ruby によるマルチスレッドのデモ
  • メタプログラミングによる ActiveRecord もどきの実装
    • メタプログラミングについて

Java などと比べ、Ruby はペタプログラミングがしやすいなと思いました。なかなかフレームワークやライブラリを作る機会がないと、メタプログラミングをする機会がないですが、とても便利な機能が言語には備わっているなと感じました。

第 5 週

受講生のアンケートへの回答

  • コルーチン
    • 中断と再開
  • 宣言的 UI とは
  • Kubernetes の概要
    • マイクロサービスについて
    • コンテナオーケストレーションについて
    • AWS EKS によるデモ
    • コンテナのメリット
  • AWS Amplify の概要
    • BaaS
    • DB への直接アクセス
      • App Sync + DynamoDB
    • Amplify のデモ
  • エンジニアのキャリアについて
  • 0 からの個人開発でこのゼミの内容を活かすには

Kubernetes を触ったことがなかったので、デモを見れてよかったです。

まとめ

いつもよりテーマが広く多かった気がしますが、細かいところで知らなかったこともあったので、良い知識の補完ができました。

← ホームへ