Swagger CodegenでSwiftのmodelを作成(初心者向け)

# Swagger CodegenでSwiftのmodelを作成
## 概要
SwiftでiOSの開発をしている駆け出しエンジニアです。
まだまだわからないことが多く、日々分からないことと格闘しながらOJTで開発をしています。
今回はSwaggerCodegenについて理解できていないので、SwaggerCodegenでSwiftのmodelを作成するまでを記事にしたいと思います。

## 目次
1. Swaggerとは
1. SwaggerCodegenでswiftのmodelを作成
1. ちなみに
1. まとめ
1. 参考記事まとめ

## Swaggerとは
Swaggerとは、OpenAPI仕様を使用してAPIを開発するために最も広く使用されているオープンソースツールセットの１つ
[https://swagger.io/tools/open-source/](https://swagger.io/tools/open-source/)

### SwaggerとOpenAPI
- OpenAPI = 仕様
    - OpenAPI仕様は、Linux Foundation CollaborativeProjectであるOpenAPIInitiative内のコミュニティ主導のオープン仕様です。
    - OpenAPIドキュメントはAPIサービスを記述し、YAMLまたはJSON形式で表されます。
    - [https://github.com/OAI/OpenAPI-Specification/blob/main/README.md](https://github.com/OAI/OpenAPI-Specification/blob/main/README.md)
- Swagger = 仕様を実装するためのツール 
    - [https://swagger.io/blog/api-strategy/difference-between-swagger-and-openapi/](https://swagger.io/blog/api-strategy/difference-between-swagger-and-openapi/)

| Swagger ツール | 概要 | README.md |
|:-:|:-:|:-:|
| Swagger Editor  | Swagger Editorを使用すると、ブラウザー内でYAMLのOpenAPI仕様を編集し、ドキュメントをリアルタイムでプレビューできます。  | https://github.com/swagger-api/swagger-editor/blob/master/README.md  |
| Swagger UI  | Swagger UIは、OAS準拠のAPIから美しいドキュメントを動的に生成するHTML、Javascript、およびCSSアセットのコレクションです。  |  https://github.com/swagger-api/swagger-ui/blob/master/README.md |
| Swagger Codegen  |  APIクライアントライブラリの生成（SDK生成）、サーバースタブ、およびOpenAPI仕様が自動的に与えられたドキュメントを許可します。  | https://github.com/swagger-api/swagger-codegen/blob/master/README.md  |
  
## SwaggerCodegenでSwiftのmodelを作成
### 事前準備
- SwaggerCodegenでmodelを作成するディレクトリを作成
    - どこでもいいんですが、今回自分はデスクトップにswagger-testというディレクトリを作成しました。
- 作成したディレクトリに移動し、Swagger公式が提供しているサンプルをコピーしてpetstore.ymlファイルを作成
    - [サンプル: https://editor.swagger.io/](https://editor.swagger.io/)
    - ![スクリーンショット 2022-02-20 13.23.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1379778/101105ad-4622-99c5-3b08-851ac1ada43a.png)

### 実際にmodelを作成
- Homebrewを使ってSwaggerCodegenをインストールする  
  `$ brew install swagger-codegen`
- petstore.ymlのディレクトリに移動  
`$ cd Desktop/swagger-test/`
- 以下のコマンドでmodelを作成  
`$ swagger-codegen generate -i petstore.yml --lang swift5 -o output_dirctory`
    - コマンド実行後output_dirctory/SwaggerClient/Classes/Swaggers/ModelsにSwiftのmodelが作成される

![スクリーンショット 2022-02-20 13.29.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1379778/3ca6a449-74d3-47f7-8558-ebea5d2d3ece.png)
swiftのmodelを作成については以上になります。

### ちなみに
- 作成されたファイルがある状態で再度コマンドを実行した場合、上書きはされるんですが不要なファイルが残る場合があります。そのため、フォルダを削除するコマンドを含めてshファイルを作成しておくのがおすすめです。

```
rm -r output_dirctory
swagger-codegen generate \
 -i ./petstore.yml \
 --lang swift5 \
 -o output_dirctory \
```

### まとめ
- 今回SwaggerCodegenでのmodelの作成まで書きました。まだまだSwaggerについては調べている途中で理解できていない部分も多いので追加でこちらの記事もアップデートしていければと思います。今回の記事が私のような初学者でswaggerについて調べているかたの参考になれば嬉しいです。また、間違っている点等ありましたらコメントいただけるとありがたいです。

### 参考記事まとめ
- https://github.com/swagger-api
- https://github.com/swagger-api/swagger-codegen
- https://rightcode.co.jp/blog/information-technology/swaggercodegen-code-generation-customize-syain
- https://editor.swagger.io/
- https://swagger.io/blog/api-strategy/difference-between-swagger-and-openapi/
- https://hkawabata.github.io/technical-note/note/Standard/swagger.html