[Backlog] backlog_kitを0.17.0に更新後NoMethodErrorが出る場合、スペースのドメイン設定に注意

[Backlog](https://backlog.com/ja/) のAPI実行に backlog_kit(Ruby用のライブラリ) を使っていましたが、0.17.0に更新後エラーが出たので情報共有です。

# 関連仕様とエラーになる条件

Backlogでは [2017年9月にドメインの変更( .jp から .com )](https://backlog.com/ja/blog/backlog-jp-change-domain-backlog-com/) がありましたが、それ以前に作成したスペースは .jp ドメインのままで運用されています。

backlog_kitの方は [0.17.0でデフォルトドメインの修正が入った](https://github.com/emsk/backlog_kit/commit/593d5faca854a125117b7f1959d4e939c028d6f4#diff-b992c35d8fc516f9da452d62122ceeba) ため、使っているスペースのドメインとbacklog_kitのバージョンの組み合わせにより問題が発生するようになりました。

- 使っているスペースが .jpドメイン(2017年9月頃以前に作成) かつ
- backlog_kit が 0.17.0 以降

あるいは、あまり無いパターンですが

- 使っているスペースが .comドメイン(2017年9月頃以降に作成) かつ
- backlog_kit が 0.16.0 以前

でこのエラーが発生します。

# エラー内容

エラーが再現するスクリプトは以下になります。

```ruby:test.rb
#!/usr/bin/ruby
# encoding: utf-8

require 'backlog_kit' # 0.17.0
require 'pp'

# セッション作成
client = BacklogKit::Client.new(
  space_id: '< .jp ドメインのスペースIDを設定>',
  api_key: '<APIキーを設定>'
) # key of user

# プロジェクト一覧を取得
result_obj = client.get('projects') # API: /api/v2/projects
puts PP.pp(result_obj,'')
```

.jp ドメインのスペースでこれを実行するとNoMethodErrorが発生します。

```shell-session
Traceback (most recent call last):
        13: from backlog_post_monthly_report_test2.rb:18:in `<main>'
        12: from /var/lib/gems/2.5.0/gems/backlog_kit-0.17.0/lib/backlog_kit/client.rb:97:in `get'
        11: from /var/lib/gems/2.5.0/gems/backlog_kit-0.17.0/lib/backlog_kit/client.rb:140:in `request'
        10: from /var/lib/gems/2.5.0/gems/faraday-0.15.3/lib/faraday/connection.rb:138:in `get'
         9: from /var/lib/gems/2.5.0/gems/faraday-0.15.3/lib/faraday/connection.rb:387:in `run_request'
         8: from /var/lib/gems/2.5.0/gems/faraday-0.15.3/lib/faraday/rack_builder.rb:143:in `build_response'
         7: from /var/lib/gems/2.5.0/gems/faraday-0.15.3/lib/faraday/request/multipart.rb:15:in `call'
         6: from /var/lib/gems/2.5.0/gems/faraday-0.15.3/lib/faraday/request/url_encoded.rb:15:in `call'
         5: from /var/lib/gems/2.5.0/gems/faraday_middleware-0.12.2/lib/faraday_middleware/response_middleware.rb:31:in `call'
         4: from /var/lib/gems/2.5.0/gems/faraday-0.15.3/lib/faraday/response.rb:8:in `call'
         3: from /var/lib/gems/2.5.0/gems/faraday-0.15.3/lib/faraday/response.rb:61:in `on_complete'
         2: from /var/lib/gems/2.5.0/gems/faraday-0.15.3/lib/faraday/response.rb:9:in `block in call'
         1: from /var/lib/gems/2.5.0/gems/backlog_kit-0.17.0/lib/backlog_kit/response/file_parser.rb:9:in `on_complete'
/var/lib/gems/2.5.0/gems/backlog_kit-0.17.0/lib/backlog_kit/response/file_parser.rb:19:in `decoded_filename': undefined method `match' for nil:NilClass (NoMethodError)
```

# 対応方法

環境変数 'BACKLOG_TOP_LEVEL_DOMAIN' を使っているスペースに合わせて設定すれば正常にAPI実行できるようになります。

```ruby:test.rb
#!/usr/bin/ruby
# encoding: utf-8

require 'backlog_kit' # 0.17.0
require 'pp'

# ドメイン設定
ENV['BACKLOG_TOP_LEVEL_DOMAIN'] = 'jp'

# セッション作成
client = BacklogKit::Client.new(
  space_id: '< .jp ドメインのスペースIDを設定>',
  api_key: '<APIキーを設定>'
) # key of user

# プロジェクト一覧を取得
result_obj = client.get('projects') # API: /api/v2/projects
puts PP.pp(result_obj,'')
```

あるいは実行ユーザの環境変数に設定しても大丈夫です。

```shell-session
$ export BACKLOG_TOP_LEVEL_DOMAIN=jp
$ ruby test.rb
#<BacklogKit::Response:0x0000xxxxxxxxxx18
 @body=
  [#<BacklogKit::Resource:0x0000xxxxxxxxxx18
    @attributes=
     {:id=>99999,
      :projectKey=>"VATEST",
      :name=>"TESTプロジェクト",
      :chartEnabled=>false,
      :subtaskingEnabled=>true,
      :projectLeaderCanEditProjectLeader=>false,
      :useWikiTreeView=>true,
      :textFormattingRule=>"backlog",
      :archived=>false,
      :displayOrder=>0}>,
      ※以下省略※
```

使っているBacklogスペースが .com ドメインの場合で backlog_kit 0.16.0 以前を使う場合は、BACKLOG_TOP_LEVEL_DOMAIN を 'com' に設定して下さい。

# エラーの原因

詳細は追っていないのですが、自分のドメインでない方にリクエストを投げた際、APIのレスポンスとしては 302 (Found) が返ってきていました。 backlog_kitが302をうまく処理できていないために発生しているものと思われます(他言語や別のAPIライブラリでも必ず起きる問題ではなさそうです)。

# 関連リンク

- [Backlog](https://backlog.com/ja/)
- [backlog_kit](https://github.com/emsk/backlog_kit)
- [Backlogはサービスのドメインを.comドメインに変更します！（API開発者様へ重要なお願い）](https://backlog.com/ja/blog/backlog-jp-change-domain-backlog-com/)