Slackbot開発で詰みそうな所とどう回避したか

はじめに

こんにちは! 18卒のいっちーと呼ばれている者です。もう入社してから1年が経ちました。そんな1年のほとんどの期間で実装を行ってきたSlackbotについての記事をここで投稿しておこうと思います。 今回は僕がSlackbotを実装する上で苦労した所を書きます。 僕のこの記事を読んで一人でも同じ失敗をしない人が増えればいいなぁと思います。

TL;DR

学んだこと

長いので簡単にまとめると、大変だからこれは心がけよう!と学んだことは次の3つです。

  • なるべくチャンネル間のやり取りを行う場合は、データベースを使ったほうがいいということ
  • ダイアログの要素のサイズに注意すること
  • ライブラリのチェックはこまめに行うようにリポジトリの通知をつけること

実際の申請画面のスクショはこちら。

申請画面の画像
申請画面

対象読者

  • これからSlackbotでチャンネル間のメッセージをダイアログで実現しようとしている人
  • ライブラリのチェックをしてないとどんなことがあるのか気になる人

社内ツール(Slack)

弊社では、コミュニケーションツールとしてSlackを使っております。

最近よく聞く「オープンな文化」を目指し、みんなパブリックなチャンネルで意見を述べ、質問もしています。僕個人では、必要な情報が過去の投稿から見つかることがあり、コミュニケーションコストが削減されているのを感じています。

また、弊社ではチャンネルの乱立を防ぐべく、チャンネル作成者の制限を行っています。以前は、チャンネルを作成する際は、担当者にメンションをつけて作成依頼をしておりました。 しかし、メンションをつけると、相手に通知が飛ぶだけではなく、送り手も送っていいのかなぁ、迷惑じゃないのかなぁ、といった不安を感じてしまう側面もあり、なかなかチャンネル作成を依頼できない、、、といった状況が頻発しました。

そこでBotになら気兼ねなく送れるのでは?という発想の元、Slackbotプロジェクトが発足しました。

Slackbot

SlackbotとはSlack上で動くBotのことです。

社内では、「チャンネルを作成して」という依頼をSlackbotに送ることで、その依頼を権限持ちの「誰か」が実行してくれるように、申請承認チャンネルに投稿してくれます。

実装について

Techblogという位置づけ上、技術的な話もしておきます。

使用環境

  • 言語: Golang 1.11.2
    • パッケージ管理: dep
    • slack用のパッケージ
  • サーバ: AWS EC2

機能一覧

現在搭載されている機能としては大きく分けて次のとおりです。

  • ユーザ招待機能
  • チャンネル作成機能
  • チャンネルリネーム機能
  • チャンネルアーカイブ機能

実装で苦労した所

別チャンネルに対してのThreadでの返信機能実装が大変だった

作ってきたSlackbotは基本的にはThreadとチャンネル間でのやり取りを行います。つまり、Slackbotを通して申請用と承認用の2つのチャネルに投稿されます。

Slackの仕様として、Threadで返信するためには、Threadで返信したい対象メッセージのタイムスタンプ情報が必要です。つまり、申請用のチャンネルで申請を出したあと、申請メッセージのタイムスタンプを承認用のチャンネルで保持しないといけないのです。普通なら、ここでKVSのようなもので保持するんですが、初期段階では用意してませんでした。

KVSなどが無い状態でどうしたのか、というと次の画像が語っているのですが、申請メッセージの中にタイムスタンプ情報を入れてます。そうすることで、ダイアログで承認を実行すると、今の実装では、タイムスタンプ情報をリクエストの中に乗せて、送信してくれます。 あとは、ダイアログ送信時の処理部分で、タイムスタンプ情報を扱うことで、実現しました。

承認画面の画像
承認画面

// 本来のコードとは違います
// GetTimestamps ... get timestamp from message
func GetTimestamps(message slack.AttachmentActionCallback) (string) {
    fieldLength := len(message.OriginalMessage.Msg.Attachments[0].Fields)
    applyTimestamp := message.OriginalMessage.Msg.Attachments[0].Fields[fieldLength-1].Value

    return applyTimestamp
}

別チャンネルの投稿と紐付いているタイムスタンプを返り値として渡すという関数を作りました。 タイムスタンプは、一番最後の要素にするので、 fieldLengthを使って最後の要素の Valueを取得しています。

最後に、申請結果をThreadで返す機能を作ったということもあり、この大変さに気づくまで遅くなりました。 というのもCallbackなどを設定しているので、てっきり前のダイアログ送信イベントでトリガとなったメッセージのタイムスタンプ情報を持っていると思っていたからです。(持っているはずがなかった…)

Dialogを使用した別チャンネルへの投稿が大変だった

このテーマだと、 messageAPIをSubmission時に叩けばいいんじゃないか?と思われるかもしれません。まさしくその通りで僕もそのまま実装しました。 でも、なんのエラーもなく、投稿されないという状況に陥りました。

原因は確実にこれ!と言えるわけではありませんが、いろいろ試してみたところ、Submission時に渡せる要素の長さに制限がありそうでした。

timestamp情報を先程持たせているという話をしましたが、そのtimestamp情報は申請元と承認側のtimestampを一度に送信しているため、文字列の長さが比較的長くなります。 画像にあるように、 1552527866.001200が2つある状態でそれに追加で originalTimestampというようなstructのフィールド名もつけているため1要素で渡す情報が長くなりました。 最初は定義したstructに問題があったのか、とか受け取り側のプログラムに問題があったのかなど考えました。 最終的に、渡すデータを短めの適当な値で試したところ、思った通りに動作したため長さに原因があることがわかりました。 なので、もともとoriginalTimestamp: 1552527866.001200, timestamp: 1552527866.100000としていたところを、 originalTs: 1552527866.001200, ts: 1552527866.100000に変更することでギリギリしのげました。

長さについては特に言及されていなかったので、試行錯誤が大変でした。 原因っぽいところに気づいて、無事動く状態に持っていけたのは非常に良かったですが、この原因調査が全実装のなかで一番大変でした。

ライブラリ自体に大きな変更があったときの対処が辛かった

例えば次のコードは、メッセージをThreadに対して送信するための関数です。

// 変更前のコード
// ReplyMessageToThread ... Threadで返信するための関数
// message: 返信する投稿内容, ts: Threadの対象の投稿のTimestamp, p: 投稿メッセージのパラメータ
func (s *SlackListener) ReplyMessageToThread(channelID string, message string, ts string, p slack.PostMessageParameters) error {
    p.ThreadTimestamp = ts
    if _, _, err := s.Client.PostMessage(channelID, message, p); err != nil {
        return fmt.Errorf("faild to post message: %s", err)
    }
    return nil
}
// 変更後のコード
// message: 返信する投稿内容, ts: Threadの対象の投稿のTimestamp, p: 投稿メッセージのパラメータ
func (s *SlackListener) ReplyMessageToThread(channelID string, message string, ts string, p slack.PostMessageParameters, a slack.Attachment) error {
    p.ThreadTimestamp = ts
    if _, _, err := s.Client.PostMessage(channelID, slack.MsgOptionText(message, false), slack.MsgOptionPostMessageParameters(p), slack.MsgOptionAttachments(a)); err != nil {
        return fmt.Errorf("faild to post message: %s", err)
    }
    return nil
}

PostMessageParametersに、AttachmentsというPropertyが入っていたことで、スッキリとかけていましたが、ライブラリの変更により、 PostMessageParametersのstructから、Attachmentが分離されました。その変更により、すごい長くなりました…。 このように、 PostMessageParametesrsAttachmentsを使っていた部分はほとんどが使えなくなりました。変更履歴を確認した所その変更が取り込まれたのが気づいた月の約3ヶ月ほど前でした… ライブラリの変更を追わずに、実装をし続けることで、こんなに大変なことになるんだ…ということの勉強になりました。 それからは、Slackにライブラリの変更通知を飛ばすように設定しました。

現状の辛い運用

Threadで返信するために、タイムスタンプ情報が必要だ、と述べたんですがそのタイムスタンプ情報は申請メッセージの中にあります。 ただ、それは運用している人にとっては全く意味のないものなので、表に出すようなものではないです。本来必要なものは、申請メッセージとの紐付け、つまり申請メッセージへのパーマリンクです。 若干申請者とのやり取りをThreadで行うことがあるのですが、それを手助けする機能が今無いのです。 これは非常に辛いと思うので、改善していこうと考えています。

改善への道

まず、KVSを導入しメッセージ間の紐付けをそこで行います。 KeyとValueとしては、それぞれ 申請元メッセージのタイムスタンプと、承認メッセージのタイムスタンプとします。 そうすることで、承認メッセージのタイムスタンプ情報を元に、元のタイムスタンプ情報を得ることができます。 また、元メッセージのタイムスタンプ情報がKVSの中に保持されているので、承認メッセージにタイムスタンプ情報が不要になるため、代わりにパーマリンクを貼ることができます。 パーマリンクを取得するAPIとしては、chat.getPermalink - slackを使用します。

おわりに

学んだこと

  • OSSのライブラリを使うときは、アップデートを気にしておかないと、動かなくなる
    • 通知を飛ばすことでちゃんとアップデート情報を追う
  • SlackのAPIについての知識
  • ダイアログを送信したときのリクエストの長さに上限があり、正常なステータス返しても処理が実行されないこと

今後の改善

  • KVSのような仕組みを導入
  • タイムスタンプ情報ではなくパーマリンクを乗せる

以上の2つをこれから取り組んでいこうと考えています。

感想

全社で職種関係なく使うコミュニケーションツール内で、実現したいことをサポートをするBotを作って、色んな人に使ってもらえる経験をできてよかったなーと思います。社内で使用していることもあり、すぐにフィードバックを貰え、改善できる環境っていうのはエンジニアにとって非常に楽しい環境でもあります。 また、この開発を通して、Slack APIについては社内でも詳しい方になった気がして、なんか嬉しいです!

今後も社内で使っているSlackbotがより良いものになるようにしていきたいと思います。

ありがとうございました!

予約1年待ち!「ヴァル研究所」社内見学に行ってきました!

はじめに

こんばんは。もうすぐ新卒1年目が終わりそうで焦ってるM.Kです。

先日、予約したら1年待ちと噂のカンバン運用で有名な「株式会社ヴァル研究所」(以下、ヴァル研究所)のオフィス見学ツアーにマーケ・エンジニアの計7名で参加しましたので、その様子について書きたいと思います。

ヴァル研究所とは?

ヴァル研究所とは、路線検索のパイオニアとも言われている「駅すぱあと」を始めとする様々な有名サービスを提供している1976年に設立された会社です。 今回のツアーの案内もしていただいた、カイゼン・ジャーニーの著者である新井剛さんが所属しており、新井さんの知識と経験も加味されて、会社全体で多くの業務カイゼンが進んでいます。

ヴァル研究所エントランス
ヴァル研究所エントランス

オフィス見学ツアーとは?

今回参加したオフィス見学ツアーは、ヴァル研究所が実際に業務カイゼンのために導入している「見える化・カンバン・カイゼン」の活用事例を紹介してもらえるツアーです。 ツアーの内容は、開発部やマーケティング部、総務部など、様々なチームのメンバーが、各々で導入しているカンバンやカイゼンの方法について実際に使用しているカンバンの前で説明してもらえる贅沢なものになっています。

予約したら1年待ちのこのツアーですが、弊社森實がもともと新井さんと面識があり、入社前から予約をしていたため、今回は参加することができました。

オフィス見学ツアーの様子

ロビー

ツアー前に集合したロビーですが、すごくおしゃれで、様々な賞も飾られていました。 中でも、弊社社員一同が最も盛り上がったのは、電光掲示板に弊社への歓迎のメッセージを表示してもらえたことです。 なかなか電光掲示板での歓迎はされないので、とても新鮮で嬉しいおもてなしでした。

エントランスの歓迎電光掲示板
エントランスの歓迎電光掲示板

ツアー開始

実際のカンバンを見せて頂く前に、ヴァル研究所の歴史についても学ばせてもらいました。 私達の後ろにあるのが歴代の紙の時刻表なのですが、今でも一部はここから手作業でデータを入力したり、実際に徒歩にかかる時間を計りに現地へ行ったりしているそうです。

弊社社員での集合写真
弊社社員での集合写真

業務カイゼン用カンバン紹介

本当に多くのカンバンを拝見させて頂けたので、その中でいくつかピックアップして3つ紹介していきます。

チーム内タスクの見える化

最初に、お邪魔させていただいた総務部で、週・日単位でのタスク管理のカンバンを見ました。 カンバンとしては、

  • 今週の予定
  • 今週のタスク
  • 待ちタスク(他の人に渡しているタスクを置いておく)
  • 本日のタスク
  • 完了したタスク

に分類されています。 そして、チーム内でのフローとしては、次の日にやるタスクは毎週金曜日に決める。毎朝の朝会でその日に取り組むタスクを決めて、タスクを「今週のタスク」から「本日のタスク」に移動する。最後に、終わったらタスクを「完了」に移動するとのことです。

タスクの見える化の役割もありますが、タスクを消化していくことで達成感も味わうこともできるのでモチベーションが上がる方法だなと感じました。

タスクの見える化用カンバン
タスクの見える化用カンバン

非効率の見える化

監査部では、VSM(バリュー・ストリーム・マッピング)と呼ばれている業務のプロセスを見える化して無駄を改善していくためのカンバンが印象的でした。

自分たちの業務のプロセスを全て書き出し、より効率化できる部分はないかをチームで洗い出しているそうです。 具体的には、エクセルの作業をモブプログラミングでの改善などをして、以前は42時間かかっていた作業を17時間ほどまで短縮できたとのことでした。

非効率の見える化用カンバン
非効率の見える化用カンバン

残業の見える化

マーケティング部で見たのは、各社員がどれだけの残業をしたかを「う○ち」の絵で見える化したカンバンです。 フレックス制度を利用し、定時前に帰れたらお金の絵を書いて溜まった「う○ち」は相殺できるとのことです。 残業が多いことを見える化することによって、忙しい理由の分析をより正確にやることができ、結果的に残業時間の削減につながっているといいます。

残業の見える化用カンバン
残業の見える化用カンバン

社員サポート用のカンバン紹介

ここからは、業務上のタスクの管理ではなく、目では見えない心やスキルに焦点を当てたカンバン運用について2つご紹介します。

スキルの見える化

1つ目のカンバンは、誰が何のスキルが得意で何を身に付けたいと思っているのかを見える化させたカンバンです。 スキルを見える化することで、「〇〇については〇〇さんに聞こう」「〇〇君は〇〇をもっとやりたいから次は任せよう」などの行動をサポートすることができるようになったとのことです。

スキルの見える化用カンバン
スキルの見える化用カンバン

気持ちの見える化

出社したときと退社するときに、社員が今の心理状態を色で分けて貼るためのカンバンです。 心の状態を見える化することで、管理者は「この人最近落ち込んでる」「この人出社と退社で心の状態が落ち込んでる。仕事で何かあったのかな?」などを考えることができ、いち早くサポートをしてあげることができるとのことです。

気持ちの見える化用カンバン
気持ちの見える化用カンバン

他にも「モヤモヤの見える化」や「チーム目標の見える化」、「価値観の見える化」など多くの「見える化」の施策が実践されていました。 チームごとで使用してるカンバンも異なり、日々カイゼンをしていることがとてもよく伝わってきました。

おまけ

カンバンとは違いますが、とても面白いかつ便利な見える化がされていました。 それが、「エラーの見える化」です。 毎分リクエストをサーバーに送り、もしもエラーが返ってきたらダ◯スベイダーが音を立てるのだそうです。 コンソールを毎回見に行かなくてもエラーがわかる仕組み作りとそれをみんなが見えるようにする施策はとてもいいですね。

エラーの見える化
エラーの見える化用

まとめ

ヴァル研究所はまさに「見える化」を全社的に取り組んでいる企業であることがとてもよくわかるツアーでした。 「カンバン」と言っても種類が豊富で、チームによって全く違いました。 どのチームも各々にあった方法を模索し、実践し続けていることが、説明していただいた内容からも、社内に置いてあるカンバンからもよくわかりました。

チームで施策全体や各メンバーの業務、心理、スキルについて共通認識を持つのはとても大変なことです。 そこを、ヴァル研究所のようにカンバンを使って「見える化」を進めていくと、問題発見から話し合い、そして解決までのスピードが加速する気がしますね。

弊社もまだまだカイゼンしていく課題が多い会社ではありますので、少しずつ、ヴァル研究所の皆さまを見習ってカイゼンをしていきたいと思います。

【JaSST'19 Tokyo 登壇レポート】テストプロセス改善「プロばこ 4 JaSST」ワークショップを実施しました

こんにちは!メディアシステム部の森實です。

f:id:samuraiRed:20190328123321j:plain

さて、今回は実行委員の坂さんから声をかけていただいた縁で、3/27〜28に日本大学理工学部 駿河台校舎1号館で行われたソフトウェアテストシンポジウム 2019 東京(以下、JaSST'19 Tokyo)にて「プロばこ 4 JaSST」というワークショップをプロジェクトマネージャ保護者会として実施してきたのでレポートします。

 

 

はじめに 

ソフトウェアテストシンポジウムってなに?

ソフトウェアテストシンポジウム(以下、JaSST)とは、『ソフトウェア業界全体のテスト技術力の向上と普及を目指して、NPO法人ソフトウェアテスト技術振興協会(ASTER)』が全国各地で開催するイベントで、2003年から行われています。

JaSSTにはソフトウェアテスト技術に関心の高い多くの参加者が集まり、交流を深めることのでき、2003年から行われています。

 

JaSSTソフトウェアテストシンポジウム

 

プロジェクトマネージャ保護者会ってなに?

プロジェクトマネージャ保護者会は、2016年当時、野村総合研究所だった僕とエクサだった稲山さん(現在はUZABASE)ではじめたユニットです。現在では正メンバー5人となり、プロジェクトマネージャを支援する活動をすることを目的に、パネルディスカッションやワークショップを不定期に行っています。

 https://www.facebook.com/pmhogosyakai/

 

プロばこってなに?

プロばこは、プロジェクトマネージャ保護者会で作っているプロセステーラリングを学ぶためのワークショップコンテンツです。

各会社にはいわゆる開発標準プロセスがあると思いますが、単にそれにのっかってもプロジェクトはうまくいきません。制約事項、プロジェクトの特性に応じてそれらのプロセスをテーラリングして使うために、チームの作業プロセスのデザインと合意形成のフローをワークショップ形式で体得することを目的としています。

 

プロばこ 4 JaSSTってなに?

プロばこは通常プロセステーラリングを行いますが、今回JaSSTの参加者がテストに精通した技術者が集うということで、対象をテストに関する部分に絞っています。

テスト技術者やテスト環境の「あるべき姿(なりたい姿)」を吐き出し、どうしてそうなりたいのか、そのためには何をしたら良いのか、を初めて会った人同士のチームで考え、共有するコンテンツです。

 

speakerdeck.com

  

 

ワークショップ

テスト技術者としての思い

今回は、90分という枠の中で、テスト技術者としての積もり積もった思いをできるだけ出してもらい、その本質を見直して、正しいアプローチをチームで議論することが目的です。

参加者が主体的にならないとこのワークはできないのですが、本当にみなさん集中して、とても楽しそうに、思いの丈をぶちまけてくれたと思います。

特にテストというのは、リードタイム短縮と障害削減のバランスが非常に難しい部分です。テストエンジニアとしても理想と現実のギャップにおける葛藤を感じるとともに、前向きに考えていることが普段からあるのでしょう。

同じテスト技術者同士の議論、とてもいい顔してますよね!!

f:id:samuraiRed:20190327175425j:plain

 

テスト技術者が感じていること

 僕が見ていて感じたことの一番は、多くの場合、テスト技術者というロールがプロジェクトの中では大きな意味付けをされていないという現実です。

プロジェクトマネージャにとって、プロジェクト計画書、全体テスト計画書、全体リリース計画書というのは、プロジェクトの初期にほぼ同時に作らなければいけない大切な3つの計画書です。

しかし、書き出された付箋を見るからに、そもそもテスト計画がなかったり、テスト期間をバッファと見做されていたり、テスト云々の前にプロジェクトが正しくスタートを切れていないことに起因する、プロジェクト管理上のあるべき姿(ありたい姿)がとても多く挙げられていました。

昨今、アジャイル界隈でもQA部門を開発チームに入れるという話がよく聞かれるようになりましたが、言葉は違えど、現場の意見としてそういう関わり方をしたほうがいいということを感じていることもよくわかりました。

f:id:samuraiRed:20190327175534j:plain

 

おわりに 

テスト技術者としてできることからはじめる

みなさんがすごくステキだったのは、明日から変えるために、現実的な世界に何を持ち帰るかを真剣にディスカッションしていた姿です。

それは、テスト仕様書のフォーマット改善を提案してみるとか、開発チームにお菓子を差し入れしてみるなどの本当に小さな一歩でしたが、きっとその一歩の積み重ねが大きな成果につながっていくのだろうなと感じました。

f:id:samuraiRed:20190327182257j:plain


次回予告

ぁ、(プロジェクトマネージャ保護者会としての活動は)未定でした・・・ので、オファーお待ちしておりますw

若者の登壇の場も募集しておりますので、いつでもお声がけください。

Leveragesのエンジニア組織紹介します! ~ミートアップ編~

はじめに

お久しぶりに更新です。KTです。

これから2~3回に分けて、Leveragesのエンジニア組織についてご紹介できればと思います。

第1回目は、月に1回行われるエンジニアミートアップについてです。

目次

  • エンジニアミートアップって何?
  • 具体的にどんなことしているの?
  • おわりに

エンジニアミートアップって何?

f:id:taniai-lvgs:20190320101750j:plain
ミートアップの様子

エンジニアミートアップとは、各事業部のエンジニアが集まり、現状報告や全体周知をする会です。

月に1度、約1時間ほどの短い会ではありますが、様々なコンテンツを持ち回りで運営しております。 全エンジニアが参加し、事業部間での知の共有を目的としております。

具体的にどんなことしているの?

過去に行ったコンテンツは、こんなものがあります。

  • 今月入社のメンバー紹介
  • イベントの周知
    • 月に1度、BIT VALLEY -INSIDEというイベントを開催しているので、そちらの詳細について
  • 発表練習の場
  • 持ち寄り勉強会
  • 各事業部の困りごと、やってること共有

この中から、いくつかを詳しく紹介させていただいます。

発表練習の場

まずは、登壇前の練習の場としてこのミートアップの活用です。 外部の登壇機会がある人が、この場を使って発表練習をする時に使われます。

単に登壇者の発表練習としての機会以外にも、知の共有といったメリットもあり頻繁に実施されているコンテンツの1つです。

例えば最近では、JAWS Days 2019に登壇したメンバーが、登壇前に練習の場としてこのミートアップを使っていたり、

tech.leverages.jp

過去にはTwilioのMeetupに登壇したメンバーのレビューが行われたりもしました。

tech.leverages.jp

持ち寄り勉強会

持ち寄り勉強会も開催されたりもします。 個人単位や、事業部単位で得意な分野を他のエンジニアに共有する場として使われています。

例えば、フロントエンドのベストプラクティスについて持ち込みで、勉強会を開いてくれたり、

qiita.com

事業での取り組みを他事業部に展開するにあたって、前段階で勉強会を予定してくれたりと、個人や、組織単位で知の共有を行う取り組みもなされています。

各事業部からの共有

最近からですが、「各事業部の困りごとや、力を入れているところ」の共有を追加し、各部署が何をしていて、何に困っているのかを全員が把握できるような機会を作り出すことができました。

そもそもなぜそんな機会が必要かというと、自分以外の部署がやっていることを把握できなくなってきたからです。

  • メンバーも増え部署内で完結することが多くなってきたこと
    • 結果、部署内でのやりとりは多くなったが、他部署とのやりとりは減った
  • 働くオフィスの階や、場所自体が異なるためリアルなコミュニケーションが減った
    • Slack上の表面的な情報だけでは他部署の事例を知ることは難しい

この結果、他の部署が前にやっていたことを再度実装するようないわゆる「車輪の再発明」が起こる状況にありました。

そこでこのミートアップで、各部署の現状を共有することによってこうした負をなくしていこうというのが目的です。

まだ、初めて間もない取り組みなので具体的な成果は見えませんが、参加しているメンバーの満足度は高かったようです。

おわりに

まだまだ取り組みとしては、始まったばかりで内容に関してもこれから精査されていくことになると思いますが、参加している側の所感として、他事業部の取り組みを知る機会は大切だと感じました。

例えば、よく言われている車輪の再開発のように他部署で利用されている技術をうまく利用したり。 サービスによっては同じようなフェーズを経験することになるので、そうしたときの「転ばぬ先の杖」的な状態を会社全体で保っていけることで、開発スピードを加速させ事業に貢献できる開発組織を作り上げる事ができると思います。

それ以外にも、外部で登壇する人が増えてきて「自分もやりたい!」と競争心を燃やしてくれる機会であったりと、個々人の成長にもうまく働いているように思います。

参加者自体の満足度を担保するためにも、定期的なコンテンツの見直しも行われています。

最後までお読みいただき、ありがとうございました。 次回は、エンジニアの作業環境などについての記事をお届けできればと思います。

【JAWS Days 2019 登壇レポート】実践!CloudFormation Best Practice ~CloudFormationで始める組織改革~

JAWS Days 2019

こんにちはー!SREチームの村本です。

今回、JAWS Days 2019というイベントで、「実践!CloudFormation Best Practice ~CloudFormationで始める組織改革~」というタイトルの、ランチセッションをしてきました!

小さめのイベントやLTくらいであれば、経験はありましたが、JAWS Daysのような大きなイベントでの登壇は初めてで、かなり面白い体験ができたので、それについてまとめていこうと思います。

資料については、既に公開してますので、ご興味のある方は是非ご覧になってください 😊

JAWS Daysについて

まず、JAWS Daysを知らない人のために、JAWS Daysの説明をしておきます。

JAWS Daysは、日本AWSユーザグループであるJAWS-UGの中でも最大のイベントです。 https://jawsdays2019.jaws-ug.jp/about/

ユーザグループ主催のイベントなので、お硬い感じはほとんどなく、個人的には、お祭りといった感覚で楽しませてもらいました。

今回で7回目の開催となるJAWS Days 2019では、なんと来場者数1950名というかなりビックなイベントですね。 https://jawsdays2019.jaws-ug.jp/archives/2597/

↓は懇親会の最後に撮られた集合写真です(出典)

集合写真

登壇が決まるまで

突如、弊社CTOの方からJAWS Daysでランチセッションしない?っていうお誘いが来たので、2つ返事でOKしました。 ↓はそのやり取りです。

2つ返事をした後に、100人席で15分くらい話すよーっていうのを聞いて、ガクブルしながら覚悟を決めました...。

プレゼン作り

JAWS Daysという大きなイベントで話すので、何を話そうと思ったのですが、1ヶ月前くらいからちょこちょこ進めていたCloudFormationのリファクタリングで詰まっている人が多そうだなーと思ったので、今回のネタに決定しました。

本番の3週間前くらいから話す内容が決まっていたし、一度別のイベントで話した内容なので、余裕をぶっこいていたら、気づいたら本番の3日前 😅

そこからは、寝る間も惜しんで資料を作り、エンジニア部長や先輩後輩に発表練習に付き合ってもらい、なんとか人前に出せるプレゼンが出来上がりました。

3日間連続で発表練習に付き合っていただいた方、FBをくださった方本当にありがとうございました。

(結局、安定してセッション時間内に収まるようになったのが当日のAM4:00でした。最初の写真の顔が死んでるのはきっとそのせいです...w)

JAWS Days 当日

11時くらいに会場について、プレゼン資料をSpeakerDeckにアップロードして、Twitterでつぶやく準備までして、準備万端な状態で待機していました。

僕はGトラックでのセッションだったのですが、1つ前のオミカレの曽根さんのセッションが大人気で、立ち見が多すぎて通路が塞がるほどになっていました。 これを見て、こんな場で話すのか、やべーなと思いつつ、流石にこんなに人来ないから大丈夫か!と謎の深夜テンションでなんとかやり過ごしました。

ランチセッションだったので、皆さんお弁当片手に気軽な感じで聞くようなセッションでした。 それに対して、僕は眠気と緊張がせめぎ合ってよくわからない状態になりながら、セッション開始を迎えました...w

↓スライドは笑っているけど顔が死んでいる様子

今回はCloudFormationの設計に関わるお話をメインでさせて頂きました。 セッションの内容として、僕が伝えたかったのは以下の3つです。

  1. CloudFormation Stackを適切に分割しよう
  2. CloudFormation Stackをアプリチームと分散管理しよう
  3. CloudFormation Stackの依存関係は閉じよう

まぁ、要はCloudFormationを使うならベストプラクティスに則って使いましょう(そうしないと痛い目みるゾ)っていうことです。

セッション自体は、立ち見が出るくらい盛況で、とても驚きました。 お越しいただいた方、ありがとうございました!

登壇後に、企業ブースを回っていると「CloudFormationの話をしていた人ですよね?」って感じで、セッションで触れなかった内容などご質問いただきました。 結構頑張ってセッションしたので、フィードバックを貰えたのは、とても貴重で有り難く、純粋に嬉しかったです。

総括

結論、JAWS Days 2019は最高でした! このような大きいイベントでのメジャーデビューは、本当に沢山の学びがあって、とても良い体験になりました。

実は、去年のJAWS Days 2018に一般枠で参加させてもらっていまして、その時に「いつかJAWS Daysで登壇したいなー」とか思っていたら、想像以上に早く実現することができました。 感無量です。ランチサポーターになってくれた弊社に感謝。

このようなチャンスを頂けたのもそうですが、チャンスが目の前にある時には、ちゃんと掴むことが大事ということも実感しました。

来年はSREチームの他のメンバーには、チャンスを掴んで、是非登壇して欲しいなーと思っています。 また、僕自身もなんとか参加できるように、今からネタ作りに励みたいと思います!

【続】配属0日目の新卒がslackに匿名で投稿できる機能をつけた話。

はじめに

お久しぶりです!TMです。 以前書いた、「配属0日目の新卒がSlackに匿名で投稿できる機能をつけた話。」という記事の続編です! Slackに匿名投稿機能をつけて、その後どうなったかを書いていきます。

キーワードは、「良いチームであるために」です。

続きを読む

新卒ぺーぺーのエンジニアが配属一ヶ月で学んだことを振り返る

はじめに

本記事では、配属から1ヶ月間(5月末〜6月末)で社内ツール改善を通して学んだことを書きます。 主に内容としては次のとおりです。

  • SlackとDocbaseの通知設定を行うための連携部分の実装
  • 開発の流れを学びながらの実装
  • 成果物に対するフィードバック
  • 今後の課題
続きを読む

ドキュメントツールを浸透させるためにインハウスエンジニアがやったこと

ドキュメントツール

はじめに

レバレジーズ株式会社インハウスエンジニアの村本です。

本稿では、DocBaseというドキュメントツールを浸透させるために試行錯誤した際のお話を綴っております。

これから組織にドキュメントツールを導入したいと思っている方や、使われていないツールを使ってもらいたいと思っている方が、ツールを浸透させる際の一つの参考になれば幸いです。

続きを読む

【イベントレポート】「ITベンチャーのエキスパートエンジニアが語る就活攻略法」を開催しました

f:id:m-kato-lvgs:20180907142807j:plain 写真(左)泉澤 (右)久松

はじめに

メディカル事業部のMKです。

8月23日(木)にレバテック株式会社が運営しているヒカラボにて【学生限定!】『就活時に自分が聞きたかった』ITベンチャーのエキスパートエンジニアが語る就活攻略法が開催されました。

本イベントは、学生が就職した後に起こってしまうキャリアのミスマッチや、想像していた働き方と違うなどのギャップを少しでも減らすことができたらという想いから開催に至りました。

総勢20名以上の学部2年から大学院の学生にお越しいただきました。 今回は当日の様子を紹介させていただきます。

続きを読む

とりあえず、「良いコード」を知ろう

新卒

はじめに

自己紹介

はじめまして。 レバレジーズに18年4月に入社したMKです。 大学まで文系で、プログラミングをはじめたのは2016年なので実質ほぼ未経験みたいな状態で入社しました。 現在は社内向けツール開発がメイン業務で、今後は作成したツールに関しても本ブログで触れていきたいです。

続きを読む

新卒エンジニアがゼロから学ぶコーディング時の命名規則

こんにちは。新卒1年目エンジニアのKFです!
学生時代は、SwiftやRubyを書いたり、機械学習を触ったりしていました。現在は主にPHPを書いています。
今回は、配属されてから1ヶ月ちょっとの間でたくさんのコードレビューを頂いたので、その中でも主に命名規則について共有したいと思います。

続きを読む

Twilio Developer Meetup 2018 Summer が開催されました

はじめに

f:id:tech-leverages:20181107172922j:plain

メディカル事業部のKTです。

先月の18日にTwilio Developer Meetup 2018 Summerが弊社セミナースペースで開催されました。

開催直前まで2回増席するほど、これまで開催されたTwilioユーザーミートアップに比べても多くの参加者の方にお越しいただいたようです。

今回はそんなミートアップの様子をご紹介させていただきたいと思います。

続きを読む

Google App ScriptsでWebAPIを使ってデータを取得してみた

f:id:tech-leverages:20181107173243j:plain

はじめに

こんにちは! 新卒1年目エンジニアのKMです。
大学では、企業や地方自治体と連携して、アプリを企画・開発していました。
今は、キャリアチケットという新卒向け就職支援の新規サービスを開発しています。
新卒1年目が新規サービスを開発する上で学んだことを紹介できればと思います。

続きを読む

配属0日目の新卒がSlackに匿名で投稿できる機能をつけた話。

f:id:t-motoyama-lvgs:20180718151811p:plain

はじめに

わたしはだれ?

こんにちは!この4月から新卒で入社したTMです。 学部の専攻はデザインで、フリーペーパーやアニメーションを作っていました。 今はエンジニアとして参画していて、社会からの洗礼を受けているところです。楽しい。

この記事の概要

社内改善のために、Slackで匿名投稿できる機能を作りました。 AWSのLambdaや、Slack APIを主に利用しており、試験運用中です。

続きを読む