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

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

パートナーオフィスアワー「アプリケーションライフサイクル管理 と Salesforce DX」にゲスト出演しました!

こんにちは、プロダクトディベロップメントチームの倉谷(id:a-kura)です。

AWS Summit Tokyo の期間中のとある2018年5月31日(木)に初回配信、2018年6月13日(水)に再配信されたパートナーオフィスアワー(構築力)Webinarにゲスト出演させていただきました。お呼びいただき、ありがとうございます。

f:id:a-kura:20180611011620j:plain

テーマ

  • アプリケーションライフサイクル管理 と Salesforce DX
  • Salesforce DX 事例

株式会社セールスフォース・ドットコムの川畑さんから米国で発表された資料を説明していただき、株式会社フレクトの齋藤さんから実際に Salesforce DX を実戦投入した話を共有していただきました。

私は昨年の Salesforce World Tour Tokyo で Salesforce DX について発表させてもらった経験からコメントさせていただきました。

f:id:a-kura:20180624141113j:plain

資料


Salesforce DX とは

Salesforce の考える Developer Experience を高めるための機能や仕組みの総称です。 Salesforce World Tour Tokyo で発表させていただいた内容を見ることができますので、Salesforce DX について知りたい、チームスピリットでどういった開発を行っているか知りたい、という方はぜひご覧ください。

teamspirit.hatenablog.com

どんな内容

アプリケーションライフサイクル管理 と Salesforce DX

まず、セールスフォース・ドットコム社の川畑さんから、アプリケーションライフサイクル管理のリファレンスアーキテクチャ、各種 Sandbox、Scratch Org をどのように利用していくか、変更を本番組織に反映させる方法について紹介いただきました。

リファレンスアーキテクチャのポイントは、ソース駆動開発では Scratch Org、宣言型開発では変更セット、メタデータを利用して反映するようにしているところです。どちらかに寄せるのではなく、適所適材で使い分けて両方使っていく方式が推奨されています。宣言型開発では組織ごとに依存する設定も多く、一から組織をソースコードをもとに設定し直す Scratch Org は得意とする分野ではないので、当然の選択なのかもしれません。

Salesforce DX 事例

次に、フレクト社の齋藤さんから Salesforce DX を開発に利用した事例を3つ発表してもらいましたので、大胆に要約してみました。

  • チーム開発するためにはソース駆動開発に切り替えるとよい
  • Scratch Org でブランチごとの環境を作成できるので、開発者同士や顧客とのレビューがスピードアップする
  • 外部連携がある場合は、固定で開発用に連携先環境を用意するか、外部連携が必要な開発は Sandbox で実施する

2つ目の事例では、昨年の Dreamforce で紹介のあった Scripting DX を利用して、ソースコードの自動同期を実現します。同じソースコードを同時に複数人で編集してしまうとコンフリクトが起きてしまいますが、うまく分担できていれば、効率的にソースコードを管理できそうです。

Salesforce DX を利用するためにはビジネス組織で有効化する必要があります。環境ハブと比べるとパーミッションを与える権限も限定的なので、利用しやすいと思います。こういった事例が出てくることで、Salesforce DX を活用した開発が加速していくとよいですね。

まとめ

Salesforce DX を導入していくにあたって、どのような使い方、運用をすればよいか、だんだんとドキュメントやベストプラクティスが集まってきています。

Salesforce DX のキラーコンテンツの1つである Scratch Org を利用した事例も増え、Salesforce DX を扱うための設定ファイルなどを揃えたテンプレートもあり、Salesforce DX に関するブログ記事なども増えてきています。

プロダクトを開発している会社としては、パッケージング 2.0 がどうなるか気になるところです。次の Dreamforce では何か動きがあるとよいですね。Salesforce DX 自体の完成度も上がってきていますので、次の Dreamforce あたりではブレイクしてくるかもしれません。

github.com

宣伝

弊社チームスピリットでは、定期的に勉強会を開催しております。connpassでメンバーになってもらうと、通知を受け取れるようになりますので、ぜひよろしくお願いします。

teamspirit.connpass.com

【Developers Summit 2018 】「徹底討論!!Salesforceはエンジニアを幸せにするか?」に、チームディレクター・倉谷が登壇しました!

こんにちは。プロダクト開発チームの松田(id:a-matsuda)です。 今年のスギ花粉は威力がすごいですね。花粉症と20年付き合っていますが、ベスト3に入る当たり年かと思います!

さて、2018年2月15日〜16日、ホテル雅叙園東京(東京・目黒区)で開催された「Developers Summit 2018」のセッションに、プロダクト開発チームディレクターの倉谷(id:a-kura)が登壇をしました。

https://i0.wp.com/img.logmi.jp/wp-content/uploads/2018/03/IMG_2420.jpg

https://www.teamspirit.co.jp/blog/staff/DevSumi_001.jpg

セッションタイトルは「徹底討論!!Salesforceはエンジニアを幸せにするか?」 。業界のトップランナー6名が、Salesforceに携わるメリット・デメリットを包み隠さず語り尽くしました。

セッションの様子が、いつくかのサイトで記事になりましたので、ぜひご覧ください!

魂のブログ

チームスピリットの本家ブログです。業界のトップランナーたちの言葉を拾いながら「エンジニアから見たSalesforceの面白いところ、凄いところとは?」にフォーカスして、記事化しています。Salesforce開発に携わっている皆さんはもちろん、そもそもPaaS開発ってどんな感じ??と言うエンジニアの方も、PaaS開発のイメージが湧く内容になっていると思いますので、ぜひご覧ください!

www.teamspirit.co.jp

logmi(ログミー)

logmi(ログミー)でも記事化されました。「Salesforceでアプリ開発、ぶっちゃけどうなの? 現役エンジニアたちが語る、技術者としてのキャリアの作り方」と題して、セッションの内容が詳細に記事になっていますので、合わせてご覧ください!

logmi.jp

とあるStartupに勤めるエンジニアの技術ブログ

登壇のコメントに代えて、とあるStartupに勤める倉谷(id:a-kura)のブログをご紹介です! 登壇された方々の立場の違い、取り組んでいることに違いがある中でも、共通していたメッセージについてまとめています。

a-kura.hatenablog.jp

セッションまとめ

Salesforceの開発環境を使い倒している、そして現場で多様な役割を担ってそれぞれに活躍をしている、業界のトップランナーたちのセッションで、私も楽しみにしていました。時間はかなり短く、もっと聞きたいという気持ちが大いに残ったというのが本音ですが、エンドユーザーに素早く価値を提供していくという目的を達成するためにSalesofrce環境はとても適していること、エンジニアとして使い倒していくことで新しい技術に触れることもできる面白さ、そして登壇した皆さんのSalesforceへの愛情(!)が伝わるセッションでした。倉谷さん、皆さん、お疲れ様でした!

ところで、倉谷(id:a-kura)ってどんな人???

「ところで、倉谷(id:a-kura)って誰?どんな人??」と興味を持ってもらった方も多いと思いますので、順番が前後しますが、倉谷(id:a-kura)をご紹介します!

f:id:a-matsuda:20180403195923p:plain
この人です

もともとは、SIerで開発からプロジェクトマネジメントまでを経験してきたエンジニアですが、弊社に入社してからは、QAエンジニア、QAリードとして急成長するプロダクトを品質面から支え、現在ではディレクターとしてプロダクト開発チームをリードしています。

今でこそ、20名を超えた開発チームですが、倉谷が入社した当時、開発メンバーはなんと片手で数えられるぐらいの人数!それでもお客様にプロダクトとしての価値を提供できていたのは、「Salesforceには、Platformとしての機能が揃っており、少人数で開発できた」からでしょう。

倉谷は、開発エンジニアとしてのスキルは高く、Dreamforce'15(Salesforce.comが毎年開催する世界最大級のソフトウェアカンファレンス)のミニハックで5位入賞したり、国内のハックチャレンジで1位を獲得し賞金100万円をゲットするなどの実績もあるほど。 しかし、倉谷は入社後、早くから品質面にフォーカスして、プロダクトの急成長を品質面から支えて貢献。

www.teamspirit.co.jp

www.teamspirit.co.jp

www.teamspirit.co.jp

弊社に入社する前であれば、倉谷のキャリアは、開発エンジニアとしてスペシャリストを目指す、あるいはプロジェクトマネージャーを目指す、ということだったかもしれませんが、弊社がSalesforceを利用していたからこそ、倉谷のキャリアの幅も広がったのではないでしょうか。

倉谷は、QAエンジニア、QAリードとして、登壇経験も多数、ディレクターとなった現在でも、テストアナリストの試験を受けて合格するなど、スキルアップには余念がありません!

teamspirit.hatenablog.com

a-kura.hatenablog.jp

また、課外活動として、Salesforce Developer Group Tokyoのオーガナイザーや、Podcastsブログなどもやっており、Salesforceコミュニティへの貢献が認められて、Salesforce MVP Winter'17/'18 にも選ばれています!

開発だけでなく、品質面、運用面など広く見てきており、また課外活動でインプット・アウトプットに余念がない倉谷だからこそ、プロダクト開発チームをリードする存在として、今後ますますの活躍が期待されています!

働き方改革クラウドサービス"TeamSpirit"を、一緒に成長させよう!

チームスピリットでは、倉谷のような業界のトップエンジニアと一緒になって「こんなサービスを実現したい!」というアイデアを実現したり、TeamSpiritをよりよいサービスに成長させてくれる原動力となるエンジニアを随時募集しています。 ぜひ少しでも興味を持っていただきましたら、オフィスに遊びに来てください!

エンジニア募集

Salesforce Developers Meetup #17 LT登壇観戦レポート

こんにちは、倉谷(id:a-kura)@花粉症で目が痒い です。 皆さま、一気に暖かくなって花粉が舞い飛ぶ季節になりましたが、いかがお過ごしでしょうか? 私は、ちょうど Salesforce MVP 更新時期で Rearward されるかドキドキしています。

さて、2018年3月1日に開催された「Salesforce Developers Meetup #17」に弊社から2名がLT登壇してきました。私はその様子を観戦してきましたのでレポートさせていただきます。

山﨑 : YACD(Yet Another Chatter Desktop)横内 : Lightning Design Systemのいろはと最近のアップデート
チームスピリットからLT登壇した2名(山﨑、横内)

感想

山﨑:YACD(Yet Another Chatter Desktop)

山﨑(id:dackdive)は Summer'18 で Chatter Desktop が廃止となることを受けて、Electron で Chatter Desktop の代替アプリを作成している取り組みを発表しました。単に代替アプリを作成しているだけにとどまらず、Electron、Salesforce と Electron アプリの認証、Chatter API など様々な技術検証をしています。

www.slideshare.net

また、GitHubでリポジトリを公開していますので、ご興味のある方は覗いてみてください。Electron を利用して Salesforce 用のデスクトップアプリケーションを作成したい場合などノウハウを使いまわせると思います。

GitHub - zaki-yama/chatter-desktop: Chatter Desktop made with Electron

チームスピリット・アドベントカレンダーで同じく山﨑が投稿している下記の記事も合わせて読むとよいと思います。Platform Event を利用したリアルタイムで連携するアプリケーションを作成できるので、その他のことにも利用できそうです。

teamspirit.hatenablog.com

横内 : Lightning Design Systemのいろはと最近のアップデート

横内(id:ts-yokouchi)から Lightning Design System について話しました。 Lightning Experiece が本格的に開発に利用されるようになると、それらのデザインを統べる Lightning Design System を知らないわけにはいきません。また、これほど大規模で運用されている Design System は珍しく、Salesforce 界隈以外でもデザイナーに言及されることがあるようです。

今回は、Spring'18 の機能追加に伴い、Lightning Design System にも多くの追加や変更がありました。この発表では、それらがどういったものだったかまとめています。Activity Timeline、Brand Band、Carousel、Chat、Mapなどが追加になったそうです。

特に印象的だったことは、発表のなかで今回のアップデートの特徴として柔軟性が高くなっている点が挙げられていました。実際に、Spring'18 のリリース内容を見てもテーマカラーを設定できるようになったり、カスタマイズできる箇所が大幅に増えたりしており、同じような方向性を感じています。Spring'18 で大幅に柔軟性が上がったことで Lightning Experience への切り替えがさらに加速しそうです。

もう一つ感じたこととしては、Lightning Design System が Classicのときのデザインとは異なり、かなりの勢いで進化していくことです。これまでは、Visualforce の決められたタグを利用していればデザイン崩れなどは気にする必要がありませんでした。しかし、今後はバージョンごとにデザイン崩れを気にしていく必要があるかもしれません。このあたりは、今後も注視していきたいと思います。

Salesforce Developers Meetup #17

公式サイトでもイベントレポートが公開されています。その他に発表された方々の発表資料、イベントの様子が分かるような写真やツイートまとめなどが掲載されていますので、興味のある方はぜひご覧ください。

sfdg.tokyo

宣伝

弊社チームスピリットでは、定期的に勉強会を開催しております。下記のサービスでメンバーになってもらうと、通知を受信できるようになりますので、ぜひよろしくお願いします。

teamspirit.connpass.com

デザイナーミーツエンジニア 〜知ろうお互いを、そして考えよう〜 参加レポート

f:id:a-matsuda:20180211003622j:plain

みなさんこんにちは。PDチームの松田 (id:a-matsuda) です。

今回は、チームスピリットでプロダクトデザインを担当している横内 (id:ts_yokouchi) が発起人となり、1/31(水)に開催した勉強会「デザイナーミーツエンジニア」の様子をレポートします!

teamspirit.connpass.com

本イベントではデザイナーとエンジニアの協業に焦点をあて、様々な角度から議論を深めました。登壇側だけでなく参加者の方々も質疑応答や懇親会を通して、「コラボレーション」について存分に語り合う会になりました。記事後半には、参加者された方々に回答いただいたアンケートより、参加者のみなさんがどう協業に取り組んでいるかについてもまとめています。

おかげさまでたくさんの方に参加ご応募いただき、当日は50名強ほどの方にご参加いただきました。デザイナーとエンジニアの割合は4:5くらい(その他の職種の方もご参加いただきました)となりました。

当日のハッシュタグの様子はこちらです。

togetter.com

Lightning Talk

(発表順)

「頑張らないシステム亅吉川 雅彦さん

speakerdeck.com

まず最初のLTは、吉川さん。 課題や問題があるときには、視点を変えて、根本から変えられないか考える。そのときに重要なのは頑張って解決するのではなく、頑張らずに解決すること。 デザイナーとエンジニア間の頑張らないシステムとは?事例を交えてのお話でした。

デザイナーとエンジニアの関係性だけでなく、様々なテーマの課題や問題の解決を考えるときに、重要な考え方だと思いました!

「共有地点DOKO」たじま ちはるさん

speakerdeck.com

デザイナーとエンジニアの共有地点、DOKO?DOKO、DOKO?と私は興味津々でした。

たじまさんのお話はデザイナーとエンジニアだけでなく、ディレクターとエンジニアの関係性でも共感できる部分があります。もっと言うと開発や制作の現場だけでなく、チームで仕事をしていくときの基本のようにも感じました。

発表の中で紹介されたクリエティブブリーフ、さっそく弊社でも活用して次期製品見直しを行っています!

「チームをかえていくこと そして、泥臭さについて亅横内宏樹

speakerdeck.com

いい感じにデザイナーとエンジニアが協力し、開発の真ん中にデザインがある、そんな開発のかたちを作っていきたい。チームに変えていくために横内がチーム内で取り組んだこと、そして変わりつつあるチームは今など、熱い内容のトークでした。

一人からでも、チームに変化を及ぼせることを体現してくれた横内が、人知れず取り組んでくれていたことも知れる、興味深い内容でした!!

「エンジニアから考えるデザインチームビルディング」大木 尊紀さん

speakerdeck.com

大木さんの会社ではエンジニアとデザイナーがどのように歩み寄りを見せているのかをリアルに公開してくれました。

印象的だったのが、デザイナーとエンジニアが一緒になって、お互いがやりやすい方法を考えるということ。 結果的にデザイナーがエンジニアの開発フローやツールに乗ることを決めたそうですが、チームの皆が腹落ちしながら改善を進めて成果に繋げているところがすごいなぁと思いました!

パネルディスカッション

LT登壇者の方々(横内のぞく)と元デザイナーでエンジニアのナユさんを交え、モデレーターとして弊社の山崎 (id:dackdive) による進行でディスカッションが行われました。パネリストの方々には「さっくばらん」に喋っていただき、現場の抱える悩みを根本から語らう時間になりました。

話し合ったテーマ

募集時にあつめたアンケートから以下のテーマをいただいてディスカッションを行いました。

  • 作業分担時にこじれないために気をつけていること
  • 作業に入る前のスケジュールの立て方
  • 外部のデザイナーとの付き合い方
  • 仕様書はどのようなものを用意していますか?
  • お互いの伝え方で気をつけていること。
  • 失敗事例と改善案
  • お互いに知っていてほしいこと

印象に残った話

箇条書きになりますが、語られた話の中で私は以下のような内容が印象に残っています。

  • わからないことはわからないままにしない
  • わかっている人がわかっていない人に伝えることが自然にできるチームづくり
  • 目的やゴールをチームで共有する、デザイナーとエンジニア間だけでなく!
  • デザイナーは、どうしてそのデザインにするのかの意図や理由を明確に伝えられることが必要
  • エンジニアもデザインの観点で、デザイナーにフィードバックできないといけない。エンジニアもデザインを学ぶべき
  • デザイナーを会議に呼んでくれ!

LTの中でも繰り返し出てきた「プロジェクトおよびお互いの意図」共有するということがパネルディスカッションの全編を通じて話されていたように思います。

アンケート

当日回答をお願いしたアンケートでは、ブログへの掲載可否を記載していただきました。載せても良いと言っていただいた内容をまとめて掲載いたします。

全体の感想

大まかには以下のような感想をいただくことができました。

  • 参考になった、いろんな意見が聞けた
  • コミュニケーションの大切さを再確認した
  • お互いの考え方の違いを実感できた
    • お互いを知ることの大切さ
  • 運用に入る時の体制づくりについても聞いてみたい

協業のための取り組み

「今協業のためにとりくんでいること・これから取り組もうと思っていることはありますか?」という質問に対して、かなりのボリュームかつ内容も多岐にわたる回答をいただきました。そのまま掲載させていただきます。

コミュニケーション

  • 意識していませんが、毎月プレミアムフライデーやっています
  • エンジニアさんは、仕様決定やデザイン上のチャレンジなど「できれば巻き込まれたくないに違いない」と勝手に思い込んでいたので、これからは巻き込んでいこうかなと思いました。相談することで自分の勉強になる。という部分など、本当にそのとおりだと思うので
  • コミュニケーションや認識のすり合わせの場を設けたい。社内勉強会を行っていきたい
  • フリーランスだと自分の作業工程の前後がどうしても見えにくい(それでいて、そこをおさえておかないと良い仕事ができない)勉強会やコミュニケーションをとれる機会を利用して各工程の意見をひろうようにしている
  • お互いの歩み寄り
  • 職種の垣根をなくすこと
  • 一緒にランチをとるとか、まずは業務以外の部分で共有できるところが増やせると良いなと思います
  • エンジニアだけでなく他部署とのやりとりでデザイナーとして最大限取り組めることを考えたいと思います
  • 困っていることがないか?というふうに声をかける
  • パネルディスカッション的なミーティングや会議をしてみたいと思います
  • ツール導入の教育コストがチーム内でとれない状況があり、ツール導入時の効果を想定して話し方工夫しました
  • まずは社内のデザイナーさんとコミュニケーションを取ることから始めたいです
  • その人の立場になって、考えた上で話すこと
  • 自分のスキルをあげること、自分がいちばん下っ端だからと発言をすることに抵抗があるので、スキルを上げたいと思っていたけど今回参加して上下関係無くコミュニケーションをまず取ろうと思った

お互いのことを知る

  • 相手と相手の仕事の学習
  • デザイナーですがフロント側の勉強をはじめました。完全分業ですが知っていて損はないです
  • コーディングの勉強、実際にprotを作って実装依頼をしている

プロセス・設計・ツール

  • Atomic Designについてデザイナーに打診した
  • デザインのレビュー環境を整える
  • デザインレビューをプロダクトに関わるメンバーが気軽に参加できる環境作り
  • 意見であった「ルールをつくらない」が腑に落ちた、コミュニケーションベースで
  • Zeplinの使用
  • 現状→レビュー会、社内報などなど、特に成果を可視化することで信頼構築のフェーズ
  • 目標→ペアデザイン
  • 企画〜開発まで協働している。目的や指導のすり合わせをことあるごとに行い目指す場所を一致させている
  • マニュアル、手順書のドキュメント化、ルール化をすすめています
  • デザイナーももっとエンジニアの業務に関わっていけるような仕組みづくり。働きかけ
  • 情報共有、手順や効果などのドキュメント作成
  • すべてのレイヤーに首をつっこむ
  • 首尾一貫できる(Director → Designer → Frontend Engineer)ツール導入を検討しています

その他

  • 意欲的に今回のようなイベントに顔をだしている
  • 自分がディレクションすれば基本的に協業すると思っています
  • デザイン系の本の布教

まとめ

「みんなはどうやっているんだろう」という疑問への回答、関係性をよりよくするために一歩前進する方法など、参加した人が何か一つは持ち帰ることができる勉強会だったのではないでしょうか。

私自身は、エンジニアやデザイナーとして最前線で開発をしているわけではないのですが、チームや自分以外の周囲の人との関係性を考える上でのヒントをもらえたような気がしています。

懇親会では「他の職種との協業についても話を聞きたい」「もっと具体的なもっと具体的な役割など細かいところが聞きたい」などといった声も聞かれました。デザイナーミーツエンジニア第2弾 Deep Dive が楽しみですね!!

チームスピリットでは定期的に勉強会を実施しています。ぜひ次回も楽しみにして下さい!

teamspirit.connpass.com

【2018年度】グローバルインターンシッププログラムを開始しました!<海外大学生歓迎!日本語不問◎>

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

プロダクト開発チームでは、
海外大学生向けのインターンシップを開始しました!

チームスピリットでは、昨年11月に、初の海外法人となる「TeamSpirit Singapore Pte. Ltd.」をシンガポールに設立し、「TeamSpirit」のグローバルでの販売活動を本格的にスタートさせました。
「TeamSpirit」を開発するプロダクト開発チームも、人種を問わず優秀なメンバーと、
もっと多様な視点を持って創造的なプロダクトを作っていくことを目指し、今回のプログラムをスタートしました。

概要

今回のグローバルインターンシッププログラムは、 企業向け業務アプリケーション分野をリードするクラウドアプリケーション「TeamSpirit」を開発している、技術力が高く経験豊富なエンジニアとともに、 実践的なプロダクト開発を経験していただけます。

  • JavaScript モダンライブラリ React / Redux を採用
  • 最先端のPaaS「Salesforce Platform」を利用
  • 単なるワークショップやトレーニングではありません!リアルなプロダクト開発、アジャイル開発を体験することができます!
  • チーム内のコミュニケーションは英語で行います、日本語スキルは不問です!

ぜひ、4週間のインターンシッププログラム in TOKYO に参加してください!

詳細&お申し込み

www.teamspirit.com

To foreign students

Join us for a 4 week internship program in TOKYO!!
TeamSpirit Global Internship Program (TSGIP), that offers the unique opportunity to gain invaluable personal and professional experience by working hand-in-hand with our experienced engineers developing the market leading cloud application, TeamSpirit.
In TSGIP, you will get hands-on experience of practical application development using JavaScript, JavaScript modern library React/Redux, and leading-edge PaaS, i.e. Salesforce Platform.
You can also experience the real world agile development, not in workshop or training!
Communication within team will be done in English (Japanese skill is not required).

www.teamspirit.com

プロダクトディベロップメントチーム解体新書!(人・趣味編)

みなさま、明けましておめでとうございます。 本年も TeamSpirit Developer Blog をよろしくお願いします!! PDチームの松田(id:a-matsuda)です。

今回は、プロダクトディベロップメントチーム(以下、PDチーム)を解体したらどうなる?という企画の後編となります。
前回の「技術・開発環境編」はいかがでしたか? 切り口は技術や開発環境でしたが、PDチーム一人一人の個性が滲み出る内容にはなっていたかと思います。
後編では、人にフォーカスし「人・趣味編」としてお届けします ♪
前回に引き続き、PDチームメンバーに、マクロミル社のセルフアンケートシステムQuestantでアンケートを行い、その結果をまとめました。

f:id:a-matsuda:20180112151122j:plain

あなたの性別を教えて!

PDチームのメンバーは、ご想像のとおり多様です!まず性別ですが、チームの1/4が女性で、そのうち半分以上が、お子さんを育てながら、仕事も両立しているママエンジニアです。まだまだ女性が少ないので、増えていくといいなと思っています!
また今回、アンケートはとっていませんが、PDチームには中国出身のメンバーも2名おり、国籍や性別を問わず、みな活躍しています!

f:id:a-matsuda:20180105215752p:plain

あなたの年齢を教えて!

30代に続いて、20代、40代がほぼ同じ割合で、非常にバランスの良い年齢構成となっています! 私たちは、"TeamSpirit"を開発しているスタートアップ企業のプロダクト開発チームなので、若手メンバーが多いイメージがあるかもしれません。
実際にはグラフの通り、若手メンバーだけでなく、経験のあるメンバーも多いので、明るく勢いはありますが、全体的には落ち着いていて相談もしやすいチームだと思います!

f:id:a-matsuda:20180105215701p:plain

あなたの血液型を教えて!

みなさん、日本人の血液型の発現率をご存知でしょうか。大まかに、A型が40%、B型が20%、O型が30%、AB型が10%だそうです。

PDチームはというと・・・みなさま、ご覧ください! 際立つのが、O型が最大勢力であることと、AB型がなんとなんと”19%”もいること。

f:id:a-matsuda:20180105215831p:plain

ちなみにみなさんご存知かもしれませんが、AB型は世界中で4%の割合しかおらず、AB型が0%の国があるくらい、AB型は極端に少ないのだそうです。
ちなみに、民族別で最もAB型が多いのは、日本のアイヌ民族で、その割合はO型17%、A型32%、B型32%、AB型18%だそう。AB型の割合が2割近いとは奇跡的なことで、世界を見ても他にはないそうです。(ちなみに私は、マイペースB型です)
このチームで奇跡が起きていること、そしてどこかの血液型に偏っていないということ、が見えてきました!全部の血液型がしっかり自分をアピールしている感じ・・というのがチームをよく表しているかも!

前職の事業内容を教えて!

がらっとかわって、前職の事業について聞いてみました。SIまたはソフトハウス出身のメンバーが約半数、自社プロダクト・サービス開発からの人は3割くらいでした。 プロダクト開発の経験がないメンバーも多いですが、すぐにチームに馴染んで、ガシガシとプロダクト開発を推進しているメンバーばかりです。前職の事業にかかわらず、TeamSpiritを通してお客様に価値を届けたいという共通した思いをもって、開発をしています。

f:id:a-matsuda:20180105224146p:plain

仕事以外の時間、何をしているか教えて!

これも興味深い、仕事以外はみな何に時間を使っているのでしょう??

f:id:a-matsuda:20180105224415p:plain

  • No.1 ”読書”が圧倒的ですね。みんなどんなジャンルの本を読んでいるのでしょうか??Slackの雑談チャネルでは、技術書はもちろん、ビジネス開発や一般的なビジネス書まで、いろんなジャンルの本が話題のぼっています。
  • No.2 ”子育て”!ママエンジニアだけでなくパパエンジニアもいますので、それを表していますね〜。みんな家でもがんばってる!!
  • No.3以降 ”映画・テレビ、音楽鑑賞”、そこに混じって、やっぱりみんな大好き”技術のキャッチアップ”や、”料理”や”筋トレ”などオフィスでも主張の激しい趣味たちがランクインしています!

主張している趣味・料理

11/29に(イイニクの日)、美味しいお肉をふるまってくれたりします。みんな、相当お腹がすいてるんでしょうね。必死にサンドイッチを作っている様子が。笑
すばらしい趣味を持ってくれて、ありがとう!

f:id:a-matsuda:20180106000209j:plain f:id:a-matsuda:20180106000224j:plain

主張している趣味・筋トレ

チームスピリットの部活動として暗黙の公認となっているヘルスケア部では、筋トレを推奨しています。チームスピリットで僕と筋トレ!(by部長) f:id:a-matsuda:20180109151524j:plain

チームスピリット社を選んだ理由を教えて!

改めて、なぜチームスピリット社だったのかを聞いてみました。

f:id:a-matsuda:20180105224312p:plain

  • なるほど、会社のビジョンや価値観、チームスピリットの一員になることによって携わる仕事に魅力を感じて入社を決めたメンバーが多いのがよくわかります。
  • 続いて、フレックスタイム制(PDチームは11:00~16:00がコアタイム)や在宅勤務制度(時短メンバー以外は週1回)など、仕事に集中できる制度も魅力に感じてくれたようです。
  • PDチームの文化(勉強会やテックランチ)に触れて、ここで働いてみたいと思ってくれたメンバーも多かったのは、チームの一員として大変嬉しい限りです!

チームスピリットでは定期的に勉強会を主催していますので、ぜひ興味のあるものがあれば、お越しください!connpassページへ

まとめ

2回に渡ってお届けしました、プロダクトディベロップメントチーム解体新書、いかがでしたでしょうか?
いつも一緒に仕事をしていても、案外知らないことがあることに気づきましたし、面白いチームメンバーに囲まれ刺激的&幸せだと再認識した、自身にとっては意味のある企画でした。
チームについては十分知り尽くしているというそこのあなた、ぜひチームの解体新書作りにチャレンジしてみてください。思わぬ発見があるかもしれませんよ!

最後に

チームスピリットでは、一緒にプロダクト開発を推進してくれるメンバーを募集しています!少しでも興味をお持ちのかた、ぜひオフィスに遊びに来てください。お待ちしています♪

エンジニア募集

QAエンジニア他募集中!

Amazon Echo から Salesforce へ繋げてみた

こんにちは。
株式会社チームスピリットの古川(id:furukawa-hisakatsu)です。

Amazonにて発売されましたスマートスピーカー「Amazon Echo」が11月に日本に上陸しました。
私自身も11月末にAmazon Echoが届きましたので試しにSalesforceに繋げてみました。

f:id:furukawa-hisakatsu:20171222194712p:plain

(可愛いやつです)

後、この記事はチームスピリット Advent Calendar 2017の21日目です。(遅刻) adventar.org

概要

今回はAmazon Echoと接続する音声サービス「Amazon Alexa」からAccount Link機能とAPI Gatewayを使用してSalesforceと接続し、
Lambdaから未承認レコードの件数の取得を行うカスタム音声サービス「Alexa Skills Kit」を作成します。
お試しまでとなりますので公開用の設定ではありません。

必要なアカウント

Alexaからのリクエスト処理をLambdaで作成

Alexaからのリクエストを受付し、Salesforceに接続、その後Alexaに件数を発言するレスポンスを返す処理を作成します。 ソースコードは下記URLから参照して下さい。

github.com

  • AWSにログインし、「Lambda」を選択し、関数の作成をクリックします。

f:id:furukawa-hisakatsu:20171222160507p:plain

  • 次に「一から作成」を選択し、名前を適当に入力し、ランタイムは「Node.js 6.10」を選択し、ロールは既存のままで選択して保存します。

f:id:furukawa-hisakatsu:20171222160634p:plain

  • 関数の詳細画面が表示されましたら、「関数コード」の「コード エントリ タイプ」に「.ZIP ファイルをアップロード」を選択し、こちらをダウンロードしてアップロードします。

f:id:furukawa-hisakatsu:20171222162847p:plain

  • 表示している関数がAlexa Skills Kitから呼び出されるトリガーを設定するため、「Designer」のサイドメニューから「Alexa Skills Kit」を選択し、「トリガーの設定」から「追加」をクリックします。

f:id:furukawa-hisakatsu:20171222163241p:plain

  • 最後に右上の「保存」をクリックし、Lambdaの設定は完了です。

f:id:furukawa-hisakatsu:20171222163308p:plain

  • 後のスキル設定で使用するため、右上の「ARN」を何処かに退避します。

f:id:furukawa-hisakatsu:20171222180221p:plain

トークン取得時のレスポンスを工夫するためAPI Gatewayを作成する

Salesforceからのアクセストークン取得を行うためにAPI Gatewayを作成します。

  • AWSにログインし、「API Gateway」を選択し、「APIの作成」をクリックします。

f:id:furukawa-hisakatsu:20171222164535p:plain

  • 「Swagger からインポート」選択し、下記コードを入力して、「インポート」をクリックします。
    (名称変更したい場合は、下記コードの「title」属性の値を変更してください。)
{
  "swagger": "2.0",
  "info": {
    "title": "SalesforceProxy"
  },
  "schemes": [
    "https"
  ],
  "paths": {
    "/": {
      "post": {
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "Content-Type",
            "in": "header",
            "required": false,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "200 response",
            "schema": {
              "$ref": "#/definitions/Empty"
            }
          }
        },
        "x-amazon-apigateway-integration": {
          "responses": {
            "default": {
              "statusCode": "200",
              "responseTemplates": {
                "application/json": "#set($params = $input.path('$'))\n{\n#foreach($paramName in $params.keySet())\n    #if($paramName == \"access_token\")\n    \"expires_in\": 3600,\n    #end\n    \"$paramName\": \"$params.get($paramName)\"\n    #if($foreach.hasNext)\n    ,\n    #end\n#end\n}\n"
              }
            }
          },
          "requestParameters": {
            "integration.request.header.Accept": "'application/json'",
            "integration.request.header.Content-Type": "method.request.header.Content-Type"
          },
          "uri": "https://login.salesforce.com/services/oauth2/token",
          "passthroughBehavior": "when_no_templates",
          "httpMethod": "POST",
          "type": "http"
        }
      }
    }
  },
  "definitions": {
    "Empty": {
      "type": "object",
      "title": "Empty Schema"
    }
  }
}

f:id:furukawa-hisakatsu:20171222170333p:plain

  • これだけではまだ使用できないため、作成に成功しましたら「アクション」をクリックして、「API のデプロイ」をクリックします。

f:id:furukawa-hisakatsu:20171222170441p:plain

  • 「デプロイされるステージ」に「[新しいステージ]」を選択しステージ名等を適当に入力して「デプロイ」をクリックします。

f:id:furukawa-hisakatsu:20171222170509p:plain

  • 成功しますとステージエディタが表示されるので、「URLの呼び出し」を何処かに退避します。(これもスキル設定で使いますよ)

f:id:furukawa-hisakatsu:20171222170914p:plain

余談

OAuth認証処理を行ったことある人は(あれ?)と思われますが、 本来、「https://login.salesforce.com/services/oauth2/token」に通信してアクセストークンを取得するのがSalesforceの認証となりますが、 Amazon AlexaのAccount Link機能でアクセストークンを取得する際、初回時は問題ないのですが、 アクセストークンが時間切れとなり再度取得が必要となった場合、 Amazon Alexaはアクセストークン取得のレスポンスに含まれている「expires_in」(有効時間)が過ぎているかを判定し再度取得する仕組みと思われます。 ですが、Salesforceからのアクセストークン取得時には「expires_in」が含まれていないため、これを含ませるためにAPI Gatewayを作成します。

Salesforceのセッション時間は設定による可変式でありますが、これを検出する手段がないため、今回は固定で1時間を指定しております。

Alexaのスキルを作成しよう

AWS側の設定が終わりました。Alexaスキルを作成しましょう!

  • Amazon Developerにログインし、「Alexa」をクリックし、「Alexa Skills Kit」の「始める」をクリックします。

f:id:furukawa-hisakatsu:20171222171221p:plain

  • Alexa スキル一覧の画面が表示されましたら、「新しいスキルを追加する」をクリックします。

f:id:furukawa-hisakatsu:20171222171812p:plain

  • スキル情報を設定する画面が表示されるため、下記設定を行い、「保存」をクリックします。
    • スキルの種別:カスタム対話モデル
    • 言語:Japanese
    • スキル名:適当に入力して下さい
    • 呼び出し名:こちらも適当に入力してください。

f:id:furukawa-hisakatsu:20171222172057p:plain

  • 「対話モデル」を選択し、「インテントスキーマ」及び「サンプル発話」に下記コードを入力し、「保存」をクリックします。

    インテントスキーマ

{
  "intents": [
    {
      "intent": "SalesforceIntent"
    }
  ]
}

f:id:furukawa-hisakatsu:20171222173646p:plain

サンプル発話

SalesforceIntent 未承認個数を教えて

f:id:furukawa-hisakatsu:20171222173708p:plain

  • 次のSalesforceの設定のため、「設定」をクリックし、「アカウントリンク」の「ユーザーにアカウントの作成や既存のアカウントへのリンクを許可しますか?」に「はい」を選択して、
    「リダイレクトURL」を何処かに退避しておきます。

f:id:furukawa-hisakatsu:20171222174755p:plain

(まだ設定しますので画面はそのまま)

Salesforceに繋ぐための設定をする

スキルの設定を一旦中断し、AlexaからSalesforceに接続するための設定をしましょう!

  • Salesforceにログインし、右上の歯車をクリックし、「設定」をクリックします。

f:id:furukawa-hisakatsu:20171222174320p:plain

  • 設定画面が開きましたら「アプリケーション」から「アプリケーションマネージャ」をクリックし、「新規接続アプリケーション」をクリックします。

f:id:furukawa-hisakatsu:20171222174500p:plain

  • 「接続アプリケーション名」や「API 参照名」、「取引先責任者 メール」を適当に設定しましょう。

f:id:furukawa-hisakatsu:20171222174914p:plain

  • 「OAuth 設定の有効化」にチェックを入れ、下記設定を行い、「保存」をクリックします。
    • コールバックURL:先程退避したリダイレクトURLを貼り付けましょう
    • 選択したOAuth範囲:「データへのアクセスと管理(api)」、「ユーザに代わっていつでも要求を実行(refresh_token, offline_access)」、「基本設定へのアクセス(id, profile, email ,address, phone)」を右に追加します。

f:id:furukawa-hisakatsu:20171222175245p:plain

  • 「次へ」をクリックし、設定完了!

f:id:furukawa-hisakatsu:20171222175319p:plain

  • 画面が切り替わりましたら「コンシューマ鍵」と「コンシューマの秘密」を退避しておきましょう。次に使いますよ!

f:id:furukawa-hisakatsu:20171222175618p:plain

AlexaとSalesforceが繋がる時です

Alexaのスキル設定を再開し、Salesforceの接続設定をしましょう!

  • Amazon Developerのスキル設定画面に戻って「設定」をクリックします。(もう開いているかもしれません)

f:id:furukawa-hisakatsu:20171222180045p:plain

  • 「サービスエンドポイントのタイプ」に「AWS Lambda の ARN (Amazonリソースネーム)」を選択し、「デフォルト」に先程退避したLambdaの「ARN」を貼り付けます。

f:id:furukawa-hisakatsu:20171222180722p:plain

  • 「アカウントリンク」から「ユーザーにアカウントの作成や既存のアカウントへのリンクを許可しますか?」に「はい」を入れ(もう入れてるかもしれません)、下記設定を行います。
    • 認証 URL:「https://login.salesforce.com/https://login.salesforce.com/services/oauth2/authorize
    • クライアント ID:退避したSalesforceの「コンシューマ鍵」
    • 認可の承諾タイプ:「Auth Code Grant」
    • アクセストークンURL:退避したAPI Gatewayの「URLの呼び出し」
    • クライアントシークレット:退避したSalesforceの「コンシューマの秘密」
    • クライアント認証スキーム:「リクエストボディの資格情報」

f:id:furukawa-hisakatsu:20171222181415p:plain

  • 最後の「プライバシーポリシー URL」は適当に入力しましょう。(本当は個人情報の取扱が記載されているURLが必要ですよ)

f:id:furukawa-hisakatsu:20171222181654p:plain

  • 「保存」をクリックして「次へ」をクリックします。
    (このあたりでエラーが起きやすいですね、エラーが起きたら手順を再確認してみましょう)

さぁテストの時間だ!

面倒な設定作業を終え、ついにAlexaの言葉を聞く時が来ました。

Amazon Echo等を持っていない方向け

なんとAmazon Echoのシミュレータがあるのでログインして許可してみましょう。

echosim.io

Salesforceの認証が必要です

まだ声を聴くのは早かったですね、Salesforceの認証をしましょう

  • お手持ちのスマートフォンにAmazon Alexaをインストールするか、もしくは http://https:/alexa.amazon.co.jp からログインします。
    (スキル開発したアカウントでログインしてください)

  • 「スキル」を選択して「有効なスキル」をクリックします。(Amazon Echo等が設定済みか上のシミュレータ連携されていないと開けないかもしれません)

f:id:furukawa-hisakatsu:20171222183300p:plain

  • 先程登録したスキルが表示されているのでクリックします。
    (表示されていなかったらログインするユーザが異なっているか、スキルの設定が途中かもしれません)

f:id:furukawa-hisakatsu:20171222183656p:plain

  • 「設定」をクリックし、「アカウントのリンク」をクリックしてSalesforceにログインします。
    (Salesforceのログイン時にこのアプリケーション許可するとウィンドウが出ると思いますが、「許可」するをクリックして下さい)

f:id:furukawa-hisakatsu:20171222183756p:plain

  • アカウントのリンクに成功しているはずです!
    (成功していなかったらスキル設定やSalesforceの設定を再確認!)

f:id:furukawa-hisakatsu:20171222184202p:plain

声を聞きましょう

youtu.be

(なかなか通じない場合は単語分割していってみるのもいいかもしれません)

締め

今回Alexaにてスキルを実装してみましたが、アカウント管理や認証処理をAlexa側に一任できるのは大きく、
わざわざユーザを特定したり、データベースを用意したりする必要もないのは魅力的であり、
開発自体もsdkが用意されていたりと特に詳しく勉強しなくても開発できるのはいいですね。

皆様も是非仕事役に立つような、あるいはちょっと役に立つような、はたまた面白いようなスキルを開発してみて下さい!

公式でのSalesforceとの接続はAlexa for Businessでなにか来るみたいですけど日本にくるのでしょうか?