Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ジェネリクスについてめちゃくちゃ簡単に説明する

Avatar for Goto Akiko Goto Akiko
October 31, 2025
14

 ジェネリクスについてめちゃくちゃ簡単に説明する

<対象者>
・プログラミングを始めて3,4年以上
・ジェネリクスを見たことがあるし、使っている
・しかし、ジェネリクスについてあんまりわかっていない

<内容>
ジェネリクスについて説明します。
ジェネリクスは本来難しいものではないのですが、検索したりして出てくる内容は難しいことが多いので、避けている人も多いかと思います。
そこで、なるべく平たい言葉と絵で説明しました。

Avatar for Goto Akiko

Goto Akiko

October 31, 2025
Tweet

Transcript

  1. 2 自己紹介 • 株式会社オンラインコンサルタント 代表取締役 • プログラミング歴は16年 • 受託開発・自社サービスなど多数の開発 •

    メインの実績は3000社以上の導入実績がある 「ODIN リアルタイム配送システム」 という配送会社向けのシステム https://delivery-system.com/ @Akiko_Goto999
  2. 5 これ function getFirstItem<T>(list: T[]): T | undefined { return

    list.length > 0 ? list[0] : undefined; } ※この後、サンプルコードはTypeScriptで書いていきますが、ジェネリクス が使える言語全般に共通の話をしていきます。
  3. 9 ジェネリクスのサンプル // 配列の最初の要素を取ってきて返す function getFirstItem<T>(list: T[]): T | undefined

    { return list.length > 0 ? list[0] : undefined; } // 使用例 const numbers = [1, 2, 3]; const firstNumber = getFirstItem(numbers); // number型 console.log("First number:", firstNumber); // → 1 const words = ["apple", "banana", "cherry"]; const firstWord = getFirstItem(words); // string型 console.log("First word:", firstWord); // → "apple" 整数の配列を入れたら 整数を返さないといけない Stringの配列を入れたら Stringを入れないと いけない このサンプルを使って説明します。
  4. 11 ジェネリクスのサンプル ジェネリクスとはパズルのようなもの function getFirstItem<T>(list: T[]): T | undefined {

    return list.length > 0 ? list[0] : undefined; } 同じ記号が書かれた部分が一緒でなければいけないという意味
  5. 12 ジェネリクスのサンプル function getFirstItem< >(list: []): | undefined { return

    list.length > 0 ? list[0] : undefined; } りんごの部分に同じものを入れないといけない関数という意味 絵のほうがわかりやすいかもしれない
  6. 15 サンプルはこうなる // Stringの配列用の配列の最初を取ってきて返す関数 function getFirstItemForString(list: string[]): string | undefined

    { return list.length > 0 ? list[0] : undefined; } // numberの配列用の配列の最初を取ってきて返す関数 function getFirstItemForNumber(list: number[]): number | undefined { return list.length > 0 ? list[0] : undefined; } Stringを扱う関数とnumberを扱う関数を分けなければならない。
  7. 17 確かにユニオン型で書けば 一つの関数で済むが … function getFirstItem(list: (string|number)[]): string | number

    | undefined { return list.length > 0 ? list[0] : undefined; } 将来的にこの関数の引数と戻り値 を違う型でも使いたくなった時に、 このユニオン型を書き換えなけれ ばならない手間が発生!
  8. 19 皆さんがよく目にするアレもジェネリクス const list:Array<string> = [ "apple", "banana", "cherry"]; interface

    Array<T> 毎日使っている、Arrayの中身もジェネリクス 上記の例では、このTがStringということになる。