チームスピリットデベロッパーブログ

チームスピリット開発者のブログ

【バックエンドランチ #再始動】潜入レポート!

こんにちは。プロダクト開発チームの松田(id:a-matsuda)です。

クリスマス、お正月と転がるように毎日が過ぎていく師走となりましたが、みなさまいかがお過ごしでしょうか? プロダクト開発チームのフロアには、こんなに素敵なクリスマスツリーが飾ってあり、季節を、いまを、味わうことができます。 毎年ツリーの飾り付けをしてくれている皆さん、ありがとうございます!!

毎年恒例のクリスマスツリーwithアストロ

さて今回は、プロダクト開発チームで行っている「バックエンドランチ」に潜入した様子をレポートします!!

バックエンドランチとは

2018年夏にご紹介したフロントエンドランチの記事はご覧になりましたか?まだの方は、是非チェックしてみてくださいね。

teamspirit.hatenablog.com

バックエンドランチはフロントエンドランチと同様、バックエンド領域の気になる話題や、チームとして解決したいバックエンド課題をネタに和気藹々とランチしながら、侃々諤々盛り上がろうぜ、という取り組みです。 伝統ある?フロントエンドランチに対して、バックエンドランチは長い冬休みに入っていましたが(笑)、最近入社をしてくれたメンバーを中心にこのたび復活を遂げました!

バックエンドランチ #再始動

少し前になりますが、2018年11月6日(火)13:00より「バックエンドランチ」が行われました。

お弁当を持って集合!

メンバーがお弁当を持って集まってきました。

メンバー集合

ナポリタン、美味しそうですねぇ。

ランチ風景

こんなテーマで話をします

バックエンドランチでまず取り上げる大きなテーマは「Apex デザインパターンのアンチパターンについて学ぼう!」です。

Apexとは、Salesforce独自のプログラミング言語で、この言語を使うことで、Salesforceサービスのカスタマイズや修正、トリガーやストアードプロシージャの作成、ビジネス・ロジックの構築、実行などが可能となります。 Apexは、Javaに似ているオブジェクト指向の言語なので、Javaでおなじみのデザインパターンがまとめられています。今回は、デザインパターンの中でも、アンチパターンやベストプラクティスを勉強していこうというわけです。

ApexやSalesforceについてしっかり学んでみたい方は、Salesforce社の提供するTrailheadという秀逸なE-ラーニングツールがありますので、ぜひ取り組んでみてください!

今回の流れ

今回のバックエンドランチは、こんな流れで進んでいきました。

  • 学びの進め方
  • 一個やってみる:Over usage of formula fields
  • もう一個やってみる:Functional Decomposition

学びの進め方

Packt Publishing社から出版されている「Apex Design Patterns(by Anshul Verma and Jitendra Zaa)」を参考図書に、どんな風に学びを進めていくか全員で議論し、参考図書の章立ての順で学んでいくことが決まりました!

サマリも含め、13章あるんですね!

アンチパターンとベストプラクティス

一個やってみる:1. Over usage of formula fields

最初は「数式フィールドの過多」です。数式フィールドは簡単に作成および管理でき、値を動的に表示する場合には非常に便利ですが、レコードが取り出されるたびに計算される計算フィールドです。そのため、コードやレポートを使って大量のレコードを取得するなど多くの数式フィールドを使用すると、システムのパフォーマンスが低下します。また、数式フィールドがクエリまたはレポート条件で使用されると、アプリケーションのパフォーマンスがさらに低下する問題も発生します。

全員で、以下のようなことを話しながら、学んでいきました。具体的に自分たちが開発しているプロダクトでの使用を意識しながら、書いてあることを読み解くと、学びが深まることを実感しました。

  • そもそも数式フィールドは、TeamSpiritでどれくらい使ってる?
  • TeamSpiritで、●●●のような使い方をしたら、パフォーマンスに大きな問題が出そうだね
  • 数式フィールドのパフォーマンスを向上するには、Salesforceのサポートチームに連絡を取ってインデックスを貼ってもらうといいんだね

喋りたいことがいっぱいあります

もう一個やってみる:2.Functional Decomposition

トリガーやページコントローラー内に全てのビジネスロジックを書くことは簡単かつ迅速ですが、維持が難しいので「機能分解」しましょうという内容です。オブジェクトの観点から考えて、それに応じた1つ以上のクラスに機能分解することが非常に重要ですとはっきりと書かれています。

機能分解については、こんな会話になりました。

  • 今の開発では割とできているよね。
  • 機能分解の視点で、いくつか気になるクラスがあるなぁ。-->アクション一覧に登録しました
  • トリガー内にもビジネスロジックが入っているところはないだろうか。呼び出しているケースはどうだろうか。
  • トリガーから勤怠計算ロジックを呼ぶというは、アンチパターンだね。

まとめ

このように、学びを通して業務という実践に活かすことを意識しながら進めてきたバックエンドランチ。 実はこの処理が気になるんだよねという内容がポロっと出てきたり、参加したメンバー全員が、意見や気づきを積極的に、かつ楽しそうに発言している様子が印象的でした。

楽しそうな表情のバックエンドメンバー

次回は、3.Ignoring the equals() and hashcode() methods while performing object comparison、4.Circular dependencies に取り組むことを決めて、終了となりました!次に繋がるいいスタートが切れたように感じました。

バックエンドエンジニア募集♪

チームスピリットでは、バックエンドエンジニアを募集しています。最先端のPaaSプラットフォーム(Salesforce Lightning Platform)で、TeamSpiritのエンジンとなるロジックを生み出す仕事です。今回ご紹介した、バックエンドランチに飛び入り参加いただくことも可能ですので、少しでも興味を持っていただいた方、ご連絡くださいね。(直接メッセージでも、下記の応募フォームからでも構いません)

エンジニア募集

終わりに

最後になりましたが、この投稿は チームスピリット Advent Calendar 2018 - Adventar 第5日目の投稿になります。