Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

第3位: Cross Platform Compiler 5

Slide 6

Slide 6 text

第2位: Goroutine/Channel 6

Slide 7

Slide 7 text

第1位: Simplicity 7

Slide 8

Slide 8 text

Simplicityとは? 8

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

時は流れ、2018年 12

Slide 13

Slide 13 text

■ そこそこGoに慣れてきた頃 ・勉強も兼ねて、OSSを公開してみた!  ・https://github.com/Connehito/gdp  ・tagの作成とリリースノートの作成ができるCLIツール  ・基本的には git と hub コマンドをラップしている  ・詳細は弊社のテックブログにまとめています    ref:「gdpというGo製のCLIツールを公開しました」    http://tech.connehito.com/entry/2018/08/28/124608

Slide 14

Slide 14 text

■ 開発初期のコード

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

解決方法 16

Slide 17

Slide 17 text

Interfaceを使う 17

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

■ コード: 呼び出す側

Slide 20

Slide 20 text

■ コード: テスト

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

まとめ 28

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

■ 参考サイト / 文献 ・「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

Slide 31

Slide 31 text

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