wwwave'sTechblog |ウェイブのエンジニアブログ

株式会社ウェイブのエンジニアによるテックブログです。会社の話や Ruby、Vue.jsについてなど技術的な話をしていきたいと思います。

株式会社ウェイブの人事部ブログです。社内の雰囲気やイベント、福利厚生などについてお伝えいたします!

株式会社ウェイブのエンジニアブログです。 エンジニアの目線から会社の話や技術的な話をしていきます。

これからのウェイブSRE

システム開発部SREチーム、マネージャーのm-nemotoです。
2021/08からチームのマネージャーとなり、約1年が経ちました。 前任者が築いてくれた基盤や制度を引き継ぎつつ、一方ではチームの課題にゼロから向き合った1年でした。
本記事では、これまでのチームの課題と、これからチームが何を目指していくかをご紹介できたらと思います。

これまでのチームの課題

これまでのSREチームでは、SREメンバーがプロジェクトの一つを担当し、インフラの構築〜運用を実施する、という業務内容でした。よくある「インフラ色が強い」SREチームだったと思います。
当然といえば当然なのですが、インフラチームとして活動することで「インフラ技術がサイロ化してしまう」という課題が生じました。DevOpsを実現するためのSREチームがDevOpsを阻害する、という中々クリティカルな課題でした…。
それだけではなく、SREメンバーが特定のプロジェクトを担当することで、トラック係数の問題、実施した改善事項を他プロジェクトに展開できない (しづらい)、DevOpsの成熟度がチームによってまばら、といった課題も発生しました。

上記の問題を解決するためには「チームの目標を見直した方がいいのでは」という結論に至り、私たちはチームの目標とミッションを再検討しました。

チームの目標とミッション

検討に使用した資料や書籍、ウェビナーの一部をご紹介します。
(いずれも素晴らしい資料でチームの成長に欠かせないものでした。資料を公開してくださった著者、関係者の方々にこの場を借りてお礼申し上げます!)

上記の資料を元に (ときにチームで輪読会を実施) 検討を続け、チームの目標を「DeveloperExperienceを最大化することでプロジェクトに貢献する」としました。また、ミッションを以下に絞りました。

◇ Platform SRE

開発チームが利用するインフラ環境を構築し、積極的にインフラの標準化を図ります。
標準化によって、実装コストの削減、改善事項の横展開、オンボーディングコストの削減などを改善します。
また、標準化したプラットフォームをSREチームの成果物として扱い、利用者に迅速なフィードバックを行います。

◇ DevOps (Embedded SRE)

SREメンバーが開発チームに参加し、DevOpsに基づいた改善を行います。
具体的には、DORA Metrics、バリューストリーミングマップを可視化し、開発チームのDevOpsパフォーマンスを測定します。
測定結果からボトルネックを把握した後は、チームの垣根を超えて、改善活動を行います。
行った改善活動はPlatform SREで巻き取り、組織全体への適用を検討します。

◇ ツール管理

Platform SREのミッションと重なるところはあるのですが、開発部で使う共通ツールの管理をSREで担当します。
クラウド管理や自動化などの改善を行い、運用コストを削減します。

今後

目標をチームメンバー全員で検討したため、目標設定が決まるや否やすぐにアクションに繋げることができました。
現在、Platform SREでは標準となるアーキテクチャの検討とIaCのコーディングルールなどの整備を行っています。DevOpsに関しては早速開発チームに参加し、DevOps関連のメトリクスを可視化できるよう準備中です。
実施したタスクについては本ブログで発信していけたらと思います。

最後に

これまでインフラ色が強かったSREチームですが、これからはSREの本来の目的に立ち返りDevOpsの推進と部全体の最適化を行うチームになりたいと思っています。
目標の変更は、開発部メンバーの協力なしでは設定できない目標でした。
負荷になってしまうところもあったかもしれませんが、快諾してくださった開発部メンバーには頭が上がりません。
そんな素敵なメンバーと一緒に仕事をしたいという方がいましたら是非募集要項をご覧ください!

recruit.wwwave.jp

「railsのこのメソッドどこに定義されてるんだ?」

本日の担当:Coolmicエンジニア イシカワ
・2019年4月入社の新卒社員。
・水族館巡りが趣味。
・最近の行きたい水族館は四国水族館。

実装中

🙎🏼
「jsonに変換したいんだけど、to_json使ってるのになんだか上手くいかないなあ」
「ん?as_jsonっていうのもあるのか、、、これって何が違うんだ?」

検索中

🙎🏼
「えーと rails to_jsonで検索してrailsのリポジトリに飛んで、、、」
「毎回どこに書いてあるのかいちいち検索するのもめんどいなあ :innocent: 」

ブログさん ⭐️
「メソッドのsource探すならrails consoleでsource_locationを使うと便利やで」
「こんな感じであっという間や」

pry(main)> Title.find(1).method(:to_json).source_location
=> ["/app/vendor/bundle/ruby/2.7.0/gems/activesupport-6.1.5.1/lib/active_support/core_ext/object/json.rb", 37]

🙎🏼
「え、一発じゃん、、、こんな便利なメソッドあったの?」
「gemとかのメソッドとかも良い感じに表示されるんかな?」

pry(main)> RestrictedTitleResource.new(Title.where(id: 1),params: {field: %i[id]}).method(:serializable_hash).source_location
=> ["/app/vendor/bundle/ruby/2.7.0/gems/alba-1.6.0/lib/alba/resource.rb", 66]

「完璧すぎ」

ブログさん ⭐️
「ついでにな、source.displayでメソッドの中身まで見ること出来るんやで?」

 pry(main)> Title.find(1).method(:to_json).source.display
    def to_json(options = nil)
      if options.is_a?(::JSON::State)
        # Called from JSON.{generate,dump}, forward it to JSON gem's to_json
        super(options)
      else
        # to_json is being invoked directly, use ActiveSupport's encoder
        ActiveSupport::JSON.encode(self, options)
      end
    end

「こんな具合や!」

🙎🏼
「コンソールでメソッドの中身まで見れるの?」
「to_jsonでハマってこんな有益な情報が知れるとは、、、」


  • 今回はソースコードの場所を表示してくれるsource_locationとメソッドの中身を表示してくれるsource.displayのご紹介でした!
    to_jsonがうまく動作してなかったのはキャッシュが効いててそういう風に見えてただけでした、、、
    でも今回ハマったおかげで便利なメソッドが学べて良かったです! 😆

  • こちらのブログの方が分かりやすくまとめてくださっていたのですごく助かりました!
    https://tanaken0515.hatenablog.com/entry/2020/04/24/231922

トップに戻る