- #2023年に受賞経験あり
- リモート/チーム開発
- PM/マネジメント
- 他64件の職種
-
開発
- #2023年に受賞経験あり
- リモート/チーム開発
- PM/マネジメント
- 首都圏案件/チーム開発
- Web/システム開発
- #チーム開発#経験1年〜OK
- #なぜかみんなカレーが好き
- #少数#リモートあり
- 社長がエンジニア/リモートあり
- フロントエンドエンジニア
- バックエンドエンジニア
- 経験1年〜でもOK!/環境変化
- チーム開発/働きやすさ
- リモート可/チーム開発
- 経験1年〜でも大歓迎!
- 受賞経験あり/経験1年〜OK!
- ストレス5Kg軽減
- 働きやすさ/気軽に相談
- チーム開発/首都圏案件
- 毎月カレーパーティー
- リモートあり/チーム開発
- リモートあり/スキルアップ
- チーム開発/経験1年〜OK!
- リモート可/受賞経験あり
- ストレスフリー/リモート可
- マークアップエンジア
- Nuxt/React
- リモート○/対人ストレス爆軽減
- リモートあり/受賞経験○
- リモート/Web/システム開発
- ストレスフリー/北の大地
- 受賞経験あり/首都圏案件
- ストレスフリーエンジニア
- 対人ストレス爆軽減
- マークアップエンジニア
- エンジニアだからこその悩み
- チーム開発/受賞経験あり
- モダン開発/受賞経験あり
- チームで開発/経験1年〜OK!
- モダン開発/チーム開発
- リモートあり/経験1年〜OK
- 経験1年〜OK!
- あなただけの個性
- 受賞経験あり
- 開発微経験
- キャリアチェンジ
- React.js
- スキルアップ
- Nuxt.js
- 理想のキャリア
- Webエンジニア
- チームに貢献
- カレー
- 雰囲気
- 成長
- 人間関係
- 理想のエンジニア
- チームプレイ
- エンジニア
- Webエンジニア・プログラマー
- Webエンジニア
- Webエンジニア・コーダー
- サーバーサイドエンジニア
- 市場価値を上げる
- ストレスフリー
- モダン開発
- WEB・グラフィックデザイナー
マーベリックスでは定期的に社内勉強会を開催しており、
今回はその内容の一部をご紹介します!
こちらの勉強会でお話しした、APIドキュメントをコード管理した取り組みですが、
具体的な設定例を紹介します!
勉強会の様子はこちらから
マブスバックエンドMTG#2 – APIドキュメントを活用した話
どうしたいか
このように、mainブランチへマージされたタイミングで、
コード内に書き込んだリクエスト・レスポンスの情報をもとに、
APIドキュメントを生成しデプロイします。
各ユーザーは指定のURLへアクセスし、最新のAPI使用を把握して開発可能な運用を行うことを目指します!
実行する環境を構築する
各バージョン
node.js16.8.0Express.js4.17.12TypeScript4.9.3APIDoc0.53.1
設定ファイルを設置する
ドキュメント共有の項目を設定するため、
プロジェクト直下にapidoc.jsonを作成し、下記の内容を設定します。
{
"name": "サンプルプロジェクト",
"version": "1.0.0",
"description": "サンプルプロジェクトAPI仕様書",
"title": "サンプルプロジェクトAPI仕様書",
"url": "https://localhost:3000"
}
また、yarnコマンドでジェネレートできるようにpackage.jsonにコマンドを追加しておくと便利です。
"scripts": {
~~~~~~~~~~,
"apiDoc-generate": "node_modules/.bin/apidoc -i src -o docs -c apidoc.json"
},
コードにAPIドキュメント用のコメントを作成する
ツールはAPIDocというRestAPI用のドキュメントジェネレータを使用します。
インストール方法などは公式を参考にしてください!
"@"のプレフィックスをつけた各項目にAPIの設定値を記載していきます。
/**
* @api {get} /sample-api サンプルAPI
* @apiVersion 1.0.0
* @apiGroup common
* @apiPermission admin
* @apiSuccessExample Success-Response:
* HTTP/1.1 200 OK
* {
* "firstname": "John",
* "lastname": "Doe"
* }
*
* @apiError UserNotFound The id of the User was not found.
*
* @apiErrorExample Error-Response:
* HTTP/1.1 404 Not Found
* {
* "error": "UserNotFound"
* }
*/
router.get(
'/sample-api',
(req: Request, res: Response, next: NextFunction) => {
// ~~~~~~~~~
}
);
代表的な設定項目を紹介します。
@api {get} /sample サンプルAPIHTTPメソッド、API名を記載します。@apiVersionエンドポイントのバージョンを記載します。@apiGroup画面毎やドメイン毎などアプリケーションのルールに従ってグループ名を記載します。@apiPermission実行権限を記載します。アプリケーションで決まったロール名や権限などを記載します。@apiSuccessExample正常終了時のレスポンス例を記載します。@apiErrorException発生時に起こり得るエラーを記載します。@apiErrorExampleエラー終了時のレスポンス例を記載します。
このように各APIの先頭で設定することで別ツールでのドキュメント管理を回避することができます!
ローカル環境でドキュメントをジェネレートする
コメントで書くところまで進めたら、まずはローカル環境でジェネレートしてみましょう。
下記コマンドを実行し、プロジェクト直下のdocsフォルダへドキュメントを吐き出します。
node_modules/.bin/apidoc -i src -o docs -c apidoc.json
node_modules内のbinにジェネレートに必要なコマンドが用意されているので、
そちらを使用します。
-iinputするソースの場所を指定します。例では、src配下のソースを対象に前述で定義した設置値が読み込まれます。-oジェネレートしたドキュメントが吐き出される場所を指定します。例では、docs配下に吐き出されます。
問題無くジェネレートが完了すると、指定したdocs配下にjsなどのファイルが入ります。
警告やエラーが出る場合
APIDocはとても親切にどこ場所で記載エラーがあるのかを教えてくれます。
{"message":"parser plugin 'description' not found in block: 11 in file: src/routes/sample/hogehoge.ts","level":"warn"}
のようにコンソール状に表示されるため、
ジェネレートに失敗している場合はエラーを直して再度実行してみてください!
メンバーへ共有する環境を構築する
ローカルでのジェネレートが成功したら、ホスティングサービスへデプロイしてみましょう!
今回はAWS Amplifyでデプロイします。
⚠️アプリケーションを稼働させているIaaSに合わせたホスティングサービスの方がメンテしやすく、使い勝手が良いです。
AmplifyとGithubを連携させる
mainブランチへマージされたタイミングでジェネレートを開始するために、
Githubと連携させます。
▲Githubを選択します。
▲リポジトリと接続します。
▲モノレポで構成している場合は、APIDocが入っているディレクトリを設定します。
今回は下記の構成で作成したプロジェクトをサンプルとしているため、
backendを指定します。
sample
∟ frontend
∟ backend
∟ package.json
∟ apidoc.json
∟ ・・・・
⚠️プロジェクト内がバックエンドのみであれば空白で大丈夫です!
▲amplify.ymlに構築する設定を記載します。
version: 1
applications:
- frontend:
phases:
preBuild:
commands:
- yarn install --production=false
build:
commands:
- yarn run apiDoc-generate
artifacts:
baseDirectory: /docs
files:
- '**/*'
cache:
paths:
- node_modules/**/*
appRoot: backend
このようにbuildコマンド、参照ディレクトリを設定します。
⚠️注意1
yarn run apiDoc-generate
実行時のコマンドはpackage.jsonへ追加したコマンドとなるので、
コマンド名を合わせる必要があります。
⚠️注意2
baseDirectory: /docs
ジェネレート後にドキュメントが吐き出されるディレクトリを指定します。
保存してデプロイを行う
前段階で設定した内容に問題がなければ、設定は以上なので、保存してデプロイしてみましょう!
▲デプロイが完了すると全てにチェックが付き、アクセスできるようになります。
デフォルトで設定されているURLリンクがあるので、
そこからアクセスするとドキュメントを表示することができます!
このようにコメント部分で記載した内容がまとまって表示されます!
最新のドキュメントをすぐに共有できるようになるので、
開発体験の良い環境を作ることができました!
アクセス制限をかける
ランダムなURLとはいえ誰でもアクセスできてしまうので、
まずはBasic認証をかけてパッと見れない状態にしておくと良いと思います。
▲アクセスコントロールを開きます。
▲アクセスの管理から、アクセス設定を制限へ変更し、ユーザーネーム・パスワードを設定します。
そのまま保存するだけですぐにBasic認証をかけることができます。
さいごに
各エンドポイントにコメントで定義しておくだけで、
ドキュメントジェネレートを行う例の紹介でした。
Swaggerの方が機能性が良かったり、
NestJSでコメントではなくコードで定義できたりと、使いやすいツール・方法はたくさんありますが、
記載する場所が直感的なことやエンドポイント前にコメントで定義できる部分は、
運用のハードルを下げられるため、良い面もたくさんあります。
より優れていても運用を継続できないと勿体無いので、
チームやスキルマップにあったツールで開発を進めることが大切だと改めて感じました。
また運用してみて便利だと感じたツールを紹介したいと思います!