Go(Un)Conference(Goあんこ)LT大会 4kg でのLT資料です。
Goで学ぶSimplicityとFamiliarityGo(Un)Conference 4kg @itosho1
View Slide
■ 自己紹介・伊藤 翔 @itosho ・コネヒト株式会社 / Supership株式会社・会社では主にバックエンドエンジニアをやっています ・仕事でよく書く言語: PHP / Ruby・趣味でGoやSwiftを書いています ・公開しているサービスはこちらから: https://itosho.github.io/・Microservicesと野球とアイドルが好きです ・最近推しが卒業を発表して哀しい
突然ですが、皆さんはGoのどういうところが好きですか?3
六本木一丁目で働く人100人にきいたGo言語の好きなところベスト3(妄想調べ)4
第3位: Cross Platform Compiler5
第2位: Goroutine/Channel6
第1位: Simplicity7
Simplicityとは?8
■ どっちがシンプルでしょうか?・Rubyの場合・Goの場合
■ どっちが分かりやすいでしょうか?・Rubyの場合・Goの場合
■ Goを触り始めた頃・見慣れたシンタックスばっかりだ!・文法がミニマルで、覚えることが少なくていい! ・個人的にはRubyの表現力の豊かさも好きだけど・Simplicity is 分かりやすさ?
時は流れ、2018年12
■ そこそこGoに慣れてきた頃・勉強も兼ねて、OSSを公開してみた! ・https://github.com/Connehito/gdp ・tagの作成とリリースノートの作成ができるCLIツール ・基本的には git と hub コマンドをラップしている ・詳細は弊社のテックブログにまとめています ref:「gdpというGo製のCLIツールを公開しました」 http://tech.connehito.com/entry/2018/08/28/124608
■ 開発初期のコード
■ 開発初期のコードテストがしづらい!
解決方法16
Interfaceを使う17
■ コード: 呼び出される側
■ コード: 呼び出す側
■ コード: テスト
■ コード: テストテスタブル!
■ interfaceを導入したばかりの頃・なんかしっくりこない ・前のコードのほうがコード量少ないし、シンプルでは?・何故しっくりこないのか? ・シンプルじゃないからしっくりこないのか? ・でも、格段にテストはしやすくなったし…
“Don’t confuse familiarity and simplicity.”by Bjarne Stroustrup23
■ SimplicityとFamiliarityは違う・親近感がないと理解するのに時間がかかる ・シンプルではないと思ってしまう・いまは見慣れたので、シンプルだと思える ・なぜシンプルなのか説明できる ⇒interfaceを使うことで依存性を分離できる ⇒CLIではなく、APIになった場合でも差し替え可能
■ つまり・Familiarity: 人やレベルによって異なる、主観的・Simplicity: 普遍(不変)的、客観的に説明できる
常にSimplicityなコードを書くべきか?26
■ それもまた違う・例えば… ・1回しか実行されないコード ・スタートアップの創業時のコード ・プログラミング初心者に教えるとき・状況、ビジネスのフェーズ、スキルに依る ・ただし、可能な限りSimplicityを目指すべきではあると思います
まとめ28
■ Goで学んだこと・Don’t confuse familiarity and simplicity ・特にGoは文法がミニマルなため混同しやすい・混同しないためには審美眼を鍛えておく必要がある・審美眼を鍛えるためには学び続けることが大切
■ 参考サイト / 文献・「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