2018年に Redash へ送った Pull Request 一覧

# はじめに

この記事は [Redash Advent Calendar 2018](https://adventar.org/calendars/3299) 2日目の記事です。

2018年も色んな OSS にコントリビュートできました。その中でも特に BI ツール [Redash](https://github.com/getredash/redash) への Pull request が多く、どんなものがあったか振り返ってみました。

# Pull Requests

| アイコン | 説明 |
| ------- | ---- |
| :tada: | マージ済 |
| :muscle: | 機能追加 |
| :syringe: | 修正 |

- **Disable "Download Dataset" button when query hasn't been saved** ([#2243](https://github.com/getredash/redash/pull/2243)) :muscle: 
  - 新しいクエリが未保存だった場合、Download Dataset ボタンを無効にする
  - [#2134](https://github.com/getredash/redash/pull/2134) で対応されていた
  - PR を出した当初、未保存だった場合は無効で十分だと思ったが、有効にできるのであれば確かにそちらが便利
- **Enable list query by one character when adding widget on Dashboard** ([#2246](https://github.com/getredash/redash/pull/2246)) :tada: :muscle: 
  - ダッシュボードへウィジェットを追加する時に、クエリ名をインクリメンタルサーチ出来るようにした
- **Exporting query results as Google Spreadsheet** ([#2343](https://github.com/getredash/redash/pull/2343)) :muscle: 
  - クエリの結果を Google Spreadsheet でエクスポートする
  - Spreadsheet からは [IMPORTDATA](https://support.google.com/docs/answer/3093335?hl=en) で Redash の API 経由でデータの取得が可能だが、セキュリティを意識すると敷居が高い
  - この機能を使えば楽になると思うのだが・・・
- **Fix syntax error** ([#2457](https://github.com/getredash/redash/pull/2457)) :tada: :syringe: 
  - Redis が起動していない状態で worker プロセスを起動すると意図しないエラーになる問題を修正
- **Get all tables in the BigQuery** ([#2458](https://github.com/getredash/redash/pull/2458)) :tada: :muscle: 
  - スキーマブラウザで BigQuery のテーブルが50件までしか表示されない問題を修正
  - ページングで最初の1ページ50件しか取得していなかった
- **Show custom date format on settings page** ([#2509](https://github.com/getredash/redash/pull/2509)) :tada: :muscle: 
  - カスタマイズした日付フォーマットを設定画面で選択できるようにした
- **Display confirmation dialog when deleting a item** ([#2510](https://github.com/getredash/redash/pull/2510)) :tada: :muscle: 
  - データソース、アラート、クエリースニペットを削除時に確認ダイアログを表示する
  - 削除は慎重に
- **Add location property to BigQuery data source settings** ([#2513](https://github.com/getredash/redash/pull/2513)) :tada: :muscle: 
  - BigQuery データソースのロケーションを指定できるようにした
  - 東京リージョンの対応で試そうと思ったら対応していなかったため
- **Filter data sources in a data source input area** ([#2520](https://github.com/getredash/redash/pull/2520)) :tada: :muscle: 
  - スキーマブラウザでデータソース名の入力時にインクリメンタルサーチを行う
  - データソースが多い場合、便利では？
- **Display name to be delete** ([#2554](https://github.com/getredash/redash/pull/2554)) :tada: :muscle: 
  - データソース、アラート、クエリースニペットを削除する時に確認モーダルに削除対象の名前を表示する
- **Fix `'_inplacevar_'` is not defined error** ([#2755](https://github.com/getredash/redash/pull/2755)) :syringe: 
  - Python データソースで[累積代入文](https://docs.python.jp/2.7/reference/simple_stmts.html?highlight=%E4%BB%A3%E5%85%A5#augmented-assignment-statements)（`+=` とか `*=` とかを使った文で、他の言語だと自己代入とも呼ばれる）に対応する修正
  - 内部では [RestrictedPython](https://github.com/zopefoundation/RestrictedPython) (Zope プロダクト！）が使われていて、`_inplacevar_` を実装する必要がある
  - この時、ホワイトリスト形式で許可する演算子をリストアップする必要があるが、RestrictedPython の安定版には存在しないので、「個別に定義する」「安定版に入るのを待つ」「ベータ版を使う」の3択
- **Fix admin api recording** ([#2937](https://github.com/getredash/redash/pull/2937)) :tada: :syringe: 
  - 次の2つの API が失敗する問題を修正
     - `/api/admin/queries/outdated`
     - `/api/admin/queries/tasks`
- **Auto focus tag input** ([#2938](https://github.com/getredash/redash/pull/2938)) :tada: :muscle: 
  - タグの追加時に、入力項目にフォーカスを自動で設定する
  - すごく細かいけど、とにかく入力の手間を軽くしたい
- **Fix an invalid prop type of `newVersionAvailable` warning** ([#2992](https://github.com/getredash/redash/pull/2992)) :tada: :muscle: 
   - 新バージョンのチェックで、JS 側でエラーになっていたので修正
- **Add page size settings** ([#2993](https://github.com/getredash/redash/pull/2993)) :tada: :muscle: 
   - クエリ一覧で、1ページあたりに表示できる件数を環境変数 `REDASH_PAGE_SIZE` で、件数切り替えを `REDASH_PAGE_SIZE_OPTIONS` で指定可能にした
   - [Redash Meetup 4.0.0](https://redash-meetup.connpass.com/event/101420/) で「1ページあたりの件数が20に固定されている」という話題が出て、確かにそうだな、と思ったので追加
- **Fix url scheme** ([#2994](https://github.com/getredash/redash/pull/2994)) :tada: :muscle: 
   - 基本的にはドキュメントリンクなどの http を https に変換
   - リンク先が無効になったり、不要なリダイレクトが行われていたものはある程度修正
   - 怪しいところは手を付けず
- **Switch BigQuery Standard SQL as the default** ([#3085](https://github.com/getredash/redash/pull/3085)) :tada: :muscle: 
   - BigQuery データソースの新規追加時に、標準 SQL を標準とする
   - レガシー SQL はその名の通り、すでに古くなって推奨されなくなったため
   - 標準 SQL をサポートしていない古いバージョンの時に追加されたデータソースをケアする必要があった
   - 冗長になるのでスキーマブラウザでのデータセット名も表示しないようにした
      - ほとんどのケースでは問題にならないはず
- **Add get_current_user() into Python Data Source** ([#3088](https://github.com/getredash/redash/pull/3088)) :tada: :muscle: 
  - Python データソースで、現在の実行ユーザ情報を取得する `get_current_user()` を追加
  - [約1年前の Issue](https://github.com/getredash/redash/issues/1646) が発端
- **Open new tab when forking a query** ([#3089](https://github.com/getredash/redash/pull/3089)) :tada: :muscle: 
  - Fork した時にクエリの編集ページを新しいタブで開くようにした
  - [2014年の Issue](https://github.com/getredash/redash/issues/328) が発端
  - 自分が Fork する時に、ほとんどのケースで元のクエリと比較していたのでリクエスト
- **Fix forked query is opened in the same tab** ([#3121](https://github.com/getredash/redash/pull/3121)) :tada: :syringe: 
  - [#3089](https://github.com/getredash/redash/pull/3089) により、Fork 時に常に同じタブで開くようになってしまったのでその対応
  - 単純な HTML であれば a タグの `target="_blank"` だが、JS が絡むとちょっとトリッキーなコードになってしまった

# メンテナとして

Redash へのコミットは2017年から少しずつ行っていて、今年の11月に正式に Redash のメンテナチームに招待されて、加入しました。

実は2017年の末に一度正式コミッターへのオファーがあり、「もちろんやりたい！」と意思表示をしたのですが、自分の英語が拙かったのか、何らかの問題があったのか、そのまま時間が過ぎてしまっていました。

今回、無事 GitHub のステータスが Contributor から Member に変わり、具体的にはコードレビューやマージ権限が追加されました。今のところプロジェクトへのコミット要求は割とゆるく、出来る時にトライしてみてというスタンスです。フルタイムで働いている自分にとっては、とても合っているなと感じています。

学生時代から「いつかは普段自分が使っている OSS のコミッターになりたい」という思いがあったので、招待を受けた時は特別な思いでした。

2018年の残り、そして2019年も引き続きコントリビュートしていければと思います。

<blockquote class="twitter-tweet" data-lang="ja"><p lang="en" dir="ltr">Great! With me.</p>&mdash; Katsuhiko YOSHIDA (@kyoshida) <a href="https://twitter.com/kyoshida/status/1061755587807997953?ref_src=twsrc%5Etfw">2018年11月11日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

# さいごに（開発 Meetup の告知）

12/20（木）に Redash の開発イベントを開催予定です。

- [Redash Meetup 4\.0\.2\-dev \- connpass](https://redash-meetup.connpass.com/event/110549/)

これまで Redash の導入や運用に関わる知見共有のイベントが開催されましたが、それとは別に開発に絞ったイベントもいいよね、という話をしていて開催に至りました。次回は2回目で、前回の開発 Meetup では過去の Issue をチェックしたり、温めていた新機能の紹介などで盛り上がりました。

Redash の開発に参加している・開発に興味がある方は参加されてはいかがでしょうか？自分も参加します。

Redash Advent Calendar 2018 3日目は CLI のコミットをされたり、Redash meetup で発表や会場を提供していただいている Sumito.Tsukada さんによる記事です。お楽しみに！