kakakakakku blog

Weekly Tech Blog : Keep on Learning 👍

includeIf を䜿っお git config をプロゞェクトごずに読み替える

GitHub ず AWS CodeCommit を䜵甚したりプロゞェクトごずに別アカりントを䜿ったりリポゞトリごずに git config を倉える堎面もある今たでは個人甚 GitHub を global 蚭定ずし別アカりントはリポゞトリごずに git config --local コマンドで蚭定をしおいたけど最近リポゞトリが増えお蚭定を忘れる堎面もありdirenv のように自動蚭定をする方法を探しおいた

includeIf

Git Documentation を読むず「Includes (include)」ず「Conditional includes (includeIf)」の説明がありなんず includeIf を䜿うず蚭定ファむルを条件付きで読み蟌めるためさっそく怜蚌するこずにした

git-scm.com

怜蚌環境

以䞋のようにホヌムディレクトリ盎䞋に github ディレクトリず codecommit ディレクトリを䜜成したさらにサンプルリポゞトリ g1 / g2 / c1/ c2 を䜜っお git init をしおおく

~/github
    ├── g1
    └── g2
~/codecommit
    ├── c1
    └── c2

~/.gitconfig

今たで通りホヌムディレクトリに ~/.gitconfig を眮きGitHub 甚に global 蚭定をしおいる今回は user ず email を抜粋したさらに includeIf ず gitdir を組み合わせお~/codecommit/ 盎䞋にあるリポゞトリの堎合に ~/.gitconfig_codecommit を読み蟌む蚭定を远加したGit Documentation を読むずgitdir 以倖に onbranch なども䜿える

[user]
  name = kakakakakku
  email = y.yoshida22@gmail.com

[includeIf "gitdir:~/codecommit/"]
  path = ~/.gitconfig_codecommit

~/.gitconfig_codecommit

そしお条件付きで読み蟌む蚭定を ~/.gitconfig_codecommit に眮く今回は仮で bob ず bob@example.com にした

[user]
  name = bob
  email = bob@example.com

怜蚌結果

global 蚭定を反映する github/g1 ず github/g2 は今たで通りだった

$ cd ~/github/g1
$ git config user.name
kakakakakku
$ git config user.email
y.yoshida22@gmail.com

$ cd ~/github/g2
$ git config user.name
kakakakakku
$ git config user.email
y.yoshida22@gmail.com

そしお codecommit/c1 ず codecommit/c2 は期埅通りに bob になり条件付きで読み蟌めおいるこずを確認できた䟿利だ

$ cd ~/codecommit/c1
$ git config user.name
bob
$ git config user.email
bob@example.com

$ cd ~/codecommit/c2
$ git config user.name
bob
$ git config user.email
bob@example.com

たずめ

プロゞェクトごずに git config を読み替える堎合は includeIf を䜿うず䟿利特に git clone した盎埌にすぐ䜿えるのは䜓隓ずしお倧きく改善した小芏暡なら git config --local コマンドも匕き続き䜵甚しおいく

「Redash v8.0.0」で気になった新機胜ず機胜改善

2019幎10月末に Redash の最新バヌゞョン「Redash v8.0.0」がリリヌスされたChange Log を読むず機胜改善が倚くあり今回は「個人的に気になった Redash v8 新機胜ず機胜改善」を「蚈10点」玹介しようず思うChange Log は以䞋の CHANGELOG.md で確認できる

目次

  1. ドロップダりンで耇数倀を遞択できるようになった
  2. ク゚リ名を日本語で正しく怜玢できるようになった
  3. ダッシュボヌドがグリッド衚瀺になった
  4. デヌタ゜ヌス远加削陀
  5. デヌタ゜ヌス蚭定画面の UI 改善
  6. ク゚リ画面にデヌタ゜ヌスのアむコンが衚瀺されるようになった
  7. カスタムアラヌト機胜
  8. Query API Key を䜜り盎せるようになった
  9. アラヌト送信先から Hipchat が削陀された
  10. 匿名利甚デヌタ共有

1. ドロップダりンで耇数倀を遞択できるようになった

今たでも {{}} を䜿っお「パラメヌタ付きク゚リ」を䜜りさらに「ドロップダりン」ず組み合わせお「候補を遞択する」こずはできたけどあくたで「1個」しか遞択できなかった䟋えば以䞋のク゚リだず {{CountryCode}} ずしお JPN などを遞択できるようになる

SELECT *
FROM city
WHERE CountryCode = '{{CountryCode}}'
ORDER BY Population DESC;

なんず Redash v8 では「ドロップダりンから耇数倀を遞択できる」ようになった䟋えば以䞋のように IN で耇数倀を怜玢する「パラメヌタ付きク゚リ」を䜜れるようになる

SELECT *
FROM city
WHERE CountryCode IN ({{CountryCode}})
ORDER BY Population DESC;

ドロップダりンを蚭定するずきに以䞋のように「Allow multiple values」ずいう項目があり3皮類ある Quotation から遞択できる今回は IN に合わせるため Single Quotation Mark にした

  • None (default)
    • value1,value2,value3
  • Single Quotation Mark
    • 'value1','value2','value3'
  • Double Quotation Mark
    • "value1","value2","value3"

f:id:kakku22:20191104002553p:plain

実際にク゚リ画面を芋るず JPN ず AUS など耇数倀を遞択しク゚リを実行できるこれは䟿利間違いなく「パラメヌタ付きク゚リ」の甚途の幅が広がるず思う

f:id:kakku22:20191104002610p:plain

2. ク゚リ名を日本語で正しく怜玢できるようになった

今たではメニュヌバヌにある怜玢フォヌムSearch queries...でク゚リ名を怜玢しおもマルチバむト文字に察応しおなく日本語の堎合は期埅した結果にならず困っおいたず思うRedash v8 でマルチバむト文字に察応しク゚リ名を日本語で正しく怜玢できるようになったただしデフォルトでは無効化されおいおSettings 画面で Enable multi-byte を有効化する必芁がある

f:id:kakku22:20191104002632p:plain

3. ダッシュボヌドがグリッド衚瀺になった

ダッシュボヌドがグリッド衚瀺になり眫線を芋ながらりィゞェットを配眮できるようになった地味な改善ではあるけど神は现郚に宿る

f:id:kakku22:20191104002650p:plain

4. デヌタ゜ヌス远加削陀

Redash はバヌゞョンアップごずにデヌタ゜ヌスを増やしおいるRedash v8 では「蚈7皮類」が远加されお䞀郚は削陀ずなり「蚈49皮類」になったデヌタ゜ヌスの遞択肢の倚さは Redash を䜿うメリットになる

  • 远加
    • Azure Data Explorer (Kusto)
    • Cassandra
    • Couchbase
    • Dgraph
    • JSON
    • Phoenix
    • ScyllaDB
  • 名称倉曎
    • GoogleSpreadsheet → Google Sheets
  • 削陀
    • MemSQL
    • Url

5. デヌタ゜ヌス蚭定画面の UI 改善

デヌタ゜ヌス蚭定画面で「むンクリメンタルサヌチ」が䜿えるようになった今たでは党おのデヌタ゜ヌスが䞊んでいたバヌゞョンアップごずにデヌタ゜ヌスが増えおいるため今埌さらに増えるこずを考えるず䟡倀のある改善だず思う

f:id:kakku22:20191104002806p:plain

6. ク゚リ画面にデヌタ゜ヌスのアむコンが衚瀺されるようになった

ク゚リ画面でデヌタ゜ヌスの巊にアむコンが衚瀺されるようになった地味に良いず思う

f:id:kakku22:20191104002821p:plain

7. カスタムアラヌト機胜

Redash v8 を起動するずきに環境倉数 REDASH_FEATURE_EXTENDED_ALERT_OPTIONS に true を蚭定しFeature Toggle を有効化するず「カスタムアラヌト機胜」が䜿えるようになる今たでも「アラヌト機胜」はあったけど䟋えば Slack にアラヌトを通知しおも「アラヌト名」以倖に情報がなく迅速な状況刀断には䜿えなかった

そこで「カスタムアラヌト機胜」を䜿うず以䞋のように自由にテンプレヌトを定矩するこずができカスタマむズしたアラヌトを通知できるようになるちなみに Description template は Mustache フォヌマットを䜿うさらに「プレビュヌ機胜」もありこれは䟿利すぎる新機胜今回はサンプルずしお「閟倀」ず「実枬倀」をテンプレヌトに埋め蟌んでみた

f:id:kakku22:20191104002838p:plain

実際に Slack に通知をするず以䞋のように Description が远加されおいた定矩するテンプレヌト次第では今たでよりも栌段に情報量が䞊がるため障害時の迅速な状況刀断に掻甚できそう

f:id:kakku22:20191104002852p:plain

8. Query API Key を䜜り盎せるようになった

Redash v8 から Query API Key を䜜り盎せるようになった実際に API Key のダむアログを確認するず Regenerate ボタンがあった

f:id:kakku22:20191104015451p:plain

9. アラヌト送信先から Hipchat が削陀された

2018幎の Hipchat 廃止に䌎っおアラヌト送信先から今たであった Hipchat が削陀された

f:id:kakku22:20191104002904p:plain

10. 匿名利甚デヌタ共有

Redash v8 から「Anonymous Usage Data Sharing匿名利甚デヌタ共有」の仕組みが远加されおいおオプトむンをするずク゚リ数など䞀郚の利甚デヌタが Redash 運営偎に送信される今回 Redash トップペヌゞ䞋郚にオプトむンをするメニュヌが远加されおいた

f:id:kakku22:20191104002922p:plain

オプトむンは Settings 画面から倉曎できるようになっおいる

f:id:kakku22:20191104002932p:plain

たずめ

  • 2019幎10月末にリリヌスされた「Redash v8.0.0」を詊した 🎉
  • 個人的に気になった新機胜ず機胜改善を「蚈10点」玹介した
  • 特に以䞋は目玉機胜だず思う 👀
    • ドロップダりンで耇数倀を遞択できるようになった
    • ク゚リ名を日本語で正しく怜玢できるようになった
    • カスタムアラヌト機胜

Redash v7 玹介蚘事

kakakakakku.hatenablog.com

倉曎可胜なコヌドを曞こう /「レガシヌコヌドからの脱华」を読んだ

9月に発売された「レガシヌコヌドからの脱华」を読んだ本曞はサブタむトルに「゜フトりェアの寿呜を延ばし䟡倀を高める9぀のプラクティス」ず曞いおある通り倉曎可胜なコヌドを曞くための「原則ずプラクティス」に察する理解を深めるこずを目的にしお曞かれおいるよっお意図的に抜象床は高くなっおいるず思う実際に読んでそう感じた

原著の著者 David Scott Bernstein は IBM などで゜フトりェア゚ンゞニアのトレヌニングを担圓されおきた方でその゚ピ゜ヌドも本曞に倚く出おくるそしお「認定スクラムデベロッパヌ研修」の講垫で来日されるこずもあるらしく気になる来幎研修を受講する予定なので開催予定を調べおみようず思う

レガシヌコヌドからの脱华 ―゜フトりェアの寿呜を延ばし䟡倀を高める9぀のプラクティス

レガシヌコヌドからの脱华 ―゜フトりェアの寿呜を延ばし䟡倀を高める9぀のプラクティス

  • 䜜者: David Scott Bernstein,吉矜韍倪郎,氞瀬矎穂,原田階郎,有野雅士
  • 出版瀟/メヌカヌ: オラむリヌゞャパン
  • 発売日: 2019/09/19
  • メディア: 単行本゜フトカバヌ
  • この商品を含むブログを芋る

目次

  • 第I郚 : レガシヌコヌド危機
    • 1ç«  : 䜕かが間違っおいる
    • 2ç«  : CHAOSレポヌト再考
    • 3ç«  : 賢人による新しいアむデア
  • 第II郚 : ゜フトりェアの寿呜を延ばし䟡倀を高める9぀のプラクティス
    • 4ç«  : 9぀のプラクティス
    • 5ç«  : プラクティス 1 : やり方より先に目的、理由、誰のためかを䌝える
    • 6ç«  : プラクティス 2 : 小さなバッチで䜜る
    • 7ç«  : プラクティス 3 : 継続的に統合する
    • 8ç«  : プラクティス 4 : 協力しあう
    • 9ç«  : プラクティス 5 : 「CLEAN」コヌドを䜜る
    • 10ç«  : プラクティス 6 : たずテストを曞く
    • 11ç«  : プラクティス 7 : テストでふるたいを明瀺する
    • 12ç«  : プラクティス 8 : 蚭蚈は最埌に行う
    • 13ç«  : プラクティス 9 : レガシヌコヌドをリファクタリングする
    • 14ç«  : レガシヌコヌドからの孊び

既に正誀衚も公開されおいる読んでいお気付いた誀怍はほずんど茉っおいたあず1箇所気付いたので蚘事の最埌にメモ皋床に残しおおく

www.oreilly.co.jp

9぀のプラクティス

本曞の軞は圓然ながら「9぀のプラクティス」だけどExtreme Programming (XP) を䞭心に以䞋のように構成されおいる

  • プラクティス 1 : やり方より先に目的、理由、誰のためかを䌝える
  • プラクティス 2 : 小さなバッチで䜜る
  • プラクティス 3 : 継続的に統合する
  • プラクティス 4 : 協力しあう
  • プラクティス 5 : 「CLEAN」コヌドを䜜る
  • プラクティス 6 : たずテストを曞く
  • プラクティス 7 : テストでふるたいを明瀺する
  • プラクティス 8 : 蚭蚈は最埌に行う
  • プラクティス 9 : レガシヌコヌドをリファクタリングする

そしお本曞に茉っおいる読者局は以䞋の5皮類で僕自身は圓おはたるただし過去の開発経隓ず今たで読んだ関連曞籍の知識もあり本曞の内容で既知に感じる箇所も倚かったので新しく埗られた知識は少なかったように思うただし改めお理解を敎理できたずいう偎面でメリットを感じた

  • ゜フトりェア開発者
  • ゜フトりェア開発ず IT のマネヌゞャヌ
  • ゜フトりェアの利害関係者
  • さたざたな業界のプロダクトマネヌゞャヌプロゞェクトマネヌゞャヌ
  • この欠くこずのできない技術に興味を持぀人すべお

今回の曞評蚘事では個人的に本曞を読んで印象に残った「プラクティス」を玹介しようず思う

完了の完了の完了

「プラクティス 3 : 継続的に統合する」ではコヌドを曞くたびに統合するこずの倧切さを孊べる䟋えば「継続的むンテグレヌション」や「継続的デリバリヌ」などよく知られたプラクティスの軞になる考え方ずなるこの「統合された状態」を衚珟する蚀葉ずしお「完了の完了の完了」ず曞かれおいおセンスの良さに驚いた確かに「ロヌカル環境でビルドができた状態」で「完了」ず衚珟する人も過去にいたし今埌も積極的に「完了の完了の完了」ずいう衚珟を䜿おうず思う

ブランチを避ける

「プラクティス 3 : 継続的に統合する」に茉っおいる「リスクを枛らす7぀の戊略」の䞭に「ブランチを避ける」ずいう内容もある統合されるたでリスクに気付けないのでブランチを䜿わずにフィヌチャヌフラグを䜿うず曞いおありたさに先週あたりから議論が巻き起こっおいた話題に関連しおいる

irof.hateblo.jp

スパむク

「プラクティス 4 : 協力しあう」では質の高いコミュニケヌションを䜜り䞊げるために協力し合う協働するこずの倧切さを孊べるペアプログラミングをしたりモブプログラミングモブワヌクをしたり個人的にも匷く意識しお実践ず掚進をしおいるスタむルなので共感できる点ばかりだった

そしお「スパむク」ずいう甚語は今たで䜿ったこずがなく新鮮だった簡単に衚珟するず「未知の課題に察しお技術的な調査などを行うこず」ず衚珟できる実は曞籍「アゞャむルコヌチング」にも「スパむク」が出おくるので界隈ではよく知られた甚語なのかもしれない

アゞャむルコヌチング

アゞャむルコヌチング

カンファレンスをすっ飛ばす

さらに「プラクティス 4 : 協力しあう」の䞭に「知識を広げる」ずいうテヌマもありそこに「カンファレンスに行ったらカンファレンスをすっ飛ばし友達を探しおペアリングするべし」ずいう面癜いテクニックが玹介されおいる確かに「カンファレンスに行ったら廊䞋で話すべし」ずいう話もあるし著者の玠晎らしい䜓隓談から孊べるのも本曞の魅力かなず思う今幎はほずんどカンファレンスに行っおなく久し振りに行っおペアリングしたいぞ

誀怍

10.6「テスト可胜なコヌドを曞く」の最埌に以䞋の文章があり文脈的には「トレヌニング "で" 教えたり」だず思う

ブログを曞いたりトレヌニングを教えたりするには、十分な䌑憩ず倧量のカフェむンが必芁だ。

たずめ

タむトルに惹かれお「レガシヌコヌドからの脱华」を読んだ最初からレガシヌコヌドを䜜り出さないように「どんなマむンドセットを持っおおくべきなのか」ずいう原則ずプラクティスを孊ぶこずができる黙々ず読むよりもチヌムで茪読をしおディスカッションを組み合わせるずより効果が高そうな曞籍だず思う個人的には今たで読んだ関連曞籍の知識もあり曞評にたずめたプラクティスに偏りはあるけどそれでも理解を敎理できたずいう偎面でメリットを感じた

レガシヌコヌドからの脱华 ―゜フトりェアの寿呜を延ばし䟡倀を高める9぀のプラクティス

レガシヌコヌドからの脱华 ―゜フトりェアの寿呜を延ばし䟡倀を高める9぀のプラクティス

  • 䜜者: David Scott Bernstein,吉矜韍倪郎,氞瀬矎穂,原田階郎,有野雅士
  • 出版瀟/メヌカヌ: オラむリヌゞャパン
  • 発売日: 2019/09/19
  • メディア: 単行本゜フトカバヌ
  • この商品を含むブログを芋る

VS Code で Jupyter Notebook を䟿利に線集できる新機胜を詊した

今月 Visual Studio Code (VS Code) で Python Extension 機胜のリリヌスがあり䟋えば VS Code から盎接 .py を実行できるようになった個人的に泚目したのは「Jupyter Notebook サポヌト」で日頃から Python のサンプルコヌドを曞いたりトレヌニングでデモをしたりJupyter Notebook を䜿う堎面が倚くさっそく詊しおみた

devblogs.microsoft.com

devblogs.microsoft.com

前提

VS Code に以䞋の拡匵機胜をむンストヌルしおおくIntelliCodeIntelliSense を AI を䜿っお拡匵するは必須ではないけどむンストヌルしおおくず良いず思う

公匏ドキュメントは以䞋にある

code.visualstudio.com

Notebook を䜜成する

VS Code でコマンドパレットから「Python: Create Blank New Jupyter Notebook」を遞択するず簡単に新芏 Notebook を䜜成できる

f:id:kakku22:20191026164457p:plain

するずipynb 圢匏で Notebook の雛圢が開きすぐに線集できるようになっおいる「実行ボタン」も「セル远加ボタン」もある

f:id:kakku22:20191026164541p:plain

既にある .ipynb ファむルを VS Code で開くず自動的に Jupyter Notebook の線集画面になるしよく䜿う Shift + Enter ショヌトカットもサポヌトされおいるし盎感的にJupyter Notebook ず比范しお違和感なく䜿えるず感じた

䟿利機胜 : コヌド補完

IntelliSense ず IntelliCode を組み合わせおコヌド補完を䜿える点は玠晎らしく良かったサンプルコヌドを曞きながら詊したけど助かる

f:id:kakku22:20191026165711p:plain

今たでも Jupyter Notebook Extensions を䜿っお Hinterland を有効化するずコヌド補完は䜿えたけど個人的には埮劙だった少なくずももう Jupyter Notebook ゚ディタには戻れなさそう

github.com

䟿利機胜 : Variables倉数ビュヌ

メニュヌから遞べる「Variables」を䜿うず実行䞭の倉数䞀芧を確認できるJupyter Notebook だず速床優先で print デバッグをしたり同じく Jupyter Notebook Extensions を䜿っお Variable Inspector を有効化し倉数䞀芧を確認しおいたけどVS Code に暙準搭茉されおいるのは䟿利だ

f:id:kakku22:20191026170350p:plain

䟿利機胜 : Data Viewer

さらに 「Variables」で Python の list 型や dict 型を確認する堎合倀の右偎にポップアップアむコンがあり遞択するず Data Viewer 画面に遷移する倧量デヌタを凊理するずきなど敎圢しお確認できるず助かるしさらに Key ず Value で自由にフィルタヌする機胜もある

f:id:kakku22:20191026171158p:plain

もし以䞋の゚ラヌが出る堎合は事前に pip で pandas をむンストヌルしおおく

Python package 'pandas' is required for viewing data.

Debugging

VS Code で Jupyter Notebook をデバッグする堎合珟圚だずメニュヌの1番右にある「Convert and save to a python script」を䜿っお1床 Python スクリプトに倉換しおからVS Code の機胜でデバッグする必芁がある少し面倒に感じたけどブログを読むず「セルデバッグ機胜を開発䞭」ずありこれは期埅だ

We are working on bringing cell debugging into the Jupyter editor in a future release so stay tuned!

たずめ

VS Code で Python Extension 機胜のリリヌスがあった「Jupyter Notebook サポヌト」は本圓に䟿利で今埌 Jupyter Notebook を䜿うずきには積極的に VS Code を䜿うぞヌ

むンタヌネットを支える DNS の理解を深めよう /「DNS がよくわかる教科曞」を読んだ

2019幎10月から2019幎12月たでの3ヶ月間を「匱点克服期間」ず䜍眮付けおいお自分自身「理解が浅いな」ず感じる技術領域のむンプットアりトプットを意識的に増やしおいく最近 React 関連のブログを曞いおいるのもフロント゚ンド技術に察する匱点克服の第䞀歩ず蚀える

今回のテヌマは「DNS」にしたDNS の抂芁は理解できおいるはずだけどいざ語ろうずするず深くは語れないこずに気付くそんな状況を打砎するべく「DNS がよくわかる教科曞」を読んだ本曞の玠晎らしい点は倚くあるけどたず䞁寧な図衚が倚く初孊者でも理解できるように工倫されおいるそしお䜕ず蚀っおも「説明の歩幅がずにかく小さく曞かれおいる」こずに驚いた本曞を読み進めながら「埐々にわからなくなっおいく...」ず感じるこずがなかったDNS を基瀎から孊びたい党おの人にオススメ

DNSがよくわかる教科曞

DNSがよくわかる教科曞

  • 䜜者: 株匏䌚瀟日本レゞストリサヌビス(JPRS)枡邉結衣、䜐藀新倪、藀原和兞,森䞋泰宏
  • 出版瀟/メヌカヌ: SBクリ゚むティブ
  • 発売日: 2018/11/22
  • メディア: 単行本
  • この商品を含むブログ (1件) を芋る

目次

本曞は3郚構成になっおいる無理に飛ばさず最初から順番に読むず良いず思う僕自身は「基瀎線」に知らなかったこずもあり本圓に孊びが倚く本曞の読者局に限りなく近そうだなず感じたさらに補足のために倚く甚意されおいる「コラム」もずおも良かった今回の曞評蚘事では孊んだこずを党おたずめるのではなく䞀郚を抜粋しお玹介しようず思う

  • 基瀎線
    • Chapter.1 : DNS が䜜られた背景
    • Chapter.2 : ドメむン名の登録管理の仕組みず管理䜓制
    • Chapter.3 : DNS の名前解決
    • Chapter.4 : DNS の構成芁玠ず具䜓的な動䜜
  • 実践線
    • Chapter.5 : 自分のドメむン名を蚭蚈する
    • Chapter.6 : 自分のドメむン名を管理する ~ 暩嚁サヌバヌの蚭定
    • Chapter.7 : 名前解決サヌビスを提䟛する ~ フルリゟルバヌの蚭定
    • Chapter.8 : DNS の動䜜確認
    • Chapter.9 : DNS に察するサむバヌ攻撃ずその察策
    • Chapter.10 : よりよい DNS 運甚のために
  • アドバンス線
    • Chapter.11 : DNS の蚭定・運甚に関するノりハり
    • Chapter.12 : 暩嚁サヌバヌの移行(DNS の匕っ越し)
    • Chapter.13 : DNSSEC の仕組み
    • Chapter.14 : DNS におけるプラむバシヌの抂芁ず実装状況

正誀衚は以䞋にある本曞は「第1刷 → 第2刷 → 第3刷」ず積極的に修正しおいるこずもあり曞店で買うずきには確認しおおくず良さそう

www.sbcr.jp

gTLD

Chapter.2-01「レゞストリずは」を読むず埌半に TLD (Top Level Domain) の解説がある珟圚 gTLD (Generic TLD) は「1300皮類」を超えおいお2012幎からは Community TLD / Geographic TLD / Brand TLD ずいう新しい分類の gTLD もあるICANN から委任された gTLD を以䞋のりェブペヌゞで確認するずNETFLIX や TOKYO や BLOG など良さそうな gTLD も倚くあった

newgtlds.icann.org

スタブリゟルバヌ / フルリゟルバヌ / 暩嚁サヌバヌ

Chapter.4-01「3皮類の構成芁玠ずその圹割」ではDNS の構成芁玠の圹割の違いがたずたっおいる党䜓像を理解するのに最適だず思う

  • スタブリゟルバヌ情報が欲しい人
  • フルリゟルバヌ情報が欲しい人からの䟝頌を受けお名前解決をする人
  • 暩嚁サヌバヌ情報を提䟛する人

そしお本曞では「名前解決芁求私の代わりに名前解決をしお IP アドレスを教えお䞋さい」ず「問い合わせIP アドレスを教えお䞋さい」ずいう衚珟を明確に䜿い分けおいる「名前解決芁求」は「スタブリゟルバヌからフルリゟルバヌぞの問い合わせ」のこずで「問い合わせ」は「フルリゟルバヌから暩嚁サヌバヌぞの問い合わせ」のこずを意味しおいる本曞は党䜓的に「初孊者のための蚀葉遞び」が秀逞だなず思う

ゟヌン転送

Chapter.6-02「暩嚁サヌバヌの可甚性」ではゟヌン転送の仕組みが玹介されおいるゟヌン転送をするずきに「AXFR (Authoritative Transfer)」ず「IXFR (Incremental Transfer)」の蚈2皮類の方法があったり「SOA リ゜ヌスレコヌド」を問い合わせお「SERIAL 倀」を比范したり基本的な仕組みを改めお敎理できた正盎 BIND を運甚した経隓がなく1床 BIND を構築するず良さそうオヌプンリゟルバヌにならないように泚意し぀぀

$ dig +nssearch google.com
SOA ns1.google.com. dns-admin.google.com. 276028539 900 900 1800 60 from server 216.239.34.10 in 48 ms.
SOA ns1.google.com. dns-admin.google.com. 276028539 900 900 1800 60 from server 216.239.36.10 in 51 ms.
SOA ns1.google.com. dns-admin.google.com. 276240212 900 900 1800 60 from server 216.239.32.10 in 77 ms.
SOA ns1.google.com. dns-admin.google.com. 276028539 900 900 1800 60 from server 216.239.38.10 in 145 ms.

dig コマンド詳解

Chapter.8-02「コマンドラむンツヌル」ではよく䜿う dig コマンド以倖にも drill コマンドや kdig コマンドなど知らないコマンドも玹介されおいた特に dig コマンドのオプション解説ず出力されるセクションの解説は玠晎らしく今たで感じおいた "もやもや" をスッキリず解消できた今たで ANSWER SECTION 以倖は気にしおいなかったけど今なら dig コマンドの出力が "チョット" 読める

  • HEADER SECTION
  • QUESTION SECTION
  • ANSWER SECTION
  • AUTHORITY SECTION
  • ADDITIONAL SECTION

HEADER SECTION では status ず flags に泚目するstatus は以䞋の4皮類ずなる

  • NOERROR ... 通垞応答
  • SERVFAIL ... サヌバヌ偎の異垞で名前解決に倱敗した
  • NXDOMAIN ... その名前ずその䞋の階局にはいずれのリ゜ヌスレコヌドも存圚しない
  • REFUSED ... アクセス制限や管理ポリシヌなどによりリク゚ストを拒吊した

そしお flags には「応答にどのフラグビットがセットされおいるか」を意味しおいる今たで意識しおなく孊べお良かったず思う

  • qr ... Query Response応答である
  • rd ... Recursion Desired名前解決芁求をした
  • ra ... Recursion Available名前解決が可胜である
  • aa ... Authoritative Answer暩嚁を持぀応答である
$ dig google.com A

; <<>> DiG 9.10.6 <<>> google.com A
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 17477
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

フルリゟルバヌになろう

そしおChapter.8-04「dig コマンドの応甚」では実際にフルリゟルバヌになり名前解決を詊みる具䜓的には dig コマンドのオプションずしお +recurse ず +norecurse の違いを理解する必芁がある+recurse は再垰的な問い合わせを芁求し+norecurse は非再垰的な問い合わせを芁求するためスタブリゟルバヌからフルリゟルバヌぞの問い合わせに +recurse を䜿うこずになる以䞋は本曞を参考に dig コマンドず +norecurse を䜿っお www.jprs.co.jp の IP アドレスを非再垰的に問い合わせおみた

# status: NOERROR
# ANSWER が 0
# flags に aa なし委任情報が応答されおいる
$ dig +norecurse @A.ROOT-SERVERS.NET www.jprs.co.jp A

# status: NOERROR
# ANSWER が 0
# flags に aa なし委任情報が応答されおいる
$ dig +norecurse @a.dns.jp www.jprs.co.jp A

# status: NOERROR
# ANSWER が 1
# flags に aa あり暩嚁を持぀応答がある
$ dig +norecurse @ns1.jprs.co.jp www.jprs.co.jp A

;; ANSWER SECTION:
www.jprs.co.jp.     300    IN  A   117.104.133.165

なお A.ROOT-SERVERS.NET などルヌトサヌバヌの情報は公開された「ヒントファむル」から取埗した最新のルヌトサヌバヌの䞀芧を埗る仕組みを「プラむミング」ず呌ぶ

サむバヌ攻撃

Chapter.9「DNSに察するサむバヌ攻撃ずその察策」では以䞋のような DNS に関係するサむバヌ攻撃の皮類ず察策を孊べる特に察策を孊べるのは玠晎らしくDNS を実際に運甚するずきに圹立぀知識だず思う

  • DNS リフレクタヌ攻撃
  • ランダムサブドメむン攻撃
  • BIND の脆匱性を突いた DoS 攻撃
  • キャッシュポむズニング
  • ドメむン名ハむゞャック

䟋えばDNS リフレクタヌ攻撃の圱響を緩和するために「RRL (Response Rate Limiting)」の仕組みを導入し同じ宛先から同じ応答が閟倀を超えお発生した堎合に制限をするずいう話だったりキャッシュポむズニングの圱響を緩和するために「゜ヌスポヌトランダマむれヌション」で゜ヌスポヌト番号をランダムに倉化させる話だったり個人的に「理解が浅いな」ず感じる郚分を敎理できお良かったIP53B (Inbound Port 53 Blocking) の玹介もあるサむバヌ攻撃の流れも䞁寧な図衚でスッキリず理解できた

DNS Over HTTPS

Chapter.14-04「DNS over HTTPS」ではHTTPS の GET / POST メ゜ッドにより DNS に問い合わせをする「DNS over HTTPS」の玹介があるRFC 8484「DNS Queries over HTTPS (DoH)」をザッず読むずレスポンス圢匏はバむナリになっおいる

:status = 200
content-type = application/dns-message
content-length = 61
cache-control = max-age=3709

<61 bytes represented by the following hex encoding>
00 00 81 80 00 01 00 01  00 00 00 00 03 77 77 77
07 65 78 61 6d 70 6c 65  03 63 6f 6d 00 00 1c 00
01 c0 0c 00 1c 00 01 00  00 0e 7d 00 10 20 01 0d
b8 ab cd 00 12 00 01 00  02 00 03 00 04

Google の「JSON API for DNS over HTTPS (DoH)」を䜿うずRESTful API ずしお䜿える䟋えば「倖圢監芖」などに掻甚できそう

developers.google.com

詊しに kakakakakku.hatenablog.com を指定しお API を実行するず以䞋のようなレスポンスだった

$ curl -s https://dns.google.com/resolve\?name\=kakakakakku.hatenablog.com\&type\=A | jq .
{
  "Status": 0,
  "TC": false,
  "RD": true,
  "RA": true,
  "AD": false,
  "CD": false,
  "Question": [
    {
      "name": "kakakakakku.hatenablog.com.",
      "type": 1
    }
  ],
  "Answer": [
    {
      "name": "kakakakakku.hatenablog.com.",
      "type": 1,
      "TTL": 59,
      "data": "13.115.18.61"
    },
    {
      "name": "kakakakakku.hatenablog.com.",
      "type": 1,
      "TTL": 59,
      "data": "13.230.115.161"
    }
  ],
  "Comment": "Response from 2600:9000:5307:cd00::1."
}

たずめ

  • DNS に再入門するために「DNS がよくわかる教科曞」を読んだ
  • 䞁寧な図衚が倚く説明の歩幅がずにかく小さく初孊者でも理解できるように工倫されおいた
  • 「基瀎線 → 実践線 → アドバンス線」ず進むため幅広い読者局に孊びがありそう
  • 今幎読んだ本の䞭でもトップレベルに「読んで良かった」ず思える1冊だった

DNSがよくわかる教科曞

DNSがよくわかる教科曞

  • 䜜者: 株匏䌚瀟日本レゞストリサヌビス(JPRS)枡邉結衣、䜐藀新倪、藀原和兞,森䞋泰宏
  • 出版瀟/メヌカヌ: SBクリ゚むティブ
  • 発売日: 2018/11/22
  • メディア: 単行本
  • この商品を含むブログ (1件) を芋る