VOYAGE GROUPのインターン『Treasure』参加レポート【講義パート3】

Genre
Tech
Tags
インターン振り返り
Article Writing Date
2021/09/05
VOYAGE GROUPの3週間インターン『Treasure』の講義パートを振り返り。データベース設計・セキュリティ・認証・インフラなどの学びをシェア!
 
Treasureという3週間で、講義+チーム開発を行うインターンに参加してきた時の振り返りになります!本記事では講義パートについて書いています📝
VOYAGE GROUPのインターン『Treasure』参加レポート【講義パート1】VOYAGE GROUPのインターン『Treasure』参加レポート【講義パート1】2024/6/5 23:272025/3/4 1:39VOYAGE GROUPのインターン『Treasure』参加レポート【講義パート2】VOYAGE GROUPのインターン『Treasure』参加レポート【講義パート2】2024/6/5 23:272025/3/4 1:39VOYAGE GROUPのインターン『Treasure』参加レポート【講義パート3】VOYAGE GROUPのインターン『Treasure』参加レポート【講義パート3】2024/6/5 23:272025/3/4 1:39VOYAGE GROUPのインターン『Treasure』に参加!【チーム開発編】VOYAGE GROUPのインターン『Treasure』に参加!【チーム開発編】2024/6/5 23:272025/3/4 1:40

4日目 8/15(木)

データベースの講義

データベースの種類について
RDB
  • データの不整合を防止し、堅牢かつデータ利用がしやすいデータストア
  • ユーザー情報、取引履歴など整合性が重要なデータのリアルタイムな更新・参照といった用途で使用される
DWH
  • RDBを分析用に特化したもので、データ更新は苦手で低速
  • データ集計が主な用途
KVS
  • SQLを使わずに、独自プロトコルによりデータを操作する
  • RDBの補助的な役割で、重い計算結果を格納して再計算のリソースを節約などの処理を最適化することが主な用途
データベースの選択と特性
ACID
1. Atomicity(原子性)
2. Consistency(一貫性)
3. Isolation(独立性)
4. Durability(永続性)
BASE
  • ACIDよりも柔軟な分散システムの考え方
    • Basically Available(基本的に利用可能)
    • Soft-state(柔軟な状態)
    • Eventual Consistency(結果整合性)
  • 結果的に整合性が取れればよい場面ではKVSを使えば高速で良い
などの内容を最初の講義で学びました。

グループワークのモデリング実践入門

そして、次はグループワークに入る前にモデリングの講義がありました。
データモデリング
データ≠情報
  • データは事実
  • 情報は見たい内容
    • 情報ベースでデータ設計しないこと(UIなど見た目に引きずられない)
エンティティとは
  • リソース
    • サービス運用に必要となる実体
  • イベント
    • 過去のある時点に発生した「こと」
    • 誰がいつ何に対して何を行なったか
      • 7W2Hで考えるとよい
    • 時間を属性として持つ
モデリングの技法
1. 論理モデルの作成
  • 1.1 ユースケースを考える
  • 1.2 エンティティ抽出
  • 1.3 リレーションシップを張る
  • 1.4 主要属性の定義(リソースとイベント)
  • 1.5 主キーの選定
    • 以下の選定基準(1つでも満たさない場合はサロゲートキーを使用する)に則って1つ選ぶ
      • 一意に定まるもの
      • 値の変わらないもの
      • できるだけ桁数の短いもの
      • 複合キーでの連結が多くならない
      • 必ず存在するもの(NOT NULL)
    • サロゲートキーの追加を考慮する
      • システム側の都合で付ける無機質なコードだが、論理モデルの段階ではなるべく使用しないようにすること
  • 1.6 正規化し最終的なER図の作成
2. 論理モデルから物理モデルへの変換
  • 論理モデルから実際にDBに実装する段階まで落とし込む
  • 代理キー(サロゲートキー)が必要であれば使用する
    • 自然キーを使用すると主キーの変更に弱い
      • ユーザー名を主キーにした後にユーザー名を変更できるようにしたくなった場合など
    • しかし、代理キーを使用するとサービスに関係無いカラムを増やすことになるため要検討
モデリングの講義の後は、3人チームとなって架空サービスのデータモデリングを行い、migrationを適用しました。なぜ、このようなテーブル設計にしたのか3人で何度も見つめ直すことで仕様漏れの防止に繋がったと思います。

社内LTにも参加しました

どれも非常に楽しい内容で充実した時間になりました。(進捗を最高にするイヤホン・ヘッドホンの選び方やBash Scriptで3分APIサーバー作成など笑)
美味しくいただきました! | 美味しくいただきました!
美味しくいただきました! | 美味しくいただきました!

5日目 8/16(金)

中間課題

5日目は中間課題の発表がありお題は、「最高に面白い何かを作ってください!!」というものでした。何を作ろうかと考えた時に、最近困っていることは何だろうと思い書き出していきました。
困っていること
1. 前に見ていたページを探したいと思った時に、開いているタブが多いと、ページタイトルが見切れてしまい切り替えることが困難
2. 見ているページをスマートフォンやiPadですぐに見たいときに、Slackなどで送るのは手間
3. Chromeのタブをたくさん開いていると、メモリを沢山消費しているので開いているが不要なタブを削除したい
  • しかし、タブを沢山開いているとFaviconしか表示されないような状態になってしまい、不要なタブの判断がしづらい
タブを開きすぎている様子 | タブを開きすぎている様子
タブを開きすぎている様子 | タブを開きすぎている様子
上記の問題の解決策
  1. 開いているタブの一覧を表示して、タップするとそのページに遷移できるようにする
  1. 開いているタブのQRコードを読み取ることで、スマートフォン・iPadでも別のサービスを経由することなく瞬時に開くことができるようにする
  1. 複数ページを開いている際に「いくつタブを開いているのか」すぐに見ることができ、知りたい情報が記載されているタブがどれだったのか、「タイトル」「ロゴ」を表示して知ることができるようにする
そして、Chrome APIを使ったChromeプラグインを作ろうと決めて開発していきました。

8/17,18(土日)

オフィスで行き中間課題に取り組んでいました。今回のChrome拡張を作る上で使用した技術は、 React, ChromeAPI, Material-UIです。Chrome拡張のデバッグでは、React Developer Tools を使うことができなかったので大変でした笑
Reactは、あまりキャッチアップし切れていない現状でしたが、少しずつ書けるようになってくると、ライブラリ・ドキュメントの充実度が高くて楽しくなってきました。今回の中間課題に取り組んだことで、Material-UIやAtomic Designを意識したコンポーネント分割には少しずつ慣れてきて、後半のチーム開発でも活かしていけたかなと感じています。

6日目 8/19(月)

中間発表

  • 午前中は各々が開発してきたものを見せながらプレゼンを行いました
最終的に出来上がった僕の成果物は以下のような画面になります。
Chromeプラグインの動作画面 | Chromeプラグインの動作画面
Chromeプラグインの動作画面 | Chromeプラグインの動作画面
「QRコードを表示」ボタンにマウスオーバーすると、それぞれのQRコードが表示されます。 実装したかった機能は動作するので、UIを少し整えてchromeウェブストアにリリースしようと思います。

【2019/12/19 追記】リリース!

Active Tab Listerというアプリ名でリリースしました!良ければ使ってみてください😄

セキュリティの講義

午後からは様々なセキュリティリスクや、攻撃手法(XSS, SQL Injection, セッションハイジャックなど)について学びました。今後は、脆弱性が生まれてしまうコードは書かないように気をつけていきたいです。

7日目 8/20(火)

認証の講義

午前中は認証の講義で、自前で行う古典的Cookie認証やOpenID Connectなどついて学びました。OpenID Connectのよくない実装例と、推奨する実装例として以下のようなものがあります。
よくない実装
  • IDToken(sub)を発行してもらい、受け取ったものでサーバーとの通信リクエストする
    • つまり、subをゲットすればバックエンドサーバを簡単にリクエストできる
推奨する実装
  • IDTokenをバックエンドで検証する
    • それがOKだったら認可コードを返す
    • サーバーとのリクエストを送るときは、認可コードでやりとりする
講義で学んだ重要なことを要約すると、ライブラリを選定できる知見が必要
  • インクリメンタルな開発にはリスクがある
  • 選定できるリテラシーが必要

途中で株式会社fluct COO 望月さんのLTがありました

内容をまとめると、
  • ビジネスサイド、開発サイドの温度差があることを踏まえて、お互いが歩み寄ろうとする姿勢を大切に
  • 初期設計を間違えると、製品ができないことになりかねないので、ニーズを慎重に聞き取ること
  • 問題が起きた時に、現象・バグ・事象なのか断定して対処法を判断すること

インフラの講義

午後はインフラの講義で、Application Load BalancerやCI/CDについて学びました。講義を受けて、後半のチーム開発ではCI/CDを回して動く状態を継続し小さいスプリントを回していきたいと思いました。

チーム開発はその4へ!

VOYAGE GROUPのインターン『Treasure』に参加!【チーム開発編】VOYAGE GROUPのインターン『Treasure』に参加!【チーム開発編】2024/6/5 23:272025/3/4 1:40
ご覧いただきありがとうございます! 最後に、僕のこれまでの歩みと、現在の活動について少しご紹介させてください。
 
小幡 十矛(Obata Tomu)|共創で価値をつくるエンジニア・新規事業 × ブランドづくり
東京を拠点に、アプリ開発・新規事業立ち上げ・ブランドづくりに取り組んでいます。 現在フリーランスとして、複数のプロダクトやリアル店舗の立ち上げにも挑戦中です。
🎯 Mission|挑戦の連鎖を生む “前に進める仕組み” を共創する リアルとデジタルの交差点から、新しい挑戦が芽吹く土壌を育てています。
👥 特に、社会人1〜5年目で「最初の一歩に迷っている方」へ。 一緒に考えたり、手を動かしたりできたら嬉しいです。
🌱 「挑戦したい20代」との出会いを、大切にしています。 「ちょっと話してみたいな」くらいの気持ちで、お気軽に声をかけてもらえたら嬉しいです🙌
🔗 各種リンク: