101日目 TypeScriptがわからなかった社畜M

## ♠はじめに
こんにちは、社畜Mだぜ。
今回は俺が最近勉強しているTypeScriptについて話すぜ！
さぁ、行くぜ！！！

**デュエル！**
## ♠TypeScriptとは
俺のターン！ドロー！TypeScripの効果発動！

TypeScriptとはMicrosoftが開発したプログラミング言語で、JavaScriptをベースとしたものだぜ。
JavaScriptは基本的に型を指定せずにコードを書くが、TypeScriptでは変数や関数に型を措定でる。これにより、コードがどのようなデータを処理し、どのように動作するかを明確にする手段を提供するぜ。

例を出すと、JavaScriptでは
 ```javascript
 let age = 30;
```
となり、TypeScriptではこの変数に型を指定することができる。
```typescript
let age: number = 30;
```
こんな風に、TypeScripでは変数や関数の型を指定することで、プログラムの品質を向上させることができるぜ。特に大規模なプロジェクトでは、型情報を持つことで予期せぬエラーやバグを減らし、開発効率を向上させることがでる。これがTypeScripの効果だぜ！！
### ❤TypeScriptの特徴
#### 1.変数や関数の型定義
TypeScriptの最も特徴的な点は、変数や関数に型を明示的に指定できることだぜ。これはコード内のデータの型を明確にし、バグを予防するのに役立つぜ。

**(例)** 以下のコードでは変数ageに数値型numberを指定している。
```typescript
let age: number = 30;
```
この型指定により、コンパイラはageに文字列などの誤ったデータが代入されないように警告する。これにより、実行時に不適切なデータが使われることからくるバグを事前に防ぐことができるぜ。
#### 2. 再利用性と保守性の向上
TypeScriptではクラスとインターフェースを使用して、オブジェクト指向プログラミングを容易に実現できるぜ。これらの概念はコードの再利用と保守性を向上させるのに役立つぜ。

**(例)** 以下のようにPersonクラスを定義し、名前と年齢のプロパティを持つオブジェクトを生成きるぜ。
```typescript
class Person {
  name: string;
  age: number;

  constructor(name: string, age: number) {
    this.name = name;
    this.age = age;
  }
}

const person1 = new Person('Alice', 30);
```
インターフェースを使ってオブジェクトの形状を定義することも可能だぜ！！
```typescript
interface IPerson {
  name: string;
  age: number;
}

function printPersonInfo(person: IPerson) {
  console.log(`Name: ${person.name}, Age: ${person.age}`);
}
```
これにより、インターフェースを使ってオブジェクトの形状を明示的に指定し、コード内で正しいデータ構造を確保できるぜ。

#### 3.モジュールによるコードの整理
TypeScriptのモジュールは、コードの整理と保守性向上のための重要なツールだぜ。例えば、オンラインショッピングアプリを開発する際、各機能を独立したモジュールとして考えることができる。これによって、特定の機能に関連する変更を行いやすくなるぜ！
さらに、モジュールを使うことで、各機能を独立して開発でき、テストや修正が容易になり、他のプロジェクトで再利用できるコンポーネントも作成できるぜ。こんな風に、モジュールはコードの組織化と効果的な開発をサポートする重要なツールなんだぜ。
<br>
### ❤TypeScriptでできること
次はTypeScripでできることを紹介していくぜ！！
TypeScriptはJavaScriptの上位互換言語。JavaScriptでできることは基本的にTypeScriptでも可能だが、さらに大規模アプリケーションの開発を効率的かつ安定的に行うことができるんだぜ。

#### 大規模アプリケーション開発
TypeScriptを使うと、規模の大きなアプリケーションを開発しやすくなるぜ。例えば、MicrosoftはWindowsを開発する上で、TypeScriptを広範囲に利用している。Windowsでプリインストールされているメモ帳やパワーポイントなどのアプリケーション開発にもTypeScriptが使われているんだぜ。

#### Webアプリケーション開発
TypeScriptは、ReactやAngularなどのWebアプリケーションを開発するフレームワークとも相性が良いんだぜ。例えば、Slackはビジネスチャットアプリの開発にTypeScriptを利用していいる。特にフロントエンドのコードベースはほぼTypeScriptで書かれていて、複雑なUIの実装がしやすくなっているぜ。

#### モバイルアプリ開発
TypeScriptはReact Nativeなどと組み合わせて、安定したモバイルアプリの開発ができる。例えば、Airbnbは宿泊予約アプリの開発で、TypeScriptとReact Nativeを使っていて、これにより、複雑なUIでも型定義のおかげでバグが減少し、開発コストが大幅に削減されていくぜ！！

#### ゲーム開発
TypeScriptは各種ゲームエンジンとも相性が良く、ゲームを開発する際にも利用されているぜ。例えば、任天堂もゲーム開発スタジオにTypeScriptを導入し始めているんだぜ。最近のゲームはコード量が膨大で、従来のJavaScriptだと品質管理が難しいため、TypeScriptを使うことでゲームのロジックをきちんと型定義するようにし、想定外のバグを大きく減少させてるんだぜ。
<br>
### ❤TypeScript、JavaScriptの違い
先ほどからTypeScriptと同じくらい話に出てくるJavaScriptという単語。今度はこの二つの主な違いを挙げていくぜ！！
- **型定義**
TypeScriptは型を指定できて、JavaScriptは型を指定できない。
- **コンパイル**
TypeScriptはコンパイルが必要で、JavaScriptはコンパイルが不要。
- **エラーチェック**
TypeScriptはコンパイル時に型エラーを検出可能で、JavaScriptは実行時にエラーが発生する場合がある。
- **コミュニティとライブラリ**
TypeScript、JavaScriptともに、JavaScriptのライブラリを使用可能。

コイツらの主な違いは**型定義とコンパイル**だぜ。JavaScriptは型を指定せずにコードを書くため、開発速度が速い一方で、プログラムの品質を保つのが難しいことがあるぜ。TypeScriptは型を指定できるため、変数や関数の振る舞いを正確に制御でき、エラーを事前に検出できる。また、TypeScriptのコードはコンパイルが必要だが、その代わりにコードをブラウザで実行する前にエラーチェックが行われ、品質の高いコードを作成できるぜ。

### ❤TypeScriptの利点
#### 1.型チェックによるバグの削減
コンパイル時に型チェックが行われるため、実行前に多くのバグを見つけることができるぜ。
#### 2.自己文書化
型情報はコードの意味を明確にし、ドキュメントとしても機能するぜ。
#### 3.大規模プロジェクトの管理が容易
型定義により、複数の開発者が関わる大規模プロジェクトでも整合性を保ちながら開発が進められます。
#### 4.優れたIDEサポート
VSCodeをはじめとする多くのIDEがTypeScriptをサポートしており、補完機能やリファクタリングが容易だぜ。
#### 5.人気のライブラリとの統合
TypeScriptはReactやAngularなどの人気ライブラリやフレームワークと簡単に統合できるんだぜ。

### ❤TypeScriptの欠点
#### 1.学習難易度が高い
JavaScriptに比べて学習が難しく、特に型システムに慣れるまで時間がかかることがある。
#### 2.コンパイルが必要
TypeScriptはコンパイルが必要なため、JavaScriptに比べて開発サイクルが若干長くなることがある。
#### 3.冗長なコード
型定義が増えるため、コードが冗長になりやすい場合がある。
#### 4.エコシステムの違い
一部のJavaScriptライブラリはTypeScriptで使用するための型定義が整備されていないことがある。

## ♠まとめ
TypeScriptは、Microsoftが開発したJavaScriptの上位互換言語で、静的型付けによりコードの信頼性と保守性を向上させるぜ。型チェックでバグを事前に発見し、自己文書化が進むため、大規模プロジェクトに最適だぜ。ReactやAngularとの統合が容易で、優れたIDEサポートも提供される。しかし、学習が難しく、コンパイルが必要なため開発サイクルが長くなることもあるんだぜ。多くの大手企業に採用され、今後も成長が期待されるTypeScriptは、堅牢でスケーラブルなアプリケーション開発を可能にする強力なツールだぜ！！

## ♠おまけ
今回の社会人が知っておいた方がいいビジネスマナーはこいつだ！
「**報連相**」だぜ。
これも当たり前だと思うやつだよな。だが、これも社会人になるとき、というより学生であっても重要とされるマナーだぜ。

報連相というのは、
**報告** ：心象状況や結果の報告、トラブルやミスなどの伝達
**連絡** ：決定事項の周知。速やかにかつ情報を歪めず伝達
**相談** ：疑問点や不安点について話し、アドバイスや判断を仰ぐ

以上の三つを組み合わせて報連相と言われているぜ。報連相にはコミュニケーションを円滑にさせ、トラブルを事前に防ぐ効果があるぜ。
マジで大事だからみんなも心掛けてくれ！！

これで今回は終わりだぜ。
**ターンエンド**