Aokashi Room

作った作品の紹介やレビュー、トラブルシューティングとか色々

2020年あけました

あけましておめでとうございます。 2020年もよろしくお願いします。

さて、気がついたら最初のホームページ「Coden City」設立からもうすぐ10年! このために Aokashi Home を GatsbyJS で作り直しました。

aokashi.hatenablog.jp

これから考えていること

WWA Wing の整理

現在、 WWA Wing のバージョンは 3.2.11。

github.com

2019年では、スタイルシートの SASS (SCSS) 化を担当しました。途中で $color マクロが動作しないバグが発生しましたが、後に修正されています。

現状の WWA Wing は packages/engine/src/ をあれこれ見ればわかるのですが、 ほとんどの処理が wwa_main.ts に集約されています。 ですので、なるべく別のファイルに移りしたりして、ソースコードを見やすいようにリファクタリングを進めています。

新しい WWA 作成ツールの模索

WWA マップ作成ツールに代わる新しい WWA の作成ツールを模索しています。

完成した場合は、そのタイミングで、 WWA のマップデータの仕様を公開したいですね。スーパー正男では、作成ツールが結構出ているので、 WWA も作成ツールを自由に選ぶ世の中になりたいです。 ただ、これは暗証番号がバレるリスクが高いため、慎重に進めようと思います。

その他

  • 就職活動を進めます。
  • 研究活動のテーマが未だにはっきり決まらず、迷走している状態なので、早いうちに決めておきたいです。

謎の機械を見つけるチャンス!「謎めいた機械を追い求めて」 WWA COLLECTION 2 へ収録!

WWA COLLECTION 2 が配信されました。前回と同じく、自分の作品が WWA COLLECTION 2 に収録されます。

aokashi.hatenablog.jp

収録作品「謎めいた機械を追い求めて」

f:id:aokashi:20191210135301p:plainf:id:aokashi:20191210134435p:plainf:id:aokashi:20191210134602p:plainf:id:aokashi:20191210135202p:plainf:id:aokashi:20191210135113p:plainf:id:aokashi:20191210135017p:plain

誰かが街に残した機械を撤去するために行動する主人公の物語です。Aokashi Home で公開している最後の作品「シティーアイランド」から5年ぶりの新作となります。

これまで制作したWWAのいいところを合わせた集大成として、演出やボリュームはできるだけ盛りました。

また、WWAを初めて知る方にも、WWAの文化を知ってもらうためにギミックも入れています。難易度は易しく設定しています。

  • 舞台は三角州となっている「すな地域」です。北はカンセツ連峰、南はヨコテ湾に面していて、昔から物流の中心地として栄えていました。
  • 時代は経済成長の真っ只中。住宅不足が問題となり、ニュータウンの建設を計画していたのですが、地面の調査で正体不明の機械を発見しました。
  • 機械について詳しく知る人は殆どおらず、どう撤去するべきかわかりません。

WWA COLLECTION 2 の作品収録や今後の予定について

WWA COLLECTION 2 のゲームボリュームに収めるには大きすぎるため、前編と後編で分けています。

  • 前編は、機械が入っているとされている、洞窟に入るまでの活動が含まれます
  • 後編は、洞窟に入ってから撤去までの活動が含まれます

そして WWA COLLECTION 2 配信後の来年には、この作品を前編と後編を統合させて、Aokashi Home や PLiCy にも公開します!

WWA COLLECTION 2 を遊んだ方や、逆にこの作品を通じて WWA COLLECTION 2 を知った方が増えればと思っています。

この前編と後編の統合作業については、随時ブログやTwitterで発信する予定です。いつ公開するかは分かり次第お知らせします。

余談

この作品に関する裏話を、ゲームのプレイに影響しない範囲でお話します。

  • この作品を構想したのは概ね3, 4年前。WWA作品の集大成として考えてはいたものの、完成度を高めるために何しようかと考えることしかしていなかったため、制作が遅れました。
  • 舞台は、自分のあるゲームの舞台と隣接しています。その答えは、 Aokashi Home や PLiCy への公開後で明らかになります。
  • 一部の街には、実在の地域をモデルにしています。名前で分かるかな?

ちなみに、 WWA COLLECTION 2 の発表に合わせて、 PLiCy さんと協力して紹介ページを作成しました。今回はトップ画面に収録作品の画面を集めましたので、コレクション作品だと一目で分かると思います!

WWA素材に路面電車を追加!

Aokashi HomeWWA素材に新しい素材が加わります!

新素材 路面電車

街と街の移動として、路面電車が必要なことから制作しました。あ、鉄道とかバスとかでも良かったんですが、時代設定上、路面電車を景観として入れたかったんです。

素材は Aokashi Home のWWA素材ページ からどうぞ。タグ「路面電車」から探すことができます。

ついでに、路面電車を走らせるための路面軌道も追加しています。電停は後ほど追加する予定です。

扱い方

画像素材にある路面電車を、使用するWWAのイメージ画像に貼り付けて、WWA側では各マスを使用して物体パーツを作成します。

  • この素材は列車と違って伸ばしたり縮んだりすることはできません
  • 冷房装置やパンタグラフを消したり、開閉演出を加えたりしたい場合は、画像素材内に専用のチップがありますのでそちらをご利用ください
    • ただし、一部の画像素材では、パンタグラフを消すことができません

各素材の特徴

f:id:aokashi:20191217005213g:plainf:id:aokashi:20191217005217g:plain
路面電車を使用したサンプル

  • 19Tram-1.gif ... アイボリー1色の車体に、1つ目の前照灯が特徴。昭和レトロを感じさせるデザインです。前照灯の位置はお好みでどうぞ。
  • 19Tram-2.gif ... 清潔な白い車体にグレーとオレンジを組み合わせた箱型路面電車。いわゆる軽快電車で、大都市の路面電車では廃止が相次ぎ、実用的な路面電車として開発されたという設定です。なぜかここだけ前方のドアが引戸になっています。
  • 19Tram-3.gif ... 近年話題のLRT方式の路面電車です。超低床電車なので、車内のステップで頑張って上ったり、降りる際にこけて転んだりする必要はありません。3つの車体で構成されていて、真ん中の車両には台車が入っていません。

これらの車両は、実世界の路面電車をモデルにして、いくつか変更を加えながら制作しました。ちなみに、そのモデルになった路面電車一度も乗っていません! (広島とか愛媛に行きたい・・・)

その他の更新情報

Aokashi Homeで更新された情報を下記に掲載しています。

  • WWAページ
    • WWA Wing の対応切り替えをした後に別のページに進んで戻ると、対応切り替えが連動しない不具合を修正しました。
    • Thanks の「天使の血・悪魔の涙」に画像素材を使用した表記が無いため、追加しました。

余談

遠くないうちに、WWAの新作を出す・・・のかも・・・? (路面電車を使用したサンプル画面がヒント)

Aokashi Home を GatsbyJS で再構築しました

これまで Aokashi Home は2017年3月から HUGO で静的サイトを生成していましたが、 GatsbyJS で静的サイトを生成する形に切り替えました。

  • スクリーンショットはすべて開発中のものです。
  • GatsbyJS で発生したエラーとその解決策について見たい場合は、「実装で躓いたところと解決策」からご覧ください。
続きを読む

新しい Aokashi Home を作っています

Aokashi Home は Hugo で作成されていますが、現在 GatsbyJS で作り直しをしています。

せっかくなのでスクリーンショットとともに進捗を公開します。

(ここで掲載しているスクリーンショットはすべて開発中のものです。リリースした時に全く異なるものもあるかもしれません。)

トップページ

f:id:aokashi:20191025105811p:plain
トップページ。PlayingとMakingの分類はやめて、コンテンツ毎だけのシンプルな表示に。

去年のお知らせ でお伝えした通り、Playing と Making の分類を止めて、WWAやソフトウェア、素材といったコンテンツの構成としています。資料集が無いようですが、後ほど追加する予定です。

また、 自分について もトップページに移行し、個人サイトとして扱いやすいように整備しています。

WWAページ

f:id:aokashi:20191026002333p:plain
WWAページ。従来と変わらないような・・・?

WWAページは一覧ページとして扱うように、一覧以外のテキストを減らしました。こちらも、データファイルから取り出して表示しています。

なお、近いうちにはタグで絞り込みできるようにするつもりです。が・・・ WWA Wing の対応以外の絞り込みはあまり意味がないかも?

ソフトウェア

f:id:aokashi:20191026003136p:plain
ソフトウェアページ。

Playing の Portable Launcher と Making のプログラムが掲載されています。こちらも、WWAと同じく一覧表示になっていますが、閲覧しやすいように2カラム構成にしています。

素材

f:id:aokashi:20191026002514p:plainf:id:aokashi:20191026002552p:plain
WWA素材のページ。なんと、プレビューもその場でできます!

ここが一番変わったんじゃないかなあ。

WWA素材とツクールMV素材ではジャンルごとで見出しを分けず、そのまま一覧として表示されるようにしました。そして、各項目の画像をクリックすると、フルサイズでプレビューが表示されるようになっています (が、サイズによってはフルサイズで表示してくれない場合もありますが・・・)。

アイコン素材も見出しではなく一覧として表示されますが、こちらはシリーズ毎に項目を分けている都合上、ソフトウェアと同様に2カラム構成になっています。

こちらも、近いうちにはタグで絞り込むできるようにするつもりです。タグの絞り込みができた時に一番便利に感じるのはここだよね。

ポートフォリオ

f:id:aokashi:20191026002742p:plain
各項目の詳細ページ。ポートフォリオのトップページはまだ制作中です。

当サイトの新コンテンツ、ポートフォリオです。そろそろ就職活動が迫っているため、新設することになりました。これまでの自分について細かく記載していますが、個人情報の都合上すべての項目が含まれるとは限りません。

各項目の詳細ページは、画像を含むことが可能で、複数存在する場合はカルーセルで表示されます。

新しい Aokashi Home がリリースされる直後は、まだ項目数は少ないかもしれません。後ほど増やすつもりでいます。

その他

  • お知らせはありません。これは、最新情報の発信場所をなるべくTwitterや当ブログで集約したいためです。
    • 皆さんには関係ないですが、記録目的で GitHub のプライベートリポジトリで更新内容を含めています。
  • スマートフォンのメニューの表示は現時点では未定ですが、メニューに載せる量からすると、ハンバーガーメニューになるのかなー・・・と思っています。
  • 去年問題だった目次のトラブル はバッチリ解決していますが、目次を出すページが少なくなったので解決と言うには微妙かな・・・?

リリースはいつになるのかな、今年中にできたらいいな。

時間があったら、 GatsbyJS でのノウハウも書こうと思います。

WWA Wing 3.2.0 がリリースされました

インターネットRPG "World Wide Adventure" (WWA) の JavaScript 実装である WWA Wing が 3.2.0 にバージョンアップしました。

本来なら、 WWA Wing 用のブログを設けて、ここでお伝えするべきなんですが、まだ用意していないので、 WWA Wing Team の一員である私がリリース内容をまとめます。

何が変わったの?

ざっくり言えば、 PLiCyWWA Wing と一緒になりました。 ということでしょうか。

例えば、以下のように変更が加わります。

  • 崩れる床が速くなり、難易度が上がります (速度が 1.2 倍になるため、準低速でのご利用をおすすめします) 。
  • GoTo WWA ボタンが Battle Report ボタンになります。スマートフォンでもモンスターとの戦闘予測が表示できます。
  • スマートフォンで Yes/No ボタンが拡大されます。

f:id:aokashi:20190602165838p:plain
スマートフォンでは、 Yes/No ボタンが拡大され、 戦闘予測も出来ます!

制作者にとっては、以下のようなメリットと注意点があります。

  • audio.min.js 及びその関連ファイルの設置が不要になります。
  • プレイするHTMLファイルに data-wwa-use-go-to-wwa="true" とすることで、 GoTo WWA ボタンに戻すことが出来ます。
  • プレイするHTMLファイルを Firefox で直接開いても警告メッセージが表示されなくなります。
  • ゲームスピードが速くなるため、難易度の調整や劇イベントの待ち時間調整が必要になる場合があります。

リリース内容

"これまで" や "従来" とありますが、 これらは WWA Wing 3.1.x 以前を指しています。

新機能追加

  • ゲームパッドが使用できるようになりました。
    • USB接続またはBluetooth接続のゲームパッドをお持ちであれば、接続してみてください。すると・・・?
  • サウンド 20.mp3 を完全版に追加しました。
    • 3.02 以前の 16.au そのままになります。昔遊んでいた人には懐かしい? そうでなくても新鮮に感じるかも?
  • material.gif を完全版に追加しました。
    • WWA イメージ画像を制作する際にお役立てください!

機能改善

  • サウンドの鳴り方が変わります
    • 従来は裏で audio 要素を配置して再生する特殊な方法でサウンドを再生していました。このため、 iOS(iPhone, iPad) や Android は、サウンドが鳴らない場合がありました。
    • 今回からは、ブラウザAPI(Web Audio API) を利用して再生する形に変更しました。iOSAndroid でもサウンドが再生されるようになります *1
    • なお、 Internet Explorer では従来と同じく裏で audio 要素を配置して再生する方法で動作します*2
  • audio.min.js が不要になります
    • サウンドの鳴り方が変わったことにより、 これまで設置をお願いしていた audio.min.js が含まれなくなります
  • スマートフォンでプレイすると Yes/No ボタンが拡大されます
  • WWA Wing をプレイするHTMLファイルをそのまま Firefox で開いても、警告メッセージが表示されないようになります
    • 特にテストプレイを行う場合は Firefox のご利用をおすすめします。他のブラウザをご利用の方は wwa-server を併せてご利用いただくか、 PLiCy に一旦投稿していただく形となります。
    • 2019年10月28日追記: Firefox のアップデートに伴う仕様変更により、HTMLファイルをそのまま開くと WWA Wing が起動しなくなりました。これからは wwa-server をご利用ください。

f:id:aokashi:20190602170519p:plain
audio ディレクトリのファイルの一覧。 audio.min.js は不要になります!

仕様変更

  • ゲームスピードが変わります
    • これまでは、 Java版の WWA との互換性を確保する目的で、 50FPS で動作していました。
    • これが、 60FPS になります。ゲームスピードが 1.2 倍になるということです。
    • このため、 劇イベントで待ち時間をサウンドの長さに揃えている場合は、動作出来ない場合があります。 3.1.x のままに留めるか、待ち時間の調整をお願いします。
  • GoTo WWA ボタンが Battle Report ボタンに変わります
    • なお、 下図のように、 WWA Wing をプレイする HTML ファイルを加工することで、 GoTo WWA に戻すことができます。
    • 遠くないうちに仮想パッドの実装も予定しています。
  • 完全版の wwamap.dat が少し変化しています。
    • どこが変わったかは載せませんが、比較してみては・・・?
<div id="wwa-wrapper" class="wwa-size-box"
  data-wwa-mapdata="caves01.dat"
  data-wwa-loader="wwaload.js"
  data-wwa-urlgate-enable="true"
  data-wwa-title-img="cover.gif"
  data-wwa-use-go-to-wwa="true"> <!--←ここを加えると GoTo WWA に戻せます。 ">" 記号の移動も忘れずに。-->
</div>

仕様変更 (内部)

WWAを遊ぶ側、作る側にはあまりメリットを受けないですが、念の為記載しておきます。

  • $parts マクロの実行速度が最適化されます
  • 描画が全体的に速くなります

不具合修正

  • サウンドが見つからない場合、 WWA Wing のマップデータ読み込みが止まる不具合を修正しました
    • なお、 F12 キーの コンソール で読み込めないサウンド番号が表示されるため、もし表示された場合は 極力修正するようにしてください

f:id:aokashi:20190602171500p:plain
サウンドが見つからない場合は、このように表示されます。

リリースの目的

WWA Wing 3.1.x 以前は、 Java版の WWA との互換性を確保することが目的だったのですが、この互換性の確保に必要な要素と今のブラウザAPIで持っている要素とでは相性が悪く、今のブラウザAPIと揃えなくてはならなくなりました。

その間に、 PLiCy は PLiCy で利用されている WWA Wing の改良を進めていて、今のブラウザAPIと揃えた実装を進めていました。

しかし、 WWA Wing 3.1.x 以前と PLiCy とでは、実装の差異が災いとなり、 "手元の WWA はテストプレイでは動いたのに、 PLiCy に投稿したら動かなくなった" といったトラブルが発生する可能性があります。

このリスクを減らしたくて、 WWA Wing 3.2.0 をリリースすることとなりました。

また、時代に合わせる形で新機能の追加が必要になるため、追加に合わせた下準備を行うという目的もあります。

このような事情もあって、 これからの WWA Wing のリリースでは Java 版の WWA との互換性が確保できなくなります。 Java版の WWA では動作するけど、 WWA Wing 3.2.x では動作しない といったケースが発生しますが、発生条件によっては解決出来ない場合があります。そのため、 Java版の WWA の作品を Web サイトに設置する場合は、 WWA Wing 3.1.9 をご利用ください

作成ツールについて

WWA Wing に同梱されている作成ツールについては、引き続き キャラバンサークル で提供されている作成ツールと同じになります。

WWA Wing Team が改良を施した作成ツールではありません。現在は、代替になる作成ツールが開発できないか、方法を模索中です。

WWA Phoenix の提供について

f:id:aokashi:20190602180753p:plain
ゲートワールドWWA Phoenix で実行した画面。

WWA Wing 3.2.0 以降、 WWA Phoenix の提供はありません。 ただし、 WWA Phoenix は引き続きご利用になれます。

WWA Phoenix は元々、 Java 版の WWA 作品を WWA Wing で動作することを目的として開発されましたが、上記の事情で Java版の WWA と挙動を揃えるという使命を終えたため、更新する必要が無くなったためです。

致命的な不具合があれば修正するつもりですが、期待しすぎないようにしてください。

既知の不具合

開発について

WWA Wing 3.2.x 以降からは、今の時代に併せて機能追加を進めていくつもりです。

開発に興味がある方は WWA Wing のサイト の Discord のリンクからどうぞ! (WWA FanSquare の Discord のリンクからでも同じ Discord サーバーにアクセスできます。)

wwawing.com

*1:ただし、マナーモードの設定によって再生出来ない場合があります。

*2:開発者の身としては Internet Explorer はサポートしたくなかったんですが・・・!

WWA Message Loader を作ってました

WWAのマップデータから各パーツのメッセージを読むこむだけのWWA Loaderを作りました。

なんで作ったのか

このWWA MessageLoaderの開発がはじめったのは去年の10月中旬で、 WWA COLLECTION の配信に向けて不適切なメッセージが無いか確認する必要がありました。

WWAマップ作成ツールには、メッセージの検索機能を持っていません。

ですので、WWAマップデータのメッセージを出力されたプログラムが開発されたのです。

作り方

まず、WWAのマップデータはWWA Loaderが読み込むと、連想配列 WWAデータ が展開されます。その中の「message」のキーには、配列を持っているのです。

そのメッセージを取って出すだけです。👌

wwaData.wwaData['message'].forEach((text, number) => {
  if (text === '') {
    return;
  }
  // number で番号が表示されるはず。
  let textLines = text.split('\n');
  textLines.forEach((textLine) => {
    // textLine で各行出力されるはず。
  });
}

パーツ番号の表示

しかし、そのメッセージがどのパーツのメッセージなのか分かりません。

WWAデータには、先程説明した「message」以外にも、「objectAttribute」と「mapAttribute」をキーとした配列があるのです。前者は物体パーツの属性、後者は背景パーツの属性です。「属性」と書いてますが、 メッセージ以外すべての値が各パーツごとに格納されています

興味のある方は、下の記事を見ると分かると思います。

github.com

つまり、WWAデータは、メッセージとメッセージ以外でパーツのデータを分けているんですね。

メッセージ以外にあたるパーツの属性からメッセージへ辿るには、各パーツ属性にある数値から message 配列の中を探します。👉

f:id:aokashi:20190224182907p:plain

そのまま上図の通りなんですが、パーツ属性の各パーツの6番目、プログラム内だと0から始まるので5番目に message 配列内の場所が記載されています。上図だと「10」なので、 message 配列のインデックス10にパーツのメッセージが含まれているのです。

ちなみに、WWAマップ作成ツールの仕様上、 どのパーツにも参照されないメッセージ もありますのでご注意ください。パーツを削除したり、移動したりすると発生します。

Vue.js によるコンポーネント

機能は整ったこととして、メッセージ一覧を表示する方法なら、Vue.js とかのビューフレームワークで構築したら、いい感じ*1のプログラムになるんじゃないか?と思い、学習を兼ねて Vue.js のコンポーネント機能を利用して作り直してみました*2

のはずが、上手く進まず、去年10月の開発から今までこれが原因で放置していました。

(ここから先は、コンポーネントの仕組みを理解していることを前提に話します。)

コンポーネントの仕組みについて

f:id:aokashi:20190228232452p:plain

今回の WWA MessageLoader は上記のパーツ番号の表示でどう設計しようか長時間悩んでいました。

とりあえず、上図のように親コンポーネントWWAパーツ一覧、子コンポーネントWWAパーツとしましょうか。

当時の設計では、 WWAパーツ一覧はWWAのデータを渡すだけで、WWAパーツはパーツ情報の表示と必要に応じてデータの取得を行う と考えていました。WWAパーツでは「パーツ情報の表示」なので、下図のようにWWAパーツが親からパーツ番号やパーツ種類を参照できないか実装していましたが、全然上手く行かず・・・。😇

f:id:aokashi:20190224203804p:plain
当時考えていたコンポーネントのデータの渡し方。今これ書いてて恥ずかしいな。

後に、コンポーネントは親子関係を持つことが出来るけど、データは親コンポーネントから子コンポーネントに一方通行しか渡せない。逆方向の場合は、イベントを利用する必要がある。 ということが分かりました。イベントを利用してみるも、こちらも上手く渡せず・・・。🤔

設計がいけなかった

去年11月上旬で放置した後、今年2月に大学から Vue.js 入門を貸出して再び学習しました。📖

gihyo.jp

最近のWebアプリケーションは、サーバーはJSONとかで返すAPIスタイルで、表示をすべてクライアントサイドで済むのか、だったりと今の事情を理解しつつ、コンポーネント周りについて読みました。

「あ、そうだったんだ。子コンポーネントに渡した時点で親コンポーネントからデータは渡せないのか・・・」と。

と気付いたこともそうですが、何よりももう長時間放置していたので、当時の設計の考え方を忘れた🤷‍♂️ というのもあります。

とは言え、下図のように設計を改め、WWAパーツ一覧では各WWAパーツ毎に表示するべきデータを渡して、WWAパーツはそれを表示するだけに済ませる方法で実装できました。👏

f:id:aokashi:20190224203836p:plain

WWAパーツ一覧のソースコードでは、以下のメソッドで各WWAパーツにデータを渡します。

  computed: {
    partsObjects: function() {
      let result = {};
    
      for (let key in this.wwaData['message']) {
        if (this.wwaData['message'][key] === '') {
          continue;
        }

        // makePartsNumber はメッセージ番号を渡すとパーツ種類とパーツ番号を返してくれるメソッド。 methods の中に定義されている。
        let partsInfo = this.makePartsNumber(parseInt(key));
        // 検索条件に満たないパーツをここで continue で弾く

        // こんな感じでまるごとまとめてしまう
        result[key] = {
          number: key,
          message: partsMessage,
          partsType: partsInfo.partsType, // パーツ種類は partsType.js の中に定数定義が入っている。
          partsNumber: partsInfo.number
        };
      }
      return result;
    }
  },

一応教訓としては、 コンポーネント間で受け渡しを行う回数を少なくする ことが大事だと分かりました。

最近オブジェクト指向の扱い方について考え直しているところなんですが、疎結合に作ることがオブジェクト指向とそっくりなんですね―。

検索機能の実装

上記のことがやっと分かり、検索機能も実装しました。ここは イベントの呼び出し を利用して、子である検索ボックスコンポーネントから親であるWWAパーツ一覧コンポーネントへ渡す形としました。

この時点でもエラーは起きましたが、タイプミスだったり、カンマの付け忘れだったり、v-on ディレクティブに付ける要素を間違えたりしただけです。

f:id:aokashi:20190228233102p:plain

検索ボックスのソースコードでは、以下のメソッドでイベントが呼び出されます。

  methods: {
    searchEvent: function() {
      this.$emit('search', { // $emit でイベントを親コンポーネントに呼び出す。ここなら 'search' イベント。
        query: this.query,
        type: this.type,
        onlyPartsMessage: this.onlyPartsMessage
      });
    }
  }

検索ボックスコンポーネントの親にあたるWWAパーツコンポーネントには、 v-on ディレクティブでメソッドが呼び出せます。

  template: `
    <div class="parts-list">
      <search-box v-on:search="setSearch"></search-box>
      <!-- WWAパーツ一覧のコンポーネントの部分 (長いので書かない) -->
    </div>
  `

今の所、検索で渡すデータが「キーワード」「タイプ」「パーツから参照されてないメッセージを除く」の3つの値の配列を毎回キーを書きながら渡していて、冗長になっていますので、そこあたりをきれいにまとめたいなあ。

将来はどうしよう?

当サイトの素材一覧 を、Vue.js で作り直して、素材を探しやすくしたいなあと思います。

恐らく、素材一覧ページと素材情報ページが必要になるので、ルーター機能を学ばないとなあ。

リポジトリ

リポジトリは以下になります。あまり期待しないでください。

github.com

*1:語彙力不足です。すみません。

*2:既存の処理は持ってきているので、作り直しとは言い難いかも?