TypeScript対応のDocBase APIクライアントをnpmで公開してみた

## はじめに

現職の会社では、ナレッジ共有サービスとしてDocBaseを使っています。そのサービスにてAPIが公開されているのを知りました。

そこに投稿した情報を取得、加工できたら色々できるかもなぁと思っていました。

あと、現職の開発で、Node.jsを使っていて、npmにお世話になっており、`自分もnpmにライブラリを公開してみたい`と常々思っていました。そこで今回、TypeScript対応のDocBase APIライブラリをnpmで公開してみることにしました。

### npmとは

一言でいうと`Node.js用のパッケージマネージャー`です。
Javaでいうところのmavenです。

開発者がnpmレジストリにパッケージを公開することができ、また、そのパッケージを他開発者に提供することができます。

公式サイト
https://docs.npmjs.com/getting-started/what-is-npm

### DocBaseとは

株式会社クレイが開発している社内ナレッジ共有サービスです。
社内ナレッジ共有サービスとしては、個人的に好きな感じです。

以下、公式サイトからの引用です。
http://kray.jp/news/docbase_beta/

以下特徴があると書かれています。

> DocBaseには情報共有を活発にする５つの特徴があります。
> 
> すごく簡単にメモを投稿できる
> 小さなメモをチーム全員で育て、情報の価値を上げられる
> 複数のメモをまとめて情報を見やすく整理・保存できる
> 組織の枠を越えて情報を共有できる
> 強固な暗号化

### TypeScriptとは

マイクロソフトによって開発されている言語です。
Google社内の標準言語としても採用されており、大注目の言語です。
[「Google社内の標準言語としてTypeScriptが承認される。ng-conf 2017」](
http://www.publickey1.jp/blog/17/googletypescriptng-conf_2017.html)

Node.jsは「型情報が無い」という問題があるのですが（ってかスクリプト言語全般です）、その問題を解決して、スクリプト言語とコンパイル言語の良いとこ取りした言語です。。個人的には、非常にオススメです。

## npm公開手順

今回npmに公開したTypeScript対応のDocBaseAPIライブラリです。
このライブラリの公開手順を紹介します。
https://www.npmjs.com/package/node-docbase-sdk

### 【手順１】GitHubにソースコードをアップする

今回、DocBaseAPIライブラリをNode.js + TypeScriptで実装してみました。
[GitHubリポジトリはこちら](https://github.com/YukiFujisawa/node-docbase-sdk)

まずは、以下、３つのAPIを実装しました。
残りは、後日、実装したいと思います。

- [メモの検索API](https://help.docbase.io/posts/92984)
- [メモの投稿API](https://help.docbase.io/posts/92980)
- [メモの詳細取得API](https://help.docbase.io/posts/97204)

[DocBase APIドキュメントはこちら](https://help.docbase.io/posts/45703)

### 【手順２】npm ユーザの作成

#### npmのサイトにユーザー登録(signup)する
https://www.npmjs.com/signup

#### npmユーザを設定する

この際にUsername、Password、Emailは、npmで登録したものと一致させることに注意してください。

```bash:npmユーザの設定
$ npm set init.author.name "Yuki Fujisawa"
$ npm set init.author.email "g031y148yuki@gmail.com"
$ npm set init.author.url "https://github.com/YukiFujisawa"
$ cat ~/.npmrc
init.author.name=Yuki Fujisawa
init.author.email=g031y148yuki@gmail.com
init.author.url=https://github.com/YukiFujisawa
$ npm adduser
Username: yfujisawa
Password: 
Email: (this IS public) g031y148yuki@gmail.com
Logged in as yfujisawa on https://registry.npmjs.org/.
```

### 【手順３】gemnasium を使って依存関係パッケージ追跡のバッジを作成する

追跡することで、依存パッケージに新しいバージョンがリリースされたり、セキュリティ上の理由などによりアップデートが必要になった時に通知してくれるようになるらしいです。
[gemnasium](https://gemnasium.com/)

GitHubアカウントでログインし、リポジトリの登録が完了すると以下のような画面が表示されます。

<img width="1074" alt="スクリーンショット 2017-12-22 16.55.15.png" src="https://qiita-image-store.s3.amazonaws.com/0/112294/a03b894b-5821-f1e3-aff8-659f00777467.png">

設定画面から以下のURLを取得して、READMEに貼り付けます。

```
[![Dependency Status](https://beta.gemnasium.com/badges/github.com/YukiFujisawa/node-docbase-sdk.svg)](https://beta.gemnasium.com/projects/github.com/YukiFujisawa/node-docbase-sdk)
```

すると、以下のように表示されます

<img width="585" alt="スクリーンショット 2017-12-22 17.02.01.png" src="https://qiita-image-store.s3.amazonaws.com/0/112294/1955f402-37af-48d0-eb53-ddc52befe820.png">

### 【手順４】ライセンスファイルの作成

GitHubリポジトリのトップディレクトリに`LICENSE.txt`ファイルを追加し、ライセンス文を明記する。記載内容は以下のページの文章の`<year>`、`<copyright holders>` の部分を自分の情報に書き換えます。

The MIT License (MIT) - Open Source Initiative
https://opensource.org/licenses/MIT

### 【手順５】バージョン番号を付与して、npmに公開する

```
$ git tag -a v0.0.1 -m "Add Create, Read Posts API."
$ git push origin tags/v0.0.1
$ npm publish ./
+ node-docbase-sdk@0.0.1
```

### 【手順６】npmでの公開状態を確認する

無事に公開されていることが確認できました。

<img width="1171" alt="スクリーンショット 2017-12-22 17.31.56.png" src="https://qiita-image-store.s3.amazonaws.com/0/112294/05c9cdb5-2fbb-5fa7-bd5b-b038bdf3d084.png">

https://www.npmjs.com/package/node-docbase-sdk

### 【手順7】バージョンアップする

バグがあった場合に修正してリリース番号をあげる手順も記載しておきます。
`npm version patch`を実行すると、自動的にタグの作成と`package.json`の更新をやってくれます。

```
$ npm version patch
$ git push origin tags/<version>
$ npm publish ./
```

マイナーバージョンは、`npm version minor`
メジャーバージョンは、`npm version major`
を使えばpatchと同様に自動でやってくれます。

### 【手順8】公開したnode-docbase-sdkを利用してみる

node-docbase-sdkの使い方がわかるようにサンプルプロジェクト作成しました。
こちらを参考に、今回のライブラリを利用していただければ幸いです。
https://github.com/YukiFujisawa/node-docbase-sdk-sample

### 【参考記事】

- [3分でできるnpmモジュール](https://qiita.com/fnobi/items/f6b1574fb9f4518ed520)
- [初めてのnpm パッケージ公開](https://qiita.com/TsutomuNakamura/items/f943e0490d509f128ae2)

***

### 【TypeScriptのTips】

TypeScriptのTips的なものを以下、記載しておきます。

#### TypeScriptを使えるようにするには

`package.json`と`tsconfig.json`に以下、設定を追加します。

- package.json

```
  "dependencies": {
    "typescript": "^2.6.2",
  }
```

- tsconfig.json

```
{
  "compilerOptions": {
    "module": "commonjs",
    "target": "es6",
    "noImplicitAny": true,
    "noImplicitReturns": true,
    "noFallthroughCasesInSwitch": true,
    "outDir": "./lib",
    "allowJs": true,
    "sourceMap": true,
    "rootDirs": [
      "./src"
    ]
  },
  "include": [
    "./src/**/*"
  ]
}
```

#### tslintを使えるようにするには

`package.json`と`tslint.json`に以下、設定を追加します。

- package.json

```
  "devDependencies": {
    "tslint": "^5.8.0",
    "tslint-config-airbnb": "^5.3.0"
  }
```

- tslint.json

```
{
  "extends": [
    "tslint-config-airbnb"
  ],
  "rules": {
    "ter-arrow-parens": false,
    "max-line-length": [true, 120]
  }
}
```

以下、コマンドで実行します。

```
$ tslint 'src/**/*.ts'
```

#### TypeScriptの型情報を出力するには

`tsconfig.json`の`compilerOptions->declarationをtrue`にします。

- tsconfig.json

```
{
  "compilerOptions": {
    "declaration": true,
  }
}
```