#author("2025-11-25T01:59:09+09:00","default:member","member") #author("2025-12-01T01:05:14+09:00","default:member","member") *MEMORIES COLLECTION テンプレートを使った映画の思い出オリジナルカードを作成できるサイト #image(情報デザイン研究三年後期.png) -堀玲二 -[[MEMORIES COLLECTION サイト>https://horire.github.io/MEMORIES-COLLECTION/]] -[[MEMORIES COLLECTION プロトタイプ>https://www.figma.com/proto/p5JBql8twIhdpwzmcPNsRN/%E7%84%A1%E9%A1%8C?node-id=4-3&t=pzWSNBCdlvrId6GY-1&scaling=scale-down&content-scaling=fixed&page-id=0%3A1&starting-point-node-id=4%3A3]] -movie tickets, collection, web site -[[前期研究ページ>堀玲二/情報デザイン研究I]] **概要 ***これは何? //&color(red){これは何か・・を簡潔に}; 映画鑑賞の思い出を記録し、コレクションできるオリジナルカード作成サイト //映画鑑賞を事例とした思い出を記録し、コレクションできるオリジナルカード作成サイト// ~ ***背景と目的 //&color(red){プロジェクトの背景と目的}; 映画を観に行ったときにもらうチケットは、多くの場合映画鑑賞後に捨てられてしまう。思い出は次第に風化され、チケットが捨てられれば記憶を思い出すきっかけを失うことになる。本研究ではwebサイトを用いて映画鑑賞という思い出をテンプレートを使い思い出オリジナルカードを作成する。この方法で思い出を形に残し、「コレクション」として楽しめるようにすることで、記憶を呼び起こすきっかけを作り、感動をいつまでも忘れないようにする。 ~ ***コンセプト //&color(red){基本的な考え方、枠組み、視点など}; -思わずとっておきたくなるようにグラフィック要素を取り入れた上で統一感を持たせ、コレクション性を加える。 -既存のチケットに記入されている情報に追加して、グラフィック要素や感想記入欄を作ることにより、記憶を残しやすくする。 -画像保存と現物保存の二つの中からユーザーに合うコ方法でコレクションを促し、思い出を振り返りやすくする。 ~ ***成果物の仕様 //&color(red){&small(成果物の形式・サイズ・時間尺等);}; -前期 映画のチケットのテンプレートを4案×色違い4種 計16種 映画の思い出オリジナルカードを作成できるサイトのプロトタイプ -後期 GitHubにて公開するWebサイト ~ //***メンバー //&color(red){共同プロジェクトの場合のみ|メンバーと役割分担を明記}; //堀玲二 ~ ***制作ツール //&color(red){使用するツール|ハードウエア・ソフトウエア}; Adobe Illustrator VScode Procreate figma ~ ***プロジェクトの期間 //&color(red){プロジェクトの期間|20XX.XX.XX - 20XX.XX.XX }; 4月29日〜1月10日(通年) ~ ***まとめ //&color(red){プロジェクトが完結したら「まとめ」を記載して下さい。}; 中間まとめ -現在はサイト作成に使用するグラフィック素材と サイト機能を作成できている。 -今後はこの素材を使用し実際にプロトタイプ通りに形にしていく。 -サイト構築の過程でグラフィック修正の必要が出てくる可能性があるので、修正をする前提での日程調整をする必要がある。 ~ ~ **調査 ***現状調査 //&color(red){プロジェクトのテーマに関わる社会の現状と問題の洗い出し}; ''人生で一番大切な仕事は「思い出づくり」'' __[[DIE WITH ZERO 人生が豊かになりすぎる究極のルール>https://ameblo.jp/moriyuri2023/entry-12812990128.html]]__ ''映画を観た後、チケットの半券を捨てている人の割合は53.9%'' __[[映画の半券を捨てるか捨てないかのアンケート記事>https://research-panel.jp/rpdr/view.php?eid=465157&aid=1968977#goog_rewarded]]__ ''映画のチケットを窓口で購入している人の割合は 63.5%'' __[[実践『ペルソナ』通信 (No.47)映画の半券の保存状況に関する調査結果>https://www.jissen.ac.jp/learning/human_sociology/research/persona/vpbrbb000000vx72-att/PersonaA_no47.pdf?utm_source=chatgpt.com]]__ ~ ***先行事例 //&color(red){プロジェクトのテーマに該当する先行事例の紹介、傾向分析など}; [[ピンタレストのボード>https://pin.it/2DimonZgX]] [[思い出きっぷ>https://design.kyusan-u.ac.jp/socialdesign/?cmd=read&page=%E5%90%89%E8%89%AF%E7%90%89%E6%B1%B0%2F%E5%8D%92%E6%A5%AD%E7%A0%94%E7%A9%B6&word=%E6%80%9D%E3%81%84%E5%87%BA%E3%81%8D%E3%81%A3%E3%81%B7]] ~ ***技法・技術情報 //&color(red){プロジェクトの遂行に必要な技法・技術に関する調査}; [[デザインの心理学>https://321web.link/design-psychology/]] ~ ~ **プロジェクト管理 ***スケジュール //&color(red){計画的な遂行のために、進行管理表を作成してリンクして下さい。}; [[情報デザイン研究ガントチャート>https://ksumail-my.sharepoint.com/:x:/g/personal/k23as027_st_kyusan-u_ac_jp/EdG0DX8bYmtNtW1p5X7NwPgBHFApWJiDb3S935L9DBh8wg?e=vrMMZy]] ~ ***ToDo //&color(red){やるべきこと(タスク)を箇条書きにします。}; //&color(red){完了後は「%%取り消し線%%」あるいは「// コメントアウト」」}; %%チケットのデザイン案を計4案考える%% %%デザイン案をもとにチケット作成%% %%ジャンル別に使う色を考える%% %%サイトマップを考える%% %%ワイヤーフレームを考える%% %%サイトで使用する機能のリスト化%% サイト内原稿の作成 %%サイトで使用する機能簡易作成%% チケットデザイン案ブラッシュアップ コーディング //***NotToDo //&color(red){やらないこと:何をするかではなく「何をしないか」を考える}; //&color(red){例:10人以上の会議には出ない。苦手なことは誰かに頼む・・}; ~ ~ #hr CENTER:''進捗記録'' //&color(red){最新の情報を一番上に記載して下さい(古い記事が下へ沈む)。}; #hr ~ ~ **2025.11.24 ~ ''キャンバス内の文章自動改行機能'' インプット知識 -falsyチェック --プログラミング言語で、偽とみなされる値(falsyな値)を判定する処理のことです。これは、if文などの条件式で、真偽値ではない値が自動的に真偽値に変換され、偽として扱われることを利用しています。 (例) if (!text) { return [''] }; -String() --関数は、渡された引数を文字列に変換する。 "ABC" → "ABC"(そのまま) 123 → "123"(文字列になる) (例) const rawLines = String(text).split('\n'); -.split() --文字列を特定の区切り文字で分割し、配列にする」 という JavaScript のメソッド。()内に特定の区切り文字を指定する。 文字列の中に指定した区切り文字がなければ全体をそのまま 1 要素の配列にする。 (例) const rawLines = String(text).split('\n'); -push() --配列の末尾に要素を追加するメソッドです。 (例) const arr = []; arr.push("hello"); console.log(arr); // ["hello"] -slice(start, end) --start から end の直前までの文字列を取り出す(end は含まない) (例) "abcdef".slice(2, 5) // "cde" -戻り値について --戻り値: 関数が処理を行った結果を呼び出し元に返す場合があります。この結果は「戻り値」と呼ばれ、return文を使って返されます。 「呼び出し元」とは、特定の関数やメソッドを実行する部分のこと。 呼び出される関数が「呼び出し先」となる。 ''returnについて'' --「return」を使うと、関数内で処理をした結果を「戻り値」として返すことができます。これはどういうことかと言うと関数は「return」を使わずに処理を行ったらそのまま終了となる。 しかし「return」を使うことで処理を行った結果の値を返せるので、その値を使ってさらに別の処理を続けることが出来る。 ''書き方'' 【 return 値・式・関数など 】のようにreturnのあとに続けてさまざまな値や式などを記述します。 「return」は関数内に記述するので、上記のように何らかの処理を行った結果を返すのが一般的です。ただし、returnが実行されるとそれ以降の処理は実行されずに中断するので注意が必要。 (例) return lines; -Math.round() --JavaScript の標準組み込みオブジェクト Math(数学用ツール箱)のメソッドで、 引数の数値を四捨五入して整数にする。Canvas の fillText で文字を描画する時、「行のY位置が小数だと少しにじみやすい」という仕様がある。なので、行間は 整数(px) にするほうがキレイ。 (例) const lineHeight = Math.round(10 * 1.3); -デフォルト引数 --デフォルト引数とは、関数やメソッドの定義時に引数に初期値を設定する機能です。関数を呼び出す際に引数が省略された場合、その設定されたデフォルト値が自動的に使われます。これにより、引数を省略して関数を呼び出すことが可能になります。引数名の後ろに = デフォルト値を書く。 (例) const wrapTextByChars = (text, maxChars = 20) => {} ~ ~ **2025.11.17 ~ コーディング作業を進めました。 #image(toppage.jpg,center,40%) ~ ~ **2025.10.27 ~ 技術 -innerHTML --innerHTMLとは、JavaScriptのプロパティで、HTML要素の中身(子要素やテキスト)を取得・変更するために使用されます。 -.filter() の仕組み(中の動き) コード例 *productsは配列の中にオブジェクトが収納されている要素だとする。 const cheapProducts = products.filter(p => p.price <= 2000); filter(p => p.price <= 2000);の部分は次の書き方と同じ意味 function(p) { return p.price <= 2000; } pには配列の各要素が代入される。 --products の中身を順番に取り出す --各商品について、p.price <= 2000 を評価 --条件が true → 新しい配列に「残す」 --条件が false → 「除外」 --条件を満たす要素だけをまとめて 新しい配列 として返す **2025.10.20 ~ コーディング作業 **2025.10.13 ~ ''発表フィードバック'' -ユーザーの好きな画像を使えるようになれば良いのではないか -ユーザーがこのサイトを使用する意味を作る必要がある -グラフィックのブラッシュアップ **2025.10.06 ~ ''発表準備'' -背景と目的 映画を観に行ったときにもらうチケットは、多くの場合映画鑑賞後に捨てられてしまう。思い出は次第に風化され、チケットが捨てられれば記憶を思い出すきっかけを失うことになる。本研究ではwebサイトを用いて映画鑑賞という思い出をテンプレートを使い思い出オリジナルカードを作成する。この方法で思い出を形に残し、「コレクション」として楽しめるようにすることで、記憶を呼び起こすきっかけを作り、感動をいつまでも忘れないようにする。 ~ -コンセプト 思わずとっておきたくなるようにグラフィック要素を取り入れた上で統一感を持たせ、コレクション性を加える。 既存のチケットに記入されている情報に追加して、グラフィック要素や感想記入欄を作ることにより、記憶を残しやすくする。 画像保存と現物保存の二つの中からユーザーに合うコ方法でコレクションを促し、思い出を振り返りやすくする。 ~ -調査 ''映画を観た後、チケットの半券を捨てている人の割合は53.9%'' __[[映画の半券を捨てるか捨てないかのアンケート記事>https://research-panel.jp/rpdr/view.php?eid=465157&aid=1968977#goog_rewarded]]__ ''映画のチケットを窓口で購入している人の割合は 63.5%'' __[[実践『ペルソナ』通信 (No.47)映画の半券の保存状況に関する調査結果>https://www.jissen.ac.jp/learning/human_sociology/research/persona/vpbrbb000000vx72-att/PersonaA_no47.pdf?utm_source=chatgpt.com]]__ ~ -中間発表までの成果物 --ウェーブ背景 ---[[ウェーブ背景GitHub>https://horire.github.io/wave/]] ---[[参考技術・技法>https://www.youtube.com/watch?v=MMNEEdGa5eE]] --スクロール表記の切り替え ---[[スクロール表記の切り替えGitHub>https://horire.github.io/TopOrScroll/]] --入力した文字を画像上に出力 ---[[入力した文字を画像上に出力GitHub>https://horire.github.io/img_display/]] --画像ダウンロード機能 ---[[画像ダウンロード機能GitHub>https://horire.github.io/download/]] --文字出力と画像ダウンロード ---[[文字出力と画像ダウンロードGitHub>https://horire.github.io/downloadAndDisplay/]] --ローディング画面 ---[[ローディング画面GitHub>https://horire.github.io/loading/]] --スライダー ---[[参考技術・技法>https://www.youtube.com/watch?v=29jbN6cYDCM&t=866s]] ---[[スライダーGitHub>https://horire.github.io/slider/]] --文字数チェッカー ---[[文字数チェッカーGitHub>https://horire.github.io/count/]] --フェードインアニメーション ---[[アニメーションGitHub>https://horire.github.io/animation/]] --チェックボックス ---[[チェックボックスGitHub>https://horire.github.io/check/]] ~ -まとめ(現状と今後) 現在はサイト作成に使用するグラフィック素材と サイト機能を作成できている。 今後はこの素材を使用し実際にプロトタイプ通りに形にしていく。 サイト構築の過程でグラフィック修正の必要が出てくる可能性があるので、修正をする前提での日程調整をする必要がある。 ~ ~ **2025.09.29 ~ ***機能お試し作成 -ウェーブ背景 --[[ウェーブ背景GitHub>https://horire.github.io/wave/]] --[[参考技術・技法>https://www.youtube.com/watch?v=MMNEEdGa5eE]] -スクロール表記の切り替え --[[スクロール表記の切り替えGitHub>https://horire.github.io/TopOrScroll/]] -入力した文字を画像上に出力 --[[入力した文字を画像上に出力GitHub>https://horire.github.io/img_display/]] -画像ダウンロード機能 --[[画像ダウンロード機能GitHub>https://horire.github.io/download/]] -文字出力と画像ダウンロード --[[文字出力と画像ダウンロードGitHub>https://horire.github.io/downloadAndDisplay/]] ~ ***サイトで使用する機能のリスト化 -%%ローディング画面%% -%%フェードインアニメーション%% -%%ウェーブ背景%% -ハンバーガーボタン -%%スライダー%% -%%文字数チェッカー%% -%%スクロール表記の切り替え%% -%%入力した文字を画像上に出力%% -%%画像ダウンロード%% ~ ***Webサイトアニメーション理由 この記事では便宜的に、サイトを閲覧しているユーザーを「閲覧者」、サイトで情報を発信・運用している管理者を「発信者」とします。 -閲覧者の視線を誘導する -閲覧者の操作で画面内の要素に変化が起きたときに、 何が起きているかを通知する -UIもしくはWebサイト全体の使用感を向上させる -発信者が表現したい世界観・雰囲気を演出する __[[参考サイト>https://note.com/unshift/n/ne474ac3e9092]]__ ~ ***インプット技術 -onload 使用例 対象の要素.onload = () => {}; img.onload = () => {}; onload は 読み込み完了時に自動で実行されるイベント 画像なら「画像が表示できる状態になったとき」に呼ばれる ページ全体では「ページ内のすべてのリソースが揃ったとき」に呼ばれる 画像をキャンバスに描画するときは、onload を使って画像の準備完了後に描画するのが必須 -canvas JavaScriptと合わせて使用するhtmlタグ -new Image(); --使用例 const img = new Image(); img には 空の画像オブジェクト が作られます。 作った直後はまだ画像データは入っていません。 --src にファイルのURLをセットすると、ブラウザがその画像をダウンロードし始めます。 記入例 img.src = 'images/dummy.png'; new Image() は「キャンバスに描画するための画像の入れ物を作っている」と考えるとわかりやすいです。 --new Image() JavaScript内で画像を扱うためのオブジェクト DOMには追加されない(見えない) キャンバスなどに描画するために使う --<img>タグ HTMLのページに直接画像を表示するための要素 DOM(HTMLツリー)に追加される ページにそのまま表示される --まとめ new Image() は JavaScriptで画像オブジェクトを作るコンストラクタ 作っただけでは何も表示されない src を設定すると画像を読み込み始める 主にキャンバス描画や画像の加工など、HTMLに直接表示しないときに使う -fillText --fillText は キャンバスに文字を書き込むためのメソッド 。 ここでは ctx(2Dコンテキスト)を使って指定した座標に文字を描画している。 使用例 ctx.fillText(文字列, x座標, y座標 [, 最大幅]); 第1引数:描画するテキストの内容 第2引数:テキストの開始位置の x 座標(横方向の位置) 第3引数:テキストの開始位置の y 座標(縦方向の位置) 第4引数(省略可):最大幅(指定した幅を超えると文字が縮小されて収まる) --getContext 使用例 const ctx = canvas.getContext('2d'); → 2D 描画を行うための「ペン」を取得。 ctx.fillStyle は「これから塗る色」を指定するプロパティ。 描画命令(fillRect や fillText など)を呼ぶ瞬間の色が反映される。 だから複数回設定すれば、そのたびに違う色で描ける。 --キャンバス内に描画する文字の設定や場所について 描画ツールの設定” にすぎません。 変更しても、すでに描いたものの色や場所は変わりません。 (紙に書いた絵の色はペンを持ち替えても変わらないのと同じ) 描画するたびに、その時点で設定されている設定が使われます。 --toDataURL 使用例 lcanvas.toDataURL("image/png") Canvas の描画内容を PNG画像のデータURL(例:"data:image/png;base64,..." という文字列)に変換します。 --()の中身について toDataURL() のデフォルト指定は PNG 指定を書かなくてもPNG指定になる だから "image/png" だけ書けば十分 それ以外の形式にしたいときだけ別の指定が必要 PNG は劣化しないので多くの用途で最適 --createElement 使用例 ldocument.createElement('a') → 新しく <a>(リンク要素)を作ります(HTMLにはまだ表示されません)。 --href 使用例 llink.href = dataURL; → このリンク先を、さきほど作った 画像データURL に設定します。 → 普通はリンク先にWebページのURLを書きますが、ここでは画像データを直接指定しています。 link.href = dataURL; は、 link(新しく作った <a> タグ)の href 属性(リンク先) に Canvasを画像化したデータURL を代入している という意味です。 これによって、クリックしたときにサーバーからではなく その場で作ったCanvas画像をリンク先として開いたりダウンロードできる ようになるのです。 --download 使用例 link.download = 'canvas_image.png'; → リンクをクリックしたときに表示ではなく ダウンロードされるようにする属性 です。 → 'canvas_image.png' が保存されるファイル名になります。 - || (OR または) --二つの条件のうち、どちらか一つだけ満たす条件をOR条件といい、 「|(バーティカルバー)」記号を条件式の間に二つ続けて書く。 -DOMContentLoaded --DOMContentLoaded HTML(DOM)解析が終わった直後(画像の読み込みはまだ) --load 画像を含めてすべての読み込み完了後 --DOMだけが必要? → DOMContentLoaded 画像やCSSのロード完了が必要? → load --loadイベントだとwindow.addEventListener DOMContentLoadedイベントだとdocument.addEventListener と記述される。windowとdocumentの部分が違っている。 これはそれぞれのイベントがwindowオブジェクトとdocumentオブジェクトに対して動作しているから。 -inset: 0; --inset: 0; は、position: absolute; や position: fixed; などのpositionプロパティが指定されている要素に対して有効です。 しかし、imgタグにはデフォルトでposition: static;が適用されているため、inset: 0;だけでは画像の大きさや位置は変わりません。 -position relative とposition absolute --position: absolute; は、一番近い position: relative; などが指定された親要素を基準に配置されます。 もし親要素に position: relative; が指定されていなければ、body(またはhtml)全体を基準に絶対配置されます。 -css background --CSSにおける「background」プロパティは、要素の背景に関する複数のスタイ(背景色、背景画像、サイズ、位置、繰り返しなど)を一度にまとめて指定するためのショートハンドプロパティです。個別のプロパティ(background-colorやbackground-imageなど)をすべて指定する代わりに、backgroundプロパティを使えば簡潔に記述できます。 -css animation --リニア(linear): 等速で変化する。のっぺりとした安定した印象。 --イーズイン(ease-in): 徐々に加速する。加速するような勢いのある印象。 --イーズアウト(ease-out): 徐々に減速する。 変化の余韻が残りやすい印象。 --イーズインアウト(ease-in-out): 加速してから減速。 ~ ~ **2025.09.22 ~ ***機能お試し作成 -ローディング画面 --[[ローディング画面GitHub>https://horire.github.io/loading/]] -スライダー --[[参考技術・技法>https://www.youtube.com/watch?v=29jbN6cYDCM&t=866s]] --[[スライダーGitHub>https://horire.github.io/slider/]] -文字数チェッカー --[[文字数チェッカーGitHub>https://horire.github.io/count/]] -フェードインアニメーション --[[アニメーションGitHub>https://horire.github.io/animation/]] -チェックボックス --[[チェックボックスGitHub>https://horire.github.io/check/]] **2025.09.15 ~ ***サイトで使用する機能のリスト化 -ローディング画面 -フェードインアニメーション -ウェーブ背景 -ハンバーガーボタン -スライダー -文字数チェッカー -スクロール表記の切り替え -入力した文字を画像上に出力 -画像ダウンロード いきなりサイトを作り始めるのではなく機能のみの作成から始める。 入力した文字を画像上に出力が時間がかかる見込みなので、それ以外 の機能から作成を開始する。 ~ ***研究進行について -ガントチャートの作成 -ToDoリストの作成 ~ ~