プログラマー VTuber 衣亥栖ティオのちょっとした話

Youtubeに投稿したプログラミング学習動画の補足説明をするためのブログです。

プログラマーへの道 #44 の補足説明

こんにちは、プログラマーVTuberの衣亥栖ティオです。
今回は以下の動画の補足説明をします。 動画内で実装したソースコードも載せています。


今回の動画で実装したソースコード

以下が今回実装したソースコードです。

関数を利用したリファクタリング

動画中ではリファクタリングに関数を利用しました。 関数は重複した処理をまとめることもできますし、"getIdTitleInMemoList" のように何をしているのか分かりやすい名前を付けることもできます。 とても便利な機能ですね。 今まであまり使ってきませんでしたが、今後の動画では関数をたくさん使うので、今のうちに復習しておきましょう。

function getIdTitleInMemoList(memoId) {
  return document.getElementById("id-title-in-list-" + memoId)
}

リファクタリング中の修正ミスについて

今回の動画ではリファクタリングミスによってメモ帳アプリが動かなくなってしまいました。 これは "id-title-in-list-" という文字列を検索して、何も考えずに関数に置き換えたからです。 ちゃんとリファクタリング候補の実装を理解してからリファクタリングしないとダメですね・・・。

プログラマーへの道 #43 の補足説明

こんにちは、プログラマーVTuberの衣亥栖ティオです。
今回は以下の動画の補足説明をします。 動画内で実装したソースコードも載せています。


今回の動画で実装したソースコード

以下が今回実装したソースコードです。

innerText と value

今回の動画で取り上げた不具合の原因は "innerText" を利用すべきところで "value" を利用してしまったというものです。

innerText はHTMLのタグに囲まれている文字列に対するプロパティです。 今回の修正対象であるタイトルはtdタグで囲まれているので、innterText を利用しないと変更できません。

HTMLElement.innerText - Web API | MDN

一方で value はinputタグのvalue属性に対するプロパティです。 テキストボックスなどに値をセットする場合は value を利用します。

動作確認は重要

今回のように実装者が気づかないうちに不具合を埋め込んでしまうことは開発においてよくあることです。 動作確認はとても重要なので、実装が終わったらちゃんと確認しましょう。 私が言っても説得力ないかもしれないですけど・・・。

プログラマーへの道 #42 の補足説明

こんにちは、プログラマーVTuberの衣亥栖ティオです。
今回は以下の動画の補足説明をします。 動画内で実装したソースコードも載せています。


今回の動画で実装したソースコード

以下が今回実装したソースコードです。

リファクタリングについて

リファクタリングについての説明は以下です。

リファクタリング (プログラミング) - Wikipedia

リファクタリングはそれ自体が開発において重要な工程です。 リファクタリングを扱っている専用の書籍もあるくらいです。 特に "マーチン・ファウラー" というエンジニアが書いている "リファクタリング" という書籍はとても有名で、プログラマーであれば一度は読んでおきたい書籍だと思います。

www.amazon.co.jp

プログラミングにおける重複の排除

プログラミングには "DRY" という原則があります。 DRY は "Don't repeat yourself" の略であり、重複を排除するという思想のことです。

Don't repeat yourself - Wikipedia

動画中では getElementById() の重複を排除しました。 重複を許してしまうと、HTMLの id が変更されたときにすべての getElementById() に指定している id を変更しなければいけないからです。 変更が漏れるとプログラマーの意図しない挙動になってしまうので、こういった人為的なミスを避けたり、修正にかかる時間を短縮するためにも重複を排除することはプログラミングにおいて一般的な手法となっています。ただ、"重複" の度合いとその時の状況によっては "一旦重複を許容する" という判断をすることもあるので、常に重複を排除することが正しいとは限らないのが難しいところです。

プログラマーへの道 #41 の補足説明

こんにちは、プログラマーVTuberの衣亥栖ティオです。
今回は以下の動画の補足説明をします。 動画内で実装したソースコードも載せています。


今回の動画で実装したソースコード

以下が今回実装したソースコードです。

RGBについて

RGBは色を数値で表す方法の1つです。

RGB - Wikipedia

Red, Green, Blue の順に数値を指定することで任意の色を表現することができます。 よく使われる仕組みなので覚えておくとよいと思います。

CSSの background-color について

CSSの background-color は画面の背景色を指定するCSS属性です。

background-color - CSS: カスケーディングスタイルシート | MDN

CSSの color について

CSSの color は画面の文字色を指定するCSS属性です。

color - CSS: カスケーディングスタイルシート | MDN

Bootstrap の Button について

Bootstrap の Button の説明は以下です。

Buttons · Bootstrap v5.1

今回は Button の色を指定するだけでしたが、その他にもオプションがあるので確認するとデザインの幅が広がると思います。

メモ帳アプリの開発が終わりました

今回の動画でメモ帳アプリの開発が終わりました。 今後はメモ帳アプリを使ってJavaScript の機能や周辺ツールなどを紹介していく予定です。

メモ帳アプリの開発を完了させるまでに作った動画は41本で、41本の動画の合計再生時間は大体13時間ほどです。 "HTMLやJavaScriptを知らない状態から13時間でメモ帳アプリを作れるようになる" と考えると「意外とプログラミングって簡単だな」と感じるかもしれませんね。

プログラマーへの道 #40 の補足説明

こんにちは、プログラマーVTuberの衣亥栖ティオです。
今回は以下の動画の補足説明をします。 動画内で実装したソースコードも載せています。


今回の動画で実装したソースコード

以下が今回実装したソースコードです。

Bootstrap の Examples について

動画中では Bootstrap の Examples を確認してデザインを整えました。

Examples · Bootstrap v5.1

Examples は Bootstrap でどのようなデザインができるのかを確認するための実装例ではありますが、 私のようにデザインのスキルに乏しい場合は、デザインそのものを参考にするためにも利用できます。 どういうデザインにすればいいのか悩む場合は Examples を確認してみるといいと思います。

CSSの Padding について

動画中では Padding を利用して左端に寄っていたHTMLの要素をいい感じに配置しました。 Padding は余白を作るためのCSS属性です。

padding - CSS: カスケーディングスタイルシート | MDN

"padding-top", "padding-bottom" のように余白を作る方向(上下左右)を指定することができますが、 全方向に同じ余白を作る場合は "padding" だけを指定します。

プログラマーへの道 #39 の補足説明

こんにちは、プログラマーVTuberの衣亥栖ティオです。
今回は以下の動画の補足説明をします。 動画内で実装したソースコードも載せています。


今回の動画で実装したソースコード

以下が今回実装したソースコードです。

JavaScriptで時間を扱う

JavaScript には時間を扱うためのオブジェクトとして Date が存在します。

Date - JavaScript | MDN

以下のあるようなメソッドを利用することで時刻を取得したりすることができます。

Date.prototype.getDate() - JavaScript | MDN

しかし、Date は特定のフォーマットで時刻を取得することができません。 例えば、動画中でもあったように分は "05" のような表現はできず、"5" になってしまいます。 動画中でやったように自分でフォーマットを整えることもできますが、少し面倒に感じてしまいます。

通常は以下にあるような "ライブラリ" という仕組みを利用するのですが、 ライブラリを説明すると動画が長くなってしまうので、動画中では一旦実装を諦めました。

The best JavaScript date libraries in 2021 - Skypack Blog

動画中でも言及していますが、一通り実装が完了したあとにライブラリを導入して日付周りの実装を終わらせようと思っています。

プログラマーへの道 #38 の補足説明

こんにちは、プログラマーVTuberの衣亥栖ティオです。
今回は以下の動画の補足説明をします。 動画内で実装したソースコードも載せています。


今回の動画で実装したソースコード

以下が今回実装したソースコードです。

編集用のモーダルと登録用のモーダルを分離したことについて

今回の動画では編集用のモーダルに対してタイトルとボディのバリデーションを実装しています。 登録用のモーダルとほぼ同じ実装なので、共通化できる部分ではありますが、一旦シンプルに動画を進めるためにコピペしています。 実装が一通り終わったら共通化する予定です。

登録済みのタイトルを登録できない仕様について

今回実装しているメモアプリには "登録済みのタイトルは登録できない" という仕様があります。 メモを登録するときは "登録済みのメモのタイトルをすべて取得して、それらと登録するタイトルを比較する" というシンプルなロジックで対応できましたが、 メモの編集ではそうもいきません。

例えば、以下のようにタイトルが3つあり、"aaa" のメモを編集する場合は "aaaと同じタイトルにしても問題ないが、bbb, ccc と同じタイトルにするのはダメ" というロジックになります。 言い換えると、編集対象のメモのタイトルのみ例外で利用できるという感じでしょうか。

1. aaa
2. bbb
3. ccc

次回はこの点を考慮してバリデーションの実装を進めたいと思います。