$30 off During Our Annual Pro Sale. View Details »

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

itosho
October 19, 2018

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

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

itosho

October 19, 2018
Tweet

More Decks by itosho

Other Decks in Programming

Transcript

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

    View Slide

  2. ■ 自己紹介
    ・伊藤 翔 @itosho
     ・コネヒト株式会社 / Supership株式会社
    ・会社では主にバックエンドエンジニアをやっています
     ・仕事でよく書く言語: PHP / Ruby
    ・趣味でGoやSwiftを書いています
     ・公開しているサービスはこちらから: https://itosho.github.io/
    ・Microservicesと野球とアイドルが好きです
     ・最近推しが卒業を発表して哀しい

    View Slide

  3. 突然ですが、皆さんは
    Goのどういうところが好きですか?
    3

    View Slide

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

    View Slide

  5. 第3位: Cross Platform Compiler
    5

    View Slide

  6. 第2位: Goroutine/Channel
    6

    View Slide

  7. 第1位: Simplicity
    7

    View Slide

  8. Simplicityとは?
    8

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  12. 時は流れ、2018年
    12

    View Slide

  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

    View Slide

  14. ■ 開発初期のコード

    View Slide

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

    View Slide

  16. 解決方法
    16

    View Slide

  17. Interfaceを使う
    17

    View Slide

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

    View Slide

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

    View Slide

  20. ■ コード: テスト

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  28. まとめ
    28

    View Slide

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

    View Slide

  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

    View Slide

  31. ご清聴ありがとうございました
    31

    View Slide