Upgrade to Pro — share decks privately, control downloads, hide ads and more …

CASE STUDY #3

CASE STUDY #3

2023.05.12に行われたイベント「CASE STUDY #3」の発表資料です。

More Decks by Takumi Hasegawa (unshift)

Other Decks in Technology

Transcript

  1. u n s h i f t I n c

    . C r e a t i v e D e v e l o p e r i 1 9 8 5 . 0 1 . 2 5 生 ま れ ( 3 8 歳 † i 主 な 仕 事 は W e b の フ ロ ン ト エ ン ド 実 P i 主 な S N S は T w i t t e r ( @ _ u n s h i f t † i ク リ エ イ ティ ブ コ ー ディ ン グ 好 7 i バ ス ケ ッ ト ボ ー ル が 好 7 i 1 y 3 m の 娘 の 父 ( 帰 り た い † i 今 日 は ゼ ル ダ の 伝 説 発 売 日 ( 帰 り た い ) 長 谷 川 巧
  2. Index 貝印 やさしい切りかた辞典 - 一覧のレイアウトの作り込み 「楽しむ」ポイント - テキストデータ生成の効率化 - WebGL用データ作成ツール制作

    「楽する」ポイント 事例1 ドルチェ&ガッバーナ × 呪術廻戦 - WebGL演出の作り込み・最適化 「楽しむ」ポイント - 段階リリースの効率化 「楽する」ポイント 事例2
  3. 事例1: 貝印 やさしい切りかた辞典 「楽する」ポイント - テキストデータ生成の効率化 JSON Google Spreadsheet JSON

    file Google App Script サンプルデータ https://docs.google.com/spreadsheets/d/1UoVT1wJLTMRI_75wf8-Xzar3TMnYnPSItE6Zy5C3xAI/edit?pli=1#gid=0
  4. 事例1: 貝印 やさしい切りかた辞典 「楽する」ポイント - テキストデータ生成の効率化 Google Spreadsheetで、以下の条件でJSONを出力するGoogle App Scriptを作ってください。



    * シート名は「シート1」とする。
 * 1行目をヘッダ行とする。
 * 2行以降の各行をヘッダのラベルをキーとしたオブジェクトとし、データのある全行を配列とした JSONデータにする。
 * オブジェクトのキーはキャメルケースとする。頭文字は小文字。
 * ファイルはGoogle Driveに保存するのではなく、モーダルダイアログが出現し、リンクをクリッ クするとダウンロードできるようにする。 プロンプトの一例
  5. 事例1: 貝印 やさしい切りかた辞典 「楽しむ」ポイント - 一覧のレイアウトの作り込み 一覧の仕様 (概要) v 食材の数は15

    (増減あるかもd v ランダムに並べv v カードは上下左右に無限にドラッグできv v ドラッグすると、三角形のタイル状のオブジェクト が反b v ドラッグすると、マウスからの距離に応じてカード が時間差で動く
  6. 事例1: 貝印 やさしい切りかた辞典 「楽しむ」ポイント - 一覧のレイアウトの作り込み 一覧の仕様 (詳細) ¤ 食材の数は15

    (増減あるかもe ¤ 隣り合うカードは同じ食材にならないように
 画面内にできるだけ多くの種類をランダムにならべ} ¤ 1食材ごとに1カードでは画面を埋め尽くせない場合
 複数同じ食材を使用す} ¤ カードは上下左右に無限にドラッグでき} ¤ ドラッグすると、三角形のタイル状のオブジェクトが反応
 (WebGLのジオメトリインスタンシングで描画e ¤ パフォーマンス重視のため、カードの枚数は必要最低限にしたƒ ¤ ドラッグすると、マウスからの距離に応じてカードが時間差で動く
  7. 事例2: ドルチェ&ガッバーナ × 呪術廻戦 「楽する」ポイント - 段階リリースの効率化 ˜ ティーザーサイト含めて数バージョンのリリースがあS ˜

    各バージョンで基本的なサイトの構造は変わらなg ˜ リリースのバージョンが進むことにによって、解禁される情報があS ˜ 解禁される情報の中には画像データも含まれS ˜ 各バージョンのリリースの間隔が短g ˜ 確認作業も同時並行となることもある 段階リリースの概要
  8. 事例2: ドルチェ&ガッバーナ × 呪術廻戦 「楽する」ポイント - 段階リリースの効率化 主なディレクトリ構造と役割 project root

    public ・・・  静的ファイル。ビルド時にdistディレクトリへそのままコピーされる。 images ・・・  画像ファイル。ここから各バージョンに必要な画像がpublicディレクトリにコピーされる。 src ・・・  主に.ts, .tsxファイル。ビルドを通してjsファイルなどにコンパイルされ、distディレクトリに展開される。 index.html ・・・  ページのHTML。ビルド時に一部書き換えがされ、distディレクトリに展開される。 dist ・・・  出力先ディレクトリ。 buildTools ・・・  ビルド関連の処理を行うnode.jsスクリプトを格納したディレクトリ。
  9. 事例2: ドルチェ&ガッバーナ × 呪術廻戦 「楽する」ポイント - 段階リリースの効率化 ビルドの大まかな流れ 指定されたバージョンに不要な画像を削除する 本番環境のディレクトリ構成に合わせてパスを置換する

    ビルド後処理 ビルド処理 (distへ展開) 必要な画像をimagesディレクトリからpublicディレクトリへコピー 必要なテキストデータを整形してViteのdefineオプションに渡す ビルド前処理 Viteの処理: ビルドするバージョン (DG_BUILD_INDEX) を指定して処理を行う DG_BUILD_INDEX=0 vite build && DG_BUILD_INDEX=0 node buildTools/postBuild/index.js
  10. 事例2: ドルチェ&ガッバーナ × 呪術廻戦 「楽する」ポイント - 段階リリースの効率化 ビルド前後の処理 (画像コピー/削除、テキストデータ整形) +

    Tree-Shakingによる不要コード削除 によって、ブランチを切り替えることなく 各バージョンの切り替えを実現。
  11. 事例2: ドルチェ&ガッバーナ × 呪術廻戦 「楽しむ」ポイント - WebGL演出の作り込み・最適化 WebGL描画エリアの基本的な方針 zs 高解像度ディスプレイに対応

    
 (window.devicePixelRatioの値を利用するn gs ピクセル数がしきい値を超えると描画の解像度を
 window.devicePixelRatioの1/2にする
  12. 事例2: ドルチェ&ガッバーナ × 呪術廻戦 「楽しむ」ポイント - WebGL演出の作り込み・最適化 各エリアに対する追加ルール ‡ 背景のエフェクト

    
 → そもそも激重なので、window.devicePixelRatio * 0.6
   の値を使用すƒ ‡ タイトル、背景のキャラクター画像の空間
 → 基本方針に沿p ‡ キャラクター全身
 → 常にはっきりくっきりさせたいので、基本方針2は適用しない