Goで学ぶSimplicityとFamiliarity / Learn Simplicity And Familiarity By Go

Ad4c3c738e57a9bbcb800871e81c232d?s=47 itosho
October 19, 2018

Goで学ぶSimplicityとFamiliarity / Learn Simplicity And Familiarity By Go

Go(Un)Conference(Goあんこ)LT大会 4kg でのLT資料です。

Ad4c3c738e57a9bbcb800871e81c232d?s=128

itosho

October 19, 2018
Tweet

Transcript

  1. Goで学ぶSimplicityとFamiliarity Go(Un)Conference 4kg @itosho 1

  2. ▪ 自己紹介 ・伊藤 翔 @itosho  ・コネヒト株式会社 / Supership株式会社 ・会社では主にバックエンドエンジニアをやっています  ・仕事でよく書く言語:

    PHP / Ruby ・趣味でGoやSwiftを書いています  ・公開しているサービスはこちらから: https://itosho.github.io/ ・Microservicesと野球とアイドルが好きです  ・最近推しが卒業を発表して哀しい
  3. 突然ですが、皆さんは Goのどういうところが好きですか? 3

  4. 六本木一丁目で働く人100人にきいた Go言語の好きなところベスト3 (妄想調べ) 4

  5. 第3位: Cross Platform Compiler 5

  6. 第2位: Goroutine/Channel 6

  7. 第1位: Simplicity 7

  8. Simplicityとは? 8

  9. ▪ どっちがシンプルでしょうか? ・Rubyの場合 ・Goの場合

  10. ▪ どっちが分かりやすいでしょうか? ・Rubyの場合 ・Goの場合

  11. ▪ Goを触り始めた頃 ・見慣れたシンタックスばっかりだ! ・文法がミニマルで、覚えることが少なくていい!  ・個人的にはRubyの表現力の豊かさも好きだけど ・Simplicity is 分かりやすさ?

  12. 時は流れ、2018年 12

  13. ▪ そこそこGoに慣れてきた頃 ・勉強も兼ねて、OSSを公開してみた!  ・https://github.com/Connehito/gdp  ・tagの作成とリリースノートの作成ができるCLIツール  ・基本的には git と hub コマンドをラップしている

     ・詳細は弊社のテックブログにまとめています    ref:「gdpというGo製のCLIツールを公開しました」    http://tech.connehito.com/entry/2018/08/28/124608
  14. ▪ 開発初期のコード

  15. ▪ 開発初期のコード テストがしづらい!

  16. 解決方法 16

  17. Interfaceを使う 17

  18. ▪ コード: 呼び出される側

  19. ▪ コード: 呼び出す側

  20. ▪ コード: テスト

  21. ▪ コード: テスト テスタブル!

  22. ▪ interfaceを導入したばかりの頃 ・なんかしっくりこない  ・前のコードのほうがコード量少ないし、シンプルでは? ・何故しっくりこないのか?  ・シンプルじゃないからしっくりこないのか?  ・でも、格段にテストはしやすくなったし…

  23. “Don’t confuse familiarity and simplicity.” by Bjarne Stroustrup 23

  24. ▪ SimplicityとFamiliarityは違う ・親近感がないと理解するのに時間がかかる  ・シンプルではないと思ってしまう ・いまは見慣れたので、シンプルだと思える  ・なぜシンプルなのか説明できる   ⇒interfaceを使うことで依存性を分離できる   ⇒CLIではなく、APIになった場合でも差し替え可能

  25. ▪ つまり ・Familiarity: 人やレベルによって異なる、主観的 ・Simplicity: 普遍(不変)的、客観的に説明できる

  26. 常にSimplicityなコードを書くべきか? 26

  27. ▪ それもまた違う ・例えば…  ・1回しか実行されないコード  ・スタートアップの創業時のコード  ・プログラミング初心者に教えるとき ・状況、ビジネスのフェーズ、スキルに依る  ・ただし、可能な限りSimplicityを目指すべきではあると思います

  28. まとめ 28

  29. ▪ Goで学んだこと ・Don’t confuse familiarity and simplicity  ・特にGoは文法がミニマルなため混同しやすい ・混同しないためには審美眼を鍛えておく必要がある ・審美眼を鍛えるためには学び続けることが大切

  30. ▪ 参考サイト / 文献 ・「Go言語らしさ」とは何か?Simplicityの哲学を理解し、Go Wayに沿った開発を 進めることの良さ  ・https://employment.en-japan.com/engineerhub/entry/2018/06/19/110000 ・Golangにおけるinterfaceをつかったテスト技法 |

    SOTA  ・https://deeeet.com/writing/2016/10/25/go-interface-testing/ ・Concepts: The Future of Generic Programming  ・http://www.stroustrup.com/good_concepts.pdf ・『Clean Architecture 達人に学ぶソフトウェアの構造と設計』  ・https://www.amazon.co.jp/dp/4048930656 ・『pospomeのサーバサイドアーキテクチャ』  ・https://pospome.booth.pm/items/1045782
  31. ご清聴ありがとうございました 31