社内Lightning Talk 第7回

こんにちは!技術書典7で個人初出版(はじめてのWebComponents入門)しました id:silverbirder180 です。(唐突の宣伝すみません!)

先月10月に社内Lightning Talk第7回が開催されました。 発表内容は、特定の分野に絞られた訳ではないため、社員の色が滲み出ている濃い話ばかりでした。 どんな内容だったか、軽く紹介したいと思います。

また『名古屋事務所 作ってみた』というインパクト大な発表をされたLT登壇者に、そのお話を記事に書いて頂きました。

発表内容

『SpinnakerによるCI/CD構築』

弊社では、次の記事にある通り、新たなECシステム基盤開発に取り組んでいます。

careers.monotaro.com

その取組の1つであるSpinnakerについての発表でした。 内容はとてもLightなもので、Cloud BuildとSpinnakerの構成について解説されました。 検証段階時で困ったTipsも紹介されており、分かる人には分かる内容なのかなと思います。 これからのOpsが効率化されていくことに期待しています!

『reboot と shutdown』

弊社のLinux大好きエンジニアさんからの発表です。 今回は、RebootとShutdownについての違いを紹介されていました。

docs.google.com

「rebootを実行したあと、なぜシステムは自動起動できる...?」から話が進みます。

答えは、ウォームブートしているからだそうです。つまり、電源オフはしておらず、ソフトウェアだけのシャットダウンをしています。 ハードウェアも完全に電源オフにしたい場合は、コールドブートのshutdownを使うことになります。

こういった普段よく使うものに対して疑問を抱かれる人は、すごいなと勉強になりました。 ちなみに、再起動コマンドは他にも様々あるそうです。

  • shutdown -r -q now
  • init 6
  • reboot
  • halt --reboot
  • poweroff --reboot
  • GUIでポチポチ

※ ちなみに筆者は、shutdown, rebootしか知りませんでした(笑)

『F#でDomain Modeling Made Functionalに入門してみた話』

弊社のWebアプリケーションの一部は、巨大なモノリシック状態にあります。 それのメンテナンス性を高めるためにはどうするべきなのか、次の手段を検討していました。

  • ドメイン駆動設計
  • 関数型言語の型における恩恵

その後、下記の本に巡り合い、学んだ事を紹介されていました。 books.google.co.jp (以下、Domain Modeling Made FunctionalをDMMFと呼称)

また、ブラックジャックを参考にしたDMMFのサンプルコードが用意されています。 github.com

DMMFに従うと
 ・データ構造やクラス構造よりも、ワークフローを意識して型に落とし込む

次のコード例のように、ワークフローを中心とした設計になります。

let playerActionDone = initialize |> gameStartMessaage |> playerAction
# 初期化(initialize) → ゲームが開始 → プレイヤーのターン

私の知っている設計概念にはなかったので、新鮮に感じました。 このようなワークフローに準じた設計になると、ありえない状態データが生まれないみたいです。 ありえない状態のデータというのは、ブラックジャックでいうと「デッキ(親札)がないのに、プレイヤーがカードを引く選択肢」パターンとかになります。当たり前の事を言っていますが、上記のようなパターンを考慮・対策した実装がそもそも不要ということになります。

『JavaScriptの話(黎明編)』

黎明とは

明け方。転じて、黎明期(れいめいき)とは、ある事柄が形になる前の始まりの時期を表す。

https://ja.wikipedia.org/wiki/黎明

console.log(typeof null) がなぜ objectなのかをJavaScriptの歴史を振り返って解説されていました。

当初、typeof演算子は、type tag(000: object, 001: int, etc)で実装していました。 nullという概念が登場し、こちらはnull pointer(0x00)と同じ扱いになっており、objectと同様のtype tagでした。

typeof(null) === "null"のように 直せば済む話では?という議論となるのですが、残念ながら既に typeof(null) == "object" のコードが多数存在していました。結果、その議論はリジェクトされました

ここから学ぶのは、「ミスは仕様になり、その仕様を変えるのは大変である」という教訓を得ました。 う~ん、大事!(笑)

LT登壇者(『名古屋事務所 作ってみた』)の話

今回初めてLT大会に登壇した新卒3年目社員・高野です。 私はこの夏から秋にかけて、名古屋事務所の新規構築に携わりました。 LTでは『名古屋事務所 作ってみた』というタイトルで、事務所を1からつくる流れをITインフラの観点からお話しました。

事務所の構築どころかネットワークの基礎すらよくわかっていなかったのですが、上司からの「You,事務所作っちゃいなよ!」という鶴の一声があり、事務所新設の担当になりました。(誇張なしに本当に週次面談で言われました。)

事務所であっても、ソフトウェア開発と同様に

1. 計画作成
2. 要件定義
3. 実装
4. テスト
5. 完成!

という流れがあるのは変わりません。 要件定義ではユーザーからの「こんな事務所にしてほしい」というリクエストを受け、セキュリティや冗長性等のITインフラ要件も加味したオフィス設計を行いました。 購入したネットワーク機器等がどんどん運び込まれ、何もなかった事務所がオフィスらしさを得ていく様子は、たくさん勉強したことや努力したことが実ったようで感動も一入でした……。

と、だいたい上記のような内容をお話しました。 実際に発表する前までは、「事務所構築の話を聞いておもしろいのか」など不安に思っていたのですが、専門外のことでも暖かく話を聞いてもらえたのが安心できました。 LT自体始めてだったのですが、笑ってもらえたり感心してもらえたりで発表してよかったと思っています。 インフラまわりの話はなかなか発表が少ないので、今後も学びがあれば発表していきたい次第です!

過去LTの発表タイトル

今まで開催してきた発表タイトルも載せておきます。 同じ人が何回か発表しているのですが、なんとなく同じ人っぽいなって思う発表タイトルがちらほらあります(Linux関連の人とか)。 私は『個人開発のすゝめ』と『Micro Frontends on Kubernetes - trial -』です。 Webのフロントエンドだったり、Kubernetesに興味があります。

第1回

  • プロセスとスレッド
  • Dockerの仮想化技術

第2回

  • MySQLのオプティマイザ―をトレースする
  • LinuxカーネルとVFS
  • GAE・Flask・DatastoreでWebアプリ作成
  • Google Dataflow はいかにして Exactly Once を実現しているか(仮)

第3回

第4回

第5回

  • (仮)快適生活をめざして
  • ハードウェア -ディスク編-
  • WeChat ミニプログラムについて
  • TypeScriptで始めるVanillaJS
  • Pythonで作るインタープリタ言語

第6回

最後に

いかがでしたでしょうか。少しは社内のLightning Talkの雰囲気が伝わりましたでしょうか。 私たちエンジニアは、こういったアウトプットする行動はとても大切だと思っています。

なぜなら、他者のアウトプットを吸収することで、自分自身はそのアウトプットを得るまでの時間を費やす必要がなくなるからです。とても効率的ですよね。

これからも、定期的にLightning Talkを継続しつつ、もし可能なら社外の場にも広げて貢献したいなと思っています。

以上、最後まで見て下さり、ありがとうございました!