2021年2月第4週レポート
インプット
📝 今更だけどVue2.0のプロジェクトを作る
これまでWebフロントを作るときには立ち上げまでの容易さからNuxt.jsを使ってきました。これからもその方針はあまり変える気はないのですが、とはいえNuxt.jsに頼らず、Vueだけでフロントエンドを作れるかと言われるとちょっと怪しい気がします。
ちょうど仕事の山も超え、スキルの棚卸しができそうな余裕が出てきたので、今度技術検証用として作る予定のあるフロントエンドアプリはNuxt.jsを使わずVueだけで作ってみることにしました。Nuxt.jsを使わない理由としては、前述の通りVueについてのスキルの棚卸し・再確認・補強といったところです。Nuxt.jsがいろいろよろしくやってくれるとはいえ、その下で動いているのはVueとその他プラグインによるものなので、下周りの動きを知っていて損はないと考えました。Reactを使ってみる、という道もあったのですが、Vueのスキルが中途半端な状態でスイッチするのは結局すべてにおいて浅い知識になりそうなので却下しました。
また、TypeScriptを使わないという選択肢は自分にはないので、開発環境を作る上で参考となりそうなものがないかと探したところ、以下の記事がマッチしました。
Vue.js + Express + Typescript を同一リポジトリで開発する方法 - OPTiM TECH BLOG
バックエンドもいつも使っているもの以外から選択しようかと思ったのですが、変更部分を増やしすぎると肝心の検証の進捗が影響出そうなので今回はおなじみExpress.jsでいくことにしました。
📝 npm-run-allの使い方を調べた
上記の開発環境を作る上でフロントエンド、バックエンドのコード変更をそれぞれ監視したりデバッグ用・本番用の立ち上げスクリプトなど、npmスクリプトの数が増えてきたので複数のnpmスクリプトをコントロールできるnpm-run-allを導入しました。
使い方は以下を参考にしました。
npm run のスクリプトを連続実行・並列実行する (npm-run-all) | まくまくNode.jsノート (maku77.github.io)
npm-s
がSequentialなので逐次実行、npm-p
がParallelなので並列実行と覚えておけば簡単ですね。
📝 UIデザインとフロントエンド開発
こちらを読んだ感想
共感できたポイントとして
- インタフェースは人間に一番近いところにあって、3つの主要な要素がある
- HTMLは情報
- CSSは表現
- JSはインタラクション
- フロントエンド開発力とUIデザインは両輪の関係で、どちらかが乏しくても成り立たない
情報、表現、インタラクションという3つの要素はいろいろなところで似通っているなあと感じていて、例えばオブジェクト指向UIでも - オブジェクト - ビュー - インタラクション を主要な要素と捉えていたりする。こういったユーザが触れるインタフェースの部分って概念が定説化されつつあるんですかね。UXデザインの話の5段階モデルでも似たようなレイヤーがあるけど。
それから「Web API」というのが台頭してきた結果、APIをインタフェースとしてバックエンドとフロントエンドがどんどん疎結合になりつつあるのもここ数年の趨勢なのかなと。疎結合化によってそれぞれの責任範囲が明瞭になったので、フロントエンドはよりユーザの手触りに注力できるようになった(そういったコードが書きやすくなってきた)。
アウトプット
🛠️ RustでNESエミュレータを作っている
Congratulation! Congratulation! #NES pic.twitter.com/4lJtAm0AiQ
— d_yama (@dy_karous) February 27, 2021
ついに表面のテストをすべてパスさせました!
今週のハマりどころはJMP命令のIndirectアドレッシングモードでした。6502のIndirectアドレッシングモードは間接アドレス参照の一種で、オペコードの2バイト目を下位8bit、3バイト目を上位8bitとしたアドレスに入っている値を実効アドレスの下位8bit、その次のアドレスに入っている値を実効アドレスの上位8bitとするものです。たとえば、2バイト目が0x10、3バイト目が0x20の場合は、実効アドレスの下位8bitは$2010で上位8bitは$2011に入っている、ということになります。
どこにハマったかというと、このオペコードの2バイト目が0xFFであった場合、当初は実効アドレスの下位8bitは$20FF、上位8bitは$2100になると思っていたのですが、どうやら上位8bitのアドレス値を計算するときにインクリメントするのはオペコードの2バイト目だけでキャリーは考慮しないようです。先程の例だと上位8bitは$2100ではなく、$2000に入っているということになります。
この仕様を把握していなかったため、コードの変なところにジャンプしてしまい、テストROMがうまく動作しなかったのでした。
表面のテストの次は裏面のテストです。裏面はUnofficial Opecodeといわれる、6502の仕様書には記載されていない命令群とのことです。仕様書には記載されていないとはいえファミコンソフトでは結構使われていたそうで、インターネットもないような時代の開発者はどうやって情報を得ていたのか気になりますね。
ふむ、あと4つ。 #NES pic.twitter.com/4jX2Uerq7l
— d_yama (@dy_karous) February 27, 2021
「でも、絶対に一発完動なんてしないんですよね」
その他
🎮 ひたすら工場作っている
まだ作っている