見出し画像

noteが開発で使用しているSaaSサービスまとめ【2021年度版】

noteでエンジニア兼ライターをしているmegayaです。

早いものでnoteはサービススタートから7年が経ち、開発体制も技術も大きく変わってきました。現在でも、さまざまなSaaSサービスの導入が検討され、試験的に運用がされています。

日々、使っていくサービスが変わっていくため、社員の中で「今ってどんなサービスを使って開発しているの?」という声が上がってくるようになりました。

社内のWikiにまとめてもよかったのですが「同じようにサービスを運用している企業の参考になるほうがいいのでは?」と思い、オープン社内報として公開することにしました。

またAnother worksさんが公開していたまとめ記事が読み応えがあり素晴らしかったため、note社でもやってみようという話しになりました。

この記事を読んだ方のサービス運用の助けに少しでもなればうれしい限りです。

※ 一部、SaaSではないものも含んでいますが、note社で重宝しているサービスなので合わせて紹介いたします。

オープン社内報とは?
一般的には社員しか見ることのできない「社内報」をだれでも見られるように公開することで、会社の中の様子を感じとってもらう記事企画です。
本日の担当:エンジニア megaya

ソースコード管理

GitHub

説明不要のソースコードホスティングサービス、GitHubです。(「ソースコードホスティングサービス」と書いた方が逆にわかりづらいですね……)

noteもcakesもGitHubでコード管理を行っています。

MergeQueue

MergeQueueは名前のとおりプルリクをキューのように追加し、自動でマージしてくれるサービスです。

noteは一日にリリースされる回数も多く、エンジニアの人数が増えてきた際に「developブランチにマージしようと思ったら誰かが先にマージしていて、またローカルで最新の変更を取り入れないといけない」という問題が多発していました。それらを解消するためにMergeQueueを導入し自動化することにしました。

現在はGitHubの機能であるauto-mergeと平行して使用しています。MergeQueueとauto-mergeの両方を使っていくか、どちらかだけにするのかはまだ検討中です。

クラウドサービス

AWS

GCP

Firebase

noteのインフラは基本的にAWSで成り立っています。

GCPはGoogle関連(GoogleMapなど)を取得するための各種APIの使用や、BigQuery、Firebaseとの連携などに活用しています。Firebaseはログ収集やApp Distributionでテストアプリの配布など、主にモバイルアプリでの利用になります。

CDN

Fastly

今や数々の大企業が導入しているFastly。noteでは主に画像のキャッシュや画像変換処理でお世話になっています。URLのパラメータ変更でリサイズなどの指定ができるため、画像変換の指定を手軽に行うことができます。

noteでは数年前まで画像変換をRails上で行っており、サーバの負荷が高くなってしまっている時期がありました。それを解決するためにでIMGIXというサービスを利用して画像変更を行っていたのですが、画像数での課金で料金が高額になってしまうことがわかり、Fastlyにのせかえました。

Fastlyへの移行は簡単に行えたわけではありませんでした。2019年夏頃から導入の検討をはじめたため、1年以上かかった計算になります。

Cloudflare

CDNとしての印象が強いCloudflareですが、note proでのSSL証明書の発行や、簡易的なアクセス遮断などにも利用しています。また、HTMLを配信することができるため、障害発生時の猫ちゃんの表示もCloudflareで行っています。かわいい。

noteの障害時に画面に登場するねこ

開発に利用しているSaaS

SendGrid

メールの受信や送信をブラウザやAPIで手軽に行えるSendGrid。noteはRailsで開発を行っているため、sendgrid-rubyというgemを利用してメールを送信しています。

noteやcakesを含めてSendGridを利用してメール送信を行っているのもあり、料金がそこそこ高額になってしまっているのが悩みどころです。

Sauce Labs

Sauce Labsはクロスブラウザテストをクラウド上で実行できるサービスです。

主にMagic Podでのモバイルのテストの実行環境に利用しています。また、note社はMac Book Proが貸与されるため、Windowsの動作チェック環境としても活用しています。

Sidekiq Pro

SidekiqはRailsでジョブキューによる非同期処理を行うためのgemです。Railsで開発経験のある方は一度はお世話になったことがあるのではないでしょうか。実はそのSidekiqにはPro版があります。(私は入社するまでProがあるのは知りませんでした)

Sidekiq Proに登録すると、クラッシュした時にジョブがロストしないようにできるReliability機能や、Jobの実行数を制限することができるRate Limitingなどさまざまな機能が使用できるようになります。

iframely

YouTubeやTwitterなどのHTML埋め込みをURLから簡単に生成してくれ、個人で使用しても便利なサービスです。

iframelyを利用することにより各種サイトに対応したHTML生成を自社で行う必要がなくなり、エディタなどでリッチな表現が簡単にできるようになります。開発でiframelyを利用する場合は「iframelyに対応していないサイトを表示させる場合にはどうするのか」という検討は必要になるでしょう。

監視

Sentry

フロントエンドのエラーモニタリングツールであるSentry。公式にJSとnode.jsのライブラリが用意されているため導入もしやすくSlack連携も簡単に行えます。また、リアルタイムの検知だけであれば無料で利が可能です。

SSRやSPAなどの開発はフロントの責務が大きく、自前ではエラー検知がしづらい問題があります。noteをAngularJSからNuxt.jsへ移行していた2018年頃にSentryを導入し、エラー監視するようになりました。

Datadog

リアルタイムのパフォーマンス監視、サーバメトリクスの収集、履歴の分析、フロントエンドのパフォーマンスメトリクスなど、多機能な監視サービス。インテグレーションも豊富なため、さまざまなサービスとの連携も可能。「機能が多すぎて使いこなすのに時間がかかる」という悩みすら覚えるほどです。

noteでもエラー検知からパフォーマンス確認まで、さまざまな用途で使用されており、各SaaSとの連携も行っています。

New Relic

個人開発から企業でのサービス運用でも幅広く使用されているパフォーマンス分析ツールです。無料ライセンスがあるため手軽に導入することができます。(2020年8月頃より料金体型が変更されました)

また価格体系が年間契約で明瞭なため、設定をミスして料金が大幅にかかってしまうという障害が起こらないのもありがたい点。

note社では障害時のAPIチェックや、パフォーマンス確認で活用しています。「APIのパフォーマンス関連で問題が発生したらまずはNew Relicを見てみる」という意識のエンジニアも社内には多いはずです。

Calibre

CalibreはWebサイトの速度監視をしパフォーマンスレポートを出してくれるサービスです。

社内でAPIやフロントのパフォーマンス改善を図るプロジェクトが今年発足されました。しかし、当時は計測ツールが導入されていませんでした。そのためCalibreを導入し、デプロイ前後のスコアを比較してどのくらい改善されたのかを確認するようになりました。

まだ実験的に導入している段階でもあり、これから先も使い続けていくかは検討中です。

テスト

Magic Pod

Magic PodはAIによる自動テストをモバイルアプリ、ブラウザの両方で行うことができるサービスです。日本発のプロダクトであり、Slackコミュニティでも要望がだしやすいため、日本人に使いやすいサービスであると言えます。

note社ではモバイルアプリのテストに使用しています。モバイルの自動テストツールは種々ありますが「テストを厳密に書ける」よりも「誰もがテストを気軽に作成できる」という点を重視してMagic Podを選択しています。アプリのインストールもいらず、ブラウザのみで操作も完結でき、料金も同様のサービスに比べると安価な点が魅力的です。

mabl

ブラウザ操作などのE2Eテストが自動化できるmabl。note社では2018年末ごろに導入。E2Eテストを自動化することによって自信をもってデプロイができるようになりました。

mablは自分でブラウザ操作した挙動をそのままテストとして保存できるため、簡単なテストの作成であれば複雑な操作は一切ありません。また、公式でChromeのエクステンションも用意されています。

特にデスクトップアプリが便利でおすすめです。ブラウザの挙動に影響されないため、テストの作成などをスムーズに行うことができます。

テスト実行時のスクリーンショットの保存や、ブラウザを見ながらのテスト実行もできるため視覚的にもわかりやすく使いやすいサービスです。

CI

CircleCI

もはやCIとしては説明不要なほど有名なサービスですね。

CircleCIはテスト環境として利用しており、テストがすべて通ったときのみマージできるようになっています。(デプロイはJenkinsで行っています)

余談ですが、CircleCIでDockerを起動しテストを行っていたため、DockerHubのRate Limitにひっかかることという問題がありました。そのため少し前にイメージの保存場所をECRに移行しました。

GitHub Actions

GitHub ActionsはCI/CDとして利用できるGitHubのサービスで、指定されたイベントのあとにコマンドを実行することができるイベント駆動型のアクションも作成可能です。例えば「プルリクエストを作成したあとにAWS SDKでコマンドを実行する」というようなスクリプトを実行できます。

noteはCircleCIを主に利用していますが、本体とは関係なく動けるプロジェクトはGitHub ActionsをCIとして利用することもあります。

その他のツール

Miro

リアルタイムで作成/編集ができるオンラインホワイトボードツールです。

付箋を手ではりつける感覚で資料をつくれるため、Zoomをしながらリアルタイム編集をスムーズに行うことができます。簡単にLPなどのモックもつくりあげていくことができ、スピード感のある議論が可能になります。noteのバリューである「すばやく試す」という言葉にぴったりなサービスです。

Zapier

さまざまなSaaSを連携することができ、作業を手軽に自動化できるサービス。職種に関わらず自動化処理を作成しているため「Zapierがないと会社が回らないのでは…?」と思うくらいnote社では重宝しています。

Slackと連携して、さまざまな活用方法が生み出されています。

・特定のワードが入ったツイートを検索してSlackに流す
・毎週定期で使うドキュメントを作成してSlackに投稿する
・Slackで特定の絵文字をつけたらissueを作成する
・特定の時間になったらアクセスログを取得してSlackに投稿する
・出勤 / 退勤の自動化

Redash

「PV数が欲しいからデータをだして」というように、エンジニアがSQLを叩いてデータを出力することはよくあることでしょう。毎回取得するのは手間なのでダッシュボードを作ってもいいかもしれませんが、それでは保守運用のコストがかかってしまいます。

そんな問題を解決できるのがRedashです。SQLを書いてダッシュボードが作成できるため、データを共有するのが簡単になります。また、オープンソースなのでライセンスに従って、自由に利用することができます。

noteではエンジニアに関わらずPMやnoteディレクターもこちらを使用してデータを取得して活用しています。


この記事が参加している募集

最後まで読んでくれた方へ。note社の様子や採用情報などをX(Twitter)で発信しています!