Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Genericsについて改めて学んでみた
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
o-ga
June 26, 2024
50
0
Share
Genericsについて改めて学んでみた
TypescriptとGoのGenericsについて改めて学んだときに発表した資料です。
o-ga
June 26, 2024
More Decks by o-ga
See All by o-ga
GoConferenceMini2026inSendai_-_2026.02.21.pdf
tabe
0
8
GoConnect#9 2025.08.19
tabe
0
73
kanazawa.go 2025.07.27
tabe
0
59
ランドネットLT会.pdf
tabe
0
14
Tavinikkiyとかいう構想半年、開発2ヶ月みたいなプロダクトを個人開発している話
tabe
0
11
テテミート 2024.11.22
tabe
0
12
Featured
See All Featured
The agentic SEO stack - context over prompts
schlessera
0
740
Building the Perfect Custom Keyboard
takai
2
720
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
250
Balancing Empowerment & Direction
lara
5
1k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
270
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.4k
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
220
[SF Ruby Conf 2025] Rails X
palkan
2
930
How to Think Like a Performance Engineer
csswizardry
28
2.5k
Transcript
Genericsについて改めて学んでみた 株式会社ワクト ソフトウェアエンジニア 阿部太一
自己紹介 • 名前 : 阿部太一 • Twitter : オーガ (@o_ga09) • GitHub : o-ga09 •
エンジニア歴 : 4年 • 領域 : バックエンド • 趣味 : ゲーム、ダーツ、お酒 • 所属 : 株式会社ワクト https://github.com/o-ga09/convert-yaml-go https://github.com/o-ga09/spec2scenarigo
宣伝 • Zennで本書いてます! ◦ あと少しでいいね200いきそうです ◦ Go大好きまんです
最近のニュース • Typeormのバージョンアップで変更差分400ファイルのPR作ってしまった • Node.jsお腹いっぱい
目次 • Genericsとは? • 使い所 • TypescriptのGenerics • GoのGenerics •
Tってなんなのさ • まとめ
突然ですが、Generics使っていますか・・・?
私は、全然使っていません
いろんな言語に備わっていて、便利だけど使い所と
仕組みとか使い方を理解していなかったです
Genericsを理解すると、軽い認識ですが、以下のようなメリットがあると考えています • 引数や戻り値の型だけ違うコードを共通化できる • ライブラリを作成する際にコードをスタイリッシュにできる • OSSのライブラリを簡単に読めるようになる
Today’s Goal • GoとTypescriptのGenericsをなんとなく理解する • コードを共通化したい時の引き出しにできる • Tが何者かわかる
Today’s Target • Genericsって何って思っている方 • Genericsがふんわり理解の方 • コードの共通化、リファクタリングのモチベーションが高い方
Genericsとは?
AIに聞いてみた! プログラミングにおけるGenericsとは Generics(ジェネリクス)、総称型とも呼ばれる、は、プログラミングにおいて、型を抽象 化し、汎用的なコードを書くための手法です。具体的なデータ型に依存せず、型パラメー タと呼ばれる変数のようなものを使用することで、様々なデータ型に対して同じ処理を適 用することができます。
メリット Genericsを活用することで、以下のような利点を得ることができます。 • コードの再利用性向上: 同じ処理を異なる型に対して記述する必要がなくなり、コードの重 複を削減できます。 • 保守性の向上: コードが簡潔になり、理解しやすくなるため、メンテナンスが容易になりま す。
• 型安全性の向上: コンパイラによる型チェックが強化され、実行時エラーを防ぐことができ ます。
使い所
Genericsの利用例 Genericsは、様々な場面で利用することができます。以下に、いくつか例を挙げます。 • コレクションライブラリ: JavaのArrayListやHashMapなどのコレクションライブラリは、 Genericsで作られています。 • アルゴリズム: 汎用的なアルゴリズムは、Genericsを使って実装することができます。 •
データ構造: 独自のデータ構造を、Genericsを使って抽象化することができます。
Genericsをサポートする言語 Genericsは、 • Java • C# • TypeScript • Kotlin
• Go などの多くのプログラミング言語でサポートされています。
TypescriptのGenerics
引数のみがstring, number, URLと 違う関数があったときに
型の部分をTとしてまとめられちゃ うのが、ジェネリクス
GoのGenerics
Typescriptと異なり、Tの取りうる型を指定しな ければなりません あとは同じ
それは、分かった。Tってなんなのさ
• 型パラメータと呼ばれる • 関数やデータ構造の方の具体を定めずに定義できる • 言語によって指定方法は異なる
• Template (テンプレート) の略 • Type (型) の略 • 他のプログラミング言語の影響(例:C++など)
なぜ、Tか? 絶対これでなければいけないという 決まりはなく、慣習的なものです ね!
まとめ
• 言語によって微妙に書き方は異なる • 基本形を覚えればわりと使えるなという印象 • 一旦、リファクタリングする際に使ってみたいな
• 自分含めですが、意外と苦手な人いるじゃないかな・・・? • 思ったより怖くない! • これは、ハンズオンとかの方が理解進むな! LTの内容ミスったか
参考情報 • Goのジェネリクス - Zenn • なぜ、ジェネリクスはTなのか - Qiita •
サバイバルTypescript
ご清聴ありがとうございました!