備忘録: rack-mini-profilerを使うときはRails.envを確認しようの話

環境: rack-mini-profiler: v1.1.3

業務にて、Railsアプリのパフォーマンスチューニングにrack-mini-profilerを使っていた。 検証用環境でrack-mini-profilerを使おうと思ったのだが、なぜか左上の計測窓が表示されず、どハマりしてしまった...。

github.com

原因は、Rails.env の値を確認していないことにあった。 rack-mini-profilerRails.envの値を見て developmentもしくはtestでない場合、自動で表示されない仕組みになっていた。

https://github.com/MiniProfiler/rack-mini-profiler/blob/7d415a7c04ca01eba3d2bafc590be082471aa905/lib/mini_profiler_rails/railtie.rb#L33-L35

f:id:narukami894:20191120161334p:plain

業務の検証用環境は、別途stagingのenvを追加して運用していたため、気がつきにくかった。 最初はハマって悲しい気持ちになっていたが、これはproduction環境で実行されないようにという心配りなのですね。
ApplicationControllerか何か適当な箇所でRack::MiniProfiler.authorize_requestを実行してあげることで、無事計測窓が表示されましたとさ。

【第4回】ReactNativeにゆかりのあるスタートアップが集う会 参加レポート

はじめに

ふたたびReact Nativeの勉強会にブログ枠で参加した。

https://r-n.connpass.com/event/126775/

前回に引き続きシャンパン枠のひとが開幕と同時にシャンパンを開けてひと盛り上がりするし、今回はFlutter枠というRNのライバル(?)フレームワークの発表がいくつかあったり、技術書販売枠の人が先日の技術書展で出した本を売っていたりした。

この勉強会はそんな独特な枠があったり、テーマやRN歴/プログラミング歴の縛りなどがないので、良い意味のカオスというか、Melting Pot感がある。

個人的には毎回新しい話題に触れられるし、知らないことに「?」となることも多いが、知るためのモチベーションにも繋がりやすいので、よいと思ってる。 来月(5月)はおやすみで、6月に渋谷にて100人規模で開催するらしい。楽しみ!

tl;dr

  • 今回はFlutterTypeScript回だった
    • Flutterの強み: 描画ロジックがOSに依存しない、ホットリロードの速さ
      • Googleの開発する言語だし、将来性はかなりありそうな感じ
  • TypeScriptのAny容認派/Any断固反対派の溝は深い
    • 容認派の意見
      • ひとまず入れることだけでも意味は大きい
      • Anyを入れることでゆるやかに導入できる
    • 断固反対派の意見
      • 型の安全は完全にしないと意味がない
      • Any入れるくらいならTSにしないほうがマシ
    • TS使ったことない/ゆるい型の言語しか馴染みのない自分としてはまだピンときてない
    • チーム開発/スピードが求められるところだと、あんまりカッチリしすぎてもうまくいかないような気はする...

広告計測してと言われた時にReact Nativeエンジニアが詠む資料

発表者

@syokenz さん 株式会社キッチハイクのCTO。

キッチハイクの広告計測の概要

  • AppsFlyer, Google Analytics for Firebaseの二刀流
    • 広告タップ〜アプリインストール(アプリ外部/ユーザ獲得)の計測: AppsFlyer
    • アプリ起動後〜課金(アプリ内部/ユーザ行動)の計測: Firebase

なぜ分けているのか

  • AppsFlyerとFirebaseでは得意分野が違う(失敗談でも触れる)
    • AppsFlyerでもアプリ内分析はできないことはないけどFirebaseの方が得意
    • Firebaseでもアプリ外分析はできないことはないけど(略)

使用ライブラリ

  • react-native-appsflyer
    • AppsFlyer公式
    • READMEが充実しているし、サポートもすぐ答えてくれる
  • react-native-firebase

使い方

  • イベント内部でtrackEvent関数をコール
    • AppsFlyer, Firebaseにロギング
    • 別途APIサーバ(Rails製)でもイベントログを取得している
    • 見る画面が分散してつらくなっているので、BigQueryで集約する予定

失敗談

  • ストアで見るより新規インストールが多い
    • AppsFlyer SDKを入れたアプリへのバージョンアップでも計測されてしまう(AppsFlyerの営業さん談)
    • AppsFlyer側のDBにIDがないと新規ユーザとしてカウントされてしまうため
  • Debugビルドでも計測されてしまう
    • 開発環境ではif文で止めましょう
  • Firebaseで全部やろうとした
    • Firebase Dynamic LinkがAppStoreの計測でうまくいかなかった
    • AppsFlyerの導入で解決
  • AppsFlyerで全部やろうとした
    • Firebaseのアプリ内分析が使いやすい
      • Audiencesによるフィルタ
      • アプリバージョンや年齢などのプロパティがデフォルトでセットされている
      • Audiencesでフィルタしたユーザにプッシュ通知を標準機能だけで実現可能
      • AppsFlyerでは有料

Vue.js - ReactNative - イマ Flutter

発表者

@oligin020 さん 株式会社ファームノートのインタラクションデザイナー/フロントエンドエンジニア。 デザインツールSTUDIOの技術顧問も担当。

MLP(Minimum Loveable Product)の概念

  • MLP(Minimum Loveable Product)
    • 愛される最小のプロダクトを作る
  • MVPでは作り込みは悪とされる風潮がある
    • 演出の作り込みができない

どうやっているのか

  • プロダクト設計のサイクルとデザイン設計のサイクルを分離して、2つのイテレーションを回す
  • Bootstrapのようにデザインフレームを作り込んで、プロダクトに混ぜ込む

RNでインタラクション実装はたいへん

  • アニメーションの表現を追求すると、RNだと物足りなくなる
    • RNにAnimation系の機構があまりない
      • React界隈ではCSSに委ねているから?
    • 特にインタラクションの実装がつらい
      • ひとつの基準である60FPSが出ない
      • iOS/Androidで挙動が違う

Flutterへの移行

  • 描画結果がOSで変わらない
    • 触り心地の良いUIを実装できる
    • プラットフォーム固有のバグも少ない
  • Google 謹製
    • Material ComponentはAndroidより充実している
    • Lint, デバッグツール、テストツール完備
  • RNを書いていたら、1ヶ月くらいで書けるようになる
    • Webのほうは腹をくくって書き直す
  • アーキテクチャ、設計思想が近いので読み替えでいける(状態管理など)

VueNativeとReactNativeでキメラアプリを作っている話

発表者

@iwsksky さん 株式会社ジラフのエンジニア。 質問箱をRNで書いている。Android開発歴が長い。

VueNativeをRNと共存させつつリプレイスしていっている

  • VueNativeとは: Vue.jsでアプリをクラスプラットフォーム開発できるRNのラッパー
  • なぜリプレイスするのか(VueNativeのつらみ)
    • RN以上にドキュメントが存在しない
    • ライブラリがただラップしているだけのものが多い
      • 依存モジュールのバージョンが古い
    • 完全に開発止めるのはむりなので、緩やかなリプレイスしていってる

いちおう共存はできてる

  • transformerをかませることで、一緒にビルドできる
  • propsの定義さえ一致していれば、tsxからVueを呼べるので、既存のコンポーネントをよびだせる
  • アーキテクチャは共通してる
    • vuex, reduxの共存も、(冗長になるが)できる

PanResponderを振り返る

www.slideshare.net

発表者

@14__oz さん 株式会社オープンエイトのAndroid(Kotlin)/RNエンジニア。

PanRespnderとは

フリック入力をつくる

  • x軸, y軸にどのくらい動いたかを判定する機能を使う
  • タップ判定を定義する
    • x軸/y軸方向への動きの量が基準値より小さかったらタップと認識する
  • フリック判定を定義する
    • x軸/y軸方向への動きの量が基準値より大きかったらフリックと認識する
    • フリックの方向は移動量の差分の正負で判定できる

JavaScript製npmパッケージをTypeScriptで書き直した話

発表者

@hmktsu さん 株式会社g&hのエンジニア。 実践Expo の著者で、先日の技術書展で#1人チーム本を出版している。

自前のJSライブラリをRNでリライト

やる作業

  • jsx記述があるjsを.tsxに変更
  • jsx記述があるjsを.tsに変更
  • d.ts(型定義ファイル)に型を記述する
    • パッケージにどんな型の関数があるかを教えてくれる
    • 型がわからないとき、悩んだときはanyつかえばいい(any容認派)

所感

  • eslintがTSに対応したのでとても楽
  • npmで公開する場合と、通常のアプリ制作ではConfigファイル(tsconfig.json)に設定する内容が違う気がする
  • d.tsを自動でひとつにまとめることはできない
    • 現状では、中規模以上のライブラリだと複数d.tsがあることを容認する必要がありそう

Flutterはなぜ楽しいのか

発表者

@eyasuyuki さん フリーランスAndroid/iOSエンジニア。

Flutterのいいところ

  • 環境構築が楽
    • デフォルトで入ってるLintが便利
    • Firebaseとの連携も楽
  • Dartの言語仕様がシンプル
    • Javaにけっこう似てる
  • ホットリロードはやい
  • UI構築が楽
    • すべてがWidgetという概念
  • Android StudioにFlutterのプラグインを入れるだけで書き始められる
  • ゆくゆくはmacOS, Windowsアプリ, Webアプリの開発もできるようになる構想がある

Debugging React-Native

発表者

@natural_clar さん

デバッグツールの使い分け

  • 以前はreact-native-debuggerを使っていたが、やめた
    • 動きが重くなった
    • Hooksとの互換性がない
  • 以下の2つを用途によって使い分けている
    • debugger-ui(デフォルトのデバッグツール)
      • なんだかんだで機能が揃っている
    • react-devtools (おすすめ)
      • state変更の速度を計測できる
      • inspectorでスタイルの調整とかもできる

【第3回】ReactNativeにゆかりのあるスタートアップが集う会 参加レポート

はじめに

React Nativeの勉強会にブログ枠で参加した。 r-n.connpass.com

シャンパン枠なる謎の参加枠があり、LT開始時にシャンパンが開けられて終始テンションの高い感じだった。 一瞬戸惑ったけど、振り返ってみると懇親会の時の人にいつもの勉強会よりかなり人に話しかけやすい雰囲気ができていたし、そういう盛り上げ方大事だな〜と思った。

Twitterハッシュタグもけっこう盛り上がっていた。 https://twitter.com/hashtag/rnstartup?vertical=default&src=hash

自分はReact Native始めたばかりで、わからないことが多くて悔しかったので、どんどん吸収していきたい。

以下にLTとパネルディスカッションの内容をまとめてみた。

tl;dr

  • みんなの関心は ネイティブ or Expo と テスト
  • 次点でNative Module, ツール周り, 開発工数/速度
    • Expo使ってる/使ってないはちょうど半々くらいだった(Expo意外に多い)
    • テスト書いてるのは少数派だった😢
  • RNあるある: 必要な情報が探しにくい
    • 公式とライブラリのドキュメントで情報が分散してるケース
    • そもそもライブラリのドキュメントが見づらかったり書いてなかったり
    • よってかなりハマるケースもある、生の知見がだいじ👀
  • 案件の見極め大事
  • RNコミュニティの層の厚さ
    • ゴリゴリに新しい技術を追っているところ
    • 少ないリソースで開発してるところ

React製WebサービスをReactNativeでアプリ化した話

speakerdeck.com

発表者

@t0m0210s さん

  • AutoScale フロントエンドエンジニア
  • socialdog のアプリ開発、CIを担当
  • 2週間ほど前に、ReactNative版をリリース(iOS版のみ)

工数

  • 約4ヶ月でリリース
    • 11月〜2月で開発
    • 1月にNativeModuleとデザインのブラッシュアップ
    • 2月末〜 課金、Apple審査
    • 3月テスト

開発

  • 1, 2週間に一回、リリースビルドしたアプリを触る会をやった
    • 機能追加や改善含めブレストする
  • WebViewをどんどん使う
    • グラフや課金モーダルはWebViewで実装した
    • 変更の多いところ、複雑なところはWebViewを使う
  • 開発は iOS のみに注力
    • AndroidはBitrise通ることのみ確認
    • 開発終盤で Android を触ってみると、(課金などネイティブ周りを除けば)微調整すれば出せるレベル
    • 1ヶ月ほどあればAndroid版もリリースできそう

リリース時にやっておいてよかったこと

  • Sentryによるエラー検知(一番やっておいてよかったこと)
  • Bitriseによる自動リリース
  • AppsFlyer, FirebaseAnalyticsなどのアナリティクス周り
  • AppFollowなどのAppStoreレビューやアナリティクス通知

RNの良い点・辛い点

  • 良い点

    • WebのReact資産があれば、爆速で開発ができる
      • Reduxなどは、ほぼそのままWebのものを持ってこれた
      • インターン生などの開発経験が浅い人との役割分担ができた
      • 途中で大幅なデザインブラッシュアップがありつつも、爆走で開発できた
      • もし資産がなくても、フロントエンドエンジニアがいればけっこういける
    • いいパッケージがあればコピペでNativeが動く
  • つらかった点

    • Native(iOS, Android)周りで慣れるまで詰まる
    • Nativeパッケージに依存している

react-native-firebaseのあるある早く言いたい

www.slideshare.net

発表者

@tkow39 さん

  • ReactNativeにゆかりのあるスタートアップが集う会 LT皆勤賞
  • Leverages 新規事業開発所属、元teratail開発メンバー
  • terascout をiOS版のみリリース(β版)

react-native-firebase

  • Firebaseを使うなら、firebase-web-sdkよりもreact-native-firebaseのほうが高機能
  • Expo の eject推奨
  • 自分が使いたい機能だけ使うことができる

Authentication

  • 以下のような機能が一瞬で実装できる

    • メールログイン
    • メールリンクログイン
    • SNS OAuthログイン機能
    • ユーザー管理API
    • DeepLink認証
  • あるある: 同じメールアドレスで違うSNSアカウントを登録できないことにハマる

    • できなくはないがバグが多い
    • Firebaseの設定でdisableにするのを推奨

DeepLink認証

  • リンクを開いたデバイスの種類によって挙動を変えられる
  • 直接アプリに遷移もできる

  • あるある: ドキュメントがいろんなところに分散している故に初期設定が超めんどくさい

    • RN公式
    • Firebase公式
    • react-native-firebase
  • handleCodeInAppをtrueにするとappに直接飛べるになる

(FireStoreについては発表時間切れになってしまったので、スライドを参照。)

React Native アプリをどうテストしてますか

talks.leko.jp

発表者

@L_e_k_o さん

  • CureAppのチーフエンジニア
  • Javascript(Node, TypeScript, React Native)

前提

  • E2Eテストじゃないとテストできないことを、単体テストに切り出していく
  • Universal Javascript(ふつうのJS)はテストできるので、それ以外の箇所

ミドルウェアのモック

  • importした外部ライブラリを直接使うとモックしづらい
  • 高階関数から渡してあげるようにするとモックしやすい(interface injection)
  • jest.mockでも可

テスト断面

  • 複数の条件が必要なテストはめんどくさい
    • テストはめんどくさいとどんどん書かれなくなっていく悪循環
  • 事前条件をゆるくしてあげる(= テスト断面を増やしてあげる)

Node.jsのテスト

  • supertestというライブラリが便利
  • Cookieの引き継ぎとかもできる
  • supertestは実質E2E
  • HTTP層とロジックを分離してあげれば普通にかける

コンポーネントのテスト

  • storybook/storyshots
    • Storybook使っていれば && コンポーネント自体が複雑なロジックを持っていなければ使える
    • storiesを定義しておくだけでスナップショットテストができる
    • 少なくともエラーが起きないかどうかをテストできる
    • propsのパターンを網羅するのだけがめんどくさい

ネイティブモジュールのテスト

  • 一部のネイティブモジュールはSimulatorではテストできない
  • 現状は実機でまごころこめて動作確認しかない...?

RN の Upgrade に近道なんてねぇんだよ

発表者

@natural_clar さん

  • CureAppのエンジニア, アメリカ人
  • React, React NativeのほかにOSSの翻訳活動などもやっている

RNをアップグレードしたい理由

  • 0.56: Babel 6 から Babel 7 に移行した
  • 0.57: TypeScript の導入が容易に
  • 0.59: React Hooks が使用可能になる

RNをアップグレードせざるを得ない理由

  • 0.55.4: 日本語、中国語の変換が確定されてしまうバグ
  • 0.57.2: (monorepo の場合)他の Package にある Assets から画像が読み込めないバグ発生
  • 0.57.5: XCode 10の新ビルドシステム対応

アップグレードでやらなきゃいけないこと

  • Dependency対応
  • build.gradle, .pbxproj ファイルの変更
    • Native知識がないとツラい
  • Babelのライブラリ(0.56での鬼門)
  • rn-cli.configの変更(0.57での鬼門)
    • バージョンアップは0.56と0.57が鬼門で、それ以降は辛くない

バージョンアップツール

  • RNのバージョンアップツールはワークしなかった
    • (旧)react-native upgrade
    • react-native-git-upgrade
      • 動かなくなって、Killされてしまった
  • rn-diff-purgeで差分を見て粛々とDiffを見ていくのが一番の近道
    • 0.59 以降ならこれを用いた新react-native upgradeが使用できる

React Native×GraphQLで開発したら便利だったお話

speakerdeck.com

発表者

@mediaboxe さん

  • ORSO テクニカルリレーションマネージャー
  • 最近はReactNative, LineClova, IoTをやっている

GraphQLとは

  • Web APIの規格のひとつ
  • queryリクエストとmutationリクエストの2つでできている
  • RESTでいうとqueryはGET、mutationはPOST, PUT, DELETEにあたる
    • queryはクライアント側で欲しいパラメータを指定できる
    • mutationは戻り値で欲しいパラメータを指定できる
  • React NativeだとApollo Clientというモジュールがデファクトスタンダード

Apollo Client

  • キャッシュの自動更新が便利
    • キャッシュの更新が簡単
    • API数が減らせる!
    • 取得パラメータを改修しやすい
  • デメリットもある
    • キャッシュの追加と削除は大変
    • 通信のエラー制御が大変
      • アラートだらけになってしまう

E2EテストライブラリDetoxの導入でハマった話

speakerdeck.com

発表者

@ariiyu さん

  • ウォズ株式会社 代表兼エンジニア
  • RN歴1年半、iOS歴4年以上
  • キッチハイクの開発を手伝ってくれてる

Detox

Detoxの仕組み

  • テスト層とアプリ層をDetox serverが仲介する
  • テストは非同期
  • Detoxは自動的にテストとアプリを同期する
    • sleepを書かなくてすむのでテストが安定する

テストがコケる

  • テストがハングしてタイムアウト
    • 非同期オペレーションを待機し続けてしまう
  • 要素が見つけられない
    • 待機が十分でない

発生したバグ

  • 無限ループのアニメーションでハングアウト
    • デフォルトでアニメーションが終わるのを待機する
  • 対象の要素が出現前にテストが失敗する
  • Push 通知許可のアラートを押せない
    • あらかじめ設定しておく
  • Androidで要素が検出されない

地道なデバッグ

Detoxどう?

  • テスト自動化できそう!
  • ドキュメント、issueはまとまっている
  • 自動同期はいつもうまくいくとは限らない
  • 現状はワークアラウンド必須?
    • テストのときだけファイルの差し替えなど
    • そもそもアプリの実装、テストコードの見直しも必要

WebエンジニアのReactNativeでの戦い方

www.slideshare.net

発表者

@NaoshiHoshi さん

  • ピクスタ株式会社 開発部部長
  • Rails, AWS, React
  • Snapmart をRN(Expo)で実装

現状

  • iOSのアプリの開発継続が困難だった
    • 実装者は退職済み、仕様を知っている人が非エンジニアしかいない
    • エンジニアは自分と学生バイトのみ
      • ネイティブアプリの開発知識はなし
      • ネイティブアプリエンジニアの採用も困難

RNに踏み切った背景

  • PMFを目指して高速で開発したい
  • 限られたリソースのなかで効率よく開発したい
  • PWAと悩んだが結局RNにした
    • メインのユーザー層が若いのでアプリの方が使われそう
    • PWAだとデザイナーの採用難易度が高くなる

Webエンジニアの戦い方

  • JavaScriptの世界で戦う
  • expo detachは絶対しない
  • ビジネスサイドとの期待値調整をやる
    • ReactNative + Expoでできないことはやらない

パネルディスカッション(抜粋)

パネラー

@t0m0120, @natural_clar, @mediaboxes, @ariiyu

Push通知/ネイティブ機能が不要なアプリを作りたいとき、PWAとRNどっちでつくる?

  • 機能要件だけじゃなく、ユーザ層も含めて検討する
  • RNにするなら
    • ストアからの流入を見込みたい場合
    • いずれPush通知/ネイティブ機能が必要になりそうな感じがする場合
    • 対象のユーザ層が若い場合
  • PWAにするなら
    • 更新が早い場合
    • 複雑さや自由度を求められる場合

業務委託のエンジニアって採用している?

採用している。 主にUI系のタスクや、Storybookのコンポーネントを作ってもらうなどの疎なタスクを渡している

Pushのテスト気になる、社内の端末かきあつめている

Push通知のテストはまだ知見がなく、どこも自動化はできていない。

ejectの是非とタイミングについて

  • 要件に依存する部分が大きい
    • Bluetooth を使う機能などは、Expoでは実現できない

(Expoを使っている人に)Expoを使っているなかで、Expoが理由で泣く泣く諦めた機能とかある?

  • 要件を全く満たせないことは少ないが、細かい仕様が満たせなくて歯がゆい時は多い
    • 例1: スワイプ機能の細かい処理(react-native-swiper)
    • 例2: Facebookなどのシェア機能

ゆるゆるRSA暗号 その1 - なんちゃって実装編

RSA暗号を自前で実装してみた。 現状いくつか問題があるが、公開鍵/秘密鍵の生成, 数値の暗号化/解読ができる。

gist.github.com

使い方

[narukami894] ruby $ irb
irb(main):001:0> require "./rsa"
=> true
irb(main):002:0> RSA.generate
Public Key: '291311:290231'
Secret Key: '290231'
=> nil
irb(main):003:0> RSA.encrypt(42, '291311:290231')
Code: '6936'
=> nil
irb(main):004:0> RSA.decrypt(6936, '291311:290231', 290231)
Message: '42'
=> nil

モチベーション

ブログのネタが欲しかった セキュリティマネジメント試験の勉強をしている時に、そういえばRSA暗号ってどういう仕組みなんだろう?ってふと思い。

所感

RSA暗号についてのWikipediaや他のブログ記事をみながら作ったもので、 数学を高校の数IIBで投げ出した自分には公式の定義をみた時に多少アレルギー反応が出たが、いざ書いてみるとたった60行程度で実装できて、驚いた。

あらゆる場所で使われている強固な暗号の原理がこんなシンプルなものっていうのに単純に関心する。やはりシンプルなものは強くて美しいのだ。 ただ現状だと、桁数が大きい時にエラーが出てしまうので生成する素数の桁をかなり小さくしている。たぶん速攻で解読されてしまうと思う。

前述したが数学の知識が皆無なので、乱数の生成はprimeライブラリに頼り、 秘密鍵の生成は素のrubyだと遅かったので、techrachoに出てきたインラインC拡張ライブラリを使うなどした。 (正直RubyInlineを使ってみたかっただけで、実際に速度を測ったわけではない。次回測るか)

techracho.bpsinc.jp

おわりに

車輪の再発明(と言えるのかも怪しいくらい)ではあるが、他の実装をカンニングしなかったことは自分を褒めたい。 一応その1と銘打っていて、次回は答え合わせとしてRubyの標準ライブラリのOpenSSLを見たり、他の人のブログのRSA暗号の実装を見てみることとする。 docs.ruby-lang.org

Metabase 0.30のリリースノートを翻訳したものが出てきたので貼る

過去に会社のTech BlogでMetabaseの記事を書くときに、0.30のリリースノートを翻訳したものを使おうと思っていたのだけど結局使わなかった。 さっきノートを整理していたら出てきたので、かなり今更だが貼っておくとする。 ブログを書いたのが去年の8月で、Metabaseの最新版は0.31.2になっているのかと思うと時の流れは早すぎる...。

Metabase 0.30 - 成長のタイミング

最初にMetabaseのライセンスをオープンソースにしてから二年半近くが経ちましたが、私たちチームのほとんど誰もが、このプロジェクトがどこに向かうのかを予測できませんでした。 はじめMetabaseは、小さなスタートアップや非営利団体が、膨大かつ混沌としたデータの海に浮かぶ確かな情報という名の島にたどり着けるような牽引力を与えられるようなツールだと思っていました。 しかし今や、何千もの大小の革新的企業が、彼らのビジネスのためにMetabaseをデプロイしているなんて、我々は予想していませんでした。 ご存知の通り、Metabaseはより小さな規模のチームのためにデザインされたと感じますし、実際そうでした。 そもそもMetabaseは我々のような、小さくてまとまりがなく、データ権限についてあまり心配しなくてもいいようなチームに向けて作ったからです。 Metabaseをどのように使用しているかを多くのチームと話し合った結果、そろそろMetabaseも少しだけ大きくしなければならない時が来たようです(安心してください、やりすぎませんよ)。私たちはMetabase 0.30を、どんなサイズのチームでもよりよく使えるように再編成してリリースしました。

コレクション

もっとも多かった要望を叶えるために、ダッシュボードをコレクション内で管理するようにしました。 Metabase 0.30 では、コレクションが最上級市民になりました。 ダッシュボード、クエスチョン、パルスが(いずれはメトリクスやセグメントも)コレクションの下で管理できるようになり、必要なデータがすぐ見つけられるようになりました。 コレクションはネストすることができ、データを内部的にどのように扱うかに合わせて設定することができます。 注意: もし過去のバージョンから0.30にMetabaseをアップグレードする場合、ダッシュボード・パルス・その他のクエスチョンは新しい場所に移動します。詳しくはこちら。

ピン機能

たくさんのデータ群のなかから重要なものを見つけ出すのはちょっと難しいですよね。 コレクション内のアイテムを見つけやすくするために、重要なデータをページの先頭にピン留めできるようになりました。 重要なデータを速く簡単に手に入れられるように、"Our analytics"にピンしたデータはMetabaseのホーム画面にも表示されます。なので、やることはログインしてアイテムをクリックするだけです。

権限管理

データを扱う作業は、データを触る権限のある人のみがダッシュボードやクエスチョンにアクセスでき、逆に触ってはいけない人間が触れてはいけないものです。 ユーザが見ることのできるダッシュボードやパルスを、コレクション単位で簡単にコントロールできるようになりました。また、グループの権限もすぐに変えられます。

個人のためのコレクション

Metabaseのすべてのユーザは自分のコレクションを持てるようになりました。個々人の必要なクエスチョンやダッシュボードを作成できます。 これによって、全体のスペースをきれいに保てるだけでなく、個々人がよりデータの探索をしやすくなります。

アプリ内横断検索

昨年第3期のマーケティングの数値を、他のコレクションの中から見つけ出す必要があるのですね? 横断検索機能がナビゲーションバーに実装され、どこにいても欲しいデータを見つけ出すことができるようになります。 また、コレクション内や検索結果のなかでアイテムのタイプ(ダッシュボード、クエスチョン、パルス...)をフィルタリングできます。

データブラウジング

私たちの核となる考えのうちのひとつは、データを人に近づけると、いいことが起こるということです。 メインページから直接データを参照できるようになり、作業をするために必要な生のデータに簡単にアクセスできます。

比較

例えばあなたがGizWidget社で働いていて、ウィジェット類の売上が機械類に対してどのくらいなのか、興味ありますよね? 棒グラフや折れ線グラフをクリックすることで、そのデータと他のすべてのデータとを比較することができます。 もしx-rayを表示しているのなら、そのセグメントと他のセグメント、もしくはテーブル全体と比較するオプションも閲覧できます。

データ比較

テーブルオタクたち大歓喜! テーブルで条件付き書式の追加ができるようになり、データの大小・増減を強調できるようになりました。 この設定はパルスにも反映されます。

リレーションのあるテーブルのカラム参照

もうひとつテーブル大好きなみなさんのために。表示したテーブルのリレーション先からカラムを追加して、好きなように並べ替えができるようになりました。

スペイン語版が公開されました

また、Metabaseの最初の翻訳版として、スペイン語版をリリースしたことを大変嬉しく思います! Github上の友人であり、難しい仕事を成し遂げてくれたJoe Bordesに多大なる感謝を送ります。 この件については近々投稿するので、乞うご期待!

バグ修正

50以上のバグ修正・改善もさながらジャムのパックのように詰め込まれています。こちらから修正の一覧を確認してみてください。

バージョン 0.30 にするには

このリンクからMetabaseの最新版を常にダウンロードできます。 www.metabase.com/start/

アップグレードする場合、大きなリリースで多くの変更点があるため、まずこちらの「0.30にアップグレードする前に確認しておくことのリスト」をチェックしてください。また、こちらのプラットフォームに合わせた説明を読んでください。 毎回のことですが、データベースのバックアップをとることを強く推奨します。

フィードバック募集

このクールな変更を楽しんでもらえたなら、皆さんがどう思ったかをぜひ聞かせてほしいです。 以下の簡単な調査フォームから、みなさんの考えをシェアしてください!

いつもMetabaseを使っていただきありがとうございます。また次の機会にお会いしましょう!

【メモ】React Native iosのbuild時にerror: bundling failed: Error: ENOENT: no such file or directory, uv_cwd at Object.resolve が出るとき

Buildは成功するけど、エミュレータで上記のエラーが出て怒られてしまうとき。

https://github.com/facebook/react-native/issues/21038#issuecomment-420193598 を参考に、

いったん killall noderm -rf ios/build/ をしてから、 再度 react-native run-ios を実行すると起動できた。

他のnodeのプロセスもkillしちゃうから、本当はちゃんと ps aux | grep node とかで調べてやらないといけないのだけど、現状これで良しとする。