Wiz テックブログ

Wizは、最新のIoTやICTサービスをお客様に届ける「ITの総合商社」です。

【TypeScript】 HTMLElementに関する型推論

こんにちは。フロントエンド の仲本です。
今回はHTML要素に関する型推論について、一般的な型推論からデファルトでは型推論できない場合の対応方法までを紹介いたします。

要素に対する型推論

まずはHTML要素の一般的な型推論を紹介いたします。

<!DOCTYPE html>
<html lang='ja'>

  <head>
    <meta charset='utf-8'>
    <title>sample htmlelement typescript</title>
  </head>

  <body>
    <div class='example'>divタグです</div>
    <a id='exampleId' href='https://example'>リンクです</a>
    <p>pタグです</p>
    <input type='text' placeholder='textinput'/>
    <script src='bundle.js'></script>
  </body>

</html>

こちらのHTML内の要素を、querySelectorメソッドを使用して取得します。

const a = document.querySelector('a') 
// => HTMLAnchorElement | null 型

const div = document.querySelector('div')
// => HTMLDivElement | null 型

const input = document.querySelector('input')
// => HTMLInputElement | null型

またquerySelectorAllメソッド使用時の型推論も記述いたします。

const a = document.querySelectorAll('a') 
// => NodeListOf<HTMLAnchorElement>型

上記のような結果になります。

上記のコードでは要素名のみを指定していますが、 要素名直後にクラスセレクタやIDセレクタを付与すると型推論がうまく効かなくなります。

const div = document.querySelector('div.example')
// => Element | null 型

const a = document.querySelector('a#exampleId')
// => Element | null 型

上記の問題点を解決し型推論可能にしたライブラリが存在しますのでそちらも紹介いたします。

typed-query-selector

typed-query-selectorはTemplate Literal Typeを使ってdocument.querySelectorの引数から返す要素の型を推論するライブラリとなります。
導入から使用例までをいくつか紹介いたします。

導入

導入方法としてまずターミナルで以下を実行します。

$ npm i typed-query-selector

これで完了です。

使用例

次に先ほどと同じコードを使用いたします。

document.querySelector(要素名クラス or IDセレクタ)

import 'typed-query-selector'
// typed-query-selectorをimport

const div = document.querySelector('div.example')
// => HTMLDivElement | null 型

const a = document.querySelector('a#exampleId')
// => HTMLInputElement | null 型

document.querySelector(要素 > 要素)

import 'typed-query-selector'

const div = document.querySelector('body > div.example')
// => HTMLDivElement | null 型

const a = document.querySelector('body > a#exampleId')
// => HTMLInputElement | null 型

このようにtyped-query-selectorを使用すると、クラスセレクタやIDセレクタを付与した状態でも適切な型推論ができるようになりました。

他にも要素取得に関する色々なパターンでの型推論があります。
さらに詳しく学ばれる方は、typed-query-selectorのreadmeを確認していただくか、実際に導入してみて試してみるとより深く学べると思います。

最後に

以上がHTML要素に対する型推論の内容でした。

Wizではエンジニアを募集しています!!

興味のある方は是非覗いてみてください!↓

careers.012grp.co.jp

社内LT会はじめました。

wizでは現在ブランディング向上施策に力を入れています。 当ブログの開設も施策のひとつです。

さらに施策の一貫としてLT会を開催することになりました。

その狙いと、早速開催した第1回LT会の様子についてご紹介します。 LT会レポはフロントエンドエンジニアの仲本さんにまとめて頂きました!

LT会の狙い

社内でプレゼンを行うことのメリット

プレゼン会を定期的に行うことで以下の効果を狙っています。

  • 開発に関する知見の共有
  • コミュニケーションの活性化
  • 技術トレンドに敏感に

そしてこの取り組みを発信することで、wizのエンジニアの雰囲気を知ってもらう・ブランディング施策の効果があると考えています。

「LT会」であることのメリット

LT会は (5分以内のプレゼン + 質疑応答10分) × 4人 という形式で行います。

短い制限時間と決まった形式で行うことで発表者側の準備期間の短縮、視聴側のスケジュールの調整しやすさを狙っています。 テックブログ の運営同様に負担がかかりにくい死になない運営を目指しています!

第1回LT会レポ

こんにちは。フロントエンドの 仲本勇斗です。

 

12/4に第1回LT会をバックエンド、フロントエンドで行いました。

この記事ではそのLT会で発表した内容をご紹介していきます。

 

今回のLT会の内容は

発表者: 4名

制限時間: 発表時間 5分 + 質問時間 10分

テーマ: 自由

で行いました。

 

それでは1つずつ発表を紹介していきます。

 

LT会開催のすすめ

LT会開催のすすめ  

トップバッターの方には、第1回LT会をやるにあたって

なぜ開催するのかであったり、

どうしてLT会を行うのかなどを発表していただきました。

 

質問コーナーにて

募集人数が集まらなかった場合はどうするかなどの質問をいただきました。

答えとしては

LT会がそんなに必要性のないものとして判断され、

LT会を無くすという答えでした。

 

今回好評だったのでなくならないように運営を頑張っていきたいですね。

 

 

技術発信サイトで使われている技術について

 

二人目の方には技術発信サイトで使われている技術について発表していただきました。

 

Zennさん、noteさんなどで使用されている技術を紹介していただきました。

Wizでもオリジナルテックブログを作成する際には

技術選定は後悔しないようにしていきたいです。

 

2ヶ月サイネージ開発やってみた。

3人目(私です。)は2ヶ月サイネージ開発を行って、

その中で良かった点、改善すべき点について話してみました。

 

 

新規開発中に学んだこと(Token認証)

4人目の方には新規開発中で学んだToken認証について話していただきました。

 

今回は Laravel8のLaravel Sanctumを使用して実装したとのことでした。

 Laravel8の使いやすさなどのLTも次回以降どこかで発表していただきたいですね。

 

おわり  

初回はこのような内容でした。

 

この記事ではざっくりとした内容しか紹介できませんでしたが、

LT会の内容をもっと社外へ公開できるよう目指していきたいです。

Wizではエンジニアを募集中です。

興味のある方は是非覗いてみてください!↓

careers.012grp.co.jp

 

テックブログ はじめました。

初めまして、フロントエンドエンジニアの高野です。

 

Wizのエンジニアではてなブログでテックブログ を発足しました!
今回は第一回目の投稿なので、やはり第一回目らしく、
なぜテックブログ をはじめるに至ったかの経緯をご紹介します。

 

【今までのwizの情報発信】

wizのエンジニアは今までQiitaのOrganizationを利用しての情報発信を行ってきました。

qiita.com

私自身も下記のアカウントで発信を行っています。(コメント大歓迎です!)

qiita.com

 

執筆時点(2020年11月12日)では261記事投稿し、
6809LGTMを頂いており、社内の雰囲気としても、以前より盛んにアウトプットする
ようになったという感触があります。

 

しかし、同時にいくつかの課題も出てきました。

・qiitaは学生や新人の層が厚く、コアな技術や突っ込んだ話だと注目されにくい
・organizationがそこまで目立たず、また規約の面もあり、会社のアピールがしづらい、出来ていない

qiita.com

 

会社単位での技術発信の目的には、発信者自らの発信能力と技術力の向上、
そして会社のブランディグ向上の2つの柱があると思いますが、
その1つであるブランディグ向上があまり出来ていないという課題です。
上記の問題を解決するため、テックブログ を発足しよう!という流れになりました。

 

テックブログ であれば会社単位での取り組みなど、純粋な技術以外のテーマについても
取り上げることができ、運用している各メディアについての深掘りした話も取り上げやすいです。また、そういったより会社寄りの情報は、転職や就職を希望される方の良い判断材料となり得ると思います。

 

【どうしてはてなブログでやるのか】

テックブログ と一口にいっても数多の選択肢があります。
その中でもはてなブログを選択したのは以下の点で他の選択肢より優れていたからです。

テックブログ としての実績がある。(有名企業でテックブログ を選択しているケースが多い)

クックパットさんやpaizaさん、pixivさんなど、有名企業が実際にはてなブログでテクブログ を運営しています。どんなことでも、実際に実績があるというのは心強いものです。

blog.hatenablog.com

料金が安い

法人の技術ブログ限定ではありますが、2年契約で月600円と
かなり割安です。

hatenablog.com

 制作コストがかからない/辞めやすい

これは自社開発による自由度とトレードオフになる部分ですが、手軽にはじめることができるので初のテックブログ 運用という心理コストも下がりますし、今後自社開発でやっていこう!となった場合には、実際にはてなブログを運用して出た改善点や必要機能を洗い出し易くなります。

はてなブログは記事が簡易にエクスポート(MT形式)できる点も有り難いです。

 

【テックブログの難しさ】

そしてめでたく申請も通り、はてなブログを発足できたものの、
これからが本当の戦いになるだろう、と予感しています。
つまり、次にぶつかるのがテックブログ の運営の難しさの壁です。

note.com

テックブログ は続かない、という呪いの言葉をよく耳にします。リソース不足やモチベーション管理・評価体制など、テックブログ を運用するには困難な壁がいくつもあるように思えます。

しかし、せっかく発足したテックブログ を途端に枯らしてしまうようなことは避けたいので、上記のような負のスパイラルに陥らない体制をしっかり整えるというのが基礎として重要です。

現時点では体制についてチームで構成を練っている段階ですが、無理のない/そして死なないテックブログ を目指していきたいです。

 

最後に...

Wizではエンジニアを募集中です。
興味のある方は是非覗いてみてください!↓

https://careers.012grp.co.jp/engineer