ryoma's note

マイペース ੯•́ʔ̋ ͙͛*͛ ͙͛*͛ ͙͛̋و

Goでdicというツールを作った

ホスティングサービスの運用をしていると、dig コマンドの力を借りてドメイン情報をしらべる機会がよくあります。

たとえばウェブサイト表示に問題があったり、ブラウザから SSL 証明書を確認できなかったり、メールの不通で困っているようなお問合せに関する調査です。トラブルシューティングの際に、自社管理をふくむ複数の DNS サーバーに登録されているレコード情報が誤っていないかをしらべる必要があります。

また特定のレコード情報を更新したあとは、DNS キャッシュサーバに問い合わせると TTL の影響を受けるので、権威 DNS サーバやパブリック DNS に対して問い合わせをすることになります。

クエリタイプやDNS サーバをコマンド引数で都度わたしてあげる作業がすこし手間だったので、あらかじめ知りたい条件を定義した config ファイルに沿って、ドメイン情報を集めてくれる dic *1 という CLI ツールを作りました。

並行処理がどうしても必要になりそうだったのと、以前から勉強してみたかった言語だったので、今回は Go でつくることを選択しました。

つくったもの

つかいかた

config ファイルを TOML で記述。

# config.toml
[[sec]]
  name = "demo"

  [[sec.args]]
    server = ""
    qtypes = ["a", "txt"]

  [[sec.args]]
    server = "1.1.1.1"
    qtypes = ["a", "txt"]

  [[sec.args]]
    server = "ns"
    qtypes = ["a", "txt"]

[[sec]]
  name = "demo2"

  [[sec.args]]
    server = ""
    qtypes = ["any"]

デフォルトで利用するセクションを設定。(一時的な利用は -n, --name

$ dic e
$ dic s demo
Changed the default section to "demo"
$ dic l
DEFAULT SECTION
 demo

SECTION NAME        SERVER          QUERY TYPES
*demo               -               [a txt]
                    1.1.1.1         [a txt]
                    ns              [a txt]

 demo2              -               [any]
$ dic example.com www.example.com
[example.com]
  -
    example.com.        40170   IN      A       93.184.216.34
    example.com.        86400   IN      TXT     "v=spf1 -all"
  @1.1.1.1
    example.com.        3200    IN      A       93.184.216.34
    example.com.        5668    IN      TXT     "v=spf1 -all"
 *@a.iana-servers.net.
    example.com.        86400   IN      A       93.184.216.34
    example.com.        86400   IN      TXT     "v=spf1 -all"

[www.example.com]
  -
    www.example.com.    66099   IN      A       93.184.216.34
    www.example.com.    86388   IN      TXT     "v=spf1 -all"
  @1.1.1.1
    www.example.com.    9276    IN      A       93.184.216.34
    www.example.com.    10788   IN      TXT     "v=spf1 -all"
 *@b.iana-servers.net.
    www.example.com.    86400   IN      A       93.184.216.34
    www.example.com.    86400   IN      TXT     "v=spf1 -all"

おまけ

config ファイルに server = "ns" と記述すると、 NS レコード(サブドメインの場合はそのスーパードメインに設定される NS レコード)の DNS サーバに対して問い合わせを行います。用途として、レコード情報の更新や DNS サーバをお引越しした直後に、 DNS キャッシュサーバの TTL を待つことなく正常に変更されたことを確認したかった 👀

また server = "" のように空欄にすると resolv.conf を利用します。

ref. https://github.com/ryoma123/dic/blob/master/README.md#example

感想

  • ずっと気になっていた Go の学習機会をつくれてよかった!
  • シンプルで書きやすいところが大好きになってしまったのでもっと触っていこう〜 🙌
  • 正しい設計がわからずリファクタリングにだいぶ苦労してしまったので、Go のデザインパターンなどから学んでみようかなぁと思っている

*1:dic: Domain Infomation Collector

cert-checkというGemを作った

おもに業務で、ローカルに一時保存した SSL 証明書ファイルの中身が知りたいな〜という機会がよくあった。

そんなときは openssl コマンドの力を借りて都度 grep したりしていたのだけど、学習を兼ねて、必要な情報だけまとめて出力してくれる CLI ツールをつくってみた。

CLI ツールなので Go が向いてるのかなぁと迷ったけど、Ruby も学んでいきたかったので今回は Gem として作ることを選択してみた。 erikhuda/thor のライブラリを使うと手軽に CLI ツールが作れて便利だった 🙏

つくったもの

つかいかた

$ cert-check info /tmp/www.example.org.crt /tmp/github.com.crt
CertFile:   /tmp/www.example.org.crt
Issuer:     DigiCert SHA2 Secure Server CA
NotBefore:  2018-11-28 09:00:00 +0900
NotAfter:   2020-12-02 21:00:00 +0900
CommonName: www.example.org
SANs:       [www.example.org example.com example.edu example.net example.org www.example.com www.example.edu www.example.net]

CertFile:   /tmp/github.com.crt
Issuer:     DigiCert SHA2 Extended Validation Server CA
NotBefore:  2018-05-08 09:00:00 +0900
NotAfter:   2020-06-03 21:00:00 +0900
CommonName: github.com
SANs:       [github.com www.github.com]

感想

  • シンプルなツールだけど、身の回りの作業がすこし便利になってうれしい。
  • Gem を作るのは初めてだったので分からないことが多かったけど、手を動かして調べるほど怖くなくなってきてよかった。
  • 引き続きこつこつアウトプットして生活を便利にしていこうとおもった。

「就業力」についてお話をしてきた

夏はじまりそう。


先日、大学の授業でお話をする機会をいただきました。

就職活動をひかえた3年生が対象の「就業力育成講座」という授業で、「自分に合った職業をみつけるためにいまやっておくべきこと」などを学ぶ場のようでした。

chiwata.hatenablog.com


みなさん熱心に聞いてくれて、質問もしてくれたりと、自分にとって刺激ある時間になりました。

貴重な機会をいただいた福岡工業大学の先生方をはじめ、紹介してくれたちわたくん、うづらさん、本当にありがとうございました。

就職活動に向けて少しでも役に立ってくれるといいなぁ。。心から応援しています!


speakerdeck.com

Vue.jsに触れはじめた

ドットインストールに「Vue.js入門」が追加されていたのでやってみた。

ToDoアプリの実装を例に v-on, v-bind などのディレクティブの意味から教わりつつ、

こんなにシンプルに作れちゃうのすごいすごい言いながら写経をしていた。

後半は Component も紹介されていて、便利さを実感できたので入門したかもしれない。

使えるようになるべくこれから触ってみよう。

『ドットインストール』公式ブログ - 最新版にあわせて「Vue.js入門」を追加しました

新卒研修についてLTしました

こんにちは。暑い!

先日、社内で開催された「ホスティング Tech MTG #4」というイベントで、ホスティングでもなければテックでもないお話をしてきました。

新卒研修の「番長」というお仕事を2ヶ月くらい(準備も含めると半年くらい)していたので、その感想が中心です。

番長業、手探りだったのでいろいろ反省はあるけど楽しかった。。

speakerdeck.com

研修をメインで担当してくれた後輩ふたりもインタビューに協力してくれました。ありがとう!

研修大変そうだったけれど、いろいろ学べたこともあったようで、お願いしてよかったなぁという気持ちに…!

来年の新卒研修も、なにかしらお手伝いしていきたい!

ではでは。

recruit2018.pepabo.com

「外資系コンサルの3STEP思考術」を読んだ

ryoma123.hatenablog.com

↑に続いて。もう一冊、思考整理に関して紹介されていた書籍があったので連休中に読んだ。

先日読んだ書籍はイシューツリーに関するものだったが、本書で登場する「整理、分解、比較」する考え方は同じ目的のように思える。

マーケティングに関する話題が多かったが、エンジニアの自分にとっても仕事でのコミュニケーションや問題解決の際に大切なポイントを教わることができた。

個人的な例だと、対話によるコミュニケーションをしながら問題解決を図る場面は多いが、自分の場合どうしても相手に主導してもらうことが多いのが悩みだった。また、知識不足も相まって話についていけなくなる場面もたびたびあった。

だけど、対話の目的が「相手と認識をすり合わせること」だと考えると、それではまずいと実感できる。

分からないことを聞き返すことは、対話が中断したり本筋とズレたりと勇気がいることだけど、まずは事実を集めるために認識をすり合わせることが最優先。そうしてからようやく、どのような解決ができるかという問題解決のステップに進めるんだなと思えた。

本書の言葉を借りると「対話を通じて共感の土壌をつくる」という言葉もしっくりきた。

思考整理以前の気づきだけど、いいことを知った。引き続き。